// whitespace characters
var whitespace = " \t\n\r";

/****************************************************************/

// Check whether string s is empty.
function isEmpty(s)
{ return ((s == null) || (s.length == 0)) }

/****************************************************************/

function isWhitespace (s)
{
     var i;

     // Is s empty?
     if (isEmpty(s)) return true;

     // Search through string's characters one by one
     // until we find a non-whitespace character.
     // When we do, return false; if we don't, return true.

           for (i = 0; i < s.length; i++)
           {
                // Check that current character isn't whitespace.
                var c = s.charAt(i);

                if (whitespace.indexOf(c) == -1) return false;
           }

           // All characters are whitespace.
           return true;
}

/****************************************************************/

function ForceEntry(objField, FieldName)
{
		var strField = new String(objField.value);
		if (isWhitespace(strField)) {
			alert("Please enter " + FieldName);
			objField.focus();
			objField.select();
			return false;
		}

		return true;
}

function ForceNumber(objField)
{
	var strField = new String(objField.value);
		
	var i = 0;

	for (i = 0; i < strField.length; i++)
		if ((strField.charAt(i) < '0' || strField.charAt(i) > '9') && (strField.charAt(i) != ' ')) {
			alert("Please enter numbers and spaces only.");
			objField.focus();
			objField.select();
			return false;
		}

	return true;
}

function isEmail (objField)
{
	
    var s = new String(objField.value);
	
    if (isEmpty(s)) return true;
   
    if (isWhitespace(s)) return true;    

    // there must be >= 1 character before @, so we
    // start looking at character position 1 
    // (i.e. second character)
    var i = 1;
    var sLength = s.length;

    // look for @
    while ((i < sLength) && (s.charAt(i) != "@"))
    { i++
    }

    if ((i >= sLength) || (s.charAt(i) != "@")) {
		alert("Please enter a valid e-mail address.");
		objField.select();
		return false;
	}	
    else i += 2;

    // look for .
    while ((i < sLength) && (s.charAt(i) != "."))
    { i++
    }

    // there must be at least one character after the .
    if ((i >= sLength - 1) || (s.charAt(i) != ".")) {
		alert("Please enter a valid e-mail address.");
		objField.select();
		return false;
	}		
    else return true;
}

function isPasswd(objField)
{
	var strField = new String(objField.value);
	
	if (strField.length < 6) {
	// inappropriate length
		alert("Please enter a password which has six characters or more.");
		objField.select();
		return false;
	}
		
	return true;
}


function ForceSelect(objField, FieldName)
{
    var CurIndex = objField.selectedIndex;
    if (objField.options[CurIndex].value=="") {
	alert("Please select " + FieldName);
	objField.focus();
	return false;
    }else {
	return true;
    }
}


function isZipcode(objField)
{
		var strField = new String(objField.value);
	
		if (strField.length != 4) {
			// inappropriate length
			alert("Please enter a valid 4-digit postcode.");
			objField.focus();
  		        objField.select();
			return false;
		}
		
		var i = 0;

		for (i = 0; i < strField.length; i++)
			if (strField.charAt(i) < '0' || strField.charAt(i) > '9') {
				alert("Please enter a valid 4-digit postcode.");
  				objField.focus();
				objField.select();
				return false;
			}
			
		return true;
}


function ForceMoney(objField)
{
	var strField = new String(objField.value);
		
	var i = 0;

	for (i = 0; i < strField.length; i++)
		if ((strField.charAt(i) < '0' || strField.charAt(i) > '9') && (strField.charAt(i) != '.')) {
			alert("Please enter numbers and a decimal point only.");
			objField.focus();
			objField.select();
			return false;
		}

	return true;
}

function ForceNumMth(objField)
{
	var strField = new String(objField.value);
		
	var i = 0;

	for (i = 0; i < strField.length; i++)
        {
	  if ((strField.charAt(i) < '0') || (strField.charAt(i) > '9')) {
		alert("Please enter numbers only.");
		objField.focus();
		objField.select();
		return false;
	  } else {
            if ((eval(strField) < 1) || (eval(strField) > 12)) {
		alert("Please enter valid number of months, ie. 1-12, only.");
		objField.focus();
		objField.select();
		return false;
            }
          }
        } 
	return true;
}
 
function isConfirm(objField, objField2)
{
var strField = new String(objField.value);
var strField2 = new String(objField2.value);


if (isWhitespace(strField)) {
	alert("Please confirm the password you have just entered");
	objField.focus();
	objField.select();
	return false;
}

if (strField.toString() != strField2.toString()) {
	alert("Your confirm password do not match with your password");
	objField.focus();
	objField.select();
	return false;
}

return true;

}

