// CONFIRM FUNCTIONS
function confirmsignout()
{
	var msg = "Are you sure you want to log off from the\nEntrega eCommerce Control Panel?";
	if (confirm(msg) == true)
		return true;
	else 
		return false;
}

// DATE FUNCTIONS
function jsDate(source, arguments)
{
	arguments.IsValid = validdatestr( arguments.Value )
}

function validdatestr( d )
{
	var re =/^(1[0-2]|0?[1-9])[\-\/](0?[1-9]|[12][0-9]|3[01])[\-\/]((19|20)\d{2})/;
	var matches = re.exec( d );
	if ( matches ) 
		return true;
	else
		return false;
}

function datemoreorequal(d1,d2,msg)
{
	var res = true
	if (comparedates( d1.value,d2) == - 2)
	{
		alert('Please use valid date format MM/DD/YYYY.');
		return false
	}
	if (comparedates( d1.value,d2) < 0)
	{
		res = confirm(msg)
		if (!res)
		{
			d1.focus()
			d1.select()
		}
	}
	return res
}

function isDateInPast( d )
{
	var x;
	var today;
	var noofdays;
	today    = new Date();
	noofdays = 1*24*3600*1000
	x = new Date( d );
	if (x.valueOf() < today.valueOf()- noofdays)
	{
		alert("Date entered cannot be prior to today.");
		return false;
	}    
	return true;
}

function comparedates( d1,d2)
{
	if (!validdatestr( d1 ))
		return -2
	if (!validdatestr( d2 ))
		return -2
	var date1 = new Date(d1)
	var date2 = new Date(d2)
	if (date1 < date2)
		return -1
	if (date1 == date2)
		return 0
	if (date1 > date2)
		return 1
}

function formatDate() 
{
	var date = new Date();
	var d  = date.getDate();
	var day = (d < 10) ? '0' + d : d;
	var m = date.getMonth() + 1;
	var month = (m < 10) ? '0' + m : m;
	var yy = date.getYear();
	var year = (yy < 1000) ? yy + 1900 : yy;
	return month + "/" + day + "/" + year
}

function isDate(value)
{	
	var month, day, year
	var mm, dd, yyyy
	var skip, intSkip, yesSkip
	var arrDateParts = new Array()
	
	if ((value == null) || (value == "")) return false;
	
	arrDateParts = value.split("/")
	if (arrDateParts.length != 3) return false
		
	month = arrDateParts[0]
	if ((month.length < 1) || (month.length > 2)) 
		return false;
	if (isNaN(month))
	{	
		return false;	
	}	
	else
	{	
		mm = parseInt(month,10)
		if ((mm < 1) || (mm > 12 )) 
			return false;
	}
	year = arrDateParts[2]
	if (!((year.length == 2) || (year.length == 4))) 
		return false;
	if (isNaN(year)) 
		return false;	
	yyyy    = parseInt(year,10)
	yesSkip = false	
	skip    = yyyy/4
	intSkip = parseInt(""+skip,10)
	if (skip == intSkip) 
		yesSkip = true
	day = arrDateParts[1]
	if ((day.length < 1) || (day.length > 2)) 
		return false;
	if (isNaN(day)) 
	{
		return false;	
	}
	else
	{	
		dd = parseInt(day,10)
		if ((dd < 1) || (dd > 31 ))
		{ 	
			return false; 
		}
		else
		{
			if ((dd == 31) && ((mm == 4) || (mm == 6) || (mm == 9) || (mm == 11)))
			{
				return false; 
			}
			else
			{
				if ( (dd == 30) && (mm == 2))
				{ 
					return false; 
				}
				else
				{
					if ( (dd == 29) && (mm == 2) && !yesSkip) 
						return false;
				}
			}
		}
	}
	return true							
}

// NUMERIC FUNCTIONS
function jsInterger(source,arguments)
{
	arguments.IsValid = isInteger( arguments.Value )
}

function jsNumber(source,arguments)
{
	arguments.IsValid = IsNumeric( arguments.Value )
}

function isInteger(s)
{
	var i;
	for (i = 0; i < s.length; i++)
	{
		var c = s.charAt(i);
		if ((c < "0") || (c > "9")) 
			return false;
	}
	return true;
}

