﻿// JScript File
  
    function ValidatePhoneNumber(input,args) 
    {
        //  Designed to be Called From Custom Validator //
        //  Function Assumes that the control being     //
        //  Validated is identified in the validator    //
        //  as the "controltovalidate"                  //
        if (input.controltovalidate)
        {   var inControl=document.getElementById(input.controltovalidate) 
            var value = args.Value;
            //  Create 3 element array of valid digits  //
            var match = /^\s*[^\d]*(\d\d\d)[^\d]*\D*(\d\d\d)[^\d]*\D*(\d\d\d\d)\s*$/.exec(value)
            if (match)
            {
                inControl.value=match[1] + "-" + match[2] + "-" + match[3];
                args.IsValid=true;            
            } 
            else 
            {
                args.IsValid=false;
            }
        }
        else
        {
            args.IsValid=false;
        }
    }

function ValidateInt(input)
{
    var keyCode = window.event.keyCode;
    if (keyCode > 57 || keyCode < 48) 
        window.event.returnValue = false;
}

function CheckInt(input, inputLen, alertCtl)
{
    var inputVal = input.value
    if (inputVal.length == 0 || inputVal.length == inputLen)
    {
        alertCtl.value="";
        ResetBackgroundColor(input,"white");
    }
    else
    {
        alertCtl.value="Entry must have a length of " + inputLen;
        input.style.backgroundColor = "Tomato";
        input.focus();
    }
}

function checkAndFormatDate(input,args) //USE THIS FOR DATES
{   
    var inControl=document.getElementById(input.controltovalidate) 
    var value = args.Value;
    var match = /^\s*(\d?\d)\D*(\d?\d)\D*(\d\d(\d\d)?)\s*$/.exec(value)
    if (match)
    {
        var month = Number(match[1]);
        var date = Number(match[2]);
        var yearString = match[3];
        var year = Number(match[3]);
        if (yearString.length == 2) 
        {
            year += (year >= 20) ? 1900 : 2000;
        }
        // check validity of numbers
        var actualDate = new Date();
        actualDate.setFullYear(year, month-1, date);
        if (actualDate.getDate() != date || actualDate.getMonth() != month-1) 
        {
             args.IsValid=false;
        } 
        else 
        {
            inControl.value=(month < 10 ? "0" : "") + month +"/" +
            (date < 10 ? "0" : "") + date + "/" + year
            args.IsValid=true;            
        }
    } 
    else 
    {
        args.IsValid=false;
    }
}

function ValidateDate(input)
{
    var keyCode = window.event.keyCode;
    if (keyCode > 57 || keyCode < 47) //47=/
        window.event.returnValue = false;
}

Date.prototype.toMMDDYYYYString = function() 
{
    var dd=this.getDate();
    if(dd<10)dd='0'+dd;
    var mm=this.getMonth()+1;
    if(mm<10)mm='0'+mm;
    var yyyy=this.getFullYear();
    return String(mm+"\/"+dd+"\/"+yyyy);
}

function CheckDate(input, dateAlert)
{
    if (input.value == "")   //blank date is acceptable
    {
        document.getElementById(dateAlert.id).value="";
        ResetBackgroundColor(input,"white");
        return true;
    }
    
    var validformat1=/^\d{1}\/\d{1}\/\d{2}$/; //Basic check for format validity
    var validformat2=/^\d{1}\/\d{1}\/\d{4}$/; //Basic check for format validity
    var validformat3=/^\d{1}\/\d{2}\/\d{2}$/; //Basic check for format validity
    var validformat4=/^\d{1}\/\d{2}\/\d{4}$/; //Basic check for format validity
    var validformat5=/^\d{2}\/\d{2}\/\d{2}$/; //Basic check for format validity
    var validformat6=/^\d{2}\/\d{2}\/\d{4}$/; //Basic check for format validity
    var validformat7=/^\d{2}\/\d{1}\/\d{2}$/; //Basic check for format validity
    var validformat8=/^\d{2}\/\d{1}\/\d{4}$/; //Basic check for format validity
    var returnval=false;
    
    if (!validformat1.test(input.value) && !validformat2.test(input.value) && !validformat3.test(input.value) && !validformat4.test(input.value) && !validformat5.test(input.value) && !validformat6.test(input.value) && !validformat7.test(input.value) && !validformat8.test(input.value))
    {
        document.getElementById(dateAlert.id).value="Invalid date format";
        input.style.backgroundColor = "Tomato";
        input.focus();
    }
    else //Detailed check for valid date ranges
    {
        var monthfield=input.value.split("/")[0];
        var dayfield=input.value.split("/")[1];
        var yearfield=input.value.split("/")[2];
        if (yearfield.length == 2) yearfield = 2000 + parseInt(yearfield, 10);
        var dayobj = new Date(yearfield, monthfield-1, dayfield);
        if ((dayobj.getMonth()+1!=monthfield)||(dayobj.getDate()!=dayfield)||(dayobj.getFullYear()!=yearfield))
        {
            document.getElementById(dateAlert.id).value="Invalid date";
            input.style.backgroundColor = "Tomato";
            input.focus();
        }
        else
        {
            var dt = new Date(monthfield + '/' + dayfield + '/' + yearfield);
            input.value = dt.toMMDDYYYYString();
            document.getElementById(dateAlert.id).value="";
            ResetBackgroundColor(input,"white");
            returnval=true;
        }
    }
    return returnval;
}

