var zeroCharCode = ("0").charCodeAt(0);
var nineCharCode = ("9").charCodeAt(0);
var periodCharCode = (".").charCodeAt(0);
var minusCharCode = ("-").charCodeAt(0);
var plusCharCode = ("+").charCodeAt(0);
var slashCharCode = ("/").charCodeAt(0);

function isNumericCharCode(code) {
	return (code >= zeroCharCode && code <= nineCharCode);
}


function checkNumeric(field) {
		var code = event.keyCode;
		if (code == periodCharCode) 
			return (field.value.indexOf(".") == "-1");

		if ((code == minusCharCode) || (code == plusCharCode)) {
			if ((field.value.indexOf("-") != "-1") ||
				(field.value.indexOf("+") != "-1")) {
				return false;
			}
		}

		return isNumericCharCode(code) 
				|| code == minusCharCode
				|| code == plusCharCode;
}//end of checkNumeric Method

function checkNumber(field) {
		var code = event.keyCode;
		return isNumericCharCode(code);
}//end of checkNumber Method

function MM_swapImgRestore() { //v2.0
  if (document.MM_swapImgData != null)
    for (var i=0; i<(document.MM_swapImgData.length-1); i+=2)
      document.MM_swapImgData[i].src = document.MM_swapImgData[i+1];
}

function MM_preloadImages() { //v2.0
  if (document.images) {
    var imgFiles = MM_preloadImages.arguments;
    if (document.preloadArray==null) document.preloadArray = new Array();
    var i = document.preloadArray.length;
    with (document) for (var j=0; j<imgFiles.length; j++) if (imgFiles[j].charAt(0)!="#"){
      preloadArray[i] = new Image;
      preloadArray[i++].src = imgFiles[j];
  } }
}

function MM_swapImage() { //v2.0
  var i,j=0,objStr,obj,swapArray=new Array,oldArray=document.MM_swapImgData;
  for (i=0; i < (MM_swapImage.arguments.length-2); i+=3) {
    objStr = MM_swapImage.arguments[(navigator.appName == 'Netscape')?i:i+1];
    if ((objStr.indexOf('document.layers[')==0 && document.layers==null) ||
        (objStr.indexOf('document.all[')   ==0 && document.all   ==null))
      objStr = 'document'+objStr.substring(objStr.lastIndexOf('.'),objStr.length);
    obj = eval(objStr);
    if (obj != null) {
      swapArray[j++] = obj;
      swapArray[j++] = (oldArray==null || oldArray[j-1]!=obj)?obj.src:oldArray[j];
      obj.src = MM_swapImage.arguments[i+2];
  } }
  document.MM_swapImgData = swapArray; //used for restore
}
function isAlphanumeric(toCheck) {
	toCheck.value = trim(toCheck.value);
	var reAlphanumeric = /^[a-zA-Z0-9,.\- ]+$/;
	return reAlphanumeric.test(toCheck.value);
}

function getDifferenceInDays(fromDateStr, toDateStr) {
	var MILLISECONDS = 1000*60*60*24;
	var fromDate = new Date(fromDateStr);
	var toDate = new Date(toDateStr);
	var days = (toDate.getTime() - fromDate.getTime()) / MILLISECONDS;
	return Math.round(days);
}

function isDateGreater(from, to) {

	var fromDate;
	var toDate;

	var result = false;

	fromDate = from.substring(6,10) + from.substring(0,2) + from.substring(3,5);
	toDate = to.substring(6,10)   + to.substring(0,2)   + to.substring(3,5);
	if( fromDate > toDate ) {
		result = true;
	}

	return result;
}

function isDateGreaterOrEqual(from, to) {

	var fromDate;
	var toDate;

	var result = false;

	fromDate = from.substring(6,10) + from.substring(0,2) + from.substring(3,5);
	toDate = to.substring(6,10)   + to.substring(0,2)   + to.substring(3,5);
	if( fromDate >= toDate ) {
		result = true;
	}

	return result;
}