function IsNumeric(num)
{
	var IsNumber = true;
	var vildChars ='1234567890.';
	var Char;
	for(i=0; i<num.length; i++)
	{
		Char = num.charAt(i);
		if (vildChars.indexOf(Char) == -1)
		{
			IsNumber = false;
		}
	}
	return IsNumber;
}

function IsNumericNeg(num)
{
	var IsNumber = true;
	var vildChars ='1234567890.-';
	var Char;
	for(i=0; i<num.length; i++)
	{
		Char = num.charAt(i);
		if (vildChars.indexOf(Char) == -1)
		{
			IsNumber = false;
		}
	}
	return IsNumber;
}

function format (expr, decplaces) 
{
	var str = "" + Math.round (eval(expr) * Math.pow(10,decplaces))	
	while (str.length <= decplaces) 
	{
		str = "0" + str
	}	
	var decpoint = str.length - decplaces	
	return str.substring(0,decpoint) + "." + str.substring(decpoint,str.length);
}

function GetNumber(InputString)
{
	return stripCharsNotInBag(InputString, ".1234567890-+");
}

function ValidateNumericChars(s)
{
	var i;
	var StrValid = ".1234567890";
	var c;	
	var point = 0
	if (s.length == 0)
		return 0;
	for (i = 0; i < s.length; i++)
	{
		c = s.charAt(i);
		if (StrValid.indexOf(c) == -1)
		{
			return false;			
		}
	}
	for (i = 0; i < s.length; i++)
	{
		if (s.substr(i,1) == '.')
			point += 1
	}
	if (point > 1)
		return false;
	return true;
}

function ValidateNumericCharsNeg(s)
{
	var i;
	var StrValid = ".1234567890+-";
	var c;	
	var point = 0;
	var decimal = 0;
	if (s.length == 0)
		return 0;
	for (i = 0; i < s.length; i++)
	{
		c = s.charAt(i);
		if (StrValid.indexOf(c) == -1)
		{
			return -1;			
		}
		if (point == 1)
			decimal += 1;
		if (decimal > 2)
			return -1;
		if (c == '.')
			point += 1;
		if (point > 1)
			return -1;
	}
	var result = decimal+point+1;
	return result;
}

function roundNum(iNumber)
{
	var mNumber = (Math.round(iNumber * 100))/100  
	return mNumber   
}

function ValidateDec(str)
{
	var checkstr = String(str)
	var ipos = checkstr.length - 1
	var dec = 0
	if (ValidateNumericChars(str) == false)
		return 0
	for (i = ipos; i >= 1; i-- ) 
	{
		if (checkstr.substr(i,1) == '.')
		{
			dec = 1			
			switch (ipos - i)
			{
				case 2:					
					return str; break;
				case 1:
					str = str + '0'					
					return str; break;
				default:
					return 0
			}		
		}
	}
	if (dec == 0)
		str = str + '.00'
	return str;
}

function isZipNum(str)
{
	var invalid = 0;
	var Character = "";
	for (var idx = 0; idx < str.length; idx++)
	{
		Character = str.substr(idx, 1);
		switch(Character)
		{			
			case "0": break;
			case "1": break;
			case "2": break;
			case "3": break;
			case "4": break;
			case "5": break;
			case "6": break;
			case "7": break;
			case "8": break;
			case "9": break;
			case "-": break;
			default: invalid = 1;
		}
	}
	if (invalid > 0)
	{
		return(false);
	}
	return(true);
}

function isSmallInt(value)
{
	var string, ch 
	string = value.toString()
	string = trimStr(string)
	if (string.length < 1 ) 
		return false
	if (isNaN(string)) 
		return false	
	for (var i=0; i < string.length; i++)
	{
		ch = string.charAt(i)
		if (ch == ".") 
			return false
	}
	if (( value > 32767 ) || ( value < -32768 )) 
		return false	
	return true
}

function isTinyInt(value)
{
	var string, ch 
	string = value.toString()
	string = trimStr(string)
	if (string.length < 1 ) 
		return false
	if (isNaN(string)) 
		return false	
	for (var i=0; i < string.length; i++)
	{
		ch = string.charAt(i)
		if (ch == ".") 
			return false
	}
	if (( value > 255 ) || ( value < 0 )) 
		return false	
	return true
}

