/*
--------------------------------------------------------
	Function name: isZip
	Description  : receive  a string, return true if it has a valid format of US 5 digits zip code.
	Parameters	 :
				 
	Output		 : none
	Return 		 :
					+True  : 
					+False : 
--------------------------------------------------------
*/
function isTimeValid(str)
{
	var arr;
	var temp=0;
	var number_format = "0123456789:";
	for (var i = 0; i < str.length; i++)
	{
		check_char = number_format.indexOf(str.charAt(i));
		if (check_char < 0){
			return false;
		}
	}
	if ((str.charAt(0)==":")||(str.charAt(str.length-1)==":")){
		return false;
	}
	for (i = 0; i < str.length; i++)
	{
		if (str.charAt(i) ==":")
			temp=temp+1;
	}
	if (temp > 1){
		return false;
	}else if (temp == 1){
		arr = str.split(":");
		if (arr[0] > 23){
			return false;
		}
		if (arr[1] > 59){
			return false;
		}
	}else{
		if (str > 23){
			return false;
		}
	}
 	return true;
	
}
function isTextValid(str)
{
	var number_format = "0123456789-abcdefghijklmnopqrstuvwxyz_ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	for (var i = 0; i < str.length; i++)
	{
		check_char = number_format.indexOf(str.charAt(i))
		if (check_char < 0)
			return false;
	}
 	return true;
}
function ReplaceAll(str)
{
	for(i=0;i<str.length;i++)
	{
		str = str.replace('\"','\'');
	}
	return str;
}
function isZip(str)
{
	var number_format = "0123456789- ";
	str=trim(str);
	if(str=='') return false;
	if(str.length>12) return false;
	if(!isPosInt(str)) return false;
	for (var i = 0; i < str.length; i++)
	{
		check_char = number_format.indexOf(str.charAt(i))
		if (check_char < 0)
			return false;
	}
 return true;
}
/*
--------------------------------------------------------
	Function name: checkPhone
	Description  : check phone number
	Parameters	 :
				 
	Output		 : none
	Return 		 :
					+True  : 
					+False : 
--------------------------------------------------------
*/
function checkPhone(obj_val)
{
	var number_format = "0123456789()- ";
	for (var i = 0; i < obj_val.length; i++)
	{
		check_char = number_format.indexOf(obj_val.charAt(i))
		if (check_char < 0)
			return false;
	}
	return true;
}
/*
--------------------------------------------------------
	Function name: isEmail
	Description  : check if an email address is valid (format only).
	Parameters	 :
					+ strEmail: a string email address.
	Output		 : None
	Return		 :	
					+True : Email is valid.
					+False: Email is invalid.
--------------------------------------------------------	
*/
function isEmail(strEmail)
{
 var intlen;
 var ctmp;
 strEmail = trim(strEmail);
 if(strEmail=='') return false;
 intlen=strEmail.length;
 if(intlen<5) return false;
 if(strEmail.indexOf('@')==-1) return false;
 if(strEmail.indexOf('.')==-1) return false;
 if(intlen - strEmail.lastIndexOf('.') -1 > 3) return false; 
 if((strEmail.indexOf("_")!=-1) && (strEmail.lastIndexOf("_") > strEmail.lastIndexOf("@"))) return false;
 if(strEmail.lastIndexOf(".") <= strEmail.lastIndexOf("@")+1)  return false;
 if(strEmail.indexOf("@")!=strEmail.lastIndexOf("@")) return false;
 if(intlen -1 == strEmail.lastIndexOf('.')) return false;
 if(strEmail.charAt(strEmail.indexOf('@')+1)=='.') return false;
 if(strEmail.indexOf(" ")!=-1) return false;
 if(strEmail.indexOf("..")!=-1) return false;
 
 strEmail=strEmail.toLowerCase();
 for(intcnt=0;intcnt<intlen;intcnt++)
	{
	 ctmp = strEmail.charAt(intcnt)
	 if((!isDigit(ctmp))&& ((ctmp>'z')||(ctmp<'a')) && (ctmp!='-') && (ctmp!='.') && (ctmp!='@') && (ctmp!='_')) return false;
	}

return true	;
}
/*
--------------------------------------------------------
	Function name: isImage
	Description  : check if a file is valid (format *.gif, *.jpg, *.bmp).
	Parameters	 :
					+ strFileName: a string file name.
	Output		 : None
	Return 		 :
					+True  : file name is valid.
					+False : file name is invalid.
--------------------------------------------------------	
*/
function isImage(strFileName){
	sValue = trim(strFileName);
	sValue = sValue.toLowerCase();
	if(sValue!="" ){
		nlen = sValue.length
		pos = sValue.indexOf(".",0)
		ext = sValue.substring(pos,nlen)
		if (!((ext==".jpg" )||(ext==".gif")||(ext==".bmp"))){
			return false;
		}    
	}
	return true;
}
/*
--------------------------------------------------------
	Function name: isValidDate
	Description  : heck if a string is a valid date. The format of date can be specified 
	Parameters	 :
					+ strDate: Date.
					+ intFormatDate
						 1- is mm/dd/yyyy
						 2- is dd/mm/yyyy
						 3 -is mm/dd/yy
						 4 -is dd/mm/yy 	
	Output		 : None
	Return 		 :
					+True  : Date is valid.
					+False : Date is invalid.
--------------------------------------------------------	
*/
function isValidDate(strDate,intFormatDate)
{
	 var m;
	 var d;
	 var y;
	 var i1;
	 var i2;
	 
	 if((intFormatDate!=1)&&(intFormatDate!=2)&&(intFormatDate!=3)&&(intFormatDate!=4)) return false;
	
	 strDate=trim(strDate);
	 if(strDate=="") return false;
	 i1 = strDate.indexOf("/")
	 if(i1<0) return false;
	 
	 if((intFormatDate==1)||(intFormatDate==3))
		m = strDate.substring(0,i1);
	 else
		d = strDate.substring(0,i1);
	
	  
	 i2= strDate.indexOf("/",i1+1)
	 if(i2<0) return false;
	
	 if((intFormatDate==1) || (intFormatDate==3))
		d = strDate.substring(i1+1,i2);
	 else
		m = strDate.substring(i1+1,i2);
	 
	 y = strDate.substring(i2+1)
	
	 if((m=="")||(d=="")||(y=="")) return false;
	 if((m==0)||(d==0)) return false;
	 if(!isPosInt(m))
		 return false;
	 else
		{	
		 m = parseInt(m);
		 if(m>12) return false;
		}
	
	 if(!isPosInt(y))
		 return false;
	 else
		{
		 y = parseInt(y)
		 if(y>9999) return false;
		 if((y>=100)&&(y<1900)) return false;
		}
	
	 if(!isPosInt(d))
		 return false;
	 else
		{
		 d = parseInt(d)
		 if((m==1)||(m==3)||(m==5)||(m==7)||(m==8)||(m==10)||(m==12))
			 if(d>31) return false;
		 if((m==4)||(m==6)||(m==9)||(m==11))
			if(d>30) return false;
	
		 if(m==2)
			{
			 if(d>29) return false;
			 if((y%4)!=0) // not a leap year
				if(d>28) return false;
			}
		}
	
	return true
}
/*
--------------------------------------------------------
	Function name: compareDate
	Description  : compare two date.
	Parameters	 :
					+ start: Start date.
					+ end  : End date.
	Output		 : none
	Return 		 :  
			start <= end    :   true
        	start > end     :   false						
--------------------------------------------------------	
*/
function compareDate(start,end){
    
    //check data pass
   // if((start.length == 0) || (end.length==0) ) return false;
    
    //create two Date objects
    var s = new Date(start);
    var e = new Date(end);
    
    //get month, year, date of date objects
    var s_y = parseInt(s.getYear());
    var s_m = parseInt(s.getMonth());
    var s_d = parseInt(s.getDate());
    
    var e_y = parseInt(e.getYear());
    var e_m = parseInt(e.getMonth());
    var e_d = parseInt(e.getDate());
    
    //compare year , month and day of them
    if( s_y <= e_y){ // compare year
        if(s_y == e_y){
            if(s_m <= e_m){//compare month
                if(s_m == e_m ){
                    if(s_d <= e_d){// compare date
                        return true;
                    }else{
                        return false;
                    }//end compare date
                }
                return true;
            }else{
                return false;
            }// end compare month
        }    
        return true;
    }else{
        return false
    }// end compare year
            
}
/*
--------------------------------------------------------
	Function name: checkCardType
	Description  : This function is to check for user input their card type and card number 
	Parameters	 :
					frmName		: form name
					nCardNum	: field name of car number
					nCardType	: field name of car type
					nMonthExp	: field name of month expire
					nYearExp	: field name of year expire
	Output		 : none
	Return 		 :  true, false.						
--------------------------------------------------------	
*/
function checkCardType(frmName,nCardNum,nCardType,nMonthExp,nYearExp){
	//var f = document.frmCreditCard;
	var CardNum = eval("document."+frmName+"."+nCardNum);
	var MonthExp = eval("document."+frmName+"."+nMonthExp);
	var YearExp = eval("document."+frmName+"."+nYearExp);
	var CardType = eval("document."+frmName+"."+nCardType);
	
	var date = new Date();
	var month = date.getMonth();
	var year = date.getYear();
	
	if(navigator.appName == "Microsoft Internet Explorer")
	{
		if(year < 100) year = parseInt(year) + 1900;
	}
	else
	{
		year = 1900 + parseInt(year);
	}
	
	if((CardNum.value == "") || (parseInt(valcard(frmName,nCardNum,nCardType)) == 0))	{
		alert("Please enter a valid CardNumber");
		CardNum.focus();
		CardNum.select();
		return false;
	}
	if(parseFloat(MonthExp.options[MonthExp.selectedIndex].value) == 0){
		alert("Please select a expiry month");
		MonthExp.focus();
		return false;
	}
	if(parseFloat(YearExp.options[YearExp.selectedIndex].value) == 0)	{
		alert("Please select a expiry year");
		YearExp.focus();
		return false;
	}
	if((parseFloat(YearExp.options[YearExp.selectedIndex].value) < year)){
		alert("Card expiry year must be greater than current date!");
		YearExp.focus();
		return false;
	}
	if((parseFloat(YearExp.options[YearExp.selectedIndex].value) == year) && (parseFloat(MonthExp.options[MonthExp.selectedIndex].value) < parseInt(month+1))){
		alert("Card expiry month must be greater than current date!");
		MonthExp.focus();
		return false;
	}
	return true;
}
/*
--------------------------------------------------------
	Function name: valcard
	Description  : This function is to validate card number.
	Parameters	 : 
					
	Output		 : none
	Return 		 : 
--------------------------------------------------------	
*/
function valcard(frmName,nCardNum,nCardType)
{	
	//var f = document.frmCreditCard;
	var CardNum = eval("document."+frmName+"."+nCardNum);
	var Type = eval("document."+frmName+"."+nCardType)
	var cardNumber,cardType,Checksum,Flag,Counter,PartNumber,Number;
	
	cardType= Type.options[Type.selectedIndex].value;
		
	cardNumber=trim(CardNum.value);
	var length = cardNumber.length;

	if( length == 0 )
		return(0);				

	var validate=/(^\d+$)/
	if (validate.test(cardNumber)==false)
		 return(0);

	if (cardType == 3){	
			if( length != 15 ) {
				return(0);
			}
			var prefix = parseInt( cardNumber.substring(0,2));
			if( prefix != 34 && prefix != 37 ) {
				return(0);
			}
	}
	else if (cardType == 6){
			if( length != 16 ) {
				return(0);
			}
			var prefix = parseInt( cardNumber.substring(0,4));
			if( prefix != 6011 ) {
				return(0);
			}
	}
	else if (cardType == 5){
			if( length != 16 ) {
				return(0);
			}
			var prefix = parseInt( cardNumber.substring(0,2));
			if( prefix < 51 || prefix > 55) {
				return(0);
			}
	}
	else if (cardType == 4){
			if( length != 16 && length != 13 ) {
				return(0);
			}
			var prefix = parseInt( cardNumber.substring(0,1));
			if( prefix != 4 ) {
				return(0);
			}
	}

	Counter=length;
	Checksum=0;
	Number=0;
	PartNumber='';
	Flag=0;
	while(Counter > 0) {		
		PartNumber = cardNumber.charAt(Counter-1);
		Number = parseInt(PartNumber);
		if (Flag) {
			Number*=2;
			if (Number >= 10) Number-=9;
		}
		Checksum +=	Number;
		Flag=!(Flag)
		Counter = Counter -1;
	}
	if (Checksum%10 == 0)
		return(1); 
	else
		return(0);
		
}
/*
--------------------------------------------------------
	Function name: trimLeft
	Description  : Remove all spaces at the beginning of a string
	Parameters	 :
					+ str: a string.
	Output		 : none
	Return 		 :  A string						
--------------------------------------------------------	
*/
function trimLeft(str)
{
 var i;
 i=0;
 var n;
 n = str.length;
 while((i<n)&&(str.charAt(i)==' ')) i++;
	str = str.substring(i);
 return(str);
} 
/*
--------------------------------------------------------
	Function name: trimRight
	Description  : Remove all spaces at the end of a string.
	Parameters	 :
					+ str: a string.
	Output		 : none
					
	Return 		 :  A string						
--------------------------------------------------------	
*/
function trimRight(str)
{
 var n;
 n = str.length;
 var i;
 i = str.length-1;
 while((i>=0)&&(s.charAt(i)==' ')) i--;
	str = str.substring(0,i+1);
 return(str);
}
/*
--------------------------------------------------------
	Function name: trim
	Description  : Remove all leading and trailing spaces in a string.
	Parameters	 :
				 + str: a string.
	Output		 : none
	Return 		 : A string
--------------------------------------------------------	
*/
function trim(str)
{
 s = trimLeft(str);
 s = trimRight(str);
 return(s);
} 
/*
--------------------------------------------------------
	Function name: isDigit
	Description  : Check if a character is a digit or not.
	Parameters	 :
				 + s: a string.
	Output		 : none
	Return 		 :
					+True  : Is a digit.
					+False : Is not a digit.
--------------------------------------------------------
*/
function isDigit(c)
{
if((c=='0')||(c=='1')||(c=='2')||(c=='3')||(c=='4')||(c=='5')||(c=='6')||(c=='7')||(c=='8')||(c=='9'))
	return true;
else
	return false;
} 
/*
--------------------------------------------------------
	Function name: isPosInt
	Description  : check if a string is a valid positive integer.
	Parameters	 :
				 + s: a string.
	Output		 : none
	Return 		 :
					+True  : Int is valid.
					+False : Int is invalid.
--------------------------------------------------------	
*/
function isPosInt(s)
{
 var n;
 n = s.length
 if(n==0) return false;
 for(i=0;i<n;i++)
	if(!isDigit(s.charAt(i))) return false;
 return true;
}
/*
--------------------------------------------------------
	Function name: checkInteger
	Description  : check if is integer
	Parameters	 :
				 + obj_val: is a value
	Output		 : none
	Return 		 :
					+True  : is integer.
					+False : is not integer.
--------------------------------------------------------	
*/
function checkInteger(obj_val)
{
	var number_format = "0123456789";
	for (var i = 0; i < obj_val.length; i++)
	{
		check_char = number_format.indexOf(obj_val.charAt(i))
		if (check_char < 0)
			return false;
	}
	return true;
}
/*
--------------------------------------------------------
	Function name: checkNumberRange
	Description  : check number range
	Parameters	 :
				 
	Output		 : none
	Return 		 :
					+True  : 
					+False : 
--------------------------------------------------------	
*/
function checkNumberRange(object_value, min_value, max_value)
{
// check minimum
	if (min_value != null)
	{
		if (object_value < min_value)
			return false;
	}

// check maximum
	if (max_value != null)
	{
		if (object_value > max_value)
			return false;
	}
	
	//All tests passed, so...
	return true;
}
