﻿function DataControl(){
    this.FormatDate=function(InputString){
        var Validator=new Validation();
        if(!Validator.IsDate(InputString)){
            alert("DataControl: Input is not a date.");
            return null;
        }
        InputString+="";
        var NewDate=new Date(InputString);
        var ReturnString=(NewDate.getMonth()+1) + "/" + NewDate.getDate() + "/" + NewDate.getFullYear();
        return ReturnString;
    }
    this.FormatPhone=function(InputString){
        var Validator=new Validation();
        if(!Validator.IsPhone(InputString)){
            alert("DataControl: Input does not contain a valid phone number.");
            return null;
        }
        var ReturnString=this.GetNumbersOnly(InputString);
        if(ReturnString.length==7){
            ReturnString=ReturnString.substring(0, 3) + "-" + ReturnString.substring(3, 7);
        }
        if(ReturnString.length==10){
            ReturnString="(" + ReturnString.substring(0, 3) + ") " + ReturnString.substring(3, 6) + "-" + ReturnString.substring(6, 10);
        }
        return ReturnString;
    }
    this.FormatZip=function(InputString){
        var Validator=new Validation();
        if(!Validator.IsZip(InputString)){
            alert("DataControl: Input does not contain a valid ZIP code.");
            return null;
        }
        var ReturnString=this.GetNumbersOnly(InputString);
        if(ReturnString.length==9){
            ReturnString=ReturnString.substring(0, 5) + "-" + ReturnString.substring(5, 9);
        }
        return ReturnString;
    }
    this.GetAlphaNumbersOnly=function(InputString){
        InputString+="";
        var re=new RegExp("\\W", "gi");
        var ReturnString=InputString.replace(re, "");
        return ReturnString;
    }
    this.GetNumbersOnly=function(InputString){
        InputString+="";
        var re=new RegExp("\\D", "gi");
        var ReturnString=InputString.replace(re, "");
        return ReturnString;
    }
    this.GetCurrencyNumbersOnly=function(InputString){
        InputString+="";
        var re=new RegExp("\\$|,", "gi");
        var ReturnString=InputString.replace(re, "");
        return ReturnString;
    }    
    this.ReplaceInvalidSqlChar=function(InputString){
        return InputString;
    }
    this.Trim=function(InputString){
        InputString+="";       
        var re=new RegExp("^\\s+");
        var ReturnString=InputString.replace(re, "");
        var re=new RegExp("\\s+$");
        ReturnString=ReturnString.replace(re, "");
        return ReturnString;
    }
    this.FormatCurrency=function FormatCurrency(sNum) {
        sNum = sNum.toString().replace(/\$|\,/g,'');
    	
        if(isNaN(sNum))
	        sNum = "0";
    	
        var sTemp = sNum;
    	
        var bSign = (Number(sNum) == (sNum = Math.abs(sNum)));
        sNum = Math.floor(sNum*100+0.50000000001);
        var sCents = sNum%100;
        sNum = Math.floor(sNum/100).toString();
    	
        if(sCents<10)
	        sCents = "0" + sCents;

        for (var i = 0; i < Math.floor((sNum.length-(1+i))/3); i++)
	        sNum = sNum.substring(0,sNum.length-(4*i+3))+ ',' + sNum.substring(sNum.length-(4*i+3));

        return (((bSign)?'':'-') + '$' + sNum + '.' + sCents);
    }    
}

