// select list functions
var toFind = "";
var timeoutID = "";
var timeoutInterval = 700;
var timeoutCtr = 0;
var timeoutCtrLimit = 3;
var oControl = ""; 

function listbox_onkeypress(){
   window.clearInterval(timeoutID);
   oControl = window.event.srcElement;

   var keycode = window.event.keyCode;
   if(keycode >= 32 ){
       var c = String.fromCharCode(keycode);
       c = c.toUpperCase(); 
       toFind += c ; 
       find();    
       timeoutID = window.setInterval("idle()", timeoutInterval);  
    }
}

function listbox_onblur(){
   window.clearInterval(timeoutID);
   resetToFind();
}

function idle(){
   timeoutCtr += 1;
   if(timeoutCtr > timeoutCtrLimit){
      resetToFind();
      timeoutCtr = 0;
      window.clearInterval(timeoutID);
   }
}

function resetToFind(){
   toFind = "";
}

function find(){
    var allOptions = document.all.item(oControl.id);

    for (i=0; i < allOptions.length; i++){
       nextOptionText = allOptions(i).text.toUpperCase();

       if(!isNaN(nextOptionText) && !isNaN(toFind) ){
              nextOptionText *= 1;
              toFind *= 1;
       }

        if(toFind == nextOptionText){
            oControl.selectedIndex = i;
            window.event.returnValue = false;
            break;
        }

       if(i < allOptions.length-1){
           lookAheadOptionText = allOptions(i+1).text.toUpperCase() ;
           if( (toFind > nextOptionText) && (toFind < lookAheadOptionText) ){
              oControl.selectedIndex = i+1;
              window.event.cancelBubble = true;
               window.event.returnValue = false;
              break;
           }
		   }
       else{
           if(toFind > nextOptionText){
               oControl.selectedIndex = allOptions.length-1;
		       window.event.cancelBubble = true;
               window.event.returnValue = false;
               break;
           } 
       } 
    }  
}

//Date Validation
var dtCh= "/";
var minYear=1900;
var today = new Date();
var maxYear = today.getYear();

function stripCharsInBag(s, bag){
	var i;
    var returnString = "";
    // Search through string's characters one by one.
    // If character is not in bag, append to returnString.
    for (i = 0; i < s.length; i++){   
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}

function daysInFebruary (year){
	// February has 29 days in any year evenly divisible by four,
    // EXCEPT for centurial years which are not also divisible by 400.
    return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
}
function DaysArray(n) {
	for (var i = 1; i <= n; i++) {
		this[i] = 31
		if (i==4 || i==6 || i==9 || i==11) {this[i] = 30}
		if (i==2) {this[i] = 29}
   } 
   return this
}

function isDate(dtStr){
	var daysInMonth = DaysArray(12)
	var pos1=dtStr.indexOf(dtCh)
	var pos2=dtStr.indexOf(dtCh,pos1+1)
	var strMonth=dtStr.substring(0,pos1)
	var strDay=dtStr.substring(pos1+1,pos2)
	var strYear=dtStr.substring(pos2+1)
	strYr=strYear
	if (strDay.charAt(0)=="0" && strDay.length>1) strDay=strDay.substring(1)
	if (strMonth.charAt(0)=="0" && strMonth.length>1) strMonth=strMonth.substring(1)
	for (var i = 1; i <= 3; i++) {
		if (strYr.charAt(0)=="0" && strYr.length>1) strYr=strYr.substring(1)
	}
	month=parseInt(strMonth)
	day=parseInt(strDay)
	year=parseInt(strYr)
	if (pos1==-1 || pos2==-1){
		alert("The date format should be : mm/dd/yyyy")
		return false
	}
	if (strMonth.length<1 || month<1 || month>12){
		alert("Please enter a valid month")
		return false
	}
	if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month]){
		alert("Please enter a valid day")
		return false
	}
	if (strYear.length != 4 || year==0 || year<minYear || year>maxYear){
		alert("Please enter a valid 4 digit year between "+minYear+" and "+maxYear)
		return false
	}
	if (dtStr.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(dtStr, dtCh))==false){
		alert("Please enter a valid date")
		return false
	}
return true
}

function Check_NotBlankField(formField)
{
  formField.value=trim(formField.value);
  if (notNull(formField.value))
  {
	return true;
  }
  else
  {
	formField.select();
	formField.focus();
	return false;
  }
}

function trim(sent) {
  var S = new String(sent);
  S = S.replace(/^\s+/g,"");
  return S.replace(/\s+$/g,"");
};

function notNull(fldValue) {
  if(!fldValue)return false;
  return (fldValue.length != 0);
};

//--------------------------------------------
function isInteger(sent) {
	if(!sent)return false;
	if(!String(sent).match(/\d{1,}/)) return false;
	return sent == String(sent).match(/\d{1,}/)[0];
};
//--------------------------------------------