function isDecimal(value)
{
	var string, ch 
	string = value.toString()
	string = trimStr(string)
	if (string.length < 1 ) 
		return false
	if (isNaN(string)) 
		return false	
	return true
}

// MONETARY FUNCTIONS
function jsMoney(source, arguments)
{
	var value=arguments.Value
	if (value.substr(0,1) == '$')
		value = value.substr(1)
	arguments.IsValid = IsNumeric( value )
	if (arguments.IsValid == true)
	{
		var pos = value.indexOf('.')
		if (pos != -1)
		{
			if (value.length > (pos + 3))
				arguments.IsValid = false
		}
	}
}

function jsMoneyNeg(source, arguments)
{
	var value = arguments.Value
	if (value.substr(0,1) == '$')
		value = value.substr(1)
	arguments.IsValid = IsNumericNeg( value )
	if (arguments.IsValid == true)
	{
		var pos = value.indexOf('.')
		if (pos != -1)
		{
			if (value.length > (pos + 3))
				arguments.IsValid = false
		}
	}
}

function formatCurrency(num) 
{
	if(isNaN(num)) num = "0";
	if(isNaN(num) || num == '')	num = "0";
	sign = (num == (num = Math.abs(num)));
	num = Math.floor(num*100+0.50000000001);
	cents = num%100;
	num = Math.floor(num/100).toString();
	if(cents<10)
		cents = "0" + cents;
	for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++) 
	{
		num = num.substring(0,num.length-(4*i+3))+','+	num.substring(num.length-(4*i+3));
	}
	return (((sign)?'':'-') + '$' + num + '.' + cents);
}

function dollarize(expr) 
{
	return "$" + format(expr,2)
}

function UnformatCurrency(value)
{
	var str, ch, string 
	str = value.toString()
	str = trimStr(str)
	string = ""
	for (var i=0; i < str.length; i++)
		{
			ch = str.charAt(i)
			if ((ch == "$") || (ch == ","))
				{ }
			else
			{ 
				string = string + ch
			}	
		}
	return string
}

function isMoney(value)
{
	var string, ch 
	string = value.toString()
	string = trimStr(string)
	if (string.length < 1 ) 
		return false
	if (isNaN(string)) 
		return false
	if (( value > 922337203685477 ) || ( value < -922337203685477 )) 
		return false	
	return true
}

// GENERIC FUNCTIONS
function screemOut(inField, Error) 
{
	alert(Error);
	inField.focus();
	inField.select();
	return false;
}

function isFilledList(elem)
{
	if ( elem.text == "" ||elem.text == null ) 
	     return false;
	else return true;
}

function CheckLength(str, Length)
{
	if (str.length>Length)
		return false;
	return true;
}

function stripCharsNotInBag (s, bag)
{
	var i;
	var returnString = "";
    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
        if (bag.indexOf(c) != -1) 
			returnString += c;
    }
    return returnString;
}

function leftTrim(s)
{
	var i
	var str
	var result
	if (s.length == 0)
		return s;
	for (i = 0; i < s.length;i++)
	{
		str=s.charAt(i)
		if (str != " ")
			break ;
	}
	result = s.slice(i)
	return result
}

function rightTrim(s)
{
	var i
	var k
	var str
	var result
	var len = s.length
	if (len == 0)
		return s;
	for (i = 0; i < len;i++)
	{
		k = len-i-1
		str=s.charAt(k)
		if (str != " ")
			break ;
	}
	k++
	result = s.slice(0,k)
	return result
}

function trimStr(s)
{
	var result
	result = leftTrim(s)
	result = rightTrim(result)
	return result
}

function isEmpxy(inputStr)
{
	if ((string == null) || (string == "")) 
		return true;
	if ( trimStr(string) == "") 
		return true;
	return false;
}

function StripQuoteChars(value)
{
	var ch, parsed, string
	string = value.toString()
	parsed = ""
	for (var i=0; i < string.length; i++)
	{
		ch = string.charAt(i)
		if (!((ch == "'") || (ch == '"' )))
		{ 
			parsed = parsed + ch 
		}
	}
	return parsed
}