function isNumber(toCheck){
	toCheck.value = trim(toCheck.value);
	var reFloat = /^\d+$/;
	if(reFloat.test(toCheck.value)){
		toCheck.value = trimLeadingZeros(toCheck.value);
		return true;
	}
	return false;
}

function isAlpha(toCheck){
	toCheck.value = trim(toCheck.value);
	var reFloat = /^[a-zA-Z]+$/;
	return reFloat.test(toCheck.value);
}

function isDate(field){
	var currDate = new Date();
	var fullYear = new String(currDate.getFullYear());

	field.value = trim(field.value);
	var checkstr = "0123456789";
	var DateField = field;
	var Datevalue = "";
	var DateTemp = "";
	var seperator = "/";
	var day;
	var month;
	var year;
	var leap = 0;
	var err = 0;
	var i;
	err = 0;

	DateValue = DateField.value;
      /* Delete all chars except 0..9 */
	var separatorCount = 0;
      for (i = 0; i < DateValue.length; i++) {
	  	if (checkstr.indexOf(DateValue.substr(i,1)) >= 0) {
		    	DateTemp = DateTemp + DateValue.substr(i,1);
	  	}
		else{
			if ( DateValue.substr(i,1) != '/')
				return false;
			else
				separatorCount++;	
		}
    	}
	if ( separatorCount != 2 && separatorCount!=0){
		return false;
	}  
	
	if(DateTemp == '') {
		return false;
	}

   	DateValue = DateTemp;
   	/* Always change date to 8 digits - string*/
	/* if year is entered as 2-digit / always assume 20xx */
	if (DateValue.length == 6) {
		if ( DateValue.substr(4,2) > 50){
			fullYear = "19";
		}
      	DateValue = DateValue.substr(0,4) + fullYear.substr(0,2) + DateValue.substr(4,2); 
	}
	if (DateValue.length != 8) {
      	err = 19;
	}
	/* year is wrong if year = 0000 */
	year = DateValue.substr(4,4);
	if (year == 0) {
	      err = 20;
	}
	/* Validation of month*/
	month = DateValue.substr(0,2);
	if ((month < 1) || (month > 12)) {
      	err = 21;
	}
	/* Validation of day*/
	day = DateValue.substr(2,2);
	if (day < 1) {
		err = 22;
	}
	/* Validation leap-year / february / day */
	if ((year % 4 == 0) || (year % 100 == 0) || (year % 400 == 0)) {
	      leap = 1;
	}
	if ((month == 2) && (leap == 1) && (day > 29)) {
		err = 23;
	}
	if ((month == 2) && (leap != 1) && (day > 28)) {
	      err = 24;
	}
	/* Validation of other months */
	if ((day > 31) && ((month == "01") || (month == "03") || (month == "05") || (month == "07") || (month == "08") || (month == "10") || (month == "12"))) {
	      err = 25;
	}
	if ((day > 30) && ((month == "04") || (month == "06") || (month == "09") || (month == "11"))) {
	      err = 26;
	}
	/* if 00 ist entered, no error, deleting the entry */
	if ((day == 0) && (month == 0) && (year == 00)) {
		err = 0; day = ""; month = ""; year = ""; seperator = "";
	}
	/* if no error, write the completed date to Input-Field (e.g. 13/12/2001) */
	if (err == 0) {
	      DateField.value = month + seperator + day + seperator + year;
		return true;
	}
	/* Error-message if err != 0 */
	else {
		return false;
	}
}

function isEmpty(field)
{
	var result = false;

	if (trim(field.value) == '') {
       	result = true;
     	}

	return result;
}

