var True = true;
var False = false;
var agt=navigator.userAgent.toLowerCase();
var PERIOD = 46;
var NEG_SIGN = 45;
var __doPostBack;

function resize(textarea) 
{
	lines = textarea.value.split('\n');

	wrapped = 0;

	for (count = 0; count < lines.length; count++) 
	{
//		if (lines[count].length >= textarea.cols) 
//		{
			wrapped += Math.ceil(lines[count].length/textarea.cols);
//		}
	}
	rows = lines.length + wrapped;
	if (rows != textarea.rows && agt.indexOf('opera') == -1) 
	{
		textarea.rows = rows;
	}
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}
function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}
function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_preloadImages() { //v3.0
 var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
   var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
   if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}


var highlightbehavior="TR"
var isNav = (navigator.appName.indexOf("Netscape") != -1) ? true : false;
var isIE = (navigator.appName.indexOf("Microsoft") != -1) ? true : false;
var isDOM = (document.getElementById) ? true : false;

var highlightColor = '#D1DBE3';
var normalColor = 'white';

function selectrow(e)
{
	var source;
	var lastRowId;
	var lastRow;

	if (isIE)
		source=e.srcElement;
	else if (isDOM)
		source=e.target;
	else if (isNav)
		alert('huh?');

	if (source.tagName=="TABLE")
		return
	while(source.tagName!=highlightbehavior && source.tagName!="HTML")
	{
		if (isDOM)
			source=source.parentNode;
		else if (isIE)
			source=source.parentElement;
		else if (isNav)
			alert('huh');
	}
	
	if (source.id)
	{
		if (isDOM)
		{
			lastRowId = document.getElementById('highlightRow').value;
			if (lastRowId)
				document.getElementById(lastRowId).style.backgroundColor=normalColor;
		}
		else if (isIE)
		{
			lastRowId = document.all['highlightRow'].value;
			if (lastRowId)
				document.all[lastRowId].style.backgroundColor=normalColor;
		}
		else if (isNav)
		{
			lastRowId = document.form1.highlightRow.value;
			alert('doesnt work');
			if (lastRowId)
				document.form1.lastRowId.style.backgroundColor=normalColor;
		}

		source.style.backgroundColor=highlightColor
		
 		if (isDOM)
			document.getElementById('highlightRow').value = source.id;
		else if (isIE)
			document.all['highlightRow'].value = source.id;
		else if (isNav)
			document.form1.highlightRow.value = source.id;
	}
}
function collapseItem(image)
{
	var rowId = image.id.substring(0,image.id.length-4);

	// now find the item-id and make it collapse
	toggleExpandState(document.getElementById(rowId));
	
	// do the same for the expand and collapse buttons
	toggleExpandState(document.getElementById(rowId+"-img"));
	toggleExpandState(document.getElementById(rowId+"-col"));
}

function toggleExpandState(item)
{
	if (item != null)
	{
		var oldDisplay = item.style.display;
		if (oldDisplay == 'none')
			item.style.display = 'block';
		else
			item.style.display = 'none';
	}
}

function CheckNumericWithError(errorMessage, mustBePositive)
{
	// Get ASCII value of key that user pressed 
	var key = window.event.keyCode; 

	if (verifyKey(key, mustBePositive))
	{
		return; // do nothing if negative keys allowed
	}
	else
	{
		window.event.returnValue = null; 
		alert (errorMessage); 
	}
}

