/* watchmynumbers.com Javascript routines */

function emptyField( vField, sAlertMessage )
{
	if( jsGetFieldValue(vField) == '')
	{		
		if(sAlertMessage && sAlertMessage.length>0) alert( sAlertMessage );
		jsFieldFocus(vField);
		return true;
	}	
	return false;
}

function insertCalendarFlat(sFieldID)
{
	var idTrigger = sFieldID+'_imgTrig';

	document.write('<img id="' + idTrigger + '" alt="Click to show calendar" src="/icons/calendar.gif" border="0" style="cursor: pointer;">');
	var sCalDateFormat = $(sFieldID).readAttribute('calformat');
	if(!sCalDateFormat) sCalDateFormat = '%d/%m/%Y'; //default to something
	
	Calendar.setup({
        inputField     :    sFieldID,     // id of the input field
        ifFormat       :    sCalDateFormat,      // format of the input field
        button         :    idTrigger,  // trigger for the calendar (button ID)
        align          :    'Tl',           // alignment (defaults to "Bl")
        showsTime	   :	sCalDateFormat.indexOf('%H')>=0, //show time if the format specifies it
        singleClick    :    true
    });
}

function popupsupport(url) 
{
	newwindow=window.open(url,'name','height=450,width=550');
	if (window.focus) {newwindow.focus()}
	return false;
}

function deleteItem(sWhat, sID, sReturn, sAlert)
{
	if(sWhat && sID)
	{
		var sAlertMsg = 'Are you sure you want to delete this '+sWhat+'? All data belonging to this will be deleted.';
		if(sAlert) sAlertMsg = sAlert;
		if(confirm(sAlertMsg))
		{
			var sReturnLocation = '';
			if(sReturn && sReturn.length>0) sReturnLocation = '&Return='+escape(sReturn);
			location.href = getDBURL() + '/DeleteItem?OpenAction&What='+sWhat+'&ID='+sID+sReturnLocation;
		}
	}
}

function getPeriodList(vField, sExtraParam)
{
	var sYear = jsGetFieldValue(vField);
	if(sYear.length>0)
	{
		new Ajax.Request('getPeriodListJS?OpenAction&z='+Math.random(),
		{
			method:'post',
			parameters: '&year='+sYear+sExtraParam,
			onSuccess: function(transport)
			{
				var response = transport.responseText;
				if(response && $('PeriodNumberContainer')) $('PeriodNumberContainer').innerHTML = response;
			},
	        onFailure: function(){ alert('Ajax failed'); }
	    });
	}
}

function deleteAccountAdmin(lAccountID)
{
	if(!confirm('Are you sure you want to permanently delete this account and all its data / sub-accounts? This function cannot be undone.')) return;
	
	if(!confirm('Are you CERTAIN you want to PERMANENTLY delete this account?')) return;
	
	new Ajax.Request('ajaxDeleteAccount?OpenAction',
	{
		method:'post',
		parameters: '&accountid='+lAccountID,
		onSuccess: function(transport)
		{
			location.reload();
		},
        onFailure: function(){ alert('Account was not deleted.') }
	});
	
}

function deleteAllDataDetail(vCategoryID)
{
	var sMessage = 'This action will remove ALL NUMBERS for ALL categories. Continue?';
	if(vCategoryID>0) sMessage = 'This action will remove ALL NUMBERS from this category. Continue?';
	if(confirm(sMessage))
	{
		if(confirm('If you continue your existing numbers will be permanently removed from the system. If you are unsure, please click CANCEL. Really delete numbers?'))
		{
			new Ajax.Request('ajaxRemoveNumbers?OpenAction&z='+Math.random(),
			{
				method:'post',
				parameters: '&categoryid='+vCategoryID,
				onSuccess: function(transport)
				{
					var response = transport.responseText;
					if(response) alert(response);
				},
		        onFailure: function(){ alert('Numbers were not deleted.') }
	    	});
	    	if(vCategoryID>0) location.href = '/me/exo.pma/MyData';
		}
	}
}

//typeahead stuff ---------------------------------

var g_sTypeString = '';

function resetTypeAhead()
{
	g_sTypeString='';
}

function doTypeAhead(e, vField)
{	
	
	if(e.keyCode==27)
	{
		resetTypeAhead();
		return;
	}
	
	//check if an IE browser hit the enter key
	//if they did fire the onchange event
	if(e.keyCode==13 && jsHasProperty(vField, 'onchange') && document.all) //document.all detects IE only
	{
		vField.onchange();
		return;
	}
		
	//http://www.quirksmode.org/js/keys.html
	if(e.keyCode==8) //delete key
	{
		if(g_sTypeString.length>0) g_sTypeString = g_sTypeString.substring(0, g_sTypeString.length-1);
	}
	else
	{
		var sKey = String.fromCharCode(e.charCode || e.keyCode); //String.fromCharCode(e.keyCode);
		g_sTypeString += sKey ;
	}	
	e.returnValue = false;
	window.status = '[' + g_sTypeString + ']';
	var sStr = g_sTypeString;
	if(sStr==null || sStr.length==0) return;
	sStr = sStr.toLowerCase();
	for( i=0; i<vField.length; i++)
	{		
		var sEntry = vField.options[i].text.toLowerCase();		
		if( sEntry.indexOf(sStr)>=0 ) //find anywhere in string
		{			
			//window.status = 'found: ['+sStr + '] at ' + i;
			vField.selectedIndex = i;
			return;
		}
	}
		
}

