/**
 * File: Base.js
 * Description: Common client-side javascript library.
 * Author: Jet Castro
 * Date: 10/23/05 - Initial write
 */
 
/**
 *  Removes non-numeric characters from a string.
 */
function stripNonNum(cc) {
	var i;
	var sRet = "";
	for (i = 0; i < cc.length; i++) {
		if (cc.charAt(i) >= '0' && cc.charAt(i) <= '9') {
			sRet += cc.charAt(i);
		}
	}
	return sRet;
}

/**
 * A utility function that returns true if a string contains only whitespace characters or is null.
 */ 
function isblank(s) {
	if (s == null || s == "") {
		return true;
	}
	//for(var i = 0; i < s.length; i++) {
	//	var c = s.charAt(i);
		// allow space, next line, tab, 
	//	if ((c != ' ') && (c != '\n') && (c != '\t') && ) return false;
	//}
	//return true;
}

/**
 * Determines if the string contains the provided character.
 */
function containsChar(s, c) {
	if (s == null || c == null) {
		return false;
	}
	for (var i = 0; i < s.length; i++) {
		if (s.charAt(i) == c) {
			return true;
		}
	}
	return false;
}

/**
 * Checks if the passed String Text is a valid numeric value.
 */
function isNumeric(sText, validStrList) {
	var validChars = "0123456789";  // default valid numeric chars
	if (validStrList != null) {
		validChars = validStrList;	// use whatever was passed as valid chars
	}

	var isNumber = true;
	var tmpChar;
	for (i = 0; i < sText.length && isNumber == true; i++)  { 
		tmpChar = sText.charAt(i); 
		if (validChars.indexOf(tmpChar) == -1) {
			isNumber = false;
		}
	}
	return isNumber;
}

/**
 * Converts number to y2k compatible.
 */ 
function y2k(number) { 
	return (number < 1000) ? number + 1900 : number; 
}	

/**
 * Performs various comparisons between two dates:  fail if 
 * cStartDate is > cEndDate, fail if more that nNum days is between 
 * the two dates.
 */
function compareDates(sdate1, sdate2, nNum) {

	var date1 = new Date(sdate1);
	var date2 = new Date(sdate2);
	
	var difference =
		Date.UTC(y2k(date2.getYear()),date2.getMonth(),date2.getDate(),0,0,0)
		  - Date.UTC(y2k(date1.getYear()),date1.getMonth(),date1.getDate(),0,0,0);
		  
	var daysElapsed = ((((difference/1000) /60) /60) /24);
	
	// If the starting date is > than the ending date, we automatically fail.
	if (daysElapsed < 0) {
		return "Starting date cannot be greater than the ending date";
	}	

	if (daysElapsed > nNum) {
		return ("The entered date range of " + daysElapsed + " days exceeds the " + nNum + " day limit.");
	}
	return "";
}

function submitForm(subform, methodName) {
   	subform.method.value = methodName;
   	subform.submit();
}

function gotoPage(page) {
	document.location = page;
}

function popupPage(page) {
  	window.open(page);
}

function writeCurrentYear(){
	mydate = new Date();
	myyear= y2k(mydate.getYear());
	year = parseInt(myyear);
	document.write(year);
}

/**
 * Checks its ist a valid email address
 */
function isEmail(str) {
    // are regular expressions supported?
    var supported = 0;
    if (window.RegExp) {
        var tempStr = "a";
        var tempReg = new RegExp(tempStr);
        if (tempReg.test(tempStr)) supported = 1;
    }
    if (!supported) {
        return (str.indexOf(".") > 2) && (str.indexOf("@") > 0);
    }
    var r1 = new RegExp("(@.*@)|(\\.\\.)|(@\\.)|(^\\.)");
    var r2 = new RegExp("^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$");
    return (!r1.test(str) && r2.test(str));
}

