/*

This function checks wheather the date given by dd mm yyyy is a valid date and
returns appropriate status

Input Parameters
	
	dd		:	Date of the month ( Numeric value )
	
	mm		:	Month ( Numeric value )
	
	yyyy	:	Year ( Numeric value )
				
	
Output Parameters

	status	:	Boolean value indicating the Validity of the Date
	
					True if valid
					
					false if not valid

Author		:	Karunakaran

Name of Module	:	Customer Administration ( Test Module )

Start Date	:	18/05/2000

End Date	:	19/05/2000

Revision	:	2
*/
function checkValidDate(dd,mm,yyyy)
{
	var upperLimit;
	
	if(mm<1 || mm>12)
		return false;
	
	if (mm==2)
	{
		if((yyyy % 4) ==0)
			upperLimit=29;
		else
			upperLimit=28;
	}
	else if (mm>=1 && mm<=7)
	{
		if((mm%2) == 0)
			upperLimit=30;
		else
			upperLimit=31;
	}
	else if (mm>7 && mm<=12)
	{
		if((mm%2) == 0)
			upperLimit=31;
		else
			upperLimit=30;
	}
	
	if (dd > upperLimit || dd <1) 
		return false;
	else
		return true;
}

/*

This function checks for the presence of given characters in the given string and
returns appropriate status

Input Parameters

	str	:Input string in which to search for characters ( Type : String )
	
	chrs	:	String of characters which are to be checked ( Type :String )
	
Output Parameters

	status	:	Boolean value indicating the Presence of Character
	
					True when any one is Present
					
					false when Nothing is Present

Author		:	Karunakaran

Start Date	:	18/05/2000

End Date	:	18/05/2000

Revision	:	1

*/

function checkChars(str,chrs)
{
	var count;
	for(count=0;count<chrs.length;count++)
	{
		if(str.indexOf(chrs.charAt(count)) != -1)
			return true;
	}
	return false;
}
	

function checkSpace(txtField,errMsg)
{
	var strField,i;
	strField=txtField.value;
	if(isSpace(strField))
	{
		alert(errMsg);
		txtField.focus();
		return false
	}
	else 
		return true;
}	

function isSpace(strField)
{
	for(i=0;i<strField.length;i++)
	{
		if(strField.charAt(i) != ' ')
		{
			return false
		}
	}
	return true
}

function checkMail(txtEmail,errMsg)
{
    var strEmail,tempStr,countI,countJ;
	strEmail="";
	tempStr=txtEmail.value;
	
	for(countI=0;countI<tempStr.length;countI++)
	{
		if(tempStr.charAt(countI)==' ') 
			continue;
		else
			break
	}
	
	for(countJ=tempStr.length-1;countJ>=0;countJ--)
	{
		if(tempStr.charAt(countJ)==' ') 
			continue;
		else
			break;
	}
	strEmail=tempStr.substring(countI,countJ+1);
	
	var SPLCHARS;
	SPLCHARS="'~!#$%^*()`:\"<>?,/|\\"
	if (checkChars(txtEmail.value,SPLCHARS) == true || countChar(txtEmail.value,"@") >1)
	{
		alert(errMsg);
		txtEmail.focus();
		return false;
	}
	

	if(strEmail.indexOf("@") == -1 || strEmail.indexOf(".") == -1 || strEmail.indexOf(" ") != -1 || strEmail.indexOf("@") > strEmail.lastIndexOf(".") || strEmail.lastIndexOf(".")==strEmail.length-1) 
	{
		alert(errMsg);
		txtEmail.focus();
		return false;
	}
	return true;
}

function checkName(txtName,errMsg)
{
	var SPLCHARS;
	SPLCHARS="'~!@#$%^&*()`1234567890:\"<>?,/|\\"
	
	if (checkChars(txtName.value,SPLCHARS) == true || isSpace(txtName.value))
	{
		alert(errMsg + "\nIt should not contain " + SPLCHARS);
		txtName.focus();
		return false;
	}
	return true;
}
		
function checkDate(txtDate,errMsg)
{
	var dtField,i,cnt;
	var dtArray;
	cnt=0;
	dtField=txtDate.value;
	dtArray=dtField.split("/");
	//alert(isNaN(dtArray[0]))
	//for(i=0;i<dtArray.length;i++)
	//alert(dtArray[i])
	if(isNaN(dtArray[0]) || isNaN(dtArray[1]) || isNaN(dtArray[2]) || (dtArray.length != 3)|| (dtField.length > 10) ||(dtArray[2]<1900) ||(dtArray[2]>2100)|| !checkValidDate(dtArray[0],dtArray[1],dtArray[2]))
	{
		//Invalid date
		alert(errMsg);
		txtDate.focus();
		return false;
	}
	return true;
}

function countChar(str,chr)
{
	var pos,cnt;
	cnt=0;
	while((pos=str.indexOf(chr)) != -1)
	{
		cnt++;
		str=str.substring(pos+1);
	}
	return cnt;
}

function checkLength(txtField,length,errMsg)
{
	if(txtField.value.length>length)
	{
		alert(errMsg);
		txtField.focus();
		return false;
	}
	return true;
}



function checkPresence(txtField,errMsg)
{
    var strField,i;	
	strField=txtField.value;
	if(trim(strField) == "")
	{
		alert(errMsg);
		txtField.focus();
		return false;
	}
	else 
		return true;
}	

function checkAlpha(txtField,errMsg)
{
	rgExp=/[^A-Za-z\s]/g
	if(!checkExpr(txtField.value,rgExp))
	{
	 alert(errMsg);
	 txtField.focus(); 	 
	 return false
	}
	else
	 return true;
}
function checkAlphaNumeric(txtField,errMsg)
{
	rgExp=/[^A-Za-z0-9]/g
	if(!checkExpr(txtField.value,rgExp))
	{
	 alert(errMsg);
	 txtField.focus(); 	 
	 return false
	}
	else
	 return true;
}
function checkAlphaNumericFull(txtField,errMsg)
{
	rgExp=/[^A-Za-z0-9\-]/g
	if(!checkExpr(txtField.value,rgExp))
	{
	 alert(errMsg);
	 txtField.focus(); 	 
	 return false
	}
	else
	 return true;
}

function checkUserName(txtField,errMsg)
{
	rgExp=/[^A-Za-z0-9_]/g
	if(!checkExpr(txtField.value,rgExp))
	{
	 alert(errMsg);
	 txtField.focus(); 	 
	 return false
	}
	else
	 return true;
}


// Evaluates the expression on the string "str" and returns 
// true if the validation passes
// false if it fails

function checkExpr(str,rgExp)
{
	var tmpStr
	tmpStr=str.replace(rgExp,"")
	if(str.length > tmpStr.length)
	 return false;
	else
	 return true;
}

function checkDecimalNumber(txtField,errMsg)
	{		
		rgExp=/[^0-9.]/g
		
		if(!checkExpr(txtField.value,rgExp))
		{
		 	alert(errMsg);
		 	txtField.focus(); 	 
		 	return false;
		}
		else
		{
			return true;
		}
	}
	