function StripSingleQuoteChar(value)
{
	var ch, parsed, string
	string = value.toString()
	parsed = ""
	for (var i=0; i < string.length; i++)
	{
		ch = string.charAt(i)
		if (!(ch == "'"))
		{ 
			parsed = parsed + ch 
		}
	}
	return parsed
}

function ReverseString(value)
{
	var ch, reversed, string
	string = value.toString()
	reversed = ""
	for (var i=0; i < string.length; i++)
	{
		ch = string.charAt(i)
		reversed = ch + reversed
	}
	return reversed		
}

// PHONE FUNCTIONS
function jsPhone(source, arguments)
{
	var tempstr;
	if (arguments.Value.length == 0)
	{
		return true;
	}
	else	
	{
		re    = /^\D*(\d{3})\D*(\d{3})\D*(\d{4})/;
		array = re.exec(arguments.Value);
		if(!array)
			arguments.IsValid = false;
		else
			arguments.IsValid = true;
	}
}

function validatePhone(inptPhone)
{
	if (inptPhone.value.length == 0)
	{
		return true;
	}
	else	
	{
		re=/^\D*(\d{3})\D*(\d{3})\D*(\d{4})/;
		array=re.exec(inptPhone.value);
		if(!array)
		{
			alert("The phone number entered is invalid!\nIt should be in the format (###)###-####.\n\n");
			inptPhone.focus();
			inptPhone.select();
		}
		else
		{
			var tempstr;
			tesmpstr = "";
			tesmpstr = tesmpstr + "(";
			tesmpstr = tesmpstr + array[1];
			tesmpstr = tesmpstr + ")";
			tesmpstr = tesmpstr + array[2];
			tesmpstr = tesmpstr + "-";
			tesmpstr = tesmpstr + array[3];
			inptPhone.value = tesmpstr;
		}
	}
}

function formatPhone(inptPhone)
{
	if (inptPhone.value.length == 0)
	{
		return true;
	}
	else	
	{
		re=/^\D*(\d{3})\D*(\d{3})\D*(\d{4})/;
		array=re.exec(inptPhone.value);
		if(!array)
		{
		//	alert("The phone number entered is invalid!\nIt should be in the format (###)###-####.\n\n");
		//	inptPhone.focus();
		//	inptPhone.select();
		}
		else
		{
			var tempstr;
			tesmpstr = "";
			tesmpstr = tesmpstr + "(";
			tesmpstr = tesmpstr + array[1];
			tesmpstr = tesmpstr + ") ";
			tesmpstr = tesmpstr + array[2];
			tesmpstr = tesmpstr + " - ";
			tesmpstr = tesmpstr + array[3];
			inptPhone.value = tesmpstr;
		}
	}
}

// EMAIL FUNCTIONS
function checkEmail(email)
{
	var reg1, reg2;
	reg1 = /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/;
	reg2 = /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/;
	if (!reg1.test(email) && reg2.test(email)) 
		return true;
	else 	
		return false;
	return true;
}

// DROPDOWN FUNCTIONS
function LBSelect(element, mode)
{
	var ctr;
	var len = element.length;
	
	for (ctr = 0; ctr < len; ctr++)
	{
		element.options[ctr].selected = mode;
	}

	return;
}

function AddOne(Available, Selected)
{
	var n = 0;
	for (var s = 0; s < Available.length; s++)
		{if (Available.options[s].selected) n++}
	
	if (Available.length == 0 || n < 1)
	{
		alert("No Current Selection");
		return;
	}
	if (n > 1)
	{
		alert("Ambiguous Selection");
		return;
	}
	var selfound = 0
	for (s = 0; s < Available.length; s++)
	{
		if (Available.options[s].selected)
		{
			var newidx = Selected.length;
			Selected.options[newidx] = new option(Available.options[s].text, Available.options[s].value, 0, 1);
			selfound = 1;
		}
		if (selfound)
		{
			if (s < (Available.length - 1))
			{
				Available.options[s].text = Available.options[s+1].text;
				Available.options[s].value = Available.options[s+1].value;
			}			
			else
				{Available.options[s] = null}
		}
	}		
	return;
}

