var Softsmart_Validation_Digits = "0123456789";
var Softsmart_Validation_Whitespace = " \t\n\r";
var Softsmart_Validation_PhoneNumberDelimiters = "()- ";
var Softsmart_Validation_DigitsInZIPCode1 = 5
var Softsmart_Validation_DigitsInZIPCode2 = 9
var Softsmart_Validation_DigitsInUSPhoneNumber = 10;
var Softsmart_Validation_DefaultEmptyOk = false;

function Softsmart_Validation_MakeArray(upper){for (var index = 1; index <= upper; index++){this[index] = 0} return this;}

var Softsmart_Validation_DaysInMonth = Softsmart_Validation_MakeArray(12);
Softsmart_Validation_DaysInMonth[1] = 31;
Softsmart_Validation_DaysInMonth[2] = 29;
Softsmart_Validation_DaysInMonth[3] = 31;
Softsmart_Validation_DaysInMonth[4] = 30;
Softsmart_Validation_DaysInMonth[5] = 31;
Softsmart_Validation_DaysInMonth[6] = 30;
Softsmart_Validation_DaysInMonth[7] = 31;
Softsmart_Validation_DaysInMonth[8] = 31;
Softsmart_Validation_DaysInMonth[9] = 30;
Softsmart_Validation_DaysInMonth[10] = 31;
Softsmart_Validation_DaysInMonth[11] = 30;
Softsmart_Validation_DaysInMonth[12] = 31;

function Softsmart_Validation_IsEmpty(stringValue){return ((stringValue == null) || (stringValue.length == 0))}

function Softsmart_Validation_IsWhitespace(stringValue){
    if (Softsmart_Validation_IsEmpty(stringValue)){return true;}

    for (var index = 0; index < stringValue.length; index++){   
        var character = stringValue.charAt(index);
        if (Softsmart_Validation_Whitespace.indexOf(character) == -1){return false;}
    }

    return true;
}

function Softsmart_Validation_FormStripCharactersFromString(stringValue, removeCharacters){
	var returnString = "";

    for (var index = 0; index < stringValue.length; index++){   
        var character = stringValue.charAt(index);
        if (removeCharacters.indexOf(character) == -1){returnString += character;}
    }

    return returnString;
}

function Softsmart_Validation_IsLetter(character){return (((character >= "a") && (character <= "z")) || ((character >= "A") && (character <= "Z")));}
function Softsmart_Validation_IsDigit(character){return ((character >= "0") && (character <= "9"));}
function Softsmart_Validation_IsSpace(character){return (character == " ");}
function Softsmart_Validation_IsComma(character){return (character == ",");}
function Softsmart_Validation_IsDot(character){return (character =="." );}

function Softsmart_Validation_IsInteger(stringValue){
    if (Softsmart_Validation_IsEmpty(stringValue) == true){
       if (Softsmart_Validation_IsInteger.arguments.length == 1){return Softsmart_Validation_DefaultEmptyOk;} else {return (Softsmart_Validation_IsInteger.arguments[1] == true);}
	}

    for (var index = 0; index < stringValue.length; index++){   
        var character = stringValue.charAt(index);
        if (Softsmart_Validation_IsDigit(character) == false){return false;}
    }

    return true;
}

function Softsmart_Validation_IsSignedInteger(stringValue){
	if (Softsmart_Validation_IsEmpty(stringValue) == true){
		if (Softsmart_Validation_IsSignedInteger.arguments.length == 1){return Softsmart_Validation_DefaultEmptyOk;} else {return (Softsmart_Validation_IsSignedInteger.arguments[1] == true);}
	}

    var start = 0;
    var secondArgument = Softsmart_Validation_DefaultEmptyOk;

    if (Softsmart_Validation_IsSignedInteger.arguments.length > 1){secondArgument = Softsmart_Validation_IsSignedInteger.arguments[1];}
    if ((stringValue.charAt(0) == "-") || (stringValue.charAt(0) == "+")){start = 1;}

    return (Softsmart_Validation_IsInteger(stringValue.substring(start, stringValue.length), secondArgument));
}

function Softsmart_Validation_IsNonNegativeInteger(stringValue){
	var secondArgument = Softsmart_Validation_DefaultEmptyOk;
    if (Softsmart_Validation_IsNonNegativeInteger.arguments.length > 1){secondArgument = Softsmart_Validation_IsNonNegativeInteger.arguments[1];}
    return (Softsmart_Validation_IsSignedInteger(stringValue, secondArgument) && ((Softsmart_Validation_IsEmpty(stringValue) && secondArgument) || (parseInt(stringValue) >= 0)));
}