function CheckNumericWithError(errorMessage, mustBePositive, txtObj)
{
	// Get ASCII value of key that user pressed 
	var key = window.event.keyCode;
	var keychar = String.fromCharCode(key);

	//get the text value of the object
	var fieldValue = txtObj.value;
	var fieldLength = fieldValue.length;
	var adjustedText = null;

	//only allowed to have one decimal place and one negative sign in a numeric 
	var negSignIndex = fieldValue.indexOf('-');	


	//get the cursor position in the text object
	var caretPos = GetCaretPos(txtObj) ;
	

	var verifyKeyPress = verifyKey(key, mustBePositive);	//boolean
	if (!verifyKeyPress)
	{
		window.event.returnValue = null; 
		alert (errorMessage); 
		return;
	}



	
	//local variables for selection
	var sel = document.selection.createRange();	//IE v4+ only
	var selText;
	var selLen;
	var selStart;
	var selEnd;
	var newText;


	//do we have a selection	
	if (sel != null) 
	{
		//get any selected text
        	selText = sel.text;
		selLen = selText.length;
    	
		if (selLen > 0)
		{
			//lets assume that the selection start = caretPos - selLen 
			//selection end = caretPos 
			selStart = caretPos - selLen;
			selEnd = caretPos;

			//create the new text with the replacement of selection with keypress
			adjustedText = fieldValue.substring(0,selStart) + keychar +  fieldValue.substring(selEnd, fieldLength);
		}
	}//if (sel != null) 
	
	//might have adjusted the text
	if (adjustedText != null)
	{
		var negIndex = adjustedText.indexOf('-');

		if (negIndex > 0)
		{//neg sign is not first character
			window.event.returnValue = null; 
			alert (errorMessage); 
			return;
		}
		if (negIndex == 0) return;	//do nothing
	}



	//do normal validation for negative numbers	
	if (negSignIndex > 0)
	{//have a negative sign character already but should only be as first character
		window.event.returnValue = null; 
		alert (errorMessage); 
		return;
	}

	if ((negSignIndex != -1) && (key == NEG_SIGN))
	{//have a negative sign character already but entered another one
		window.event.returnValue = null; 
		alert (errorMessage); 
		return;
	}
	

	if ((key == NEG_SIGN) && (caretPos>0))
	{//entered a neg sign but its not the first char
		window.event.returnValue = null; 
		alert (errorMessage); 
		return;
	}	
}//CheckNumericWithError


function verifyString(value, mustBePositive)
{
	for (count = 0; count < value.length; count++) 
	{
		key = value.charAt(count);
		if (!verifyKey(key, mustBePositive))
		{
			return false;
		}
	}
	return true;
}

function verifyKey(key, mustBePositive)
{
	// negatives should only contain numbers, spaces, commas, -
	//ascii 32 is space
	//ascii 48 to 57 is numbers 0 to 9
	//ascii 44 is ,
	//ascii 40 & 41 are ( )
	//ascii 45 is -
	if (( key > 47 && key < 58 ) || key == 13 ||
		(!mustBePositive && key == 45))
	{
		return true; 
	}
	return false;
}
/*
function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}
function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}
function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_preloadImages() { //v3.0
 var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
   var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
   if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}
*/
function expandTab(Id) {
  if(document.getElementById(Id).style.display == 'block')
  {
   document.getElementById(Id).style.display='none';
  }
  else
  {
  	document.getElementById(Id).style.display='block';
  }
}

function displayHelp(url)
{
  var helpWin = window.open(url, "CS_help_window", "toolbar=yes, location=no, directories=no, status=no, menubar=yes, scrollbars=yes, resizable=yes, copyhistory=yes, width=400, height=600")
  helpWin.focus();
}
function CheckPhone()
{
	CheckPhoneWithError('Invalid Phone character');
}
function CheckPhoneFrench()
{
	CheckPhoneWithError("Touche invalide");
}
function CheckPhoneWithError(errorMessage)
{
	// Get ASCII value of key that user pressed 
	var key = window.event.keyCode; 

	if (!verifyPhoneKey(key))
	{
		window.event.returnValue = null; 
		alert (errorMessage); 
	}
}
function verifyPhoneKey(key)
{
	// negatives should only contain numbers, spaces, -, (, ), x
	if (( key > 47 && key < 58 ) || (key == 32) ||
		(key == 40) || (key == 41) || (key == 45) || (key == 120))
	{
		return true; 
	}
	return false;
}



function validateNumber(v)
{
   var s = new String(v.value);
    if(s.length >10)
	   alert(s+error_number_is_long);

	if(s == "" || s == null)
		return 0;
	else
	{
		var n = parseInt(s);
        if(isNaN(n))	
        {
         alert(s+error_is_not_a_number);
        }
        else if(n <0)
        {
         alert(s+error_is_negative);
           
        }
        return n;   
	}	
}
function validatePercent(v)
{
   var s = new String(v.value);
	if(s == "" || s == null)
		return 0;
	else
	{
		var n = parseInt(s);
	        if(isNaN(n))	
        	{
         		alert(s+error_is_not_a_number);
	        }
		if(n >100)
		{
 			alert(s+error_must_be_100);
		}
	        return n;   
	}	
}
function CheckLengthEnglish(item)
{
	CheckLength(' is too long', item);
}
function CheckLengthFrench(item)
{
	CheckLength(' is too long (fr)', item);
}
function CheckLength(errorMessage, item)
{
   var text = new String(item.value);
   if(text.length > 10)
	   alert(text + errorMessage);
}