function AddAll(Available, Selected)
{
	if (Available.length == 0)
	{
		alert("No Current Selection");
		return;
	}
	var n = 0;
	for (var s = 0; s < Available.length; s++)
		{if (Available.options[s].selected) n++}

	var len = Available.length
	var times = 0
	var sel = 0
	var idx = 0
	
	for (times = 0; times < len; times++)
	{
		idx = times - sel
		if ((Available.options[idx].selected) || (n == 0))
		{
			var newidx = Selected.length;
			Selected.options[newidx] = new option(Available.options[idx].text, Available.options[idx].value, 0, 1);
			Available.options[idx] = null;
			sel++;
		}
	}
	return;
}

function RemoveOne(Available, Selected)
{
	var n = 0;
	for (var s = 0; s < Selected.length; s++)
		{if (Selected.options[s].selected) n++}
	
	if (Selected.length == 0 || n < 1)
	{
		alert("No Current Selection");
		return;
	}
	if (n > 1)
	{
		alert("Ambiguous Selection");
		return;
	}
	var selfound = 0
	for (s = 0; s < Selected.length; s++)
	{
		if (Selected.options[s].selected)
		{
			var newidx = Available.length;
			Available.options[newidx] = new option(Selected.options[s].text, Selected.options[s].value, 0, 0);
			selfound = 1;
		}
		if (selfound)
		{
			if (s < (Selected.length - 1))
			{
				Selected.options[s].text = Selected.options[s+1].text;
				Selected.options[s].value = Selected.options[s+1].value;				
			}			
			else
				{Selected.options[s] = null}
		}
		if (s < (Selected.length - 1))
			{Selected.options[s].selected = true;}
	}			
	return;
}

function RemoveAll(Available, Selected)
{
	if (Selected.length == 0)
	{
		alert("No Current Selection");
		return;
	}
	var n = 0;
	for (var s = 0; s < Selected.length; s++)
		{if (Selected.options[s].selected) n++}

	var len = Selected.length
	var times = 0
	var sel = 0
	var idx = 0
	
	for (times = 0; times < len; times++)
	{
		idx = times - sel
		if ((Selected.options[idx].selected) || (n == 0))
		{
			var newidx = Available.length;
			Available.options[newidx] = new option(Selected.options[idx].text, Selected.options[idx].value, 0, 0);
			Selected.options[idx] = null;
			sel++;
		}
	}
	return;
}

// ALPHANUMERIC FUNCTIONS
function jsAlphaNumeric(source, arguments)
{
	arguments.IsValid = isAlphaNum( arguments.Value )
}

function isAlpha(str)
{
	var invalid = 0;
	var Character = "";
	for (var idx = 0; idx < str.length; idx++)
	{
		Character = str.substr(idx, 1);
		switch(Character)
		{
			case "a": break;
			case "b": break;
			case "c": break;
			case "d": break;
			case "e": break;
			case "f": break;
			case "g": break;
			case "h": break;
			case "i": break;
			case "j": break;
			case "k": break;
			case "l": break;
			case "m": break;
			case "n": break;
			case "o": break;
			case "p": break;
			case "q": break;
			case "r": break;
			case "s": break;
			case "t": break;
			case "u": break;
			case "v": break;
			case "w": break;
			case "x": break;
			case "y": break;
			case "z": break;
			case "A": break;
			case "B": break;
			case "C": break;
			case "D": break;
			case "E": break;
			case "F": break;
			case "G": break;
			case "H": break;
			case "I": break;
			case "J": break;
			case "K": break;
			case "L": break;
			case "M": break;
			case "N": break;
			case "O": break;
			case "P": break;
			case "Q": break;
			case "R": break;
			case "S": break;
			case "T": break;
			case "U": break;
			case "V": break;
			case "W": break;
			case "X": break;
			case "Y": break;
			case "Z": break;
			default: invalid = 1;
		}
	}
	if (invalid > 0)
	{
		return(false);
	}
	return(true);
}