function ResetBackgroundColor(input, backColor)
{
    input.style.backgroundColor = backColor;
}

function FormatZip(zipNbr)
{
    var zip = stripAlphaChars(zipNbr);
    if (zip.length > 5)
        zipNbr = zip.substr(0,5) + "-" + zip.substr(5);
    else
        zipNbr = zip;
    return zipNbr;
}

function CheckZip(input, alertCtl)
{
    var Zip = stripAlphaChars(input.value);
    if (Zip.length == 0 || Zip.length == 5 || Zip.length == 9)
    {
        alertCtl.value="";
        ResetBackgroundColor(input,"white");
    }
    else
    {
        alertCtl.value="Invalid zip code";
        input.style.backgroundColor = "Tomato";
        input.focus();
    }
}

function FormatPhone(phoneNbr)
{
    var phone = stripAlphaChars(phoneNbr);
    if (phone.length > 7)
        phoneNbr = phone.substr(0,3) + "-" + phone.substr(3,3) + "-" + phone.substr(6,4);
    else if (phone.length > 3)
        phoneNbr = phone.substr(0,3) + "-" + phone.substr(3);
    else
        phoneNbr = phone;
    return phoneNbr;
}

function CheckPhone(input, alertCtl)
{
    var phone = stripAlphaChars(input.value);
    if (phone.length == 0 || phone.length == 10)
    {
        alertCtl.value="";
        ResetBackgroundColor(input,"white");
    }
    else if (phone.length < 7)
    {
        alertCtl.value="Invalid phone #";
        input.style.backgroundColor = "Tomato";
        input.focus();
    }
    else if (phone.length < 10)
    {
        alertCtl.value="Missing area code";
        input.style.backgroundColor = "Tomato";
        input.focus();
    }
}

function stripAlphaChars(str) 
{ 
    var strOut = new String(str); 
    strOut = strOut.replace(/[^0-9]/g, ''); 
    return strOut; 
}

// Returns true if string s is empty or whitespace characters only.
function isWhitespace(s)
{   
    var whitespace = " \t\n\r"; //whitespace characters
    var i;

    // Is s empty?
    if ((s == null) || (s.length == 0)) 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 CheckEmail(input, alertCtl)
{    
   var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
   var address = input.value;
   if (!isWhitespace(input.value) && reg.test(address) == false) 
   {
        alertCtl.value="Invalid email address";
        input.style.backgroundColor = "Tomato";
        input.focus();
   }
   else
   {
        alertCtl.value="";
        ResetBackgroundColor(input,"white");
   }
}

var windowState = (function(){
var readScroll = {scrollLeft:0,scrollTop:0};
var readSize = {clientWidth:0,clientHeight:0};
var readScrollX = 'scrollLeft';
var readScrollY = 'scrollTop';
var readWidth = 'clientWidth';
var readHeight = 'clientHeight';
function otherWindowTest(obj){
if((document.compatMode)&&
(document.compatMode == 'CSS1Compat')&&
(document.documentElement)){
return document.documentElement;
}else if(document.body){
return document.body;
}else{
return obj;
}
};
if((typeof this.innerHeight == 'number')&&
(typeof this.innerWidth == 'number')){
readSize = this;
readWidth = 'innerWidth';
readHeight = 'innerHeight';
}else{
readSize = otherWindowTest(readSize);
}
if((typeof this.pageYOffset == 'number')&&
(typeof this.pageXOffset == 'number')){
readScroll = this;
readScrollY = 'pageYOffset';
readScrollX = 'pageXOffset';
}else{
readScroll = otherWindowTest(readScroll);
}
return {
getScrollX:function(){
return (readScroll[readScrollX]||0);
},
getScrollY:function(){
return (readScroll[readScrollY]||0);
},
getWidth:function(){
return (readSize[readWidth]||0);
},
getHeight:function(){
return (readSize[readHeight]||0);
}
};
})();