function checkDecimal(txtField,errMsg)
	{		
		rgExp=/[^0-9.]/g
		fieldLength	=  fieldValue.length; 
		if(!checkExpr(txtField.value,rgExp))
		{
		 	alert(errMsg);
		 	txtField.focus(); 	 
		 	return false;
		}
		else
		{
			return true;
		}
	}





	/*fieldValue   =  arguments[0].value;
	fieldLength	=  fieldValue.length; 
    if (event.keyCode != 8 && (event.keyCode < 46 || event.keyCode > 57) || event.keyCode == 47)     
        {
               event.returnValue = false;
        }
    else if (event.keyCode == 46) 
        {   
  	        for( var i=0; i<fieldLength; i++ ) 
		         { 
			        if (fieldValue.charAt( i ) == "." ) 
				      { 
						event.returnValue = false;
						break;
					  }
				}
         }
    else
        { 
            var pos=fieldValue.indexOf(".");
			var strlen =fieldValue.substr(pos+1,3);
			if (strlen.length > 1 && pos != -1)
			  {
			    event.returnValue = false;
			  }
			else
			  {
			     event.returnValue = true ;  
             }
        }*/      
// Evaluates whether the number entered is Negative decimal  or decimal number
// true if the validation passes
// false if it fails

function checkNegativeNumber(txtField,errMsg)
	{		
		rgExp=/[^-.0-9]/g
		if(!checkExpr(txtField.value,rgExp))
		{
		 	alert(errMsg);
		 	txtField.focus(); 	 
		 	return false;
		}
		else
		{
			return true;
		}
	}


function checkNumber(txtField,errMsg)
{
	rgExp=/\D/g
	if(!checkExpr(txtField.value,rgExp))
	{
	 alert(errMsg);
	 txtField.value=""
	 txtField.focus(); 	 
	 return false
	}
	else
	 return true;
}
function checkNumberval(txtField,errMsg)
{	rgExp=/\D/g
	var SPLCHARS;
	SPLCHARS="'~!#$%^&*()`:\"<>?,/|\\ "
	if ((checkChars(txtField.value,SPLCHARS) == true) &&	(!checkExpr(txtField.value,rgExp)))
	{
	 alert(errMsg);
	 txtField.focus(); 	 
	 return false
	}
	else
	 return true;
}

/* The following function can be used to test whether the given field is empty or if not emptry checks whether
it contains numbers 
  1) if the text field is empty and it returns true
  2) if the textfield has any content, then it checks whether it is number 
        i) if not a number , displayes the message.

Author:  KumaRaveL .A
Date:  18-04-2003

function hrsnmins(txtField,errMsg)
{
	var strField;
	strField=txtField.value;
	if(trim(strField)>24)
	{
		alert(errMsg);
		txtField.focus();
		return false;
	}
	else
	{
		return false;
	}
}*/

function checkNullorContentIsOnlyNumber(txtField,errMsg)
{
    var strField,i;	
	strField=txtField.value;
	if(trim(strField) == "")
	{
		return true;
	}
	else 
	{
		rgExp=/\D/g
		if(!checkExpr(txtField.value,rgExp))
		{
		 alert(errMsg);
		 txtField.focus(); 	 
		 return false;
		}
		else
			 return true;
	
	}
}

/*
 The following function can be used to test whether the textfield is empty
  1) if  the text field is empty then it returns true
  2) else it returns false		
Author:  KumaRaveL .A
Date:  24-05-2003
*/

function checkEmpty(txtField)
{
    var strField,i;	
	strField=txtField.value;
	if(trim(strField) == "")
		return true;
	else 
		return false;
}	

/*
 The following function can be used to test whether the first date is greater than the second Date
  1) if the date1 is greater than date2 then the function returns true
  2) else it returns false		
Author:  KumaRaveL .A
Date:  24-05-2003
*/
/********** function added by vijay ***********************/
function checkMinute(txtField,errMsg)
{	
	var minvall;
	minval1=txtField.value;
	if (minval1<=0 || minval1>59)
	{
		alert(errMsg)
		txtField.focus()
		txtField.value=""
		return false;
	}
	else
	return true;
}
function checkHour(txtField,errMsg)
{
	var txtval;
	txtval=txtField.value
	if (txtval<=0 || txtval>=24)
	{
		alert(errMsg)
		txtField.value=""
		txtField.focus()
		return false;
	}
	else
	return true;
}


function checkDate1GreaterthanDate2(txtD1,txtD2,errMsg)
{
value1=txtD1.value
arr1=value1.split("/")
value2=txtD2.value
arr2=value2.split("/")
year1=arr1[2]
year2=arr2[2]
month1=arr1[1]
month2=arr2[1]
date1=arr1[0]
date2=arr2[0]

			if(parseInt(arr1[2])<parseInt(arr2[2]))
			{
				return true;
			}
			else if(parseInt(arr1[2])==parseInt(arr2[2]))
			{
				if(parseInt(arr1[1])<parseInt(arr2[1]))
				{
					return true
				
				}
				else if(parseInt(arr1[1])==parseInt(arr2[1]))
				{
					if(parseInt(arr1[0])<parseInt(arr2[0]))
					{
						return true
					}
					else
					{
						alert(errMsg)
						//txtD2.value=""
						//txtD1.value=""
						txtD1.focus();
						return false;
					}

				}
				else
				{
					alert(errMsg)
					//txtD2.value=""
					//txtD1.value=""
					txtD1.focus();
					return false;

				}
			}
			else
			{
				alert(errMsg)
				//txtD2.value=""
				//txtD1.value=""
				txtD1.focus();
				return false;
			}
return true;
}

/**********************************************************/
/************* comment set by  vijay date 27/02/2004


function checkDate1GreaterthanDate2(txtD1,txtD2,errMsg)
{
	var	dtD1=txtD1.value;
		arrD1=dtD1.split("/");
	var dtD2=txtD2.value;
		arrD2=dtD2.split("/");	
		
	var year1=parseInt(arrD1[2]);
	var year2=parseInt(arrD2[2]);

	var month1=parseInt(arrD1[1]);
	var month2=parseInt(arrD2[1]);

	var day1=parseInt(arrD1[0]);
	var day2=parseInt(arrD2[0]);
	
	
		if (year1 <= year2)
		{
			alert(errMsg);
			txtD2.value=""
			txtD1.value=""
			txtD2.focus();
			return false;	
		}
		else
		{
			if (year1 > year2)
			{}
			else if (year1 == year2)
			{						
				if (month1 > month2)
				{}
				else if (month1<= month2)
				{
					alert(errMsg);
					txtD2.value=""
					txtD1.value=""
					txtD1.focus();
					return false;
				}
				else if (month1== month2)
				{
					if (day1>day2)
					{}
					else if (day1<=day2)
					{								
						alert(errMsg);
						txtD2.value=""
						txtD1.value=""
						txtD1.focus();
						return false;
					}
					
				}
			}
		return true;
		}
	}
************* comment set by vijay ended bere */