function numericCheck(val){
 	for(i=0; i < val.length; i++){
    	if (val.substring(i, i+1) < "0" || val.substring(i, i+1) > "9"){
        	return false;
	    }
	}
	return true;
}

/**
 * Validates date data
 */
function validDate(sDate){
 	var nYear;
    var nMonth;
    var nDay;

	// Make sure we got at least ten digits
	if (sDate.length != 10){
		return(false);
	}                  

	var tYear;
	var tMonth;
	var tDay;
 
	tYear =sDate.substring(6, 10);
   	tMonth = sDate.substring(0, 2);
   	tDay = sDate.substring(3, 5);

	nYear = parseInt(sDate.substring(6, 10),10);         // was 0,2
   	nMonth = parseInt(sDate.substring(0, 2),10);      // was 2,4
   	nDay = parseInt(sDate.substring(3, 5),10);      // was 4,6

	if (!numericCheck(tYear)){
		return false;
	}

	if (!numericCheck(tMonth)){
		return false;
	}
	
	if (!numericCheck(tDay)){
		return false;
	}

    if ((nMonth < 1) || (nMonth > 12)) {
		return(false);
	}          

    // Check for the months who have 31 days...
	if ((nMonth == 1) || (nMonth == 3) || (nMonth == 5) || (nMonth == 7) ||
		 (nMonth == 8) || (nMonth == 10) || (nMonth == 12)){
		if ((nDay < 1) || (nDay > 31))	{
			return(false);
		}         	
		
	} else {
		// ..check for the months who have 30 days.
    	if ((nDay < 1) || (nDay > 30)) {
			return(false);
		}  
	}

	// Check for leap year February's	
	if (nMonth == 2){                                       
    	if ((nYear % 400 == 0) || ((nYear % 4 == 0) && (nYear % 100 != 0))){
        	if (nDay > 29){
				return(false);
			}          
		} else {
			if (nDay > 28) {
				return(false);
			}          
		}
	}       
	return true;
}

/**
 * Validates the time.
 * Checks if time is in HH:MM:SS AM/PM format.
 * The AM/PM are optional.
 */
function isValidTime(timeStr, secondsRequired) {

    var timePat = /^(\d{1,2}):(\d{2})(:(\d{2}))?(\s?(AM|am|PM|pm))?$/;

    var matchArray = timeStr.match(timePat);
    if (matchArray == null) {
        alert("Time is not in a valid format.");
        return false;
    }

    hour = matchArray[1];
    minute = matchArray[2];
    second = matchArray[4];
    ampm = matchArray[6];

    if (secondsRequired && second == "") {
        alert("You need to enter seconds values.");
        return false;
    }

    if (ampm=="") { ampm = null }

    if (hour < 0  || hour > 23) {
        alert("Hour must be between 1 and 12. (or 0 and 23 for military time)");
        return false;
    }

    //if (hour <= 12 && ampm == null) {
    //	if (confirm("Please indicate which time format you are using.  OK = Standard Time, CANCEL = Military Time")) {
    //		alert("You must specify AM or PM.");
    //		return false;
    //      }
    //}

    //if  (hour > 12 && ampm != null) {
    //	alert("You can't specify AM or PM for military time.");
    //	return false;
    //}

    if (minute<0 || minute > 59) {
        alert ("Minute must be between 0 and 59.");
        return false;
    }

    if (second != null && (second < 0 || second > 59)) {
        alert ("Second must be between 0 and 59.");
        return false;
    }
    return true;
} 

function trim(value){
	if (value.length < 1){
		return"";
	}
	value = rtrim(value);
	value = ltrim(value);
	if(value==""){
		return "";
	} else {
		return value;
	}
} 

function rtrim(rValue){
	var w_space = String.fromCharCode(32);
	var v_length = rValue.length;
	var strTemp = "";
	if(v_length < 0){
		return"";
	}
	
	var iTemp = v_length -1;
	while(iTemp > -1){
		if (rValue.charAt(iTemp) == w_space) {
		
		} else {
			strTemp = rValue.substring(0,iTemp +1);
			break;
		}
		iTemp = iTemp-1;
	} 
	return strTemp;
} 

