/****************************************** Input Box Length Validation */
function badLength(element,msg)
{
    if(element.value.length == 0)
    {
        alert(msg);
        element.focus();
        return false;
    }
    return true;
}

/****************************************** Simple String Validation */
function isValid(string,vstring)
{
         if(vstring == "alpha") { var regex = /^([a-z])+$/; }
    else if(vstring == "ALPHA") { var regex = /^([A-Z])+$/; }
    else if(vstring == "Alpha") { var regex = /^([a-zA-Z])+$/; }
    else if(vstring == "num")   { var regex = /^([0-9])+$|^([0-9])+(\.)?([0-9])*$/; }
    else if(vstring == "$")     { var regex = /^([0-9])+(\.)?([0-9])?([0-9])?$/; }
    else if(vstring == "email") { var regex = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/; }
    else if(vstring == "phone") { var regex = /^\(?\d{3}\)?(\-| |\.)?\d{3}(\-| |\.)?\d{4}$/; }
    else if(vstring == "ssn")   { var regex = /^\d{3}\-?\d{2}\-?\d{4}$/; }
    else if(vstring == "url")   { var regex = /^http:\/\/([a-zA-Z0-9_\.\-])+\.+([a-zA-Z0-9_\.\-])/; }
    else if(vstring == "zip")   { var regex = /^(\d{5})(-(\d{4}))?$/; }
    else var regex = vstring;
    return regex.test(string);
}

/*********************************************** Date Validation */
function isValidDate(dateStr)
{
	// Checks for the following valid date formats:
	// MM/DD/YY   MM/DD/YYYY   MM-DD-YY   MM-DD-YYYY
	// Also separates date into month, day, and year variables

	var datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{2}|\d{4})$/;

	// To require a 4 digit year entry, use this line instead:
	// var datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{4})$/;

	var matchArray = dateStr.match(datePat); // is the format ok?
	if (matchArray == null)
    {
		//alert("Please Enter a Valid Date.");
		return false;
    }
	month = matchArray[1]; // parse date into variables
	day = matchArray[3];
	year = matchArray[4];
  
	if (month < 1 || month > 12) // check month range
    {
		//alert("Please Enter a Valid Date.");
		return false;
	}
  
	if (day < 1 || day > 31)
    {
		//alert("Please Enter a Valid Date.");
		return false;
	}

	if ((month==4 || month==6 || month==9 || month==11) && day==31)
    {
		//alert("Please Enter a Valid Date.");
		return false
	}
  
	if (month == 2)
    { // check for february 29th
		var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
		if (day>29 || (day==29 && !isleap))
        {
			//alert("Please Enter a Valid Date.");
			return false;
		}
	}
	
	return true;  // date is valid
}

/*********************************************** Time Validation */
function isValidTime(val,m)
{
    if(val.length == 0 || val.length > 5)
    {
        return false;
    }
    if(val.charAt(0) == "0")
    {
        if(!charValid(val.charAt(1),((m)?"num":"123456789")))
        {
            return false;
        }
    }
    else if(val.charAt(0) == "1" || (val.charAt(0) == "2" && m))
    {
        if((!charValid(val.charAt(1),"012") && val.length == 2)
            || (m && !charValid(val.charAt(1),((val.charAt(0)=="2")?"0123":"num"))))
        {
            return false;
        }
    }
    else
    {
        return false;
    }
    if(val.indexOf(":") != -1)
    {
        mins = val.substring(val.indexOf(":")+1,val.length);
        if(mins.length != 2)
        {
            return false;
        }
        if(charValid(mins.charAt(0),"012345") && charValid(mins.charAt(1),"num"))
        {
        }
        else
        {
            return false;
        }
    }

    return true;
}