/*
 The following function can be used to test whether the entered date is later than today
  1) if  the entered date is later than today it returs true
  2) else it returns false		
Author:  KumaRaveL .A
Date:  24-05-2003
*/
function checkDate1GreaterThanToday(txtD1,errMsg)
{
	
	datV1=txtD1.value;
	dtV1=datV1.split("/");
	var obj=new Date();
	
	var year=parseInt(dtV1[2]);
	var month=parseInt(dtV1[1]);
	var day=parseInt(dtV1[0]);
	
	var yearToday=parseInt(obj.getYear());
	var monthToday=parseInt(obj.getMonth());
	var dayToday=parseInt(obj.getDate());
	
		if (dtV1[2] < yearToday)
		{
			alert(errMsg);
			txtD1.focus();
			return false;	
		}
		else
		{
			if (dtV1[2] > yearToday)
			{			
			}
			else if (dtV1[2] ==yearToday)
			{						
				if (dtV1[1]>(monthToday+1))
				{				
				}
				else if (dtV1[1]<(monthToday+1))
				{
					alert(errMsg);
					txtD1.focus();
					return false;
				}
				else if (dtV1[1]==(monthToday+1))
				{
					if (dtV1[0]>(dayToday))
					{				
					}
					else if (dtV1[0]<=(dayToday))
					{								
						alert(errMsg);
						txtD1.focus();
						return false;
					}
				}
			}
		}	
	return true;
}

/*
 The following function can be used to test whether the entered date is later than today
  1) if  the entered date is later than today it returs true
  2) else it returns false		
Author:  KumaRaveL .A
Date:  24-05-2003
*/
function checkDate1GEToday(txtD1,errMsg)
{
	
	datV1=txtD1.value;
	dtV1=datV1.split("/");
	var obj=new Date();
	
	var year=parseInt(dtV1[2]);
	var month=parseInt(dtV1[1]);
	var day=parseInt(dtV1[0]);
	
	var yearToday=parseInt(obj.getYear());
	var monthToday=parseInt(obj.getMonth());
	var dayToday=parseInt(obj.getDate());
	
		if (dtV1[2] < yearToday)
		{
			alert(errMsg);
			txtD1.focus();
			return false;	
		}
		else
		{
			if (year > yearToday)
			{			
			}
			else if (year==yearToday)
			{						
				if (month>(monthToday+1))
				{				
				}
				else if (month<(monthToday+1))
				{
					alert(errMsg);
					txtD1.focus();
					return false;
				}
				else if (month==(monthToday+1))
				{
					if (day>=(dayToday))
					{				
					}
					else if (day<(dayToday))
					{								
						alert(errMsg);
						txtD1.focus();
						return false;
					}
				}
			}
		}	
	return true;
}


/*
 The following function can be used to test whether the textfield contains the value 0
  1) if  the text field contains 0,it displays the given message and returns false 
  2) else it returns true
Author:  KumaRaveL .A
Date:  28-05-2003
*/

function checkContentIsZero(txtField,errMsg)
{
    var strField,i;	
	strField=txtField.value;
	if(parseFloat(trim(strField)) == 0)
	{
		alert(errMsg);
		txtField.focus();
		return false;
	}
	else 
		return true;
}	


function checkNum()
		{
		  rgExp=/\D/g
		  if((!checkExpr(document.frmTestText.txt1.value,rgExp))&&(!checkExpr(document.frmTestText.txt2.value,rgExp)))
	 	    {   
			   return false 
			}
	      else
		    {
		       return true;
	        }  
		 }


/* function to check euro cents value */
function checkEuroCurrency(txtField,errMsg)
	{		

		rgExp=/^([0-9]+)(\,{1})([0-9]{2})$/
		if(!rgExp.test(txtField.value))
		{
		 	alert(errMsg);
		 	txtField.focus(); 	 
		 	return false;
		}
		else
		{
			return true;
		}
	}


function checkYear(txtField,errMsg)
{
var d
d=new Date()
if(txtField.value<=d.getFullYear())
	return true;
else
	{
		alert(errMsg)
		txtField.focus()
		return false;
	}
}

function checkVal(txtField)
{
	var textField1
	textField1=txtField
	
	if(trim(textField1.value)=="")
		return false;
	else
	{
		textField1.focus()
		return true;
	}
}
//Function for entering the date in the Text Box

//Ascii Values
// Value for 'BackSpace' =  8
// Value for 'Tab'       =  9
// Value for 'Shift'     = 14 
// Value for 'CapsLock'  = 20
// Value for 'SpaceBar'  = 32
// Value for ' - '       = 45
// Value for '.'         = 46	
// Value for ' / '       = 47

/* ===========================================
   Text Box Validations
   Event : KeyDown = txtOnly()
   This Function accepts only Characters 
   Also allow 'Backspace' , 'Tab' , 'Shift' , 'SpaceBar','CapsLock' and 'Delete'
============================================= */

function txtOnly()
   {
	   if (event.keyCode > 64 && event.keyCode < 91)    
          {
             event.returnValue = true;
          }
       else if ((event.keyCode == 20) || (event.keyCode == 8) || (event.keyCode == 14) || (event.keyCode == 32) || (event.keyCode == 9) || (event.keyCode == 46) || (event.keyCode == 37) ||(event.keyCode == 39))
          {
             return true;
          }
          
       else
          {
             event.returnValue = false;
          }    
   }    

/* ===========================================
   Text Box Validations
   Event : KeyPress = txtDecimal(this)
   This Function accepts only Integer/Decimal Values 
   Also allow 'Backspace', 'Tab', singleDot and only two Digit after singledot
============================================= */
function txtDecimal()
  {
   	fieldValue   =  arguments[0].value;
	fieldLength	=  fieldValue.length; 
    if (event.keyCode != 8 && (event.keyCode < 46 || event.keyCode > 57) || event.keyCode == 47)     
        {
               event.returnValue = false;
        }
    else if (event.keyCode == 46) 
        {   
  	        for( var i=0; i<fieldLength; i++ ) 
		         { 
			        if (fieldValue.charAt( i ) == "." ) 
				      { 
						event.returnValue = false;
						break;
					  }
				}
         }
    else
        { 
            var pos=fieldValue.indexOf(".");
			var strlen =fieldValue.substr(pos+1,3);
			if (strlen.length > 1 && pos != -1)
			  {
			    event.returnValue = false;
			  }
			else
			  {
			     event.returnValue = true ;  
             }
        }      
}    


/* ===========================================
   Text Box Validations 
   Event : KeyPress = txtOneDecimal(this)
   This Function accepts only Integer/Decimal Values Less then 10
   Also allow 'Backspace', 'Tab', singleDot and only two Digit after singledot
============================================= */
function txtOneDecimal()
	{
   		fieldValue  =  arguments[0].value;
		fieldLength	=  fieldValue.length; 
    
        if (event.keyCode != 8 &&(event.keyCode < 46 || event.keyCode > 57) || event.keyCode == 47)    
			{
				event.returnValue = false;
			}
		else if (fieldLength == 0 && event.keyCode == 46)
			{
				event.returnValue = false;
			}	
	    else if (fieldLength > 0 && fieldLength < 2)
			{
				if (event.keyCode > 46 && event.keyCode < 57)
					{
						event.returnValue = false;
					} 
			}	
		else if (event.keyCode == 46)
			{   
  				for( var i=0; i<fieldLength; i++ ) 
  					{ 
						if (fieldValue.charAt( i ) == "." ) 
							{ 
								event.returnValue = false;
								break;	
							}
					}
			}            
		else 
			{	 
				var pos=fieldValue.indexOf(".");
				var strlen =fieldValue.substr(pos+1,3);
				if (strlen.length > 1 && pos != -1)
					{
						event.returnValue = false; 	
					}
				else 
					{
						event.returnValue = true ;  
					}
			}      
	}

