// JavaScript Document
var isNN = (navigator.appName.indexOf("Netscape")!=-1);


function create_md5_key (k1, k2, k3){
  var inputstr = k1.toString() + k2.toString() + k3.toString()
  return b64_md5(inputstr);
}

function checkuid(un) {
 
   var sURL = "uid.asp?xfer=" + un; 
   var oXMLHTTP = new XMLHttpRequest();   
   if (oXMLHTTP) {
      oXMLHTTP.onreadystatechange = function() {
      if (oXMLHTTP.readyState == 4 && (oXMLHTTP.status == 200 || oXMLHTTP.status == 304)) {
        //alert(oXMLHTTP.responseText);
      }
     };
     oXMLHTTP.open('POST', sURL, false);
     // many server-side scripts require the Content-Type to be set:
     //oXMLHTTP.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
     oXMLHTTP.send('');
   }
   //alert(oXMLHTTP.responseText)
   if (oXMLHTTP.responseText == "" || oXMLHTTP.responseText == null) {
     return '1';
   }else{
     return oXMLHTTP.responseText;
   } 
}


function autoTab(input,len, e) {
    var keyCode = (isNN) ? e.which : e.keyCode; 
    var filter = (isNN) ? [0,8,9] : [0,8,9,16,17,18,37,38,39,40,46];
    if(input.value.length >= len && !containsElement(filter,keyCode)) {
      input.value = input.value.slice(0, len);
      input.form[(getIndex(input)+1) % input.form.length].focus();
    }
    function containsElement(arr, ele) {
      var found = false, index = 0;
      while(!found && index < arr.length)
      if(arr[index] == ele)
        found = true;
      else
        index++;
      return found;
    }
    function getIndex(input) {
      var index = -1, i = 0, found = false;
      while (i < input.form.length && index == -1)
      if (input.form[i] == input)index = i;
      else i++;
      return index;
    }
  return true;
}
  
 function Validate(fform) {	  
	  var tmpval;
	  var y = 0;
	  var x = 0;
	  var alertMsg = '';
	  //check for required fields
	  for (x=0; x<fform.elements.length; x++){	
	  
	        var IsRequired, IsType, IsSelected
	        var temp = new Array();	        
	        tmpVal = fform.elements[x].className
            indx = tmpVal.indexOf('|')
	        if (indx >= -1) {
              temp = tmpVal.split('|');
              IsRequired = temp[0]
              IsType = temp[1]
            }else{
              IsRequired = 0
              IsType = ''
            }
	    	  
		    if (IsRequired == 1){	
		      	
			  
			  if (fform.elements[x].type == 'radio') {
			  
			     IsSelected = false;
			     ele = eval("fform." + fform.elements[x].name);
			     for (var i = 0;i < ele.length; i++){
                   if (ele[i].checked == true){
                     IsSelected = true;
                   }
                 }
                 if (IsSelected == false){ 
                   for (var j = 0;j < ele.length; j++){                    
                     ele[j].style.backgroundColor = 'yellow';                     		
                   }       
                   
                   
                   
			       if (y==0) {
				     alertMsg = 'The following fields are required: \n\n';
				     ele[0].focus();
				     y=1;
			       }
				   var mySearch = '"' + fform.elements[x].title + '"\n' 
                   var index = alertMsg.indexOf(mySearch);
                   if (index == -1) {
				      alertMsg = alertMsg + '"' + fform.elements[x].title + '"\n' 
				   } 
			    
			    }else{
		  		  for (var i = 0;i < ele.length; i++){
                     ele[i].style.backgroundColor = 'transparent';		
                   }
			    } 
			     
			     
			     
			     
			  }else{
			  
			    tmpval = fform.elements[x].value 			
		        if (tmpval.length == 0){ 
		  	       fform.elements[x].style.backgroundColor = 'yellow';		
			       if (y==0) {
				     alertMsg = 'The following fields are required: \n\n';
				     fform.elements[x].focus();
				     y=1;
			       }
				   var mySearch = '"' + fform.elements[x].title + '"\n' 
                   var index = alertMsg.indexOf(mySearch);
                   if (index == -1) {
				      alertMsg = alertMsg + '"' + fform.elements[x].title + '"\n' 
				   } 
			    
			    }else{
		  		  fform.elements[x].style.backgroundColor = 'white';	
			    }
			  }
			  
			  
			  
		  }
	  }
	  if (alertMsg.length) {
		  alert(alertMsg);
		  return false;
	  }
	  //check for validation
	  y=0;
	  for (x=0;x<fform.elements.length;x++){	
	    
	    var IsRequired, IsType
	        var temp = new Array();
	        tmpVal = fform.elements[x].className
            indx = tmpVal.indexOf('|')
	        if (indx >= -1) {
              temp = tmpVal.split('|');
              IsRequired = temp[0]
              IsType = temp[1]
            }else{
              IsRequired = 0
              IsType = ''
            }
	    	  
		if (IsType != '' && IsType){
			  //alert(fform.elements[x].name + ':' + fform.elements[x].className) 
			  
			  switch(IsType){
                case 'email':
				    var str = fform.elements[x].value;
					
				    if (window.RegExp) {
                      var reg1str = "(@.*@)|(\\.\\.)|(@\\.)|(\\.@)|(^\\.)";
                      var reg2str = "^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$";
                      var reg1 = new RegExp(reg1str);
                      var reg2 = new RegExp(reg2str);
                      if (!reg1.test(str) && reg2.test(str)  || str == ''){
					    //return true;
						fform.elements[x].style.backgroundColor = 'white';	
					  }else{
                        //return false;
						if (y==0) {				
					      alertMsg = 'Your information could not be submited for the following reason(s): \n\n';
				          fform.elements[x].focus();
				          y = 1;
			            } 
					    fform.elements[x].style.backgroundColor = 'yellow';	
					    alertMsg = alertMsg + '"' + fform.elements[x].title + '" is not a valid email address.\n' 
					  }
                   } else {
                      if(str.indexOf("@") >= 0 || str == ''){
                        //return true;
						fform.elements[x].style.backgroundColor = 'white';	
					  }else{
                        //return false;
						if (y==0) {				
					      alertMsg = 'Your information could not be submited for the following reason(s): \n\n';
				          fform.elements[x].focus();
				          y = 1;
			            } 
					    fform.elements[x].style.backgroundColor = 'yellow';	
					    alertMsg = alertMsg + '"' + fform.elements[x].title + '" is not a valid email address.\n' 

					  }
                   }							          
                   break ;
				case 'numeric':
				  if (isNaN(fform.elements[x].value)) {
					  fform.elements[x].style.backgroundColor = 'yellow';	
					  var mySearch = '"' + fform.elements[x].title + '" is not a valid number.\n'   
                      var index = alertMsg.indexOf(mySearch);
                      if (index = -1) {
					    alertMsg = alertMsg + '"' + fform.elements[x].title + '" is not a valid number.\n'   
					  }
				  }else{
					  fform.elements[x].style.backgroundColor = 'white';	  
					  
				  }
				  break;
				case 'digits':
				case 'digit':
				  if (isDigits(fform.elements[x].value) || fform.elements[x].value == '') {
				    fform.elements[x].style.backgroundColor = 'white';	
				  }else{
					fform.elements[x].style.backgroundColor = 'yellow';	
					
	
					var mySearch = '"' + fform.elements[x].title + '" is not a valid number.\n'   
                    var index = alertMsg.indexOf(mySearch);
                    if (index = -1) {
					  alertMsg = alertMsg + '"' + fform.elements[x].title + '" is not a valid number.\n'   
					}
				  }				  
				  break;
				case 'zip':
				   var z=fform.elements[x].value;  // put zipCode into working var
                   var digits="0123456789";
                   var flag=true; // innocent til proven guilty
                   if (z.length > 0) {
				     if(z.length==10) {
                      if(z.charAt(5)!='-')
                        flag=false;
                      else
                        z=z.substr(0, 5)+z.substr(6, 4);
                     }
                     switch(z.length) {
                       case 5:
                       case 9:
						  for(var i=0;i<z.length;i++)
							if(digits.indexOf(z.charAt(i))<0) flag=false;   // invalid digit character
						  break;    
                       default:
                          flag=false;
                      }
					  if(flag) {
                       fform.elements[x].style.backgroundColor = 'white';	   
                      }else{                       
					   fform.elements[x].style.backgroundColor = 'yellow';	
					   alertMsg = alertMsg + '"' + fform.elements[x].title + '" is not a valid zip code.\n'
			          }
				   }
				    break;
                case 'phone':
			    case 'phoneno':
				case 'phonenumber':
				  var ph=fform.elements[x].value;  // put value into working var 
				  if (ph == '') {
				     fform.elements[x].style.backgroundColor = 'white';		           
				  }else{
				    if (checkInternationalPhone(ph)==false){
		             fform.elements[x].style.backgroundColor = 'yellow';	
		             alertMsg = alertMsg + '"' + fform.elements[x].title + '" is not a valid phone number.\n'   
		            }else{
		             fform.elements[x].style.backgroundColor = 'white';
		            }
		          }  
				  break;
                     case 'time':
			if (IsValidTime(fform.elements[x].value) || fform.elements[x].value == '') {
			    fform.elements[x].style.backgroundColor = 'white';	
			}else{
			    fform.elements[x].style.backgroundColor = 'yellow';	
			    alertMsg = alertMsg + '"' + fform.elements[x].title + '" is not a valid time.\n'   
			}				  
			break;
              }			  
		}
	  }
	  //alert(alertMsg.length)
	   if (alertMsg.length) {
		  alert(alertMsg);
		  return false;
	   }else{
	      return true;
	   }
	  
	  
  }

