window.onerror=handleError;

var m_strInvalidDateFormat = "The date entered is not in an acceptable format.  The format must be mm/dd/yyyy.";
var m_strMthEntryInvalidRange = "Month entry must be between 01 (January) and 12 (December).";
var m_strDayEntryInvalidRange = "Day entry must be between 01 and 31.";
var strYearEntryNotReasonable = "Year entered is not a reasonable year for this system.";
var m_strCurrencySymbol = "$";
var m_strFebOf = "February of ";
var m_strHas28 = " has only 28 days.";
var m_strHas29 = " has only 29 days.";

var sValue1;
var sValue2;

function handleError(msg, url, linenumber){
	//alert('A scripting error has occurred on this page.  This page may not operate as intended.\nmessage:' + msg + '\nurl:' + url + '\nline number:' + linenumber);
	return true;
}

function removeCommasForFormPost(aNum) {

//remove any commas

aNum=aNum.replace(/,/g,"");

//remove any spaces

aNum=aNum.replace(/\s/g,"");

return aNum;

}

			function isFloat(a_obj, a_fltMaxLength, a_strErrCorrection){
				a_obj.value = removeCommasForFormPost(a_obj.value);
				if(isNaN(parseFloat(a_obj.value))){
				         a_obj.value = a_strErrCorrection;
				}
				else{
					a_obj.value = parseFloat(a_obj.value);
					if((a_fltMaxLength<a_obj.value*1)){
						a_obj.value = a_fltMaxLength;
					}
				}
			}
			
			function isInteger(a_obj, a_intMaxLength, a_strErrCorrection){
				if(isNaN(parseInt(a_obj.value))){
				         a_obj.value = a_strErrCorrection;
				}
				else{
					if((a_intMaxLength<a_obj.value*1)){
						a_obj.value = a_intMaxLength;
					}
				}
			}
			
			function isElementEmpty(a_objItem){
				if(!a_objItem){
					return false;
				}
				else{
					if(a_objItem.value == '' || a_objItem.value == ' '){
						a_objItem.focus();
						return true;
					}
					else{
						return false;	
					}
				}
			}
			
//   *******************   Data Validation Functions   ************************

// Extend Date object
Date.isLeapYear = function(year){ if (year%4==0 && ((year%100!=0) || (year%400==0))) return true; else return false; }
Date.daysInYear = function(year){ if (Date.isLeapYear(year)) return 366; else return 365;}

function getDateInFuture(startDate, n) {
   //-- Returns the date that is n days from startDate
	var returnDate = new Date();
	returnDate.setTime(startDate.getTime()+(n*1000*60*60*24));
	return returnDate;
}

function getDateInPast(startDate, n) {
   //-- Returns the date that is n days before startDate
	var returnDate = new Date();
	returnDate.setTime(startDate.getTime()-(n*1000*60*60*24));
	return returnDate;
}