function isAlphaNum(str)
{
	var invalid = 0;
	var Character = "";
	
	for (var idx = 0; idx < str.length; idx++)
	{
		Character = str.substr(idx, 1);
		switch(Character)
		{
			case "a": break;
			case "b": break;
			case "c": break;
			case "d": break;
			case "e": break;
			case "f": break;
			case "g": break;
			case "h": break;
			case "i": break;
			case "j": break;
			case "k": break;
			case "l": break;
			case "m": break;
			case "n": break;
			case "o": break;
			case "p": break;
			case "q": break;
			case "r": break;
			case "s": break;
			case "t": break;
			case "u": break;
			case "v": break;
			case "w": break;
			case "x": break;
			case "y": break;
			case "z": break;
			case "A": break;
			case "B": break;
			case "C": break;
			case "D": break;
			case "E": break;
			case "F": break;
			case "G": break;
			case "H": break;
			case "I": break;
			case "J": break;
			case "K": break;
			case "L": break;
			case "M": break;
			case "N": break;
			case "O": break;
			case "P": break;
			case "Q": break;
			case "R": break;
			case "S": break;
			case "T": break;
			case "U": break;
			case "V": break;
			case "W": break;
			case "X": break;
			case "Y": break;
			case "Z": break;
			case "0": break;
			case "1": break;
			case "2": break;
			case "3": break;
			case "4": break;
			case "5": break;
			case "6": break;
			case "7": break;
			case "8": break;
			case "9": break;
			default: invalid = 1;
		}
	}
	if (invalid > 0)
	{
		return(false);
	}
	return(true);
}

// CREDIT CARD FUNCTIONS
function ValidatePaymentInfo(frmName)
{
	SelIndex = document[frmName].ddlCCType.selectedIndex
	if (document[frmName].ddlCCType.options[SelIndex].value == 0)
	{
		alert("Credit Card Type information is required!");
		document[frmName].ddlCCType.focus();
		return false;
	}
	if (document[frmName].txtCreditCardNumber.value == "" || document[frmName].txtCreditCardNumber.value == null)
	{
		alert("Credit Card Number information is required!");
		document[frmName].txtCreditCardNumber.focus();
		return false;
	}
	if (document[frmName].ddlCCType.options[SelIndex].value != 'CR' )
	{
		if (CheckLength(document[frmName].txtCreditCardNumber.value,16)==false)
		{
			alert("Credit Card Number is too long")
			document[frmName].txtCreditCardNumber.focus();
			return false;
	    }
		//	if (trimStr(document[frmName].CreditCardExpDate.value) == "")
		//	{
		//		alert("Expiration Date is required!");
		//		document[frmName].CreditCardExpDate.focus();
		//		return false;
		//	}
		if (document[frmName].txtCreditCardName.value == "" || document[frmName].txtCreditCardName.value == null)
		{
			alert("Cardholder's Name is required.");
			document[frmName].txtCreditCardName.focus();
			return false;
		}
		if ( !ValidateCreditCard(frmName) )
	    {
	        return false;
	    }
	}
	return true;
}

function ValidateCreditCardInfo(frmName)
{
	SelIndex = document[frmName].ddlCCType.selectedIndex
	if (document[frmName].ddlCCType.options[SelIndex].value == 0)
	{
		alert("Credit Card Type information is required!");
		document[frmName].ddlCCType.focus();
		return false;
	}
	if (document[frmName].txtCreditCardNumber.value == "" || document[frmName].txtCreditCardNumber.value == null)
	{
		alert("Credit Card Number information is required!");
		document[frmName].txtCreditCardNumber.focus();
		return false;
	}
	if (document[frmName].ddlCCType.options[SelIndex].value != 'CR' )
	{
		if (CheckLength(document[frmName].txtCreditCardNumber.value,16)==false)
		{
			alert("Credit Card Number is too long")
			document[frmName].txtCreditCardNumber.focus();
			return false;
	    }
		//	if (trimStr(document[frmName].CreditCardExpDate.value) == "")
		//	{
		//		alert("Expiration Date is required!");
		//		document[frmName].CreditCardExpDate.focus();
		//		return false;
		//	}
		if ( !ValidateCreditCard(frmName) )
	    {
	        return false;
	    }
	}
	return true;
}

var RequiredLength;
var CreditCardName;