function ForceCurrency(objField)
{		
	var strField = new String(objField.value);
		
	var i = 0;

	for (i = 0; i < strField.length; i++)
		if ((strField.charAt(i) < '0' || strField.charAt(i) > '9') && (strField.charAt(i) != '.')) {
			alert("Please enter valid numbers. Only decimal point is allowed!");
			objField.select();
			return false;
		}

	return true;
}

function ForceByte(objField)
{
	var strField = new String(objField.value);
		
	var i = 0;

	for (i = 0; i < strField.length; i++)
		if ((strField.charAt(i) < '0') || (strField.charAt(i) > '9')) {
			alert("Please enter numbers only.");
			objField.select();
			return false;
		}

	return true;
}

function isFilename (objField)
{
	
    var s = new String(objField.value);
	
    var i = 0;
    var sLength = s.length;

    // look for .
    while ((i < sLength) && (s.charAt(i) != "."))
    { i++
    }

    if ((i >= sLength) || (s.charAt(i) != ".")) {
		alert("Please enter a valid filename with a file extension.");
		objField.select();
		return false;
	}	
    else return true;
}

function chkChars(objField)
{
	var strField = new String(objField.value);
		
	var i = 0;

	for (i = 0; i < strField.length; i++)
		if (strField.charAt(i) == ',') {
			alert("Please replace commas(,) with other characters");
			objField.select();
			return false;
		}

	return true;
}

function mod10( cardNumber ) { // LUHN Formula for validation of credit card numbers.
	var ar = new Array( cardNumber.length );
	var i = 0,sum = 0;

	for( i = 0; i < cardNumber.length; ++i ) {
    	ar[i] = parseInt(cardNumber.charAt(i));
    }
    for( i = ar.length -2; i >= 0; i-=2 ) { 
    	ar[i] *= 2;							 
    	if( ar[i] > 9 ) ar[i]-=9;			 
    }										 

    for( i = 0; i < ar.length; ++i ) {
    	sum += ar[i];	
    }
    return (((sum%10)==0)?true:false);	 	
}

function expired( month, year ) {
	var now = new Date();
    var expiresIn = new Date(year,month,0,0,0);
    expiresIn.setMonth(expiresIn.getMonth()+1);
    if( now.getTime() < expiresIn.getTime() ) return false;
    return true;
}

function validateCard(frmobj,cardNumber,cardType,cardMonth,cardYear) {
   	if ( cardNumber.length == 0 ) {	
	  alert("Please enter a valid card number.");
        frmobj.cardNumber.focus();
        return false;				
	}
    
    for( var i = 0; i < cardNumber.length; ++i ) {	
    	var c = cardNumber.charAt(i);

        if( c < '0' || c > '9' ) {
        	alert("Please enter a valid card number. Use only digits. Do not use spaces or hyphens.");
            frmobj.cardNumber.select();
            return false;
		}
	}
	var length = cardNumber.length;	

	switch( cardType ) {
    	case 'a':
			if( length != 15 ) {
				alert("Please enter a valid American Express card number.");
				frmobj.cardNumber.select();
				return false;
			}
			var prefix = parseInt( cardNumber.substring(0,2));
						
			if( prefix != 34 && prefix != 37 ) {
				alert("Please enter a valid American Express card number.");
				frmobj.cardNumber.select();
				return false;
			}
			break;
			
		case 'd':
			if( length != 16 ) {
				alert("Please enter a valid Discover card number.");
				frmobj.cardNumber.select();
				return false;
			}
			var prefix = parseInt( cardNumber.substring(0,4));
						
			if( prefix != 6011 ) {
				alert("Please enter a valid Discover card number.");
				frmobj.cardNumber.select();
				return false;
			}
			break;
			
		case 'm':
			if( length != 16 ) {
				alert("Please enter a valid MasterCard card number.");
				frmobj.cardNumber.select();
				return false;
			}
			var prefix = parseInt( cardNumber.substring(0,2));
						
			if( prefix < 51 || prefix > 55) {
				alert("Please enter a valid MasterCard card number.");
				frmobj.cardNumber.select();
				return false;
			}
			break;
			
		case 'v':
			if( length != 16 && length != 13 ) {
				alert("Please enter a valid Visa card number.");
				frmobj.cardNumber.select();
				return false;
			}
			var prefix = parseInt( cardNumber.substring(0,1));
						
			if( prefix != 4 ) {
				alert("Please enter a valid Visa card number.");
				frmobj.cardNumber.select();
				return false;
			}
			break;
	}
	
	if( !mod10( cardNumber ) ) { 		
		alert("Sorry! This is not a valid credit card number.");
		frmobj.cardNumber.select();
		return false;
	}
	
	if( expired( cardMonth, cardYear ) ) {							
		alert("Sorry! The expiration date you have entered would make this card invalid.");
		return false;
	}

	return true; 
}