function isDate(Object, blnSuppress) {
	var blnSuppressOutput = false;
	var inputStr = '';
	
	if(blnSuppress){
		blnSuppressOutput = true;
	}
	if (Object.value){
		inputStr = Object.value;
	}
	else{
    if(!(Object instanceof String)){
    	inputStr = Object.value;
    }
    else{
    	blnSuppressOutput = true;
			inputStr = Object;
    }
	}
	if(inputStr==''){
		return false;
	}
	if(!inputStr.indexOf){
		alert(m_strInvalidDateFormat);
		return false;
	}
	
 	while (inputStr.indexOf("-") != -1){
		inputStr = replaceString(inputStr, "-", "/")
	}
  	
	var delim1 = inputStr.indexOf("/");
	var delim2 = inputStr.lastIndexOf("/");
	
	if (delim1 != -1 && delim1 == delim2) {
		if (!blnSuppressOutput){
  		alert(m_strInvalidDateFormat);
  		Object.focus();
  		if (Object.type != "select-one" && Object.type != "select-multiple"){
  			Object.select();
  		}
		}
		return false;
	}
	if (delim1 != -1) {
		var mm = parseInt(inputStr.substring(0, delim1), 10);
		var dd = parseInt(inputStr.substring(delim1 + 1,delim2), 10);
		var yyyy = parseInt(inputStr.substring(delim2 + 1,inputStr.length), 10);
	}
	if (isNaN(mm) || isNaN(dd) || isNaN(yyyy)) {
		if (!blnSuppressOutput){
  		alert(m_strInvalidDateFormat);
  		Object.focus();
  		if (Object.type != "select-one" && Object.type != "select-multiple"){
  			Object.select();
  		}
		}
		return false;
	}
	if (mm < 1 || mm > 12) {
		if (!blnSuppressOutput){
  		alert(m_strMthEntryInvalidRange );
  		Object.focus();
  		if (Object.type != "select-one" && Object.type != "select-multiple"){
  			Object.select();
  		}
		}
		return false;
	}
	if (dd < 1 || dd > 31) {
		if (!blnSuppressOutput){
  		alert(m_strDayEntryInvalidRange );
  		Object.focus();
  		if (Object.type != "select-one" && Object.type != "select-multiple"){
  			Object.select();
  		}
		}
		return false;
	}
	if (yyyy < 100) {
		if (yyyy >= 30) {
			yyyy += 1900;
		}
		else {
			yyyy += 2000;
		}
	}
	
	if (!checkMonthLength(mm,dd)) {
		if (!blnSuppressOutput){
  		Object.focus();
  		if (Object.type != "select-one" && Object.type != "select-multiple"){
  			Object.select();
  		}
		}
		return false;
	}
	if (mm == 2) {
		if (!checkLeapMonth(mm,dd,yyyy)) {
			if (!blnSuppressOutput){
  			Object.focus();
  			if (Object.type != "select-one" && Object.type != "select-multiple"){
  			Object.select();
			}
		}
		return false;
		}
	}
	if (yyyy < 1875) {
		if (!blnSuppressOutput){
			alert(strYearEntryNotReasonable );
			try{
				Object.focus();
				if (Object.type != "select-one" && Object.type != "select-multiple"){
					Object.select();
				}
			}
			catch(e){}
		}
		return false;
	}
	if (!blnSuppressOutput){
		Object.value = monthDayFormat(mm) + "/" + monthDayFormat(dd) + "/" + yyyy;
	}
	return true;
}
   
