// <!--

function CheckForms() 
{
    if (document.forms.length == 0) return false;
    for (i=0;i<document.forms.length;i++) 
        return CheckForm(document.forms(i));
}

function CheckForm(objForm) 
{
    if (objForm.elements.length == 0) return true;
    for (i=0; i<objForm.elements.length; i++)
    {
        bInvalid = false;
        sType = '';
        sMsg = '';
        sName = objForm.elements(i).name;
        if (objForm.elements(i).alt) sName = objForm.elements(i).alt;

        if (objForm.elements(i).message)
           sMsg = objForm.elements(i).message;
        else if (objForm.elements(i).Message)
           sMsg = objForm.elements(i).Message;
        else if (objForm.elements(i).MESSAGE)
           sMsg = objForm.elements(i).MESSAGE;
        else if (objForm.elements(i).msg)
           sMsg = objForm.elements(i).msg;
        else if (objForm.elements(i).Msg)
           sMsg = objForm.elements(i).Msg;
        else if (objForm.elements(i).MSG)
           sMsg = objForm.elements(i).MSG;

        if (objForm.elements(i).validate)
             sType = objForm.elements(i).validate;
        else if (objForm.elements(i).Validate)
             sType = objForm.elements(i).Validate;
        else if (objForm.elements(i).VALIDATE)
             sType = objForm.elements(i).VALIDATE;

        sRequired = '';
        if (objForm.elements(i).required)
            sRequired = objForm.elements(i).required.toLowerCase();
        else if (objForm.elements(i).REQUIRED)
            sRequired = objForm.elements(i).REQUIRED.toLowerCase();
        else if (objForm.elements(i).Required)
            sRequired = objForm.elements(i).Required.toLowerCase();
        
        if ((sRequired == 'y' || sRequired == 'yes') && !trim(objForm.elements(i).value))
        {
            if (sMsg == "") 
                sMsg = "Please enter a value for " + sName + ".";
            bInvalid = true;
        }
        else if (objForm.elements(i).type == 'text' || objForm.elements(i).type == 'password' || 
            objForm.elements(i).type == 'select-one' || objForm.elements(i).type == 'textarea') 
        {
			var MinLength=0;
			var MaxLength=0;
		
			if ( objForm.elements(i).minlength )
				 MinLength = objForm.elements(i).minlength;
			else if ( objForm.elements(i).MinLength )
				 MinLength = objForm.elements(i).MinLength;
			else if ( objForm.elements(i).MINLENGTH )
				 MinLength = objForm.elements(i).MINLENGTH;
			else if ( objForm.elements(i).Minlength )
				 MinLength = objForm.elements(i).Minlength;
		
			if ( objForm.elements(i).maxlength )
				 MaxLength = objForm.elements(i).maxlength;
			else if ( objForm.elements(i).MaxLength )
				 MaxLength = objForm.elements(i).MaxLength;
			else if ( objForm.elements(i).MAXLENGTH )
				 MaxLength = objForm.elements(i).MAXLENGTH;
			else if ( objForm.elements(i).Maxlength )
				 MaxLength = objForm.elements(i).Maxlength;
				 
			if ( MinLength > 0 || MaxLength > 0 ) if ( !CheckLength(objForm.elements(i)) ) return false;

            if (objForm.elements(i).value && sType != '') {
                switch(sType.toLowerCase()) {
                    case 'text':
                    case 'string':
                        if ( !valText(objForm.elements(i).value) ) {
                            if (sMsg == "") sMsg = sName + ' must not contain any special characters, parathesis or tags.';
                            bInvalid = true;
                        }
                        break;
                    case 'integer':
                    case 'int':
                        if ( !valInt(objForm.elements(i).value) ) {
                            if (sMsg == "") sMsg = sName + ' must be an integer.';
                            bInvalid = true;
                        }
                        else if (!CheckRange(objForm.elements(i))) {
                            if (sMsg == "") sMsg = sName + ' is out of range.';
                            bInvalid = true;
                        }
                        break;
                    case 'float':
                        if ( !valFloat(objForm.elements(i).value) ) {
                            if (sMsg == "") sMsg = sName + ' must be a float.';
                            bInvalid = true;
                        }
                        else if (!CheckRange(objForm.elements(i))) {
                            if (sMsg == "") sMsg = sName + ' is out of range.';
                            bInvalid = true;
                        }
                        break;
                    case 'username':
                    case 'password':
                        if ( !valName(objForm.elements(i).value) ) {
                            if (sMsg == "") sMsg = sName + ' must be a valid username/password (no parathesis, whitespace or other special characters).';
                            bInvalid = true;
                        }
                        break;
                    case 'number':
                    case 'numeric':
                        if ( !valNumber(objForm.elements(i).value) ) {
                            if (sMsg == "") sMsg = sName + ' must be a number.';
                            bInvalid = true;
                        }
                        else if (!CheckRange(objForm.elements(i))) {
                            if (sMsg == "") sMsg = sName + ' is out of range.';
                            bInvalid = true;
                        }
                        break;
                    case 'phone':
                    case 'telephone':
                        if ( !valPhone(objForm.elements(i).value) ) {
                            if (sMsg == "") sMsg = sName + ' must be a phone number.';
                            bInvalid = true;
                        }
                        break;
                    case 'date':
                        if ( !valDate(objForm.elements(i).value) ) {
                            if (sMsg == "") sMsg = sName + ' must be a date.';
                            bInvalid = true;
                        }
                        break;
                    case 'email':
                        if ( !valEmail(objForm.elements(i).value) ) {
                            if (sMsg == "") sMsg = sName + ' must be an email address.';
                            bInvalid = true;
                        }
                        break;
                    case 'cc':
                        if ( !valCC(objForm.elements(i).value) ) {
                            if (sMsg == "") sMsg = sName + ' must be a valid credit card.';
                            bInvalid = true;
                        }
                        break;
                    case 'sin':
                        if ( !valSIN(objForm.elements(i).value) ) {
                            if (sMsg == "") sMsg = sName + ' must be a social insurance number.';
                            bInvalid = true;
                        }
                        break;
                    case 'postal':
                        if ( !valPostal(objForm.elements(i).value) ) {
                            if (sMsg == "") sMsg = sName + ' must be a valid postal code.';
                            bInvalid = true;
                        }
                        break;
                    case 'zip':
                        if ( !valZip(objForm.elements(i).value) ) {
                            if (sMsg == "") sMsg = sName + ' must be a zip code.';
                            bInvalid = true;
                        }
                        break;
                    case 'postzip':
                        if ( !valPostZip(objForm.elements(i).value) ) {
                            if (sMsg == "") sMsg = sName + ' must be a valid postal / zip code.';
                            bInvalid = true;
                        }
                        break;
                }
            }
        }
        if (bInvalid) {
            if ( sMsg == '' ) sMsg = 'Invalid data has been entered for ' + sName;
            alert(sMsg);
            objForm.elements(i).focus();
            return false;
        }                
    }
    return true;
}