function Softsmart_Validation_IsAlphaNumeric(stringValue){ 
     for (index = 0; index < stringValue.length; index++){   
        var character = stringValue.charAt(index);
        if ((Softsmart_Validation_IsLetter(character) || Softsmart_Validation_IsDigit(character) || Softsmart_Validation_IsSpace(character))){return false;}
    }

    return true; 
}

function Softsmart_Validation_ReFormat(stringValue){ 
	var arg;
    var sPos = 0;
    var resultString = "";

    for (var index = 1; index < Softsmart_Validation_ReFormat.arguments.length; index++){
       arg = Softsmart_Validation_ReFormat.arguments[index];
       if (index % 2 == 1){resultString += arg;} else {resultString += stringValue.substring(sPos, sPos + arg); sPos += arg;}
    }

    return resultString;
}

function Softsmart_Validation_IsEmail(stringValue){    
	if (Softsmart_Validation_IsEmpty(stringValue)){
       if (Softsmart_Validation_IsEmail.arguments.length == 1){return Softsmart_Validation_DefaultEmptyOk;} else {return (Softsmart_Validation_IsEmail.arguments[1] == true);}
	}
   
    if (Softsmart_Validation_IsWhitespace(stringValue)){return false;}
    
    var index = 1;

    while ((index < stringValue.length) && (stringValue.charAt(index) != "@")){index++}
    if ((index >= stringValue.length) || (stringValue.charAt(index) != "@")){return false;} else {index += 2;}

    while ((index < stringValue.length) && (stringValue.charAt(index) != ".")){index++;}
    if ((index >= stringValue.length - 1) || (stringValue.charAt(index) != ".")){return false;} else {return true;}
}

function Softsmart_Validation_IsZipCode(stringValue){ 
	if (Softsmart_Validation_IsEmpty(stringValue)){
       if (Softsmart_Validation_IsZipCode.arguments.length == 1){return Softsmart_Validation_DefaultEmptyOk;} else {return (Softsmart_Validation_IsZipCode.arguments[1] == true);}
	}

	return (Softsmart_Validation_IsInteger(stringValue) && ((stringValue.length == Softsmart_Validation_DigitsInZIPCode1) || (stringValue.length == Softsmart_Validation_DigitsInZIPCode2)));
}

function Softsmart_Validation_IsYear(stringValue){    
	if (Softsmart_Validation_IsEmpty(stringValue)){
		if (Softsmart_Validation_IsYear.arguments.length == 1){return Softsmart_Validation_DefaultEmptyOk;} else {return (Softsmart_Validation_IsYear.arguments[1] == true);}
	}
	
    if (Softsmart_Validation_IsNonNegativeInteger(stringValue) == false){return false;}
    return ((stringValue.length == 4) && (parseInt(stringValue) > 1935) && (parseInt(stringValue) < 2026));
}

function Softsmart_Validation_IsIntegerInRange(stringValue, start, end){
	if (Softsmart_Validation_IsEmpty(stringValue)){
       if (Softsmart_Validation_IsIntegerInRange.arguments.length == 1){return Softsmart_Validation_DefaultEmptyOk;} else {return (Softsmart_Validation_IsIntegerInRange.arguments[1] == true);}
	}

    if (Softsmart_Validation_IsInteger(stringValue, false) == false){return false;}

    var	number = parseInt(stringValue);
    return ((number >= start) && (number <= end));
}

function Softsmart_Validation_IsMonth(stringValue){ 
	if (Softsmart_Validation_IsEmpty(stringValue)){
       if (Softsmart_Validation_IsMonth.arguments.length == 1){return Softsmart_Validation_DefaultEmptyOk;} else {return (Softsmart_Validation_IsMonth.arguments[1] == true);}
	}

    return Softsmart_Validation_IsIntegerInRange(stringValue, 1, 12);
}

function Softsmart_Validation_IsDay(stringValue){ 
	if (Softsmart_Validation_IsEmpty(stringValue)){
       if (Softsmart_Validation_IsDay.arguments.length == 1){return Softsmart_Validation_DefaultEmptyOk;} else {return (Softsmart_Validation_IsDay.arguments[1] == true);}
    }
    
    return Softsmart_Validation_IsIntegerInRange(stringValue, 1, 31);
}

function Softsmart_Validation_DaysInFebruary(year){   
    return (((year % 4 == 0) && (((year % 100 == 0)) == false || (year % 400 == 0))) ? 29 : 28);
}