function checkMonthLength(mm,dd) {
  	var months = new Array ("", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December")
  	if ((mm == 4 || mm == 6 || mm == 9 || mm == 11) && dd > 30) {
  		alert (months[mm] + " has only 30 days.")
  		return false
  	}
  	else if (dd > 31) {
  		alert (months[mm] + " has only 31 days.")
  		return false
  	}
  	return true
}

function checkLeapMonth(mm,dd,yyyy) {
	if (yyyy % 4 > 0 && dd > 28) {
  		alert (m_strFebOf + yyyy + m_strHas28)
  		return false
  	}
  	else if (dd > 29) {
  		alert (m_strFebOf  + yyyy + m_strHas29)
  		return false
  	}
  	return true
}

function checkLeapMonth2(mm,dd,yyyy) {
  	if (yyyy % 4 > 0 && dd > 28) {
  		return false
  	}
  	else if (dd > 29) {
  		return false
  	}
  	return true
}

function checkMinDate(oItem, oDate){

	var enteredDate = newDate(oItem.value);

	if(enteredDate<oDate){
		oItem.value = (oDate.getMonth() + 1) + '/' + oDate.getDate() + '/' + oDate.getFullYear();
	}
}

//-- Converts date passed in mm/dd/yyyy format to Date object.
function newDate(passedValue) {  
   var makeDate = new Date();
   var firstSlash=passedValue.indexOf("/");
   var lastSlash=passedValue.lastIndexOf("/");
   var month=passedValue.substr(0,firstSlash)-1;
   var day=passedValue.substring(firstSlash+1,lastSlash);
   var year=passedValue.substr(lastSlash+1);
   var newDate = new Date(year,month,day);
   return newDate;
}
//   *******************   String Manipulation Functions   ************************


function getFront(mainStr,searchStr) {
  	foundOffset = mainStr.indexOf(searchStr)
  	if (foundOffset == -1 ) {
  		return null
  	}
  	return mainStr.substring(0,foundOffset)
}

function getEnd(mainStr,searchStr) {
  	foundOffset = mainStr.indexOf(searchStr)
  	if (foundOffset == -1) {
  		return null
  	}
  	return mainStr.substring(foundOffset+searchStr.length,mainStr.length)
}
   
function replaceString(mainStr,searchStr,replaceStr) {
  	var front = getFront(mainStr,searchStr)
  	var end = getEnd(mainStr,searchStr)
  	if (front != null && end != null) {
  		return front + replaceStr + end
	}
   return null
}
   
function monthDayFormat(integer) {
	// function adds '0' to front of day or month if it is less than 10
  	if (integer < 10) {
  		integer = "0" + integer
  		return integer
  	}
  	else {
  		return integer	
  	}
}

function ValidateDate(a_object, a_strYNNullable){
   
if (a_strYNNullable == 'Y' && a_object.value == ''){

}
else{
   if (!isDate(a_object)){
   }
}
}


function format(expr, decplaces) {
   var str = '' + Math.round (eval(expr) * Math.pow(10,decplaces));
   while (str.length <= decplaces) {
      str='0' + str;
   }
   var decpoint = str.length - decplaces;
   return str.substring(0,decpoint) + '.' + str.substring(decpoint,str.length);
}

function format2(expr, decplaces) {
   var str = '' + Math.round (eval(expr) * Math.pow(10,decplaces));
   while (str.length <= decplaces) {
      str='0' + str;
   }
   var decpoint = str.length - decplaces;
   return str.substring(0,decpoint);
}


//   *******************   Miscellaneous Functions   ************************

function fillSelectFromArrayByKey(selectCtrl, itemArray, strKey, strDefaultText, strDefaultValue) {
   var i;

   clearSelect(selectCtrl);


   if (strDefaultText != undefined){
      if (strDefaultValue != undefined){
         addSelectItem(selectCtrl, strDefaultText, strDefaultValue);
      }
   }

   if (itemArray != null) {
      // add new items
      for (i = 0; i < itemArray.length; i++) {
      	//alert(strKey + ' = ' + itemArray[i][2]);
         if (strKey == itemArray[i][2]){
            addSelectItem(selectCtrl, itemArray[i][0], itemArray[i][1]);
         }
      }
      // select first item (prompt) for sub list
      selectCtrl.options[0].selected = true;
   }
}

function fillSelectFromArrayByKey1(selectCtrl, itemArray, strKey, intKeyColumn, strDefaultText, strDefaultValue) {
   var i;

   clearSelect(selectCtrl);


   if (strDefaultText != undefined){
      if (strDefaultValue != undefined){
         addSelectItem(selectCtrl, strDefaultText, strDefaultValue);
      }
   }

   if (itemArray != null) {
      // add new items
      for (i = 0; i < itemArray.length; i++) {
      	//alert(strKey + ' = ' + itemArray[i][intKeyColumn]);
         if (strKey == itemArray[i][intKeyColumn]){
            addSelectItem(selectCtrl, itemArray[i][0], itemArray[i][1]);
         }
      }
      // select first item (prompt) for sub list
      if(selectCtrl.options[0]){
      	selectCtrl.options[0].selected = true;
      }
   }
}

function fillSelectFromArrayByKey2(selectCtrl, itemArray, strKey, intKeyColumn, intSelectTxt, intSelectValue, strDefaultText, strDefaultValue) {
   var i;

   clearSelect(selectCtrl);

   if (strDefaultText != undefined){
      if (strDefaultValue != undefined){
         addSelectItem(selectCtrl, strDefaultText, strDefaultValue);
      }
   }

   if (itemArray != null) {
      // add new items
      for (i = 0; i < itemArray.length; i++) {
      	//alert(strKey + ' = ' + itemArray[i][intKeyColumn]);
         if (strKey == itemArray[i][intKeyColumn]){
         //	alert('additem');
            addSelectItem(selectCtrl, itemArray[i][intSelectTxt], itemArray[i][intSelectValue]);
         }
      }
      // select first item (prompt) for sub list
      selectCtrl.options[0].selected = true;
   }
}


function clear_list(list) {
	var list = document.getElementById(list);
	while( list.hasChildNodes() ) {
		list.removeChild( list.lastChild );
	}
}

function getFirstItemFromArrayByKey(a_strItemText, a_strItemValue, itemArray, strKey, strDefaultText, strDefaultValue) {
   var i;


   if (strDefaultText != undefined){
      a_strItemText = strDefaultText;
      if (strDefaultValue != undefined){
         a_strItemValue = strDefaultValue;
      }
   }

   if (itemArray != null) {
      for (i = 0; i < itemArray.length; i++) {
         if (strKey == itemArray[i][2]){
            a_strItemText = itemArray[i][0];
            a_strItemValue = itemArray[i][1];

            i = itemArray.length;
         }
      }
   }
return a_strItemValue;
}


function getFieldFromArrayByKey(a_itemArray, a_strKeyValue, intKeyFieldIndx, a_intItemFieldIndx, a_strDefaultValue) {
   var i;
   var strItemValue = '';


   if (a_strDefaultValue != undefined){
      strItemValue = a_strDefaultValue;
   }


   if (a_itemArray != null) {
      for (i = 0; i < a_itemArray.length; i++) {
         if (a_strKeyValue == a_itemArray[i][intKeyFieldIndx]){
            strItemValue = a_itemArray[i][a_intItemFieldIndx];

            i = a_itemArray.length;
         }
      }
   }
return strItemValue;
}

function getFieldFromArrayByTwoKeys(a_itemArray, a_strKeyValue1, intKeyFieldIndx1, a_strKeyValue2, intKeyFieldIndx2, a_intItemFieldIndx, a_strDefaultValue) {
   var i;
   var strItemValue = '';


   if (a_strDefaultValue != undefined){
      strItemValue = a_strDefaultValue;
   }


   if (a_itemArray != null) {
      for (i = 0; i < a_itemArray.length; i++) {
         if (a_strKeyValue1 == a_itemArray[i][intKeyFieldIndx1] && a_strKeyValue2 == a_itemArray[i][intKeyFieldIndx2]){
            strItemValue = a_itemArray[i][a_intItemFieldIndx];

            i = a_itemArray.length;
         }
      }
   }
return strItemValue;
}

function addSelectItem(selectCtrl, strItemText, strItemValue) {
   var i, j;
   var blnFound = false;
   var itemindex = 0;
   
   j = selectCtrl.options.length;

      // see if item is already present in the select
      for (i = 0; i < j; i++) {      
         if (selectCtrl.options[i].text == strItemText){
         	if (selectCtrl.options[i].value == strItemValue){
         		blnFound= true;
         		itemindex = i;
				}
         }
      }

	if(!blnFound){
	   if (strItemText != undefined){
	      if (strItemValue != undefined){
	         selectCtrl.options[j] = new Option(strItemText);
	         itemindex=j;
	         if (strItemText != null) {
	            selectCtrl.options[j].value = strItemValue; 
	         }
	      }
	   }
	}
	return itemindex;
}

function removeSelectItemByIndex(selectCtrl, intItemIndex) {
   var i, j;

   // empty existing items
   for (i = selectCtrl.options.length; i >= 0; i--) {
      if (i == intItemIndex){
         selectCtrl.options[i] = null; 
      }
   }

}

function clearSelect(selectCtrl) {
   var i, j;

   // empty existing items
   for (i = selectCtrl.options.length; i >= 0; i--) {
      selectCtrl.options[i] = null; 
   }

}

function layerWrite(id,nestref,text) {
	var objDHMTLObject = getDHTMLObject(id);
	if(objDHMTLObject){
		objDHMTLObject.innerHTML = text;
	}
}

function openReportWindow(a_strPath){
	//popup(a_strPath);
	var oReportWindow = window.open(a_strPath, '', 'toolbar=no, menubar, location=no, top=0, width=600, height=480, scrollbars, hotkeys, resizable');
}

function popup(url) 
{
 var width  = 600;
 var height = 480;
 var left   = (screen.width  - width)/2;
 var top    = (screen.height - height)/2;
 var params = 'width='+width+', height='+height;
 params += ', top='+top+', left='+left;
 params += ', directories=no';
 params += ', location=no';
 params += ', menubar=no';
 params += ', resizable=no';
 params += ', scrollbars=yes';
 params += ', status=no';
 params += ', toolbar=no';
 newwin=window.open(url,'windowname5', params);
 if (window.focus) {newwin.focus()}
 //return false;
}

function getProspectus(){
openReportWindow('readdbfile.aspx?INDEXID=' + document.PROSPECTUS.FILE.value + '&REQUESTTYPE=PROSPECTUS&PROMPT=false');
}


function getDHTMLObject(strObjectName){
    //figure out what browser we are dealing with
    isNS4 = (document.layers) ? true : false;
    isIE4 = (document.all && !document.getElementById) ? true : false;
    isIE5 = (document.all && document.getElementById) ? true : false;
    isNS6 = (!document.all && document.getElementById) ? true : false;
    
    //identify the element based on browser type
    if (isNS4){
       objElement = document.layers[strObjectName];
    }
    else if (isIE4) {
       objElement = document.all[strObjectName];
    }
    else if (isIE5 || isNS6) {
       objElement = document.getElementById(strObjectName);
    }

    return objElement;
}

function openCalendar(fieldname, evnt, minDate, maxDate, blnAllowWeekend) {

	var dtmEntryValue = null;
	
	text_field1 = fieldname;
	
	if (fieldname.disabled == true) {
		return;	
	}	
	c_today = new Date();
	day = c_today.getDate();
	month = c_today.getMonth();
	year = c_today.getFullYear();
	// if being opened to select date in previous year set day, month, year to minDate's values
	if (c_today > maxDate) {
		day = minDate.getDate();
		month = minDate.getMonth();
		year = minDate.getFullYear();
	}
	if(isDate(text_field1) && text_field1.value!=''){
    dtmEntryValue = newDate(text_field1.value);
		if(minDate){
			if(dtmEntryValue<minDate){
	
				dtmEntryValue = minDate;
				text_field1.value = (dtmEntryValue.getMonth()+1) + '/' + dtmEntryValue.getDate() + '/' + dtmEntryValue.getFullYear();
			}
		}
		if(maxDate){
			if(dtmEntryValue>maxDate){
				dtmEntryValue = maxDate;
				text_field1.value = (dtmEntryValue.getMonth()+1) + '/' + dtmEntryValue.getDate() + '/' + dtmEntryValue.getFullYear();
			}
		}
		day = dtmEntryValue.getDate();
		month = dtmEntryValue.getMonth();
		year = dtmEntryValue.getFullYear();
	}
	else{
		dtmEntryValue = c_today;
		if(dtmEntryValue<minDate){
			dtmEntryValue = minDate;
			text_field1.value = (dtmEntryValue.getMonth()+1) + '/' + dtmEntryValue.getDate() + '/' + dtmEntryValue.getFullYear();
		}
		if(dtmEntryValue>maxDate){
			dtmEntryValue = maxDate;
			text_field1.value = (dtmEntryValue.getMonth()+1) + '/' + dtmEntryValue.getDate() + '/' + dtmEntryValue.getFullYear();
		}
		day = dtmEntryValue.getDate();
		month = dtmEntryValue.getMonth();
		year = dtmEntryValue.getFullYear();
	}

	min_date = minDate || getDateInPast(c_today, 365);
	max_date = maxDate || getDateInFuture(c_today, 365);
	
	allow_weekend = blnAllowWeekend || true;
	var properties = "left=" + (evnt.screenX + 20);
	properties += ",top=" + (evnt.screenY + 1);
	properties += ",titlebar=0,resizable=no,width=205,height=205";
	calWindow=open('calendar.htm','myname',properties);
	calWindow.location.href = 'calendar.htm';
	if (calWindow.opener == null) calWindow.opener = self;
	calWindow.focus();
}

var setDateFromCalendarLocalVariable = null;
// function called by openCalendar when user selects a date
function setDateFromCalendar() {
	
	// month is 0 indexed - add one
	month++;
		
	if (day < 10) {
		newDay = '0' + day;
	}
	else {
		newDay = day;
	}
	if (month < 10) {
		newMonth = '0' + month;
	}
	else {
		newMonth = month;
	}
	text_field1.value = newMonth + '/' + newDay + '/' + year;
	calWindow.close();

	if(setDateFromCalendarLocalVariable===null){
		try{
			if(setDateFromCalendarLocal){
				setDateFromCalendarLocal();
			}
		}
		catch(e){}
	}
	else{
		setDateFromCalendarLocalVariable();
	}
}

function getPayments(a_strPayFreqCd){
	if(a_strPayFreqCd == 'A'){	
		return 1;
	}
	if(a_strPayFreqCd == '2'){	
		return 2;
	}
	if(a_strPayFreqCd == 'Q'){	
		return 4;
	}
	if(a_strPayFreqCd == 'M'){	
		return 12;
	}
	if(a_strPayFreqCd == 'S'){	
		return 24;
	}
	if(a_strPayFreqCd == 'B'){	
		return 26;
	}
	if(a_strPayFreqCd == 'W'){	
		return 52;
	}
	return 0;
}

function IsNumeric(strValue)
{
	var validChars = '0123456789.';
	var IsNumber = true;
	var Char;
		
	for(i = 0; i < strValue.length && IsNumber == true; i++)
	{
		Char = strValue.charAt(i);
		if(i == 0)
		{
			if(Char != '-')
			{
				if(validChars.indexOf(Char) == -1)
				{
					IsNumber = false;
				}	
			}
		}
		else
		{
			if(validChars.indexOf(Char) == -1)
			{
				IsNumber = false;
			}
		}
	}
	return IsNumber;
}

function keyPressNumericBase(e){
  var key;
  if(window.event) {
    key = window.event.keyCode; 
  }
  else if(e.which) {
    key = e.which;
  }
  if(key==8 || !key){
  	return true;
  }
 	if(key==8){
	return true;
	}
	if(key==46){
	return true;
	}
	if(key>=37 && key<=40){
	return true;
	}
	if(!key){
		return true;
	}
  if(!isNumericBase(String.fromCharCode(key))){
  	  return false;
  }
	return true;
}

function isNumericBase(sValue){
   var cChar;
   var strValidCharacters = '0123456789.';
   if(sValue.length==0){
   	return true;
   }
   for(var i = 0; i < sValue.length; i++){
      cChar = sValue.charAt(i);
      cChar = cChar.toLowerCase();
      
		if(strValidCharacters.indexOf(cChar,0)==-1){
			alert(sValue);
			return false;
      }
   }
   return true;
}

function getCurrencySymbol(){
return m_strCurrencySymbol;
}