function totalAllBoxes(year,boxIdArray, adjustmentTotal, isEnglish) {
    var temp = 0;

    for (var i=0; i < boxIdArray.length; i++) {
        //temp = temp + (+(boxArray[i].value));
        var box = document.getElementById(boxIdArray[i]);
        temp = temp + (+(formatNumber(box.value)));
    }
    adjustmentTotal.innerText = "$" + replaceCommas(temp+"",isEnglish);
    adjustmentTotal.value = temp;
		var approvalTotal;
		var varianceTotal;
		if (year == 1) {
			approvalTotal = document.getElementById('Year1ApprovalTotal');
			varianceTotal = document.getElementById('Year1Variance');
		}
		else if (year == 2) {
			approvalTotal = document.getElementById('Year2ApprovalTotal');
			varianceTotal = document.getElementById('Year2Variance');
		}
		else if (year == 3) {
			approvalTotal = document.getElementById('Year3ApprovalTotal');
			varianceTotal = document.getElementById('Year3Variance');
		}
		else {
			return;
		}
		varianceTotal.innerText = "$" + replaceCommas((approvalTotal.value - adjustmentTotal.value) +"",isEnglish);
}

function totalBoxes(boxIdArray, answerLabel, isEnglish) {
    var temp = 0;

    for (var i=0; i < boxIdArray.length; i++) {
        //temp = temp + (+(boxArray[i].value));
        var box = document.getElementById(boxIdArray[i]);
        temp = temp + (+(formatNumber(box.value)));
    }
    answerLabel.innerText = "$" + replaceCommas(temp+"",isEnglish);
}

function formatNumber(integer) {   
    var formattedNumber = "";
    for (var i=0; i<integer.length; i++) 
    {
      var Char = integer.charAt(i);
      if(Char >= '0' && Char <= '9' || Char == '-')
      {
      formattedNumber += Char;
      }      
    }

    return formattedNumber;
}

function replaceCommas(integer, isEnglish) 
{
  var formattedValue = formatNumber(integer);
	var numericValue = parseInt(formattedValue);
    if(isNaN(numericValue))	
    {
      return 0;
    }

	//continue processing    
    integer = checkNegativeNumber(formattedValue);
    var formattedNumber = "";
    var position = integer.length-3;
    while (position > 0) {
       if (position == 1
         && integer.charAt(0) == '-') {
         formattedNumber = integer.substr(position,3) + formattedNumber;
       }
       else {
         if (isEnglish)
         {
           formattedNumber = "," + integer.substr(position,3) + formattedNumber;
         }
         else
         {
           formattedNumber = " " + integer.substr(position,3) + formattedNumber; 
         }
       }
       position = position - 3;
    }
    formattedNumber = integer.substr(0, 3-Math.abs(position)) + formattedNumber;
             
    return formattedNumber;
}

function checkNegativeNumber(integer) {
	if(!isNumeric(integer))
	{
		return "0";
	}
	return formatNegativeNumber(integer);
}

function formatNegativeNumber(integer) {
	var formattedNumber = "";
	for (var i=0; i<integer.length; i++)
	{
		var Char = integer.charAt(i);
		if((Char >= '0' && Char <= '9') || (Char == '-' && i == 0))
		{
			formattedNumber += Char;
		}
	}
	return formattedNumber;
}

function isNumeric(text)
{
	var ValidChars = "0123456789";
	var IsNumber=true;
	var Char;
	for (i = 0; i < text.length && IsNumber == true; i++)
	{
		Char = text.charAt(i);
		if (ValidChars.indexOf(Char) == -1)
		{
		 	if (!(i == 0 && Char == '-'))
		 	{
			  IsNumber = false;
			}
		}
	}
	return IsNumber;
}

function addElementToArray(elementToAdd, arrayToAddTo) {
    arrayToAddTo[arrayToAddTo.length] = elementToAdd;
}

var approvalCheckBoxCounter = 0;

function checkApprovalBox(boxClicked, arrayOfCheckBoxesToDisable) {
    if (event.propertyName == "checked") {
        for (var i=0; i < allArray.length; i++) {
            var box = document.getElementById(allArray[i]);
            if (box != null)
                box.disabled = false;
        }
        if (boxClicked.checked) {
            disabledArray = disabledArray.concat(arrayOfCheckBoxesToDisable);
        }
        else {
            disabledArray = RemoveArrayElements(arrayOfCheckBoxesToDisable, disabledArray);
        }

        for (var i=0; i < disabledArray.length; i++) {
            var box = document.getElementById(disabledArray[i]);
            if (box!= null) {
              if (box.checked == true)
                box.checked = false;
              box.disabled = true;
            }
        }
    }
}