function Softsmart_Validation_IsDate(year, month, day){    
    if ((Softsmart_Validation_IsYear(year, false) && Softsmart_Validation_IsMonth(month, false) && Softsmart_Validation_IsDay(day, false)) == false){return false;}

    var intYear = parseInt(year, 10);
    var intMonth = parseInt(month, 10);
    var intDay = parseInt(day, 10);

    if (intDay > Softsmart_Validation_DaysInMonth[intMonth]){return false;}
    if ((intMonth == 2) && (intDay > Softsmart_Validation_DaysInFebruary(intYear))){return false;}

    return true;
}

function Softsmart_Validation_IsAmount(stringValue){ 
	for (var index = 0; index < stringValue.length; index++){   
		var character = stringValue.charAt(index);
        if ((Softsmart_Validation_IsComma(character) || Softsmart_Validation_IsDigit(character) || Softsmart_Validation_IsDot(character)) == false){return false;}
    }

    return true;
}

function Softsmart_Validation_IsUSPhoneNumber(stringValue){   
	if (Softsmart_Validation_IsEmpty(stringValue)){
		if (Softsmart_Validation_IsUSPhoneNumber.arguments.length == 1){return defaultEmptyOK;} else {return (Softsmart_Validation_IsUSPhoneNumber.arguments[1] == true);}
	}

	return (Softsmart_Validation_IsInteger(stringValue) && stringValue.length == Softsmart_Validation_DigitsInUSPhoneNumber);
}

function Softsmart_Validation_Prompt(stringValue){window.status = stringValue;} 
function Softsmart_Validation_WarnEmpty(field, message){field.focus(); alert(message); return false;}
function Softsmart_Validation_WarnInvalid(field, message){field.focus(); alert(message); return false;} 

function Softsmart_Validation_ReFormatZIPCode(stringValue){
	if (stringValue.length == 5){return stringValue;} else {return (Softsmart_Validation_ReFormat(stringValue, "", 5, "-", 4));}
}

function Softsmart_Validation_CheckString(field, message, emptyOK){    
    if (Softsmart_Validation_CheckString.arguments.length == 2){emptyOK = Softsmart_Validation_DefaultEmptyOk;}
    if ((emptyOK == true) && (Softsmart_Validation_IsEmpty(field.value))){return true;}
    if (Softsmart_Validation_IsWhitespace(field.value)){return Softsmart_Validation_WarnEmpty(field, message);} else {return true;}
}

function Softsmart_Validation_CheckAlphanumeric(field, message, emptyOK){    
    if ((emptyOK == true) && (Softsmart_Validation_IsEmpty(field.value))){return true;}
    if (Softsmart_Validation_IsWhitespace(field.value)){return Softsmart_Validation_WarnEmpty(field, message);}
    if (Softsmart_Validation_IsAlphaNumeric(field.value)){return true;} else {return Softsmart_Validation_WarnInvalid(field, message);}
}

function Softsmart_Validation_CheckAmount(field, message, emptyOK){ 
   if ((emptyOK == true) && (Softsmart_Validation_IsEmpty(field.value))){return true;}
   if (Softsmart_Validation_IsEmpty(field.value)){return Softsmart_Validation_WarnInvalid(field, message);}
   if (Softsmart_Validation_IsAmount(field.value)){return true;} else {return Softsmart_Validation_WarnInvalid(field, message);}
} 

function Softsmart_Validation_CheckNumeric(field, message, emptyOK){    
    if ((emptyOK == true) && (Softsmart_Validation_IsEmpty(field.value))){return true;}
    if (isNaN(field.value) || Softsmart_Validation_IsEmpty(field.value)){return Softsmart_Validation_WarnInvalid(field, message);} else {return true;}
}

function Softsmart_Validation_CheckZipCode(field, message, emptyOK){ 
    if ((emptyOK == true) && (Softsmart_Validation_IsEmpty(theField.value))){return true;}

	var normalizedZIP = Softsmart_Validation_FormStripCharactersFromString(field.value, ZIPCodeDelimiter)
	if (!Softsmart_Validation_IsZipCode(normalizedZIP, false) == false){return Softsmart_Validation_WarnInvalid(field, message);}

	theField.value = Softsmart_Validation_ReFormatZIPCode(normalizedZIP);
	return true;
}

function Softsmart_Validation_CheckUsPhone(field, message, emptyOK){   
    if ((emptyOK == true) && (Softsmart_Validation_IsEmpty(field.value))){return true;}

    var normalizedPhone = Softsmart_Validation_FormStripCharactersFromString(field.value, Softsmart_Validation_PhoneNumberDelimiters)
    if (Softsmart_Validation_IsUSPhoneNumber(normalizedPhone, false) == false){return Softsmart_Validation_WarnInvalid(field, message);}

	field.value = Softsmart_Validation_ReFormat(normalizedPhone, "(", 3, ") ", 3, "-", 4);
    return true;
}