/*======================================================
 This Function is to Restrict the Mouse Right Button
 Event : onClick = click();
 Specify this function in the Body tag.
========================================================*/

function clicks() 
	{
		if (event.button==2) 
			{
				alert('Not Authorised!');
			}
	}
	//	document.onmousedown=clicks	
		
   
function datetxt()
   {
       if (event.keyCode != 8 && (event.keyCode < 47 || event.keyCode > 57))
		  {
            event.returnValue=false;
          }
   }


function numbertxt()
{
   if (event.keyCode != 8 && (event.keyCode < 48 || event.keyCode >57))     
      {
        event.returnValue = false;
      }
}   


/* numbertxt12() function can be used in Keypress event */
  
function numbertxt12()
   {
   if (event.keyCode != 8 && (event.keyCode < 46 || event.keyCode >57))     
      {
        event.returnValue = false;
      }
   }       

function txtAlphaNum()
{
	
}

function Money()
		{
		   var NFlag = true;
		   if ((event.keyCode >= 47  && event.keyCode <= 57) || (event.keyCode >= 96  && event.keyCode <=105) )
		      {
				if(event.shiftKey==false)
					{			  	
						NFlag = true;	
					}
				else
					{
						NFlag = false;
					}		
		      }
		   else if (event.keyCode == 190 || event.keyCode == 8 || event.keyCode == 9 || event.keyCode == 46) 	  
			  {			  	
					NFlag = true;	
		      }	
		   else if (event.keyCode >= 36 && event.keyCode <= 40) 	  
			  {			  	
						NFlag = true;	
		      }	
		   else
		      {
		  		NFlag = false;
			  } 	  
			event.returnValue=NFlag;  
		}		
//---------------------------------------------------------      
//THIS FUNCTION IS TO CHECK ALL OR CLEAR ALL THE CHECKBOXES
//---------------------------------------------------------

function ToggleAll()
     {
           if (arguments[0].checked) 
             {
              if (arguments.length == 3) 
                 {  
	               CheckAll(arguments[1],arguments[2]);
                 }
              else
                 {
                   CheckAll(arguments[1]);
                 }   
             }
           else
              {
                if (arguments.length == 3) 
                 {  
	               ClearAll(arguments[1],arguments[2]);
                 }
                else
                 {
                   ClearAll(arguments[1]);
                 }      
              }     
    }

function CheckAll()
    {
           var ml = document.all(arguments[0]);
           var len = ml.elements.length;
           for (var i = 0; i < len; i++)
               {
	             var d = ml.elements[i];
	             if (arguments.length == 2)
	               {
	                 var strN = arguments[1].substring(0,arguments[1].length-1);
	                 if (d.name == strN && d.type == "checkbox")
                       {
	                     d.checked = true;
	                   }
                   }
                 else
                   {  
                     if (d.type == "checkbox")
                       {
                         d.checked = true;
                       }
                   } 
               } 
    }          

function ClearAll()
    {
          var ml = document.all(arguments[0]);
          var len = ml.elements.length;
          for (var i = 0; i < len; i++)
             {
	           var d = ml.elements[i];
	           if (arguments.length == 2)
	             {
	               var strN = arguments[1].substring(0,arguments[1].length-1);
	               if ( d.name == strN && d.type == "checkbox")
                      {
	                    d.checked = false;
	                  }
                 }
               else
                 {
                    if (d.type == "checkbox")
                      {
                        d.checked = false;
                      }     
                 }
             }
    }         

function Toggle(e,frmstr,comstr)
    {
	if (e.checked)
         {
          var m1 = document.all(frmstr)
	          var m2 = object(document.all(comstr))
	          m1.m2.checked = AllChecked(frmstr);
         }
	else 
         {
           var m1=document.all(frmstr); 
           var m2 = document.all(comstr);          
	       m1.m2.checked = false;
	     }
   }

function AllChecked(frmstr)
    {
	ml = document.all(frmstr);
	len = ml.elements.length;
	for(var i = 0 ; i < len ; i++)
                        {
	            if (ml.elements[i].type == "checkbox" && !ml.elements[i].checked) 
                                    {
		  return false;
	                }
	   }
                   return true;
    }


function UncheckAll()
    {
      var strElement = document.all(arguments[1]) //Parameters("CheckBox","frmName"
      var strFlag = "T"

      for (i=0;i<=strElement.elements.length - 1;i++)
         {
            if (strElement.elements[i].type == "checkbox" && strElement.elements[i].name == arguments[0].name)
	   	      {
		         if (!strElement.elements[i].checked)
		           {
		             for (j=0; j <=strElement.elements.length-1; j++)
		                 {
		                   if (strElement.elements[j].name == arguments[0].name+"1")
		                     {
		                       strElement.elements[j].checked = false
		                     }
		                 }         
		              break;
		           }
		         else
                   {
		             for (j=0; j <=strElement.elements.length-1; j++)
		                {
		                   if (strElement.elements[j].name == arguments[0].name+"1")
		                     {
		                       strElement.elements[j].checked = true
		                     }
		                }         
   	               }  
	            }
           }
      }



function checkAll(chk,frmName)
{
var nam=document.all(frmName);
for (var i=0;i < nam.elements.length;i++)
//  for (var i=0;i < document.addtInfo.elements.length;i++)
	{
	    var e = nam.elements[i];
	//	var e = document.addtInfo.elements[i];
		if (e.type == "checkbox")
		{
			e.checked = chk.checked;
		}
	}
}
 
function checkingAll(vale,chka,frmName)
{
var nam=document.all(frmName);
var chk=chka.substring(0 ,chka.length -1);
for (var i=0;i < nam.elements.length;i++)
//  for (var i=0;i < document.addtInfo.elements.length;i++)
	{
	    var e = nam.elements[i];
	//	var e = document.addtInfo.elements[i];
	
		if (e.type == "checkbox" && e.name == chk)
		{
		  	e.checked = vale .checked;
		}
	}
}

function uncheck(vales,chk,frmName)
  {
 
   var nam=document.all(frmName);
   var e= nam.elements[0];
   if (e.type  == "checkbox" && e.name == chk)
     {
      if ((chk + "1").checked)
         {
          (chk + "1").checked = false ;
         }
      else
         {
         (chk + "1").checked = true ;    
         }
     }
  }    
  
    function propercase()
  { 
	var str = arguments[0].value
	strlen = str.length 
	jj = str.substring(0,1).toUpperCase()
	jj = jj + str.substring(1,strlen).toLowerCase() 
	
	for (i = 1; i <= strlen; i++) 
 	{ 
		if (jj.charAt(i)==" ")
		 { 
			lefthalf = jj.substring(0,i+1) 
			righthalf = jj.substring(i+1,strlen) 
			righthalf =righthalf.substring(0,1).toUpperCase()+righthalf.substring(1,strlen) 
			jj=lefthalf+righthalf 
		} 
	} 
	arguments[0].value = jj;
	
 }
 
 function Ucase()
 {
 var str = arguments[0].value
  arguments[0].value = str.toUpperCase()
 }
 

//trim function