function Validation(){
    var StatesXml=null;
    
    this.GetStatesXml=function(){
        if(StatesXml==null){
            if(document.implementation && document.implementation.createDocument){
                StatesXml=document.implementation.createDocument("", "", null);
                StatesXml.async=false;
            }else if(window.ActiveXObject){
                StatesXml=new ActiveXObject("Microsoft.XMLDOM");
                StatesXml.async=false;
                while(StatesXml.readyState!=4){}
            }else{
                alert("Validation: Browser does not support XML.");
            }
            StatesXml.load("http://automobiles.honda.com/config/states.xml");
        }
        return StatesXml;
    }
    this.HasInvalidSqlChar=function(InputString){
        if(this.IsEmpty(InputString)) return false;
        InputString+="";
        var DataController=new DataControl();
        var CompareString=DataController.ReplaceInvalidSqlChar(InputString);
        var SameLength=true;
        if(CompareString.length==InputString.length) SameLength=false;
        return SameLength;
    }
    this.IsAlphaNumeric=function(InputString){
        if(this.IsEmpty(InputString)) return false;
        InputString+="";
        var DataController=new DataControl();
        var CompareString=DataController.GetAlphaNumbersOnly(InputString);
        var AlphaNumeric=false;
        if(CompareString.length==InputString.length) AlphaNumeric=true;
        return AlphaNumeric;
    }
    this.IsDate=function(InputString){
        if(this.IsEmpty(InputString)) return false;
        InputString+="";
        var NewDate=new Date(InputString);
        var ValidDate=true;
        if(NewDate.getFullYear().toString()=="NaN") ValidDate=false;
        return ValidDate;
    }
    this.IsEmail=function(InputString){
        if(this.IsEmpty(InputString)) return false;
        InputString+="";
        var ValidEmail=false;
        var re=new RegExp("^.+@[^\\.].*\\.([a-z]|[A-Z]){2,}$", "gi");
        if(InputString.match(re)) ValidEmail=true;
        
        // Check to see if address has a comma in it
        if (InputString.indexOf(',') >= 0) {
            ValidEmail = false;
        }
        return ValidEmail;
    }
    this.IsEmpty=function(InputString){
        var undefined, EmptyFlag=false;
        if(InputString==null) EmptyFlag=true;
        if(InputString==undefined) EmptyFlag=true;
        if(InputString=="") EmptyFlag=true;
        return EmptyFlag;
    }
    this.IsInArray=function(InputArray, Input){
        var Found=false;
        for(var i=0; i<InputArray.length; i++){
            if(InputArray[i]==Input) Found=true;
        }
        return Found;
    }
    this.IsLength=function(InputString, InputLength){
        var Shorter=false;
        if(this.IsEmpty(InputString)){
            if(InputLength>=0) return true;
            return false;
        }
        InputString+="";
        if(InputString.length<=InputLength) Shorter=true;
        return Shorter;
    }
    this.IsNumeric=function(InputString){
        if(this.IsEmpty(InputString)) return false;
        InputString+="";
        var DataController=new DataControl();
        var CompareString=DataController.GetNumbersOnly(InputString);
        var Numeric=false;
        if(CompareString.length==InputString.length) Numeric=true;
        return Numeric;
    }
    this.IsNumericDecimal=function(InputString) {
      return /^[-]?([1-9]{1}[0-9]{0,}(\.[0-9]{0,2})?|0(\.[0-9]{0,2})?|\.[0-9]{1,2})$/.test(InputString);
    }
    this.IsCurrency=function(InputString) {
        return /^\$?\-?([1-9]{1}[0-9]{0,2}(\,\d{3})*(\.\d{0,2})?|[1-9]{1}\d{0,}(\.\d{0,2})?|0(\.\d{0,2})?|(\.\d{1,2}))$|^\-?\$?([1-9]{1}\d{0,2}(\,\d{3})*(\.\d{0,2})?|[1-9]{1}\d{0,}(\.\d{0,2})?|0(\.\d{0,2})?|(\.\d{1,2}))$|^\(\$?([1-9]{1}\d{0,2}(\,\d{3})*(\.\d{0,2})?|[1-9]{1}\d{0,}(\.\d{0,2})?|0(\.\d{0,2})?|(\.\d{1,2}))\)$/.test(InputString);
    }
    this.IsPhone=function(InputString){
        if(this.IsEmpty(InputString)) return false;
        InputString+="";
        var DataController=new DataControl();
        var PhoneString=DataController.GetNumbersOnly(InputString);
        var PhoneNumber=false;
        if(PhoneString.length==10) PhoneNumber=true;
        return PhoneNumber;
    }
    this.IsState=function(InputString){
        if(this.IsEmpty(InputString)) return false;
        InputString+="";
        var States=this.GetStatesXml();
        if(document.implementation && document.implementation.createDocument){
            var Evaluator=new XPathEvaluator();
            var XPathQuery="//*[@abbrev='" + InputString + "']";
            var StateNode=Evaluator.evaluate(XPathQuery, States.documentElement, null, XPathResult.ANY_UNORDERED_NODE_TYPE, null);
            if(StateNode.singleNodeValue!=null) return true;
            return false;
        }else if(window.ActiveXObject){
            var StateNode=States.selectSingleNode("//*[@abbrev='" + InputString + "']");
            if(StateNode!=null) return true;
            return false;
        }
        return false;
    }
    this.IsZip=function(InputString){
        if(this.IsEmpty(InputString)) return false;
        InputString+="";
        var DataController=new DataControl();
        var ZipString=DataController.GetNumbersOnly(InputString);
        var ZipCode=false;
        if(ZipString.length==5 || ZipString.length==9) ZipCode=true;
        return ZipCode;
    }
}