function ltrim(lValue){
	var w_space = String.fromCharCode(32);
	if (v_length < 1) {
		return"";
	}
	
	var v_length = lValue.length;
	var strTemp = "";
	var iTemp = 0;

	while(iTemp < v_length){
		if (lValue.charAt(iTemp) == w_space) {
		} else {
			strTemp = lValue.substring(iTemp,v_length);
			break;
		}
		iTemp = iTemp + 1;
	} 
	return strTemp;
}

/**
 * Sorts the content of an paticular html table.
 */
function sortTable(tgtTable, onCol, hasHeading, asNumber, sortOrder, skipLastRow) {

    if (sortOrder == '0') {  // ascending
	descending = false;
    } else {
	descending = true;
    }

    tgtTable = document.getElementById(tgtTable);
    if(!onCol) onCol=0;
    if(skipLastRow) {
        skipLastRow = 1;
    } else {
        skipLastRow = 0;
    }
    var i=0;
    if(hasHeading) i=1;
    var nRows = tgtTable.rows.length;
    var t, ele1, ele2;
    for(; i < nRows-1-skipLastRow; i++) {
        t=i;
        for(var j=i+1; j < nRows-skipLastRow; j++) {
            ele1 = tgtTable.rows[j].cells[onCol].innerText;
            ele2 = tgtTable.rows[t].cells[onCol].innerText;
            if(asNumber) {
                ele1 = parseFloat(ele1);
                ele2 = parseFloat(ele2);
            }
            if(!descending  &&  ele1 < ele2) {
                t=j;
            } else if(descending  &&  ele1 > ele2) {
                t=j;
            }
        }
        tgtTable.tBodies[0].insertBefore(tgtTable.rows[t], tgtTable.rows[i]);
    }
}

// Set's the browser status bar message
function setStatusBar(msgStr) {
    self.status = msgStr;
}

function checkdate(objName) {
  var datefield = objName;
  if (chkdate(objName) == false) {
    datefield.select();
    alert("That date is invalid.  Please try again.");
    datefield.focus();
    return false;
  }
  else {
    return true;
  }
}