String.prototype.trim = function() 
{
  return( this.replace(/^\s*([\s\S]*\S+)\s*$|^\s*$/,'$1') ); 
}


//Functions used for FOB Module
function CheckTextValues(ControlName,LoopCount,AlertMsg)
{
	for(i = 0 ; i < LoopCount; i++)
	{
		document.getElementsByName(ControlName).item(i).setAttribute("disabled",false); 
		if(document.getElementsByName(ControlName).item(i).value == "")
		{
			alert(AlertMsg);
			document.getElementsByName(ControlName).item(i).focus();	
			return false;
		}
	}
	return true;
}
			
	
function CheckClaimRates(ChkBoxName,TxtName,AlertMsg)
{
	var TxtLen = "";
	var ContainerCount	=	document.getElementsByName('ContainerCount').item(0).value;
	var ChkCount	=	document.getElementsByName(ChkBoxName).length ;  
	var x;
	x = 0;
	TxtLen	=	document.getElementsByName(TxtName).length;  
	for(i=0;i<ChkCount;i++)
	{
		if (document.getElementsByName(ChkBoxName).item(i).checked == true)
		{
			for (j=0;j<ContainerCount;j++)
			{	
				if (document.getElementsByName(TxtName).item(i+j+x).value == "" || document.getElementsByName(TxtName).item(i+j+x).value == "0")
				{
					alert(AlertMsg);
					document.getElementsByName(TxtName).item(i+j+x).focus();
					return false;
				} 
			}
		}
		if (ContainerCount != 1) 	x = x+1;
	}
	return true;
}


function enterFocus(obj)
{
	if (event.keyCode==13)
	{
		obj.focus();
	}
}



function ValidateEMail(objName)
{
	var sobjValue;
	var iobjLength;
	sobjValue=objName.value;
	iobjLength=sobjValue.length;
	iFposition=sobjValue.indexOf("@");
	iSposition=sobjValue.indexOf(".");
	iTmp=sobjValue.lastIndexOf(".");	
	iPosition=sobjValue.indexOf(",");
	iPos=sobjValue.indexOf(";");
	if (iobjLength!=0)
	{
		if ((iFposition == -1)||(iSposition == -1))
		{
			alert("Please enter the E-Mail address in the proper format")
			eval(objName.focus());
			return false;
		}
		else if(sobjValue.charAt(0) == "@" || sobjValue.charAt(0)==".")
		{
			alert("Please enter the E-Mail address in the proper format")
			eval(objName.focus());
			return false;				
		}
		else if(sobjValue.charAt(iobjLength) == "@" || sobjValue.charAt(iobjLength)==".")
		{
			alert("Please enter the E-Mail address in the proper format");
			eval(objName.focus());
			return false;				
		}	
		else if((sobjValue.indexOf("@",(iFposition+1)))!=-1)
		{	
			alert("Please enter the E-Mail address in the proper format")
			eval(objName.focus());
			return false;
		}
		else if ((iobjLength-(iTmp+1)<2)||(iobjLength-(iTmp+1)>3))
		{
			alert("Please enter the E-Mail address in the proper format")
			eval(objName.focus());
			return false;
		}
		else if ((iPosition!=-1) || (iPos!=-1))
		{
			alert("Please enter the E-Mail address in the proper format")
			eval(objName.focus());
			return false;
		}
		else
		{
			return true;
		}		
	}		
}