/////////// BEGIN VALIDATION FUNCTIONS ////////////


function valPostal(str) {
	if (!/^\s*[a-ceghj-npr-tvxy]\d[a-z](\s)?\d[a-z]\d\s*$/.test(str.toLowerCase())) return false;
    return true;
}
function valPostZip(str) {
    str = strip('- \n\r\t',str);
	if (!/^\s*[a-ceghj-npr-tvxy]\d[a-z](\s)?\d[a-z]\d\s*$/.test(str.toLowerCase()) ||
	    (valInt(str) && (str.length==9 || str.length==5))) return false;
    return true;
}
function valZip(str) {
    str = strip('- \n\r\t',str);
    if (valInt(str) && (str.length==9 || str.length==5)) return true;
    return false;
}

function valNumber(str) {
    if(isNaN(str)) return false;
    return true;
}
function valInt(str) {
    str = strip(' \n\r\t',str);
    //remove leading zeros, if any
    while (str.length > 1 && str.substring(0,1)=='0') {
        str = str.substring(1,str.length);
    }
    var val = parseInt(str);
    if(isNaN(val)) return false;
    return true;
}
function valFloat(str) {
    str = strip(' \n\r\t',str);
    //remove leading zeros, if any
    while (str.length > 1 && str.substring(0,1)=='0') {
        str = str.substring(1,str.length);
    }
    var val = parseFloat(str);
    if (isNaN(val))
        return false;
    return true;
}
function valPhone(str) {
	phoneRe = /^((\+\d{1,3}(-| )?\(?\d\)?(-| )?\d{1,5})|(\(?\d{2,6}\)?))(-| )?(\d{3,4})(-| )?(\d{4})(( x| ext)\d{1,5}){0,1}$/
	if (!phoneRe.test(str)) return false;
	return true;
}
function valDate(str) {
    var dateVar = new Date(str);
    if (isNaN(dateVar.valueOf()) || (dateVar.valueOf()==0))
        return false;
    return true;
}
function valText(str) {
    var textRe = /^([a-zA-Z0-9@.,_=!\*\?\#\^\$\-\+\s]{1,255})$/
	if (!textRe.test(str)) return false;
	return true;
}
function valEmail(str) {
	var emailRe = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*\.(\w{2}|(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum))$/
	if (!emailRe.test(str)) return false;
	return true;
}
function valPrintable(str) {
	var nameRe = /^\x20-\x7E/
	if (!nameRe.test(str)) return false;
	return true;
}
function valName(str) {
    var nameRe = /^([a-zA-Z0-9\$@.\-_]{1,255})$/
	if (!nameRe.test(str)) return false;
	return true;
}
function valSIN(str) {
    str = strip(' -.\n\r\t',str);
    if (valInt(str) && str.length==9)
        return true;
    return false;
}
function valCC(str) {
    str = strip('-./_\n\r\t\\',str);
    if (valInt(str) && ( (str.length==15 && str.charAt(0)=='3') || 
                         (str.length==16 && (str.charAt(0)=='4' || str.charAt(0)=='5' || str.charAt(0)=='6') ) ))
        return true;
    return false;
}

function CheckRange(objElement) {
    var MinValue='';
    var MaxValue='';

    if ( objElement.minvalue )
         MinValue = objElement.minvalue;
    else if ( objElement.MinValue )
         MinValue = objElement.MinValue;
    else if ( objElement.Minvalue )
         MinValue = objElement.Minvalue;
    else if ( objElement.MINVALUE )
         MinValue = objElement.MINVALUE;
    if(MinValue != '') {
        if(isNaN(MinValue)) { 
            strMsg = 'An invalid minimum value specified.';
            return false;
        }
        if ( objElement.value < MinValue ) {
            strOptMsg = objElement.name + ' is less than minimum value of ' + MinValue + '.';
            return false;
        }
    }

    if ( objElement.maxvalue )
         MaxValue = objElement.maxvalue;
    else if ( objElement.MaxValue )
         MaxValue = objElement.MaxValue;
    else if ( objElement.MAXVALUE )
         MaxValue = objElement.MAXVALUE;
    else if ( objElement.Maxvalue )
         MaxValue = objElement.Maxvalue;
    if(MaxValue != '') {
        if(isNaN(MaxValue)) { 
            strMsg = 'An invalid maximum value specified.';
            return false;
        }
        if ( objElement.value > MaxValue ) {
            strOptMsg = objElement.name + ' is greater than maximum value of ' + MaxValue + '.';
            return false;
        }
    }
    return true;
}

function CheckLength(objElement) {
    var MinLength = '';
    var MaxLength = '';
	var ElementName = objElement.name;
	if (objElement.alt) ElementName = objElement.alt;

    if ( objElement.minlength )
         MinLength = objElement.minlength;
    else if ( objElement.MinLength )
         MinLength = objElement.MinLength;
    else if ( objElement.MINLENGTH )
         MinLength = objElement.MINLENGTH;
    else if ( objElement.Minlength )
         MinLength = objElement.Minlength;

    if ( objElement.maxlength )
         MaxLength = objElement.maxlength;
    else if ( objElement.MaxLength )
         MaxLength = objElement.MaxLength;
    else if ( objElement.MAXLENGTH )
         MaxLength = objElement.MAXLENGTH;
    else if ( objElement.Maxlength )
         MaxLength = objElement.Maxlength;
		 
    if( MinLength != '' ) {
        if( isNaN(MinLength) ) { 
			alert('An invalid minimum length specified for ' + ElementName);
            return false;
        }
        if ( objElement.value.length < MinLength ) {
			alert(ElementName + ' is less than minimum allowable length of ' + MinLength + " characters");
            return false;
        }
    }

    if( MaxLength != '' ) {
		if( isNaN(MaxLength) ) { 
			alert('An invalid maximum length specified for ' + ElementName);
            return false;
        }
        if ( objElement.value.length > MaxLength ) {
			alert(ElementName + ' is greater than maximum allowable length of ' + MaxLength + " characters");
            return false;
        }
    }

    return true;
}

/////////// END VALIDATION FUNCTIONS ////////////

/////////////// BEGIN SUPPORT FUNCTIONS ////////////////

function strip(filter,str) {
    var i,curChar;
    var retStr = '';
    var len = str.length;
    for(i=0; i<len; i++) {
        curChar = str.charAt(i);
        if(filter.indexOf(curChar)<0) 
            //not in filter, keep it
            retStr += curChar;
    }
    return retStr;
}

function trim(str) {
    return str.replace(/(^\s*)|(\s*$)/g, "");
}

/////////////// END SUPPORT FUNCTIONS ////////////////

// -->