//end typeahead stuff ---------------------------------



function testFormula(vField)
{
	var vVariables = new Array('A', 'B', 'C', 'D', 'E');
	var sVars = '&vars=';
	for(i=0; i<=vVariables.length; i++)
	{
		var sValue = jsGetFieldValue($('Var'+vVariables[i]));
		if(sValue && sValue.length>0) sVars += vVariables[i];
	}

	new Ajax.Request('ajaxTestFormula?OpenAction&z='+Math.random(),
            {
                method:'post',
                parameters: '&formula=' + escape(jsGetFieldValue(vField)) + sVars,
                onSuccess: function(transport)
                {
                    $('formulaerr').innerHTML = transport.responseText;
                },
                onFailure: function(){ alert('Formula test failed') }
            });
}

function deleteCategory(sDataCategoryID)
{
	location.href = 'DeleteCategory?OpenPage&CategoryID=' + sDataCategoryID;
}

function deleteGroup(sReportGroupID)
{
	location.href = 'DeleteGroup?OpenPage&ReportGroupID=' + sReportGroupID;
}

function getSelectionTypeIndicator(vField, sIndicatorID)
{
	if(!vField) return;
	var vDiv = $(sIndicatorID);
	if(!vDiv) return;
	
	var sValue = jsGetFieldValue(vField);
	if(sValue.indexOf('G_')==0 || sValue.indexOf('g_')==0) 
	{
		vDiv.innerHTML = 'G';
		return;
	}
	if(sValue.indexOf('C_')==0 || sValue.indexOf('c_')==0) 
	{
		vDiv.innerHTML = 'C';
		return;
	}
	vDiv.innerHTML = '';
}

function autoFillUnits(vField)
{
	if(!vField) return;
	var sValue = jsGetFieldValue(vField);
	if(sValue=='') return;
	
	var vUnitField = $('Unit');
	var vUnitThirdField = $('UnitThirdDesc');
	if(vUnitField) jsSetFieldValue(vUnitField, sValue);
	if(vUnitThirdField) jsSetFieldValue(vUnitThirdField, sValue);
}


function doPosNegBetter(vField)
{
	var sInvert = jsGetFieldValue(vField);
	var vForm = vField.form;
	
	var sNegToleranceLastYear = jsGetFieldValue(vForm.NegToleranceLastYear);
	var sPivotToleranceLastYear = jsGetFieldValue(vForm.PivotToleranceLastYear);
	var sPosToleranceLastYear = jsGetFieldValue(vForm.PosToleranceLastYear);
	
	var sNegToleranceBudget = jsGetFieldValue(vForm.NegToleranceBudget);
	var sPivotToleranceBudget = jsGetFieldValue(vForm.PivotToleranceBudget);
	var sPosToleranceBudget = jsGetFieldValue(vForm.PosToleranceBudget);

	$('PosNegTolerance').innerHTML = '<img src="pending.gif">';
	new Ajax.Request('ajaxPosNegTolerance?OpenPage&z='+Math.random(),
            {
                method:'get',
                parameters: '&NegBetter=' + sInvert,
                onSuccess: function(transport)
                {                	
                    $('PosNegTolerance').innerHTML = transport.responseText;
                    
                    jsSetFieldValue(vForm.NegToleranceLastYear, sNegToleranceLastYear);
                    jsSetFieldValue(vForm.PivotToleranceLastYear, sPivotToleranceLastYear);
                    jsSetFieldValue(vForm.PosToleranceLastYear, sPosToleranceLastYear);
                    
                    jsSetFieldValue(vForm.NegToleranceBudget, sNegToleranceBudget);
                    jsSetFieldValue(vForm.PivotToleranceBudget, sPivotToleranceBudget);
                    jsSetFieldValue(vForm.PosToleranceBudget, sPosToleranceBudget);
                },
                onFailure: function(transport){ alert('Could not flip tolerance levels. ' + transport.status + ' ' + transport.statusText) }
            });
}