function chkdate(objName) {
   var strDatestyle = "US"; //United States date style
   var strDate;
   var strDateArray;
   var strDay;
   var strMonth;
   var strYear;
   var intday;
   var intMonth;
   var intYear;
   var booFound = false;
   var datefield = objName;
   var strSeparatorArray = new Array("-"," ","/",".");
   var intElementNr;
   var err = 0;
   var strMonthArray = new Array(12);
   strMonthArray[0] = "01";
   strMonthArray[1] = "02";
   strMonthArray[2] = "03";
   strMonthArray[3] = "04";
   strMonthArray[4] = "05";
   strMonthArray[5] = "06";
   strMonthArray[6] = "07";
   strMonthArray[7] = "08";
   strMonthArray[8] = "09";
   strMonthArray[9] = "10";
   strMonthArray[10] = "11";
   strMonthArray[11] = "12";
   var strDayArray = new Array(31);
   strDayArray[0] = "01";
   strDayArray[1] = "02";
   strDayArray[2] = "03";
   strDayArray[3] = "04";
   strDayArray[4] = "05";
   strDayArray[5] = "06";
   strDayArray[6] = "07";
   strDayArray[7] = "08";
   strDayArray[8] = "09";
   strDayArray[9] = "10";
   strDayArray[10] = "11";
   strDayArray[11] = "12";
   strDayArray[12] = "13";
   strDayArray[13] = "14";
   strDayArray[14] = "15";
   strDayArray[15] = "16";
   strDayArray[16] = "17";
   strDayArray[17] = "18";
   strDayArray[18] = "19";
   strDayArray[19] = "20";
   strDayArray[20] = "21";
   strDayArray[21] = "22";
   strDayArray[22] = "23";
   strDayArray[23] = "24";
   strDayArray[24] = "25";
   strDayArray[25] = "26";
   strDayArray[26] = "27";
   strDayArray[27] = "28";
   strDayArray[28] = "29";
   strDayArray[29] = "30";
   strDayArray[30] = "31";
   strDate = datefield.value;
   if (strDate.length < 1) {
      return true;
   }
   
   for (intElementNr = 0; intElementNr < strSeparatorArray.length; intElementNr++) {
     if (strDate.indexOf(strSeparatorArray[intElementNr]) != -1) {
        strDateArray = strDate.split(strSeparatorArray[intElementNr]);
        if (strDateArray.length != 3) {
          err = 1;
          return false;
        }
        else {
          strDay = strDateArray[0];
          strMonth = strDateArray[1];
          strYear = strDateArray[2];
        }
        booFound = true;
     }
   }
   if (booFound == false) {
      if (strDate.length>5) {
        strDay = strDate.substr(0, 2);
        strMonth = strDate.substr(2, 2);
        strYear = strDate.substr(4);
      }
      if (strDate.length>1 && strDate.length<5){
        return false;
      }
   }
   if (strYear.length == 1){
     strYear = '0' + strYear;
   } 
   if (strYear.length == 2) {
      strYear = '20' + strYear;
   }
   if (strYear.length == 3) {
      strYear = '2' + strYear;   
   }

   //US style
   if (strDatestyle == "US") {
      strTemp = strDay;
      strDay = strMonth;
      strMonth = strTemp;
   }
   
   intday = parseInt(strDay, 10);
   if (isNaN(intday)) {
     for (i = 0;i<31;i++) {
        if (strDay.toUpperCase() == strDayArray[i].toUpperCase()) {
          intDay = i+1;
          strDay = strDayArray[i];
          i = 31;
        }
     }
   }
   if (isNaN(intday)) {
      err = 2;
      return false;
   }
   
   intMonth = parseInt(strMonth, 10);
   if (isNaN(intMonth)) {
     for (i = 0;i<12;i++) {
        if (strMonth.toUpperCase() == strMonthArray[i].toUpperCase()) {
          intMonth = i+1;
          strMonth = strMonthArray[i];
          i = 12;
        }
     }
     if (isNaN(intMonth)) {
        err = 3;
        return false;
     }
   }
   intYear = parseInt(strYear, 10);
   if (isNaN(intYear)) {
      err = 4;
      return false;
   }
   if (intMonth>12 || intMonth<1) {
     err = 5;
     return false;
   }
   if ((intMonth == 1 || intMonth == 3 || intMonth == 5 || intMonth == 7 || intMonth == 8 || intMonth == 10 || intMonth == 12) && (intday > 31 || intday < 1)) {
     err = 6;
     return false;
   }
   if ((intMonth == 4 || intMonth == 6 || intMonth == 9 || intMonth == 11) && (intday > 30 || intday < 1)) {
     err = 7;
     return false;
   }
   if (intMonth == 2) {
     if (intday < 1) {
        err = 8;
        return false;
     }
     if (LeapYear(intYear) == true) {
       if (intday > 29) {
         err = 9;
         return false;
       }
     }
     else {
       if (intday > 28) {
         err = 10;
         return false;
       }
     }
   }
   if (strDatestyle == "US") {
     datefield.value = strMonthArray[intMonth-1] + "/" + strDayArray[intday-1]+"/" + strYear;
   }
   else {
     datefield.value = strDayArray[intday-1] + "/" + strMonthArray[intMonth-1] + "/" + strYear;
   }
   return true;
}

function LeapYear(intYear) {
   if (intYear % 100 == 0) {
     if (intYear % 400 == 0) { return true; }
   }
   else {
     if ((intYear % 4) == 0) { return true; }
   }
   return false;
}

 

 