function checkDate1GreaterthanDate2(txtD1,txtD2,errMsg)
{

	var	dtD1=txtD1.value.trim();
		arrD1=dtD1.split(' ');
	var dtD2=txtD2.value.trim();
		arrD2=dtD2.split(' ');	
		
	var year1=parseInt(arrD1[2]);
	var year2=parseInt(arrD2[2]);


	var month1=arrD1[1].substring(0,3);
		
	var month2=arrD2[1].substring(0,3);
	
	var names     = new Array('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
	for(i=0;i<12;i++)
	{
	if(month1==names[i])
	{
	var newmonth1=parseInt(i+1);
	}
	}
	for(i=0;i<12;i++)
	{
	if(month2==names[i])
	{
	var newmonth2=parseInt(i+1);
	}
	}
	var day1=parseInt(arrD1[0]);
	var day2=parseInt(arrD2[0]);
	
	
		if (year1 < year2)
		{
		
			alert(errMsg);
			txtD2.value=""
			txtD1.value=""
			txtD2.focus();
			return false;	
		}
		else
		{
			if (year1 > year2)
			{}
			else if (year1 == year2)
			{						
				if (newmonth1 > newmonth2)
				{}
				else if (newmonth1< newmonth2)
				{
				
					alert(errMsg);
					txtD2.value=""
					txtD1.value=""
					txtD1.focus();
					return false;
				}
				else if (newmonth1== newmonth2)
				{
					if (day1>day2)
					{}
					else if (day1<day2)
					{								
						alert(errMsg);
						txtD2.value=""
						txtD1.value=""
						txtD1.focus();
						return false;
					}
					
				}
			}
		return true;
		}
	}

	function EnableBtn()
		{
			for(var ind_1=0; ind_1 < arguments.length ;  ind_1 ++)
				{
					document.getElementById(arguments[ind_1]).disabled=false;
				}
		}
	function changeRowColorandClass(object1,destColor,FontClass)
		{
			object1.style.backgroundColor = destColor;
			object1.className = FontClass;
		}
		
	function DisableBtn()
		{
			for(var ind_1=0; ind_1 < arguments.length ;  ind_1 ++)
				{
					document.getElementById(arguments[ind_1]).disabled=true;
				}
		}
	function SelectCombo()
		{
			var getId =	document.getElementById(arguments[0]);
			var SelCboIndex = 0;
			var SelIndex = 0;
			
			SelIndex =  BinarySearch('0',getId.length,getId.options,arguments[1]);
			getId.selectedIndex = SelIndex;
		}
	function BinarySearch()
		{
			try
				{
					var lb = Number(arguments[0]);
					var ub = Number(arguments[1]);
					var mid = Math.round(Number(lb + ub)/2);
					var Array1 = arguments[2];
					var SearchText = arguments[3];
					if(lb>ub || lb==ub)
						{
							if(Array1[mid].innerText==SearchText) 	
								{	return Math.round(mid);	}
							else
								{	return 0;			}
						}
					else 
						{
							if(Array1[mid].innerText==SearchText) 	
								{	return Math.round(mid);	}
							else if(Array1[mid].innerText>SearchText)
								{
									lb=lb;			ub = mid;
									return BinarySearch(lb,ub,Array1,SearchText);
								}
							else
								{
									lb = mid;		ub=ub;
									return BinarySearch(lb,ub,Array1,SearchText);
								}
						}	
				}
			catch(e)
				{
					alert("Java Script Error");
				}
		}
		
		
	function HideDivByBtn(divId)
		{
			document.getElementById(divId).className = (document.getElementById(divId).className=="") ? "cmbHide" : "";
			document.activeElement.setAttribute("value", (document.getElementById(divId).className=="") ? "[ Hide ]" : "[ Show ]");
		}
	function converttoInt()
		{
			try{
				if(isNaN(Number(arguments[0].value)))
					{
						arguments[0].value = "0";
					}
				else
					{
						arguments[0].value = Number(arguments[0].value);
					}	
			   }
			catch(e)
				{
					alert(e)
				}
		}
	function AllowNum()
		{
			if(!(event.shiftKey))
				{
				if((!((event.keyCode>=37)&&(event.keyCode<=40))) && (!(event.keyCode>=8 && event.keyCode<=9)) && (!(event.keyCode>=46&&event.keyCode<=58)) && (!(event.keyCode>=96&&event.keyCode<=105)))
					{
						event.returnValue = false;
					}
				}
			else if(event.keyCode>=46&&event.keyCode<=59) 
				{	event.returnValue = false;	}
		}
	function focustxt()
		{
			if(arguments[0]=='true')
				{
					document.activeElement.style.fontWeight =  "bold";
					document.activeElement.style.backgroundColor =  "silver";
				}
			else if(arguments[0].tagName=="LABEL")
				{
					arguments[0].className = (arguments[1]=='over') ? "HLink_BLd" : "HLink";
					arguments[0].parentElement.style.backgroundColor = (arguments[1]=='over') ? "#dcdcdc"   : "#ffffff";
				}
			else if(arguments[0].tagName=="TD")
				{
					arguments[0].className = (arguments[1]=='over') ? "HLink_BLd" : "HLink";
					arguments[0].parentElement.style.backgroundColor = (arguments[1]=='over') ? "#dcdcdc"   : "#ffffff";
				}
			else
				{
					arguments[0].style.fontWeight =  "normal";
					arguments[0].style.backgroundColor =  "white";
				}		
		}
	function fntest()
		{
			alert('test function');
		}
	function validatecontrolsbyname()
		{
			var index = 0;
			var flag = true;
			var optflag = false; optselflag = false;
			for(index = 0 ; index < arguments.length ; index ++ )
				{	
					var ControlArray = document.getElementsByName(arguments[index]);
					var index2=0;
					for(index2=0; index2 < ControlArray.length ; index2++)
						{
							var Control = document.getElementsByName(arguments[index]).item(index2);
							var ControlType = Control.type;
							var ControlName = Control.name;
							var ControlValue = Control.value;
							if(Control.disabled==false)
								{
								switch(ControlType)
									{
									case "text": 
										if(ControlValue == 0 && Control.disabled==false)
												{
												    var strMessage =  ControlName.substring(3);
													if(strMessage.indexOf("_") != -1)
														{
															strMessage = strMessage.replace("_"," ");
														}	
													alert("Please Enter " + strMessage);
													Control.value=""
													Control.focus();
													flag = false;
													return false;
												}	
											break;	
									case "select-one":
											if( (ControlValue == "" ) || (ControlValue == "Nil" ) || (ControlValue == "default" ) || (ControlValue == "Default" ) )
												{
													alert("Please Select " + ControlName.substring(3));
													Control.focus();
													flag = false;
													return false;
												}
											break;	
									case "checkbox":
											optflag=true;
											if(Control.checked==true)
												{
													optselflag = true;
												}
											break;	
									case "radio":
											optflag=true;
											if(Control.checked==true)
												{
													optselflag = true;
												}
									}
								}	
						}
				}		
				if(optflag==true&&optselflag!=true)
					{
						alert("Please Select " + ControlName.substring(3));
						ControlArray[0].focus();
						
						return false;
					}	
				return flag;
		}
String.prototype.trim = function() 
{
  return( this.replace(/^\s*([\s\S]*\S+)\s*$|^\s*$/,'$1') ); 
}

	function setchkColor()
		{
				document.activeElement.parentElement.parentElement.setAttribute("bgColor", (document.activeElement.getAttribute('checked') ? '#dcdcdc' : '#ffffff'));
				document.activeElement.parentElement.parentElement.className = (document.activeElement.getAttribute('checked') ? 'Font4' : 'Font7');
		}
	function changeColorbyName(selName,destColor,deselColor)
		{

			var cCbN1 = 0;
			for(cCbN1 = 0; cCbN1 < document.getElementsByName(selName).length ; cCbN1 ++)
				{
					if(document.getElementsByName(selName).item(cCbN1).checked==true)
					{
						document.getElementsByName(selName).item(cCbN1).parentElement.parentElement.setAttribute("bgColor",destColor);
					}
					else
					{
						document.getElementsByName(selName).item(cCbN1).parentElement.parentElement.setAttribute("bgColor",deselColor);
					}				
				}
		}
				

	function changeColorbyId(selId,destColor,deselColor)
		{
			if(document.getElementById(selId).checked==true)
				{
					document.getElementById(selId).parentElement.parentElement.setAttribute("bgColor",destColor);
				}
			else
				{
					document.getElementById(selId).parentElement.parentElement.setAttribute("bgColor",deselColor);
				}				
		}
	function validatecontrols()
		{
			var index = 0;
			var flag = true;
			for(index = 0 ; index < arguments.length ; index ++ )
				{	
					var Control = document.getElementById(arguments[index]);
					var ControlType = Control.type;
					var ControlName = Control.name;
					var ControlValue = Control.value;

					switch(ControlType)
						{
							case "text": 
									if(ControlValue == 0)
												{
												    var strMessage =  ControlName.substring(3);
												 
													if(strMessage.indexOf("_") != -1)
														{
															strMessage = strMessage.replace("_"," ");
															strMessage = strMessage.replace("¤"," ");
														}	
												
													alert("Please Enter " + strMessage);
													Control.value="";
													Control.focus();
													flag = false;
													return false;
												}	
							case "password": 
									if(ControlValue == 0)
												{
												    var strMessage =  ControlName.substring(3);
												 
													if(strMessage.indexOf("_") != -1)
														{
															strMessage = strMessage.replace("_"," ");
															strMessage = strMessage.replace("¤"," ");
														}	
												
													alert("Please Enter " + strMessage);
													Control.value="";
													Control.focus();
													flag = false;
													return false;
												}	
							case "textarea": 
									if(ControlValue == 0)
												{
												    var strMessage =  ControlName.substring(3);
												 
													if(strMessage.indexOf("_") != -1)
														{
															strMessage = strMessage.replace("_"," ");
															strMessage = strMessage.replace("¤"," ");
														}	
												
													alert("Please Enter " + strMessage);
													Control.value="";
													Control.focus();
													flag = false;
													return false;
												}	
							case "select-one":
											if( (ControlValue == "" ) || (ControlValue == "Nil" ) || (ControlValue == "default" ) || (ControlValue == "Default" ) )
												{
													alert("Please Select " + ControlName.substring(3));
													Control.focus();
													flag = false;
													return false;
												}	
						}
				}

				return flag;				
		}
	function Options_Click()
		{
			var index = 0;
			Control1 = document.getElementById(arguments[0]);
	 	    Control1.checked=true;
			Control1.value="1";
			for(index=1;index<arguments.length;index++)
			  {
				Control2 = document.getElementById(arguments[index]);	
				Control2.checked=false;					
			  }
		}  
	function KeyLock()
		{

		   var NFlag = true;
		   var getVal=document.activeElement.getAttribute('value');
		   
		   if(getVal.indexOf('.')!=-1)
		   {
			if (event.keyCode==190||event.keyCode==46)
			{		   			
				NFlag = false;
				return false;
			}
			
		   }
		   if ((event.keyCode >= 47  && event.keyCode <= 57) || (event.keyCode >= 96  && event.keyCode <=105) )
		      {
				if(event.shiftKey==false)
					{			  	
						NFlag = true;	
					}
				else
					{
						NFlag = false;
					}		
		      }
		   else if (event.keyCode == 190 || event.keyCode == 8 || event.keyCode == 9 || event.keyCode == 46) 	  
			  {			  	
					NFlag = true;	
		      }	
		   else if (event.keyCode >= 36 && event.keyCode <= 40) 	  
			  {			  	
					NFlag = true;	
		      }	
		   else
		      {
		  		NFlag = false;
			  } 	  
			event.returnValue=NFlag;  
			  
		}
		
	function NumBlock()
		{
			var CFlag = true;
			if ((event.keyCode>=46 && event.keyCode<=57) )
				{
					if(event.shiftKey==true)
						{
						if(!(event.keyCode==55 || event.keyCode==50 || event.keyCode==48 || event.keyCode==57))
							{
								CFlag = false;
							}	
						}
				} 
			else if((event.keyCode==222 || event.keyCode==188 || event.keyCode==190 || event.keyCode==219 || event.keyCode==221 ) && event.shiftKey==true)
				{
					CFlag=false;
				}
			else if(event.keyCode==186 || event.keyCode==187 || event.keyCode==220 || event.keyCode==192 || event.keyCode==191)	CFlag=false;
			if((event.keyCode<65) || (event.keyCode>96))
				{
				event.returnValue = CFlag;
				}

		}	
function NumericOnly()
{
	if(((event.keyCode < 48)||(event.keyCode > 57))&&(event.keyCode!=46))
	{
		event.returnValue=false;
	}      
}

function CheckNumberValue(obj)
	{
		
		if (!(isNaN(obj.value)))
		{
			if (obj.value  == "")
			{
				obj.value  = "";
			}
			else
			{
				obj.value=Number(obj.value);
			}	
		}
		
		else
		{
			obj.value = 0;
		}
	}
function GEditMode()
	{
		//arguments[0]
		//EditMode(formElements,'sf','txtHideWhite','	DyBorder',true/false)"
		//alert("inside");
		var ilen=arguments[0];
		var flag=false;
		for(i=0;i<ilen.length;i++)
		{
			if(ilen[i].type=="text")
			{
				//alert(ilen[i].name);
				
				var sname=ilen[i].name
				var aCarrierCode=sname.split("~")
						
				if(aCarrierCode[0]==arguments[1])
				{
					
					if (arguments[4]== true)			
					{
						ilen[i].removeAttribute("readOnly")
						ilen[i].className=arguments[3]
					}
					else if	(arguments[4]== false)
					{
						ilen[i].setAttribute("readOnly",true)
						ilen[i].className=arguments[2]
					
					}
					if(flag==false)
					{
						ilen[i].focus();
						flag=true;
						if (arguments[1]!= null)
						{
							for(j=0;j<ilen.length;j++)
							{
								if(ilen[j].type=="text")
								{
									if((ilen[j].name==arguments[1])&& (ilen[j].value==arguments[0]))
									{
										//alert(arguments[1]);
										ilen[j].disabled=false;
								
									}
							
								}
							}	
						
						}
					}
				}	
				
						
			}
		}	
		
	}
	function AlphaBlock()
		{
			
			var CFlag = true;
			//alert(event.keyCode);
			if ((event.keyCode>=46 && event.keyCode<=57) )
				{
					if(event.shiftKey==true)
						{
						
							if((event.keyCode >= 47) || (event.keyCode <=56))
							{
								CFlag = false;
							}	
							
						}
						
						
				} //event.keyCode==190 ||
			else if((event.keyCode==222 || event.keyCode==188 ||  event.keyCode==219 || event.keyCode==221 ) && event.shiftKey==true)
				{
					CFlag=false;
				}
			else if(event.keyCode==189 || event.keyCode==186 || event.keyCode==187 ||event.keyCode==190 || event.keyCode==220 || event.keyCode==192 || event.keyCode==191 || event.keyCode==32)
				CFlag=false;
			else if(event.keyCode==111 || event.keyCode==106 ||	event.keyCode==107 || event.keyCode==108)
				CFlag=false;
			if((event.keyCode<65) || (event.keyCode>95))
				{	
					event.returnValue = CFlag;
				}
			else{	
			event.returnValue = false;}
		}	

function chkcolorchange()

{

	if (document.activeElement.getAttribute("Checked")== true)
 	   {
	        document.activeElement.parentElement.parentElement.style.backgroundColor="#dcdcdc"
	   }
	else
	 {
	        document.activeElement.parentElement.parentElement.style.backgroundColor="White"
	 }
}


function CheckBoxClear(id)
{
	var ChkLen = document.getElementsByName(id).length ;
	for (var i= 0;i<ChkLen;i++)
	{
		document.getElementsByName(id).item(i).checked	=	false;
	}
}

function binarysearch(LB1,UB1,COMBO1,COMBO2)
			{
				try{
				var Search_Text = arguments[2];
				var lb =  Number(arguments[0]);
				var ub =  Number(arguments[1]);
				var mid = Number( lb + ub ) / 2;
				var opt_Text = arguments[3].options[Math.round(mid)].innerText;
				var ComboGlobalTextlen =  Search_Text.length;
				var	optionText_substr = opt_Text.substring(0,ComboGlobalTextlen); 
					if(lb > ub)
						{
							return false;
						}
					if(optionText_substr.toLowerCase() == Search_Text.toLowerCase())
						{
							return Math.round(mid);
						}
					else if(optionText_substr.toLowerCase() > Search_Text.toLowerCase())
					 	{
				 			lb = Math.round(lb);
				 			ub = Math.round(mid) - 1;
				 			return	binarysearch(lb,ub,Search_Text,arguments[3]);
				 		}
				 else if(optionText_substr.toLowerCase() < Search_Text.toLowerCase())
						{
							lb = Math.round(mid) + 1;
							ub = Math.round(ub);
							return	binarysearch(lb,ub,Search_Text,arguments[3]);
						}	
					}
				catch(e)
					{
						return false;
					}					
			}


		var Global_Search_Text = "";	 



function populateonkeypress()
			{

				var strTypedText ,strComboIndex = 0 ,strComboCount = 0,strComboId;
				var optionText_substr="", selectedComboIndex=0, resetflag=true; 
				
				var ComboSearchText = document.getElementById(arguments[1]).value;

				strComboId = document.getElementById(arguments[0]);
				strComboCount = document.getElementById(arguments[0]).getAttribute("length");
				if(ComboSearchText!=0)
					{
						var SearchFlag = binarysearch(strComboId.selectedIndex,strComboCount,ComboSearchText,strComboId);
						if(SearchFlag!=false)
							{
								strComboId.selectedIndex = SearchFlag;
							}
						else
							{
								var NewSearchFlag = binarysearch(0,strComboId.selectedIndex,ComboSearchText,strComboId);
								if(NewSearchFlag!=false)
									{
										strComboId.selectedIndex = NewSearchFlag;								
									}
							}
					}
				else
					{
						//strComboId.selectedIndex = 0;
					}	
			}






/*============================================================================*/

/*

This routine checks the credit card number. The following checks are made:

1. A number has been provided
2. The number is a right length for the card
3. The number has an appropriate prefix for the card
4. The number has a valid modulus 10 number check digit if required

If the validation fails an error is reported.

The structure of credit card formats was gleaned from a variety of sources on 
the web.

Parameters:
            cardnumber           number on the card
            cardname             name of card as defined in the card list below

Author:     John Gardner
Date:       1st November 2003
Updated:    26th Feb. 2005      Additional cards added by request

*/

/*
   If a credit card number is invalid, an error reason is loaded into the 
   global ccErrorNo variable. This can be be used to index into the global error  
   string array to report the reason to the user if required:
   
   e.g. if (!checkCreditCard (number, name) alert (ccErrors(ccErrorNo);
*/

var ccErrorNo = 0;
var ccErrors = new Array ()

ccErrors [0] = "Unknown card type";
ccErrors [1] = "No card number provided";
ccErrors [2] = "Credit card number is in invalid format";
ccErrors [3] = "Credit card number is invalid";
ccErrors [4] = "Credit card number has an inappropriate number of digits";

function checkCreditCard (cardnumber, cardname) {

     
  // Array to hold the permitted card characteristics
  var cards = new Array();

  // Define the cards we support. You may add addtional card types.
  
  //  Name:      As in the selection box of the form - must be same as user's
  //  Length:    List of possible valid lengths of the card number for the card
  //  prefixes:  List of possible prefixes for the card
  //  checkdigit Boolean to say whether there is a check digit
  
  cards [0] = {name: "Visa", 
               length: "13,16", 
               prefixes: "4",
               checkdigit: true};
  cards [1] = {name: "MasterCard", 
               length: "16", 
               prefixes: "51,52,53,54,55",
               checkdigit: true};
  cards [2] = {name: "DinersClub", 
               length: "14,", 
               prefixes: "300,301,302,303,304,305,36,38",
               checkdigit: true};
  cards [3] = {name: "CarteBlanche", 
               length: "14", 
               prefixes: "300,301,302,303,304,305,36,38",
               checkdigit: true};
  cards [4] = {name: "AmEx", 
               length: "15", 
               prefixes: "34,37",
               checkdigit: true};
  cards [5] = {name: "Discover", 
               length: "16", 
               prefixes: "6011",
               checkdigit: true};
  cards [6] = {name: "JCB", 
               length: "15,16", 
               prefixes: "3,1800,2131",
               checkdigit: true};
  cards [7] = {name: "Enroute", 
               length: "15", 
               prefixes: "2014,2149",
               checkdigit: true};
  
               
  // Establish card type
  var cardType = -1;
  for (var i=0; i<cards.length; i++) {

    // See if it is this card (ignoring the case of the string)
    if (cardname.toLowerCase () == cards[i].name.toLowerCase()) {
      cardType = i;
      break;
    }
  }
  
  // If card type not found, report an error
  if (cardType == -1) {
     ccErrorNo = 0;
     return false; 
  }
   
  // Ensure that the user has provided a credit card number
  if (cardnumber.length == 0)  {
     ccErrorNo = 1;
     return false; 
  }
  
  // Check that the number is numeric, although we do permit a space to occur  
  // every four digits. 
  var cardNo = cardnumber
  var cardexp = /^([0-9]{4})\s?([0-9]{4})\s?([0-9]{4})\s?([0-9]{1,4})$/;
  if (!cardexp.exec(cardNo))  {
     ccErrorNo = 2;
     return false; 
  }
    
  // Now remove any spaces from the credit card number
  cardexp.exec(cardNo);
  cardNo = RegExp.$1 + RegExp.$2 + RegExp.$3 + RegExp.$4;
       
  // Now check the modulus 10 check digit - if required
  if (cards[cardType].checkdigit) {
    var checksum = 0;                                  // running checksum total
    var mychar = "";                                   // next char to process
    var j = 1;                                         // takes value of 1 or 2
  
    // Process each digit one by one starting at the right
    var calc;
    for (i = cardNo.length - 1; i >= 0; i--) {
    
      // Extract the next digit and multiply by 1 or 2 on alternative digits.
      calc = Number(cardNo.charAt(i)) * j;
    
      // If the result is in two digits add 1 to the checksum total
      if (calc > 9) {
        checksum = checksum + 1;
        calc = calc - 10;
      }
    
      // Add the units element to the checksum total
      checksum = checksum + calc;
    
      // Switch the value of j
      if (j ==1) {j = 2} else {j = 1};
    } 
  
    // All done - if checksum is divisible by 10, it is a valid modulus 10.
    // If not, report an error.
    if (checksum % 10 != 0)  {
     ccErrorNo = 3;
     return false; 
    }
  }  

  // The following are the card-specific checks we undertake.
  var LengthValid = false;
  var PrefixValid = false; 
  var undefined; 

  // We use these for holding the valid lengths and prefixes of a card type
  var prefix = new Array ();
  var lengths = new Array ();
    
  // Load an array with the valid prefixes for this card
  prefix = cards[cardType].prefixes.split(",");
      
  // Now see if any of them match what we have in the card number
  for (i=0; i<prefix.length; i++) {
    var exp = new RegExp ("^" + prefix[i]);
    if (exp.test (cardNo)) PrefixValid = true;
  }
      
  // If it isn't a valid prefix there's no point at looking at the length
  if (!PrefixValid) {
     ccErrorNo = 3;
     return false; 
  }
    
  // See if the length is valid for this card
  lengths = cards[cardType].length.split(",");
  for (j=0; j<lengths.length; j++) {
    if (cardNo.length == lengths[j]) LengthValid = true;
  }
  
  // See if all is OK by seeing if the length was valid. We only check the 
  // length if all else was hunky dory.
  if (!LengthValid) {
     ccErrorNo = 4;
     return false; 
  };   
  
  // The credit card is in the required format.
  return true;
}

function isblank(s) {
/************************************************
DESCRIPTION: Validates that a string is not all
  blank (whitespace) characters.

PARAMETERS:
value - the String to be tested for validity

RETURNS:
   True if valid, otherwise false.
*************************************************/

//alert(s);
     for (var i = 0; i < s.length; i++) {
          var c = s.charAt(i);
          if ((c != ' ') && (c != '\n') && (c != '\t')) return false;
}
return true;
}
/*============================================================================*/

function IsNumeric(strString)
   //  check for valid numeric strings	
   {
   var strValidChars = "0123456789.-";
   var strChar;
   var blnResult = true;

   if (strString.length == 0) return false;

   //  test strString consists of valid characters listed above
   for (i = 0; i < strString.length && blnResult == true; i++)
      {
      strChar = strString.charAt(i);
      if (strValidChars.indexOf(strChar) == -1)
         {
         blnResult = false;
         }
      }
   return blnResult;
   }

function numbersonly(e){
	var unicode=e.charCode? e.charCode : e.keyCode
	if (unicode!=8 && unicode!=46) { //if the key isn't the backspace key (which we should allow)
		if (unicode<48||unicode>57) //if not a number
			return false //disable key press
	}
}
function intnumbersonly(e){
	var unicode=e.charCode? e.charCode : e.keyCode
	if (unicode!=8) { //if the key isn't the backspace key (which we should allow)
		if (unicode<48||unicode>57) //if not a number
			return false //disable key press
	}
}