function isCurrency(field, maxLength, noOfDecimalPlaces)
{
	field.value = trim(field.value);
	var result = 9; //for true
	var reFloat;
	if ( noOfDecimalPlaces == 0 )
		reFloat = /^(\d*\,*)*$/;
	else
		reFloat = /^(\d*\,*)*(\.(\d{1}|\d{2})?)?$/;

	if(! reFloat.test(field.value)){
		result = 0; // not validate
	}else{
		field.value = trimLeadingZeros(field.value);
		var amount = field.value;
		var whole = "";
		var fraction = ""
		for ( var i = 0 ; i < amount.length; i++) {
		  	if (amount.substr(i,1) == ','){
				continue;
			}
			else if (amount.substr(i,1) == '.'){
				fraction = amount.substr(i+1, amount.length - i );
				break;
			}
			else{
	  			whole = whole + amount.substr(i,1);
			}
		}
		if(whole.length > maxLength) {
			result = 1; //exceeds max limit
		}
		else{
			amount = "";
			for ( var j = whole.length; j > 0; j--){
				if ( ( whole.length - j)%3 == 0  && j != whole.length){
					amount =  "," + amount ;
				}
				amount =  whole.substr(j-1,1) + amount;
			}
			if ( fraction != "" ) {
				field.value = amount + "." + fraction;
			}
			else {
				field.value = amount;
			}
		}	
	}
	
	return result;
}

function isNumeric(stra) {
	for (var i=0; i< stra.length; i++) {
		var chv = stra.charAt(i);
		if (chv < '0' || chv > '9') return false;
	}
	return true;
}

function maskdate(obj) {
	var code = event.keyCode;
	if (!isNumericCharCode(code) && code != slashCharCode) {

		return false;

	} else if (obj.value.length > 0) {
		var val = obj.value;
			if (!isNumeric(val.substring(val.length, val.length-1)))
			{
				obj.value = val.substring(0, val.length-1);
			}

       		if (obj.value.length == 2 ||  obj.value.length == 5) {
          
           		var lasttwochar = obj.value.substring(obj.value.length,obj.value.length-2);
                            
           		if  (!isNumeric(lasttwochar)) {
              			obj.value = obj.value.substring(0,obj.value.length-2);
           		} else {
              			obj.value = obj.value +"/"; 
           		}
           
       		}    
   	} 
   	return true;

}

function format_number(p,d) 
{
  var r;
  if(p<0){p=-p;r=format_number2(p,d);r="-"+r;}
  else   {r=format_number2(p,d);}
  return r;
}
function format_number2(pnumber,decimals) 
{
  var strNumber = new String(pnumber);
  var arrParts = strNumber.split('.');
  var intWholePart = parseInt(arrParts[0],10);
  var strResult = '';
  if (isNaN(intWholePart))
    intWholePart = '0';
  if(arrParts.length > 1)
  {
    var decDecimalPart = new String(arrParts[1]);
    var i = 0;
    var intZeroCount = 0;
     while ( i < String(arrParts[1]).length )
     {
       if( parseInt(String(arrParts[1]).charAt(i),10) == 0 )
       {
         intZeroCount += 1;
         i += 1;
       }
       else
         break;
    }
    decDecimalPart = parseInt(decDecimalPart,10)/Math.pow(10,parseInt(decDecimalPart.length-decimals-1)); 
    Math.round(decDecimalPart); 
    decDecimalPart = parseInt(decDecimalPart)/10; 
    decDecimalPart = Math.round(decDecimalPart); 

    //If the number was rounded up from 9 to 10, and it was for 1 'decimal' 
    //then we need to add 1 to the 'intWholePart' and set the decDecimalPart to 0. 

    if(decDecimalPart==Math.pow(10, parseInt(decimals)))
    { 
      intWholePart+=1; 
      decDecimalPart="0"; 
    } 
    var stringOfZeros = new String('');
    i=0;
    if( decDecimalPart > 0 )
    {
      while( i < intZeroCount)
      {
        stringOfZeros += '0';
        i += 1;
      }
    }
    decDecimalPart = String(intWholePart) + "." + stringOfZeros + String(decDecimalPart); 
    var dot = decDecimalPart.indexOf('.');
    if(dot == -1)
    {
      decDecimalPart += '.'; 
      dot = decDecimalPart.indexOf('.'); 
    } 
    var l=parseInt(dot)+parseInt(decimals); 
    while(decDecimalPart.length <= l) 
    {
      decDecimalPart += '0'; 
    }
    strResult = decDecimalPart;
  }
  else
  {
    var dot; 
    var decDecimalPart = new String(intWholePart); 

    decDecimalPart += '.'; 
    dot = decDecimalPart.indexOf('.'); 
    var l=parseInt(dot)+parseInt(decimals); 
    while(decDecimalPart.length <= l) 
    {
      decDecimalPart += '0'; 
    }
    strResult = decDecimalPart;
  }
  return strResult;
}