function Softsmart_Validation_CheckEmail(field, message, emptyOK){    
	if (Softsmart_Validation_CheckEmail.arguments.length == 1){emptyOK = Softsmart_Validation_DefaultEmptyOk;}
    if ((emptyOK == true) && (Softsmart_Validation_IsEmpty(field.value))){return true;}
	if (Softsmart_Validation_IsEmail(field.value, false) == false){return Softsmart_Validation_WarnInvalid(field, message);}
	return true;
}

function Softsmart_Validation_CheckDate(yearField, monthField, dayField, message, emptyOK){
	if (Softsmart_Validation_CheckDate.arguments.length == 1){emptyOK = Softsmart_Validation_DefaultEmptyOk;}
    if ((emptyOK == true) && (Softsmart_Validation_IsEmpty(yearField.value)) && (Softsmart_Validation_IsEmpty(monthField.value)) && (Softsmart_Validation_IsEmpty(dayField.value))){return true;}
    
    if (Softsmart_Validation_IsMonth(monthField.value) == false){return Softsmart_Validation_WarnInvalid(monthField, message);}
    //if ((OKtoOmitDay == true) && Softsmart_Validation_IsEmpty(dayField.value)){return true;}

	if (Softsmart_Validation_IsDay(dayField.value) == false){return Softsmart_Validation_WarnInvalid(dayField, message);}
	if (Softsmart_Validation_IsYear(yearField.value) == false){return Softsmart_Validation_WarnInvalid(yearField, message);}
	if (Softsmart_Validation_IsDate(yearField.value, monthField.value, dayField.value)){return true;}
		
    alert(message);
    return false;
}

function Softsmart_Validation_CheckSelectList(field, message, emptyOK){ 
	if (Softsmart_Validation_CheckSelectList.arguments.length == 1){emptyOK = Softsmart_Validation_DefaultEmptyOk;}
    if ((emptyOK == true) && (Softsmart_Validation_IsEmpty(field.value))){return true;}
	if (field.selectedIndex == 0){alert(message); field.focus(); return false;}
    return true;
}

function Softsmart_Validation_CheckRadioButton(field, message, emptyOK){ 
	var length = field.length;

	if (Softsmart_Validation_CheckRadioButton.arguments.length == 1){emptyOK = Softsmart_Validation_DefaultEmptyOk;}
	if ((emptyOK == true) && (isNaN(length)) && (field.checked)){return true;}

	for (var index = 0; i < index; index++){if (field[index].checked){return true;}}

    alert(message);
    return false;
}

function Softsmart_Validation_CheckImage(field, maxWidth, maxHeight, message, emptyOK){ 
	if (Softsmart_Validation_CheckImage.arguments.length == 4){emptyOK = Softsmart_Validation_DefaultEmptyOk;}
    if ((emptyOK == true) && (Softsmart_Validation_IsEmpty(field.value))){return true;}	
	
	if (message == ''){message = 'Image File is Invalid (Size should be ' + maxWidth.toString() + 'x' + maxHeight.toString() + '!';}
	var fileName = "file:///" + field.value;

	if (fileName.length > 0){
		if (!(fileName.substr(fileName.length - 3, 3).toLowerCase() == 'jpg' || fileName.substr(fileName.length - 3, 3).toLowerCase() == 'gif')){
			field.value = '';
			alert('Please Select a .JPG or .GIF File to Upload!'); 
			return false;
		}
	}	
	
	if (maxWidth == 0 || maxHeight == 0){return true;}
	
	var myImage = new Image(); myImage.src = fileName;
	var imageWidth = myImage.width;
	var imageHeight = myImage.height;

	if ((imageWidth > maxWidth) || (imageHeight > maxHeight)){
		field.value = ''; field.focus(); myImage.Flush; myImage = null;
		alert(message); 
		return false;
	}

	myImage.Flush; myImage = null;
	return true;
}

function Softsmart_Validation_CheckFile(field, fileExtension, message, emptyOK){
	if (Softsmart_Validation_CheckImage.arguments.length == 4){emptyOK = Softsmart_Validation_DefaultEmptyOk;}
    if ((emptyOK == true) && (Softsmart_Validation_IsEmpty(field.value))){return true;}
	
	if (message == ''){message = 'Please Select a .' + fileExtension.toUpperCase() + ' File to Upload!';}
	var fileName = field.value;	fileName = "file:///" + fileName;
	var isFile = false; var isExtension = false;

	if (fileExtension == '*' || fileExtension == ''){isExtension = false;} else {isExtension = true;}

	if (fileName.length > 0){
		if (fileName.substr(fileName.length - 3, 3).toLowerCase() != fileExtension){
			field.value = '';
			alert(message); 
			return false;
		}
	}
	
	return true;
}