function validateInteger(formfield, minNum, maxNum) {
	formfield.value=trim(formfield.value);
	if (notNull(formfield.value) && isInteger(formfield.value) )
	{
		
		if(!minNum && !maxNum)
			return true;
		else
		{
			if (minNum && maxNum) //both passed in
			{
				if (parseInt(formfield.value) >= parseInt(minNum) && parseInt(formfield.value) <= parseInt(maxNum))
					return true;
			}
			else if (minNum)
			{
				if (parseInt(formfield.value) >= parseInt(minNum))
					return true;
			}
			else
			{
				if (parseInt(formfield.value) <= parseInt(maxNum))
					return true;
			}
			
		}
	}
	
	formfield.select();
	formfield.focus();
	return false;
};
//--------------------------------------------

function validateZip(zipcode) {
	var reg2 = /^\d{5}([\-]\d{4})?$/; // valid
	return reg2.test(zipcode)
};

function validatePhoneNum(formField)
{
	var strPhone = formField.value;
	strPhone = strPhone.replace(/[\(\)\.\-\/ ]/g, ''); 
	if (!notNull(strPhone) || !isInteger(strPhone) )
		return false;
	else if(strPhone.length != 10)
		return false;
	else
	{
		formField.value = strPhone.substring(0, 3) + '-' + strPhone.substring(3, 6) + '-' +  strPhone.substring(6, 10);
		return true;
	}	
	
}
function fieldValidation(formField, format)
{
	var reg2;
	var strValue = formField.value;
	switch(format)
	{
		case 1: //email
			reg2 = /^[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$/; // valid
			break;
		case 2: //Zip
			//reg2 = /[a-zA-Z0-9]{5,10}/; // valid
			reg2 = /^\d{5}([\-]\d{4})?$/; // valid
			break;
		case 3: //Phone
			reg2 = /^\(?(\d{3})\)?[\.\-\/ ]?(\d{3})[\.\-\/ ]?(\d{4})$/; // valid
			break;

	}

	return reg2.test(formField.value);

}

//functions for onKeyPress

//--------------------------------------------
function isInputPhoneNum() 
{ 
	// If it is not between 0,9 or not - (45), . (46), or not () - 40,41, or not space 
	if (event && !((event.keyCode >= 48 && event.keyCode <= 57) || event.keyCode == 40 || event.keyCode == 41 
	|| event.keyCode == 45 || event.keyCode == 46 || event.keyCode == 32)) 
	{ 
		// Cancel the event 
		event.returnValue = false; 
		return; 
	} 
} 

//--------------------------------------------
function isInputNum(evt) 
{ 
    if(navigator.appName  == 'Microsoft Internet Explorer')
        isInputNumIE();
    else
        isInputNumFireFox(evt);
} 

function isInputNumIE() 
{ 
	// If it is not between 0,9 
	if (event && !(event.keyCode >= 48 && event.keyCode <= 57)) 
	{ 
		// Cancel the event 
		event.returnValue = false; 
	} 
} 

function isInputNumFireFox(evt) 
{ 
    e = (window.event)?(window.event):evt;
    key = e.keycode ? e.keycode : e.which;
    if (!(key >= 48 && key <= 57) && key != 8)
    {
        if (e && e.preventDefault)
            e.preventDefault();
        else
            e.returnValue = false;
    }
} 

function isValidCreditCard(type, ccnum) {
   if (type == "Visa") {
      // Visa: length 16, prefix 4, dashes optional.
      var re = /^4\d{3}-?\d{4}-?\d{4}-?\d{4}$/;
   } else if (type == "MC") {
      // Mastercard: length 16, prefix 51-55, dashes optional.
      var re = /^5[1-5]\d{2}-?\d{4}-?\d{4}-?\d{4}$/;
   } else if (type == "Disc") {
      // Discover: length 16, prefix 6011, dashes optional.
      var re = /^6011-?\d{4}-?\d{4}-?\d{4}$/;
   } else if (type == "AmEx") {
      // American Express: length 15, prefix 34 or 37.
      var re = /^3[4,7]\d{13}$/;
   } else if (type == "Diners") {
      // Diners: length 14, prefix 30, 36, or 38.
      var re = /^3[0,6,8]\d{12}$/;
   }
   if (!re.test(ccnum)) return false;
   // Remove all dashes for the checksum checks to eliminate negative numbers
   ccnum = ccnum.split("-").join("");
   // Checksum ("Mod 10")
   // Add even digits in even length strings or odd digits in odd length strings.
   var checksum = 0;
   for (var i=(2-(ccnum.length % 2)); i<=ccnum.length; i+=2) {
      checksum += parseInt(ccnum.charAt(i-1));
   }
   // Analyze odd digits in even length strings or even digits in odd length strings.
   for (var i=(ccnum.length % 2) + 1; i<ccnum.length; i+=2) {
      var digit = parseInt(ccnum.charAt(i-1)) * 2;
      if (digit < 10) { checksum += digit; } else { checksum += (digit-9); }
   }
   if ((checksum % 10) == 0) return true; else return false;
}