function trimLeadingZeros(strVar)
{
	while(strVar.charAt(0)=='0')
		strVar=strVar.substring(1,strVar.length);
	if ( strVar == "")
		strVar = "0";
	else if ( new Number(strVar) < 1 )
		strVar = "0" + strVar;
	return strVar;
}

function trim(strVar)
{
	while(strVar.charAt(strVar.length-1)==' ')
		strVar=strVar.substring(0,strVar.length-1);

	while(strVar.charAt(0)==' ')
		strVar=strVar.substring(1,strVar.length);

	return strVar;
}

// monitoring package spcefic methods

function showCommentsPopup(uri) {
	var yes = 1;
	var no = 0;

	var menubar = no;
	var scrollbars = no;
	var locationbar = no;
	var directories = no;
	var resizable = no;
	var statusbar = no;
	var toolbar = no;
	var width=500;
	var height=100;
	var top=(600-height)/2;
	var left=(800-width)/2;
	windowprops = "width=" + width + ", height=" + height + ", top=" + top + ", left=" + left ;
	windowprops += (menubar ? ", menubars" : "") +
		(scrollbars ? ", scrollbars" : "") +
		(locationbar ? ", location" : "") +
		(directories ? ", directories" : "") +
		(resizable ? ", resizable" : "") +
		(statusbar ? ", statusbar" : "") +
		(toolbar ? ", toolbar" : "");

	commentPopupWindow = window.open(uri, "commentsPopup", windowprops);
}

function displayMessage(message, parentOfErrorFrame, stylesheetsrc) {
    parentOfErrorFrame.frames["IBPSErrorFrame"].document.open ();
    parentOfErrorFrame.frames["IBPSErrorFrame"].document.
	writeln ("<LINK HREF='" + stylesheetsrc + "' TYPE='TEXT/css' REL='stylesheet'>" +
			"<body topmargin='2' ><table><tr><td width='1%'></td><td><font  CLASS='errorFrame'>" + message + "</font></td></tr></table></body>" );
    parentOfErrorFrame.frames["IBPSErrorFrame"].document.close ();
}

  function isEmail(strEmail) {
    var reEmail  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
    return reEmail.test(strEmail);
  }
  
  function checkEmailAddress(fieldEmailAddress) {
    if (fieldEmailAddress.length>0 && isEmail(fieldEmailAddress))
	{
		templength=fieldEmailAddress.length;
		for(i = 0 ; i < templength && fieldEmailAddress.charAt(i) != "." ; i++);
		if (i == templength)  return false;
		for(i = 0 ; i < templength && fieldEmailAddress.charAt(i) != "@" ; i++);
		ii = i;
		if (i == templength) return false;
		//@ should not be at the end
		//"." should not be at the end or at start
		if ( (fieldEmailAddress.charAt(0)==".") || (fieldEmailAddress.charAt(templength-1) == ".") || (fieldEmailAddress.charAt(0) =="@") || (fieldEmailAddress.charAt(templength-1) == "@") )
			return false;
		if(fieldEmailAddress.charAt(ii+1)=="." || fieldEmailAddress.charAt(ii-1) == "." )
			return false;
		for(i=ii + 1; i < templength && fieldEmailAddress.charAt(i) != "@" ; i++);
		if (i != templength)
			return false;
		else 
			return true;
	}
	else
		return false;
 }