function setRadioValue(ele, val){
  var strVal1, strVal2
  for (var i = 0; i < ele.length; i ++) {
    strVal1 = ele[i].value;
    strVal2 = val;
    if (strVal1.toUpperCase() == strVal2.toUpperCase()) {
      ele[i].checked = true;
      return;    
    }  
  }
}

function IsValidTime(timeStr) {
// Checks if time is in HH:MM:SS AM/PM format.
// The seconds and AM/PM are optional.

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 (second=="") { second = null; }
if (ampm=="") { ampm = null }

if (hour < 0  || hour > 23) {
//alert("Hour must be between 1 and 12.");
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 isDigits(value) {
  var digits="0123456789", x=value.toString();
  if(x.length) {
	var tmp = true;
    for(var i=0; i<x.length; i++){
      if(!(digits.indexOf(x.charAt(i))+1)) {
		tmp = false;
	    break;
	  }
	}
	return tmp;
  }else{
    return false;
  }
}
  
function setSelectValue(ele, val){
  var strVal1, strVal2
  for (var i = 0; i < ele.length; i ++) {
    strVal1 = ele.options[i].value;
    strVal2 = val;
    if (strVal1.toUpperCase() == strVal2.toUpperCase()) {
      ele.options[i].selected = true;
      return;    
    }  
  }
  ele.selectedIndex = -1;
}

function IsEqualDate(d1, d2)  {
  if ((d1 != '') && (d2 != '')) {  
    var date1 = new Date(d1);
    var date2 = new Date(d2); 
  
    if (date1.getTime() == date2.getTime()){
      return true;
    }else{
      return false;
    }  
  }else{
    return false;
  }
}

function IsGreaterDate(d1, d2)  {
  if ((d1 != '') && (d2 != '')) {  
    var date1 = new Date(d1);
    var date2 = new Date(d2); 
  
    if (date1.getTime() > date2.getTime()){
      return true;
    }else{
      return false;
    }  
  }else{
    return false;
  }
}

function IsLesserDate(d1, d2)  {
  if ((d1 != '') && (d2 != '')) {  
    var date1 = new Date(d1);
    var date2 = new Date(d2); 
  
    if (date1.getTime() < date2.getTime()){
      return true;
    }else{
      return false;
    }  
  }else{
    return false;
  }
}

function textCounter( field, maxlimit ) {
  if ( field.value.length > maxlimit ){
    field.value = field.value.substring( 0, maxlimit );
    return false;
  }else{
    return true;
  }
}

 function moveItem1(selFrom, selTo, optionIndex) {  
  var oListItem = selFrom.options[selFrom.selectedIndex];
  var oSelected=selFrom.selectedIndex;
  selFrom.options[selFrom.selectedIndex] = null;
  selTo.options.add(oListItem);
    
}
 function moveItem(selFrom, selTo) {
     var setIndex=-1;  
     while(selFrom.selectedIndex > -1) {
        moveItem1(selFrom, selTo, selFrom.selectedIndex);  
     }
 }   
 function addItem(remList, addList) {
    moveItem(remList, addList);
 }
 function removeItem(addList, remList) {
    moveItem(addList, remList);
 }

function compareOptionText(a,b) { 
  /* 
   * return >0 if a>b 
   *         0 if a=b 
   *        <0 if a<b 
   */ 
  // textual comparison 
  return a.text!=b.text ? a.text<b.text ? -1 : 1 : 0; 
  // numerical comparison 
//  return a.text - b.text; 



} 


function sortOptions(list) { 
  var items = list.options.length; 
  // create array and make copies of options in list 
  var tmpArray = new Array(items); 
  for ( i=0; i<items; i++ ) 
    tmpArray[i] = new 
Option(list.options[i].text,list.options[i].value); 
  // sort options using given function 
  tmpArray.sort(compareOptionText); 
  // make copies of sorted options back to list 
  for ( i=0; i<items; i++ ) 
    list.options[i] = new Option(tmpArray[i].text,tmpArray[i].value); 


}

function compareOptionText2(a,b) { 
  /* 
   * return >0 if a>b 
   *         0 if a=b 
   *        <0 if a<b 
   */ 
  // textual comparison 
  return a.text!=b.text ? a.text>b.text ? -1 : 1 : 0; 
  // numerical comparison 
//  return a.text - b.text; 



} 

function sortOptionsReverse(list) { 
    var items = list.options.length; 
    // create array and make copies of options in list 
    var tmpArray = new Array(items); 
    for ( i=0; i<items; i++ ) 
      tmpArray[i] = new 
      Option(list.options[i].text,list.options[i].value); 
      // sort options using given function 
      tmpArray.sort(compareOptionText2); 
     // make copies of sorted options back to list 
     for ( i=0; i<items; i++ ) 
       list.options[i] = new Option(tmpArray[i].text,tmpArray[i].value); 


}  
// Declaring required variables
var digits = "0123456789";
// non-digit characters which are allowed in phone numbers
var phoneNumberDelimiters = "()- ";
// characters which are allowed in international phone numbers
// (a leading + is OK)
var validWorldPhoneChars = phoneNumberDelimiters + "+";
// Minimum no of digits in an international phone no.
var minDigitsInIPhoneNumber = 10;

function isInteger(s)
{   var i;
    for (i = 0; i < s.length; i++)
    {   
        // Check that current character is number.
        var c = s.charAt(i);
        if (((c < "0") || (c > "9"))) return false;
    }
    // All characters are numbers.
    return true;
}

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++)
    {   
        // Check that current character isn't whitespace.
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}

function checkInternationalPhone(strPhone){
s=stripCharsInBag(strPhone,validWorldPhoneChars);
return (isInteger(s) && s.length >= minDigitsInIPhoneNumber);
}