var originalConfirmValueArray = new Array;
function setOriginalValue(value,index)
{
	originalConfirmValueArray[index] = value;
}

function confirmNegative(msg, txtObj, index)
{
  if (txtObj.value > 0)
  {
    if (!confirm(msg))
    {
    	txtObj.value = originalConfirmValueArray[index];
    }
  }
}

function validateNegative(msg, txtObj)
{
  if (txtObj.value > 0)
  {
    alert(msg);
  }
}


function validatePositive(msg, txtObj)
{
  if (txtObj.value < 0)
  {
    alert(msg);
  }
}


//removes the first occurance of a sub array of elements within a larger array
function RemoveArrayElements(arrayOfElementsToRemove, arrayOfElementsToRemoveFrom) {
    var stringOfElementsToRemove = "";
    stringOfElementsToRemove += arrayOfElementsToRemove.join(",");

    var stringOfElementsToRemoveFrom = arrayOfElementsToRemoveFrom.join(",");
    var startIndex = stringOfElementsToRemoveFrom.indexOf(stringOfElementsToRemove);
    var endIndex = stringOfElementsToRemoveFrom.indexOf(stringOfElementsToRemove) + stringOfElementsToRemove.length;
    if (startIndex != -1) {
        stringOfElementsToRemoveFrom = stringOfElementsToRemoveFrom.substring(0, startIndex) +
            stringOfElementsToRemoveFrom.substring(endIndex, stringOfElementsToRemoveFrom.length);
    }
    if (stringOfElementsToRemoveFrom.length > 0) {
        startIndex = 0;
        endIndex = stringOfElementsToRemoveFrom.length;
        if (stringOfElementsToRemoveFrom.charAt(0) == ",") {
            startIndex = 1;
        }
        if (stringOfElementsToRemoveFrom.charAt(stringOfElementsToRemoveFrom.length-1) == ",") {
            endIndex = stringOfElementsToRemoveFrom.length-1;
        }
        stringOfElementsToRemoveFrom = stringOfElementsToRemoveFrom.slice(startIndex,endIndex);
        stringOfElementsToRemoveFrom = stringOfElementsToRemoveFrom.replace(",,",",");
    }
    arrayOfElementsToRemoveFrom = stringOfElementsToRemoveFrom.split(",");
    if (arrayOfElementsToRemoveFrom.length == 1 && arrayOfElementsToRemoveFrom[0] == "") {
        arrayOfElementsToRemoveFrom = new Array();
    }
    return arrayOfElementsToRemoveFrom;
}

function ConcatenateArrays(arrayOfArrays) {
    var singleArray = new Array();
    for (var i=0; i < arrayOfArrays.length; i++) {
        singleArray = singleArray.concat(arrayOfArrays[i])
    }
    return singleArray;
}

function checkRestrictedApprovalBox(boxClicked, arrayOfCheckBoxesToDisable) {
  checkApprovalBox(boxClicked, RemoveArrayElements([boxClicked], arrayOfCheckBoxesToDisable));
}

var waitwindow;
DoubleClickTrapperCounter = 0;

function closeWaitWindow() {
    if (waitwindow != null) {
        waitwindow.close();
    }
    DoubleClickTrapperCounter = 0;
}

function waitForProcessing( showWaitWindow ) {

    //RF - Enable the following line to turn on the popup double-click protection functionality 
    //DoubleClickTrapperCounter++;
    
    if( DoubleClickTrapperCounter > 1 )
    {
      return false;
    }
    else if( DoubleClickTrapperCounter == 1 )
    {
		  blockInput();
		  if( showWaitWindow )
		  {
        if (waitwindow != null) {
            waitwindow.focus();
        }
        else
        {
          var iexOffset = this.screenLeft + 230; 
          var ieyOffset = this.screenTop + 100;
          var nxOffset = this.screenX + 230; 
          var nyOffset = this.screenY + 100;
          var options = 'width=289,height=139';
          if( isIE )
          {
            options = options + ',screenX='+nxOffset+',screenY='+nyOffset+',top='+ieyOffset+',left='+iexOffset;
          }
          else
          {
            options = options + ',left='+iexOffset+',top='+ieyOffset;
          }

          options = options + ',toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,copyhistory=no,resizable=no,titlebar=no';
          waitwindow = window.open( '/Shared/Includes/Loading.htm', '_blank', options );
          waitwindow.focus();
        }
      }
    }
    return true;
}

function checkFocus() {
    if (waitwindow != null) {
        waitwindow.focus();
    }
}

