function FormatString()
{
    var formattedString = arguments[0];
    for(var i =  1; i < arguments.length; i ++)
    {
        formattedString  = formattedString.replace(('%' + new String(i)), arguments[i]);
    }           
    return formattedString; 
}

var Validation = {
     CONSTANTS_ERROR:{
          BlankError:"*This field cannot be blank",
          NumberTypeError: "*Please enter a numeric value.",
          IntNumberTypeError:"*Please enter a number without decimal point",
          IntOutOfRangeError:"*Please enter an integer between %1 and %2." ,
          OutOfRangeError:"*Please enter a value between %1 and %2." ,
          WholeNumberOutOFRangeError:"*Please enter a whole number between %1 and %2." ,
          GreaterValueError:"*Please enter a value greater than %1",
          LessValueError:"*Please enter a value less than %1",
          WholeNumberTypeError:"*Please enter a whole number."        
    },
    MORTGAGE_POINT_ADVISER_ERROR:{
    MorgagePointAdviserErr1:"*Please enter a valid number greater than or equal to $1",
    MorgagePointAdviserErr2: "*Please enter a valid number greater than or equal to 0%",
    MorgagePointAdviserErr3: "*Interest Rate for Mortgage 1 must be greater than Interest Rate for Mortgage 2.",
    MorgagePointAdviserErr4: "*Points for Mortgage 2 must be greater than Points for Mortgage 1"
    
    
    },
    errMessage:"",
    separator: ",",  // use comma as 000's separator
    decpoint: ".",  // use period as decimal point
    percent: "%",
    currency: "$",  // use dollar sign for currency
//    numb = '0123456789',
 //   mth = [' ','january','february','march','april','may','june','july','august','september','october','november','december'],
// day = [31,28,31,30,31,30,31,31,30,31,30,31],
 IsBlank: function(val)
    {
        if(val.blank())
        {
         Validation.errMessage = Validation.CONSTANTS_ERROR.BlankError;
                return true;
        }
        for(var i = 0; i< val.length; i++)
        {
            var c = val.charAt(i);
            if((c == ' ') || (c == '\n'))
            {
                Validation.errMessage = Validation.CONSTANTS_ERROR.BlankError;
                return true;              
            }            
        }    
        return false;
        
    },
    CleanVariable:function(val)
    {
        val = Validation.replaceSubstring(val, ",", "");
        val = Validation.replaceSubstring(val, "$", "");
        val = Validation.replaceSubstring(val, " ", "");
        val = Validation.replaceSubstring(val, "%", "");
        return val;
    },
    Clear:function(s)
    {
	    if(s != "")
	    {
		    s = Validation.replaceSubstring(s, "$", "");
		    s = Validation.replaceSubstring(s, ",", "");
		    s = Validation.replaceSubstring(s, "%", "");
	    }
	    return(s);
    },
    IsNumeric:function (TextObject)
    {
       if (!isNaN(TextObject.value)) return false;
       else
       {
        TextObject.select();
        TextObject.focus();
       }
       return true;
    },
    OnlyCharacters:function (Value)
    {
	    if (!(Value.search(/(a-z)+/))) return false;

	    return true;
    },
    CheckFloat:function(val, min, max, symbol)
    {
        val = Validation.CleanVariable(val);

        if(Validation.IsBlank(val))
            return false;

        if(!Validation.IsFloat(val))
            return false;

        if(eval(val) < min || eval(val) > max)
        {
           if(symbol == '$')
            {
                Validation.errMessage = FormatString(Validation.CONSTANTS_ERROR.OutOfRangeError, symbol+ min, symbol + max );
            }
            else
            {
                Validation.errMessage = FormatString(Validation.CONSTANTS_ERROR.OutOfRangeError,min + symbol ,max + symbol );
            }
            return false;
        }

        return true;
    },
    CheckWholeNumber:function(val, min, max, symbol)
    {
        val = Validation.CleanVariable(val);

        if(Validation.IsBlank(val))
            return false;
            
            if(Validation.IsWholeNumber(val))
            return false;

        var num = new Number(val);
        if (isNaN(num) || num < min || num > max)
        {
            if(symbol == '$')
            {
                Validation.errMessage = FormatString(Validation.CONSTANTS_ERROR.WholeNumberOutOFRangeError, symbol + min, symbol + max );
            
            }
            else
            {
                Validation.errMessage = FormatString(Validation.CONSTANTS_ERROR.WholeNumberOutOFRangeError, min + symbol , max + symbol  );
            
            }
            return false;
        }
        return true;
    },
     CheckInteger:function(val, min, max, symbol)
    {
        val = Validation.CleanVariable(val);

        if(Validation.IsBlank(val))
            return false;
        
        //check it is digit value only
        if(!Validation.IsInteger(val))
            return false;
        
        if ( val < min || val > max)
        {
            if(symbol == '$')
            {
                Validation.errMessage = FormatString(Validation.CONSTANTS_ERROR.IntOutOfRangeError, symbol + min, symbol + max );
            
            }
            else
            {
                Validation.errMessage = FormatString(Validation.CONSTANTS_ERROR.IntOutOfRangeError, min + symbol , max + symbol  );
            
            }
            return false;
        }
        return true;
    },
    IsGreater:function(val,min, symbol)
    {
       val = Validation.CleanVariable(val);

        if(Validation.IsBlank(val))             
            return false;        

        if(isNaN(val))
        {
            Validation.errMessage = Validation.CONSTANTS_ERROR.NumberTypeError;
            return false;
        }
        if(eval(val) <= min )
        {
             if(symbol == '$')
            {
                Validation.errMessage = FormatString(Validation.CONSTANTS_ERROR.GreaterValueError, symbol+ min );
            }
            else
            {
                Validation.errMessage = FormatString(Validation.CONSTANTS_ERROR.GreaterValueError,min + symbol  );
            }
           return false;
        }

        return true;
    
    },
    IsLess:function(val,max,symbol)
    {
    
        val = Validation.CleanVariable(val);

        if(Validation.IsBlank(val))             
            return false;        

        if(isNaN(val))
        {
            Validation.errMessage = Validation.CONSTANTS_ERROR.NumberTypeError;
            return false;
        }
        if(eval(val) >= max )
        {
            if(symbol == '$')
            {
                Validation.errMessage = FormatString(Validation.CONSTANTS_ERROR.LessValueError, symbol+ min );
            }
            else
            {
                Validation.errMessage = FormatString(Validation.CONSTANTS_ERROR.LessValueError,min + symbol );
            }
            return false;
        }

        return true;
    },
    IsWholeNumber:function(value)
    {
        var i;
	
	    value= Validation.replaceSubstring(value, "$", "");
	    value= Validation.replaceSubstring(value, ",", "");
	    value = Validation.replaceSubstring(value, " ", "");	    
	   if(isNaN(value) || value=="" )
	    { 
	        Validation.errMessage = Validation.CONSTANTS_ERROR.NumberTypeError;
	        return false;
	    }
	    //if the number isn't an integer, return false
        var n = new Number(value);
        if (n != n.round())
        {
            Validation.errMessage = Validation.CONSTANTS_ERROR.WholeNumberTypeError;            
            return false;
        }
        return true;        
    },
    
    IsInteger:function(value)
    {
        var i;
	
	    value= Validation.replaceSubstring(value, "$", "");
	    value= Validation.replaceSubstring(value, ",", "");
	    value = Validation.replaceSubstring(value, " ", "");	
	    value = Validation.replaceSubstring(value, "%", "");    
	    if(isNaN(value) || value=="") 
	    {
	        Validation.errMessage = Validation.CONSTANTS_ERROR.NumberTypeError;
	        return false;
	     }
	     //<RR - 07/05/2007> Check if s is not a number. If it is (,.- etc) then return false.
         for (i = 0; i < value.length; i++)
         {   
            var c = value.charAt(i);
            if(c == "-") continue;
            if (((c < "0") || (c > "9")))
            {
                Validation.errMessage = Validation.CONSTANTS_ERROR.IntNumberTypeError;            
                return false;
            }
        }
        return true;        
    },
    IsFloat: function(s)
    {   
	    var i, Count;
	    Count = 0;
	    s = Validation.replaceSubstring(s, "$", "");
	    s = Validation.replaceSubstring(s, ",", "");
	    s = Validation.replaceSubstring(s, "%", "");
	    s = Validation.replaceSubstring(s, " ", "");
	    if(isNaN(s) || s=="")
	    { 
	    Validation.errMessage = Validation.CONSTANTS_ERROR.NumberTypeError;
	    return false;}//<RR - 07/05/2007> Check if s is not a number. If it is (,.- etc) then return false.
	    for (i = 0; i < s.length; i++){   
            var c = s.charAt(i);
            if(c == ".") Count++;
            if(Count == 2) 
            {
            Validation.errMessage = Validation.CONSTANTS_ERROR.NumberTypeError;
                return false;
                
                }
            if(c == "-") continue;
            if (((c < "0") || (c > "9")) && (eval(s.charCodeAt(i)) != 46)) 
            {
                Validation.errMessage = Validation.CONSTANTS_ERROR.NumberTypeError;
                return false;
            }
        }
        return true;
    },    
    replaceSubstring: function(inputString, fromString, toString) {
       // Goes through the inputString and replaces every occurrence of fromString with toString
       var temp = inputString;
       if (fromString == "") {
          return inputString;
       }
       if (toString.indexOf(fromString) == -1) { // If the string being replaced is not a part of the replacement string (normal situation)
          while (temp.indexOf(fromString) != -1) {
             var toTheLeft = temp.substring(0, temp.indexOf(fromString));
             var toTheRight = temp.substring(temp.indexOf(fromString)+fromString.length, temp.length);
             temp = toTheLeft + toString + toTheRight;
          }
       } else { // String being replaced is part of replacement string (like "+" being replaced with "++") - prevent an infinite loop
          var midStrings = new Array("~", "`", "_", "^", "#");
          var midStringLen = 1;
          var midString = "";
          // Find a string that doesn't exist in the inputString to be used
          // as an "inbetween" string
          while (midString == "") {
             for (var i=0; i < midStrings.length; i++) {
                var tempMidString = "";
                for (var j=0; j < midStringLen; j++) { tempMidString += midStrings[i]; }
                if (fromString.indexOf(tempMidString) == -1) {
                   midString = tempMidString;
                   i = midStrings.length + 1;
                }
             }
          } // Keep on going until we build an "inbetween" string that doesn't exist
          // Now go through and do two replaces - first, replace the "fromString" with the "inbetween" string
          while (temp.indexOf(fromString) != -1) {
             var toTheLeft = temp.substring(0, temp.indexOf(fromString));
             var toTheRight = temp.substring(temp.indexOf(fromString)+fromString.length, temp.length);
             temp = toTheLeft + midString + toTheRight;
          }
          // Next, replace the "inbetween" string with the "toString"
          while (temp.indexOf(midString) != -1) {
             var toTheLeft = temp.substring(0, temp.indexOf(midString));
             var toTheRight = temp.substring(temp.indexOf(midString)+midString.length, temp.length);
             temp = toTheLeft + toString + toTheRight;
          }
       } // Ends the check to see if the string being replaced is part of the replacement string or not
       return temp; // Send the updated string back to the user
    },
    stripCharsInBag: function(s, bag){
	var i;
    var returnString = "";
    // Search through string's characters one by one.
    // If character is not in bag, append to returnString.
    for (i = 0; i < s.length; i++){   
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
},
daysInFebruary: function(year){
	// February has 29 days in any year evenly divisible by four,
    // EXCEPT for centurial years which are not also divisible by 400.
    return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
},
DaysArray: function(n) {
	for (var i = 1; i <= n; i++) {
		this[i] = 31
		if (i==4 || i==6 || i==9 || i==11) {this[i] = 30;}
		if (i==2) {this[i] = 29;}
   } 
   return this;
},
IsDate: function(dtStr)
{
	var dtCh = "/";
	var daysInMonth = Validation.DaysArray(12);
	var pos1=dtStr.indexOf(dtCh);
	var pos2=dtStr.indexOf(dtCh,pos1+1);
	var strMonth=dtStr.substring(0,pos1);
	var strDay=dtStr.substring(pos1+1,pos2);
	var strYear=dtStr.substring(pos2+1);
	strYr=strYear;
	if (strDay.charAt(0)=="0" && strDay.length>1) strDay=strDay.substring(1);
	if (strMonth.charAt(0)=="0" && strMonth.length>1) strMonth=strMonth.substring(1);
	for (var i = 1; i <= 3; i++) {
		if (strYr.charAt(0)=="0" && strYr.length>1) strYr=strYr.substring(1);
	}
	month=parseInt(strMonth);
	day=parseInt(strDay);
	year=parseInt(strYr);
	if (pos1==-1 || pos2==-1){
		Validation.errMessage ="*The date format should be : mm/dd/yyyy";
		return false;
	}
	if (strMonth.length<1 || month<1 || month>12){
		Validation.errMessage ="*Please enter a valid month";
		return false;
	}
	if (strDay.length<1 || day<1 || day>31 || (month==2 && day>Validation.daysInFebruary(year)) || day > daysInMonth[month]){
		Validation.errMessage ="*Please enter a valid day";
		return false;
	}
	if (strYear.length != 4 || year==0){
		Validation.errMessage ="*Please enter a valid 4 digit year";
		return false;
	}
	if (dtStr.indexOf(dtCh,pos2+1)!=-1 || Validation.IsInteger(Validation.stripCharsInBag(dtStr, dtCh))==false){
		Validation.errMessage ="*Please enter a valid date";
		return false;
	}
	return true;
	
}
}