function updateIntervalInfo()
{
	var vForm = document.getElementById('idReportForm');
	
	var iSeverityAlertInterval = parseFloat(jsGetFieldValue($('SeverityAlert')));
	var iNegTolerance = parseFloat(jsGetFieldValue($('NegToleranceLastYear')));
	var iPivot = parseFloat(jsGetFieldValue($('PivotToleranceLastYear')));
	
	var bPosBetter = iNegTolerance<=iPivot;
	
	//alert('iNegTolerance='+iNegTolerance + ' iPivot='+iPivot + ' bPosBetter='+bPosBetter);
	var vLessGreater = $('idLessGreater');
	var vSev1 = $('idSev1');
	var vSev2 = $('idSev2');
	var vSev3 = $('idSev3');
	var vSev4 = $('idSev4');
	var vSev5 = $('idSev5');
	
	vSev1.innerHTML = formatSeverityInterval(bPosBetter, iNegTolerance, iSeverityAlertInterval, 4);
	vSev2.innerHTML = formatSeverityInterval(bPosBetter, iNegTolerance, iSeverityAlertInterval, 3);
	vSev3.innerHTML = formatSeverityInterval(bPosBetter, iNegTolerance, iSeverityAlertInterval, 2);
	vSev4.innerHTML = formatSeverityInterval(bPosBetter, iNegTolerance, iSeverityAlertInterval, 1);
	vSev5.innerHTML = formatSeverityInterval(bPosBetter, iNegTolerance, iSeverityAlertInterval, 0);
	
	if(bPosBetter) 
		vLessGreater.innerHTML = 'Less';
	else
		vLessGreater.innerHTML = 'Greater';
		
}

function formatSeverityInterval(bPosBetter, iNegTolerance, iSeverityAlertInterval, iLevel)
{
	var sB1 = '';
	var sB2 = '';
	var fTolerance = 0;
	var fSeverityStep = iSeverityAlertInterval*iLevel;
	if(bPosBetter)
		fTolerance = (iNegTolerance - fSeverityStep);
	else
		fTolerance = (iNegTolerance + fSeverityStep);
	
	if(fTolerance<0)
	{
		sB1 = '(';
		sB2 = ')';
		fTolerance = fTolerance * -1; //invert
	}
	
	var sPercent = '%'+sB2;
	return sB1 + fTolerance + sPercent;
}


function toggleReportHealthAlertSource()
{
	var sValue = jsGetFieldValue($('HealthAlert'));
	if(sValue=='' || sValue=='F')
		$('HASource').hide();
	else
		$('HASource').show();
}

function copyCategory(sDataCategoryID)
{
	if(confirm('Are you sure you want to copy this category?')) copyElement('C', sDataCategoryID, true);
}

function copyGroup(sReportGroupID)
{
	if(confirm('Are you sure you want to copy this group?')) copyElement('G', sReportGroupID, true);
}

function copyGroupItem(sReportGroupItemID)
{
	if(confirm('Are you sure you want to copy this item?')) copyElement('I', sReportGroupItemID, true);
}

function copyElement(sWhat, sID, bReloadPage)
{
	new Ajax.Request('ajaxCopyElement?OpenAction&z='+Math.random(),
            {
                method:'post',
                parameters: '&ID=' + sID + '&what='+sWhat,
                onSuccess: function(transport)
                {                	
                    if(bReloadPage) location.reload(true);
                },
                onFailure: function(transport){ alert('Copy failed') }
            });
}

function doProcessEnterKey(e, vField)
{	
	
	if(e.keyCode==27) //escape
	{
		return;
	}
	
	//check if an IE browser hit the enter key
	//if they did fire the onchange event
	if(e.keyCode==13)
	{
		if(jsHasProperty(vField, 'onchange') && document.all) //document.all detects IE only
		{
			vField.onchange();			
		}
		var vNextField = getNextField(vField);
		if(vNextField) vNextField.focus();
	}
}

function getNextField(vCurrentField)
{
	var inputs = vCurrentField.form.getElementsByTagName('input');
    var i = inputs.length;
    while(i--) {
    	if(inputs[i]==vCurrentField)
    	{
    		i++;
    		if(i>inputs.length) return null; //last field on the form
    		return inputs[i];
    	}
    }
	return null;
}

function changeSort(sSortFields)
{
	var bRemoveSort = false;
	var sSortParam = '&sort=';
	var sURL = location.href;
	var sStart = sURL;
	var sEnd = '';
	var sURLLow = sURL.toLowerCase();
	
	var pos = sURLLow.indexOf(sSortParam+sSortFields.toLowerCase());
	if(pos>=0) bRemoveSort = true; 
	
	pos = sURLLow.indexOf(sSortParam);
	if(pos>=0)
	{
		sStart = sURL.substring(0, pos);
		sEnd = sURL.substring(pos+sSortParam.length);
		var endpos = sEnd.indexOf('&');
		if(endpos>=0) sEnd = sEnd.substring(endpos, sEnd.length);
		else sEnd = '';		
	}

	var sTargetURL = sStart + sEnd;
	if(sTargetURL.indexOf('?')<0) sTargetURL = sTargetURL + '?';
	
	if(bRemoveSort)
		location.href = sTargetURL;
	else
		location.href = sTargetURL + sSortParam + sSortFields;
}

function toggleMinimiseContent(vForm)
{
	var sActive = jsGetFieldValue(vForm.C_BlockoutMinContent);
	if(sActive=='1')
		$('MinimiseChoices').show();
	else
		$('MinimiseChoices').hide();
		
	var sLevel = jsGetFieldValue(vForm.C_BlockoutTransparency);
	if(sLevel=='') jsSetFieldValue(vForm.C_BlockoutTransparency, '90');
}