function blockInput() {
  var plsWait;
  
  if( isIE )
  {
    plsWait = document.all.pleaseWaitScreen;
  }
  else
  {
    plsWait = document.getElementById( 'pleaseWaitScreen' );
  }
  if( plsWait != null )
  {
    plsWait.style.width=document.body.scrollWidth;
    plsWait.style.height=document.body.scrollHeight;
    plsWait.style.visibility = "visible";
  }
}

var helpwindow = null;
function popupHelpWindow(url, showTopBars, windowName) 
{
  var options;
  if (showTopBars == 'yes')
  {
	options = 'left=10, top=20, scrollbars=yes, resizable=yes, toolbar=no, status=no, menubar=yes, copyhistory=no, location=no, directories=no';
  }
  else
  {
	options = 'left=20, top=20, scrollbars=yes, resizable=yes';
  }

  if (helpwindow == null || helpwindow.closed)
  {
    helpwindow = window.open(url, windowName, options);
  }
  else
  {
    helpwindow.location.href=url;
    helpwindow.focus();
  }
}

var newwindow = null;
function popupReportWindow(url, showTopBars, windowName) 
{
  blockInput();

  var options;
  if (showTopBars == 'yes')
  {
	options = 'left=10, top=20, scrollbars=yes, resizable=yes, toolbar=no, status=no, menubar=yes, copyhistory=no, location=no, directories=no';
  }
  else
  {
	options = 'left=20, top=20, scrollbars=yes, resizable=yes';
  }

  if (newwindow == null || newwindow.closed)
  {
    newwindow = window.open(url, windowName, options);
  }
  else
  {
    newwindow.location.href=url;
    newwindow.focus();
  }
  setTimeout('checkIfClosed()',500);
}

var isReloaded = false;
function checkIfClosed() {
  if (!isReloaded)
  {
    if (newwindow == null
      || newwindow.closed)
    {
      isReloaded = true;
      //must redirect to self otherwise would repopup
      location.href = location.href;
    }
    else
    {
      setTimeout('checkIfClosed()',500);
    }
  }
}

function refreshmainwindow() {
  opener.location.href = opener.location;
  isReloaded = true;
}

function confirmDelete(msg) {
    if (confirm(msg)) {
        waitForProcessing();
    }
    else {
        event.returnValue = null;
    }
}


function checkCR(evt) 
{
//document.onkeypress = checkCR;  in the head tag section within the script tags
//or even  better???
//document.onkeyup=checkCR;
	//disable the ENTER key
    var evt  = (evt) ? evt : ((event) ? event : null);

    var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);

    //if ((evt.keyCode == 13) && (node.type=="text")) {return false;}
    if (evt.keyCode == 13) 
    {
	  event.keyCode = null;
	  event.returnValue = null;
	  return false;
	}
}


var bIsEnterKey = false;

function checkEnterPress(){

	if(bIsEnterKey == true){
		return !bIsEnterKey;
	}
	else {
		// enter key wasn't pressed
		//alert('enter not pressed');
		waitForProcessing();
		return true;
	}
}

function setEnterPress(){

      bIsEnterKey = (event.keyCode.toString() == '13');
      window.setTimeout("bIsEnterKey=false;",100);
}


function swallowEnter()
{
	if(event.keyCode==13)
	{
		event.keyCode = null;
		event.returnValue = null;
		return false;
	}
}


function GetCaretPos(txtObj) 
{//only for IE v4+
	var pos = 0;
	if (txtObj.createTextRange) 
	{
		rg = document.selection.createRange().duplicate();
		rg.moveStart('textedit',-1);
		pos = rg.text.length;
	} 
	else if (TxtObj.setSelectionRange) 
	{
		pos = TxtObj.selectionEnd;
	}
	return pos;
}


//change the color of textbox if negative
//usage example:  Year1Box.Attributes.Add("OnChange", "neg( this );");
function neg( fld ) 
{ 
   fld.style.color = ( parseFloat(fld.value) < 0 ) ? 'red' : 'black'; 
//   fld.style.color = ( parseFloat(fld.value) < 0 ) ? 'white' : 'black'; 
   //fld.style.backgroundColor = ( parseFloat(fld.value) < 0 ) ? 'red' : 'white'; 
} 


//usage example:  <A HREF="javascript:go('http://www.somewhere.com/apage.html');">Got to a page</A>
function go(url) 
{//  http://developer.irt.org/script/244.htm
    if (document.images)
        location.replace(url);
    else
        location.href = url;
}