/*********************************************** Date Difference */
function y2k(number) { return (number < 1000) ? number + 1900 : number; }
function dateDiff(date1,date2)
{
    var tempdate = "";
    tempdate = date1.substring(8,10) + "," + date1.substring(3,5) + "," + date1.substring(0,2);
    date1 = eval("new Date("+tempdate+")");
    tempdate = date2.substring(8,10) + "," + date2.substring(3,5) + "," + date2.substring(0,2);
    date2 = eval("new Date("+tempdate+")");
    var difference = Date.UTC(y2k(date1.getYear()),date1.getMonth(),date1.getDate(),0,0,0) - Date.UTC(y2k(date2.getYear()),date2.getMonth(),date2.getDate(),0,0,0);
    return difference/1000/60/60/24;
}

/****************************************** String Replace Function */
function replace(string,text,by)
{
    var strLength = string.length;
    var txtLength = text.length;
    if ((strLength == 0) || (txtLength == 0)) return string;
    var i = string.indexOf(text);
    if ((!i) && (text != string.substring(0,txtLength))) return string;
    if (i == -1) return string;
    var newstr = string.substring(0,i) + by;
    if (i+txtLength < strLength) newstr += replace(string.substring(i+txtLength,strLength),text,by);
    return newstr;
}

/****************************************** Credit Card Validation */
function isValidCC(card,num,element)
{
    if(card == "" || num == "") return false;
    var regex = /^/; var ccform = "";
    var ccn = ""; var nums = "0123456789";
    for(var i=0;i<num.length;i++)
    {
        if(nums.indexOf(num.substring(i,i+1)) != -1) ccn += num.substring(i,i+1);
    }
    if(card == "AX") { regex = /^3[4,7]\d{13}$/; ccform = "xxxx-xxxxxx-xxxxx" }
    else if(card == "CB") { regex = /^389\d{11}$/; ccform = "xxxx-xxxxxx-xxxx" }
    else if(card == "DC") { regex = /(^38[0-8]\d{11})|(^3[0,6]\d{12})$/; ccform = "xxxx-xxxxxx-xxxx" }
    else if(card == "DI") { regex = /^6011\d{12}$/; ccform = "xxxx-xxxx-xxxx-xxxx" }
    else if(card == "JC") { regex = /^3((5[3-8][0-9][0-9][0-9])|(33[7-9][0-9][0-9])|(34[0-9][0-9][0-9])|(528[0-9][0-9])|(15[8,9][0-9][0-9])|(11[2-9][0-9][0-9])|(120[0-9][0-9])|(10[0-2][0-9][0-9])|(09[6-9][0-9][0-9])|(09[0-4][0-9][0-9])|(08[8-9][0-9][0-9]))\d{10}$/; ccform = "xxxx-xxxx-xxxx-xxxx" }
    else if(card == "MC") { regex = /^5[1-5]\d{14}$/; ccform = "xxxx-xxxx-xxxx-xxxx" }
    else if(card == "VI") { regex = /^4\d{12}|\d{15}$/; ccform = "visa" }
    var checksum = 0;
    for(var i=(2-(ccn.length % 2)); i<=ccn.length; i+=2) { checksum += parseInt(ccn.charAt(i-1)); }
    for(var i=(ccn.length % 2) + 1; i<ccn.length; i+=2)
    {
        var digit = parseInt(ccn.charAt(i-1)) * 2;
        checksum += (digit < 10)?digit:(digit-9);
    }
    if((checksum % 10) != 0) return false;
    if(element)
    {
        if(ccform == "visa") ccform = (ccn.length == 13)?"xxxx-xxxxx-xxxx":"xxxx-xxxx-xxxx-xxxx";
        var ccnform = ""; var count = 0;
        for(var i=0;i<ccform.length;i++)
        {
            if(ccform.charAt(i) == "x")
            {
                ccnform += ("" + ccn.charAt(count));
                count++;
            }
            else
            {
                ccnform += ("" + ccform.charAt(i));
            }
        }
        element.value = ccnform;
    }
    return true;
}

/****************************************** Dollar Format */
function dollar(amount)
{
    var whole = Math.floor(amount);
    var cent = Math.round((amount - Math.floor(amount)) * 100);
    return "$" + whole + "." + ((cent < 10 && cent > 0)?("0" + cent):((cent)?cent:"00"));
}