function ValidateCreditCard(frmName)
{
	var strCreditCardNumber = trimStr(document[frmName].txtCreditCardNumber.value);
	var len = strCreditCardNumber.length;
	if (len == 0)
	{
		return true;
	}
	if ( !isInteger(strCreditCardNumber) )
	{
		alert("Please Note:\n\nCredit card number should contain only digits");
		return false;
	}
	var FirstFourDigits = strCreditCardNumber.substr(0,4);
	CheckCreditCardLength(FirstFourDigits, len);
	var SelIndex = document[frmName].ddlCCType.selectedIndex	
	if ( CreditCardName != trimStr(document[frmName].ddlCCType.options[SelIndex].text) )
	{
		alert("Please Note:\n\nSelected Credit card name, is not valid for the credit card number entered.")
		return false;
	}
	if ( len != RequiredLength )
	{
		var MissingDigits = len - RequiredLength;
		if ( MissingDigits < 0 )
		{
			alert("Please Note:\n\n" + CreditCardName + " number entered, but '" + strCreditCardNumber + "' is less digits than a " + CreditCardName + " should have.");
			return false;
		}
		else
		{
			alert("Please Note:\n\n" + CreditCardName + " number entered, but '" + strCreditCardNumber + "' is more digits than a " + CreditCardName + " should have.");
			return false;
		}
	}
	if ( Mod10Solution(strCreditCardNumber) == false )
	{
		alert("Please Note:\n\nCredit card number entered is invalid")
		return false;
	}
	return true; 
}

function CheckCreditCardLength(sNum, sLen) 
{   
	//	Diners Club
	if ( parseInt(sNum) >= 3000 && parseInt(sNum) <= 3059 )
	{
		RequiredLength = 14;
		CreditCardName = "Diners Club";
		return;
	}
	if ( parseInt(sNum) >= 3600 && parseInt(sNum) <= 3699 )
	{
		RequiredLength = 14;
		CreditCardName = "Diners Club"
		return;
	}
	if ( parseInt(sNum) >= 3800 && parseInt(sNum) <= 3889 )
	{
		RequiredLength = 14;
		CreditCardName = "Diners Club"
		return;
	}
	//	American Express
	if ( parseInt(sNum) >= 3400 && parseInt(sNum) <= 3499 )
	{
		RequiredLength = 15;
		CreditCardName = "American Express"
		return;
	}
	if ( parseInt(sNum) >= 3700 && parseInt(sNum) <= 3799 )
	{
		RequiredLength = 15;
		CreditCardName = "American Express"
		return;
	}
	//	JCB
	if ( parseInt(sNum) >= 3528 && parseInt(sNum) <= 3589 )
	{
		RequiredLength = 16;
		CreditCardName = "JCB"
		return;
	}
	//	Carte Blache    
	if ( parseInt(sNum) >= 3890 && parseInt(sNum) <= 3899 )
	{
		RequiredLength = 14;
		CreditCardName = "Carte Blache"
		return;
	}
	//	VISA
	if ( parseInt(sNum) >= 4000 && parseInt(sNum) <= 4999 )
	{
		CreditCardName = "VISA";
		if ( sLen > 14 )
		{
			RequiredLength = 16;
			return;
		}
		else
		{
			if ( sLen < 14 )
			{
				RequiredLength = 13;
				return;
			}
			else
			{
				alert("Please Note:\n\nVisa number entered, is 14 digits long!");
				RequiredLength = 0;
				return;
			}
		} 
	}
	//	MASTERCARD
	if ( parseInt(sNum) >= 5100 && parseInt(sNum) <= 5599 )
	{
		RequiredLength = 16;
		CreditCardName = "MasterCard";
		return;
	}
	//	Australian BankCard
	if ( parseInt(sNum) == 5610 )
	{
		RequiredLength = 16;
		CreditCardName = "Australian BankCard";
		return; 
	}
	//	Discover/Novus
	if ( parseInt(sNum) == 6011 )
	{
		RequiredLength = 16;
		//CreditCardName = "Discover/Novus";
		CreditCardName = "Discover";
		return;
	}
	RequiredLength = 0;
	CreditCardName = "";
	return;   
}

function Mod10Solution(strNum)
{
	var len = strNum.length;
	var location = 0;
	var checksum = 0;
	var Digit = 0;
	for (location = 1 - (len%2); location < len; location = location + 2)
	{
		checksum = checksum + parseInt(strNum.substr(location,1));
	}
	for (location = (len%2); location < len; location = location + 2)
	{
		Digit = parseInt(strNum.substr(location,1))*2;
		if ( Digit < 10 )
			checksum = checksum + Digit;
		else
			checksum = checksum + Digit - 9;
	}
	return (checksum % 10 == 0);
}
