<!--

// FormValidation
// Peter Anderhagen 2002.08.13
//
// A set of functions that serve to validate data entered in a user created form.




function IsNumeric(str){
	var valid = "0123456789"
	var passed = false;
	
    for (i = 0; i < str.length; i++) {
		if (valid.indexOf(str.charAt(i)) == -1) {
            passed = false;
        }
		else {
			passed = true;
		}
    }
	return passed;
}


function IsPositiveNumeric(str){
	var valid = "0123456789"
	var passed = false;
	
    for (i = 0; i < str.length; i++) {
		if (valid.indexOf(str.charAt(i)) == -1) {
            passed = false;
        }
		else {
			passed = true;
		}
    }
	
	if(str >= 1){
		passed = true;
	}
	else{
		passed = false;
	}
	return passed;
}




function IsNumericExt(str){
	var valid = "0123456789+-/*()% "
	var passed = false;
	
    for (i = 0; i < str.length; i++) {
		if (valid.indexOf(str.charAt(i)) < 0) {
            passed = false;
        }
		else {
			passed = true;
		}
    }
	return passed;
}



function IsEmail(emailStr){
	var emailPat = /^(.+)@(.+)$/
	// disallow special chars: ( ) < > @ , ; : \ " . [ ]    */
	var specialChars = "\\(\\)<>@,;:\\\\\\\"\\.\\[\\]"
	var validChars = "\[^\\s" + specialChars + "\]"
	var firstChars = validChars   
	var quotedUser = "(\"[^\"]*\")"
	var ipDomainPat = /^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/
	var atom= "(" + firstChars + validChars + "*" + ")"
	var word= "(" + atom + "|" + quotedUser + ")"
	var userPat = new RegExp("^" + word + "(\\." + word + ")*$")
	var domainPat = new RegExp("^" + atom + "(\\." + atom +")*$")
	var matchArray = emailStr.match(emailPat)
	
	if (matchArray == null) {
		//alert("Email address seems incorrect (check @ and .'s)");
		return false;
	}
	var user = matchArray[1]
	var domain = matchArray[2]
	if (user.match(userPat) == null) {
	    //alert("The username doesn't seem to be valid.");
	    return false;
	}
	
	var IPArray = domain.match(ipDomainPat)
	if (IPArray != null) {
		for (var i = 1; i <= 4; i++) {
			if (IPArray[i] > 255) {
				//alert("Destination IP address is invalid!");
				return false;
			}
		}
		return true;
	}

	var domainArray = domain.match(domainPat)
	if (domainArray == null) {
		//alert("The domain name doesn't seem to be valid.");
	    return false;
	}
   
	var atomPat = new RegExp(atom,"g")
	var domArr = domain.match(atomPat)
	var len = domArr.length
	if (domArr[domArr.length - 1].length < 2 || domArr[domArr.length - 1].length > 3) {
	   //alert("The address must end in a three-letter domain, or two letter country.");
	   return false;
	}

	if (domArr[domArr.length - 1].length == 3 && len < 2) {
	   //alert("This address is missing a hostname!")
	   return false;
	}
	return true;
}





// Function that checks if the SiteConvenience specific attribute "sc_required" value is "true".
// It also attempts to validate that the datatype in the field is similar to the attribute "sc_datatype".
// Peter Anderhagen 2002.
function CheckRequiredFields(form){
	var passed = false;
	
	for(var i = 0; i < form.length; i++){
		//alert(form.elements[i].sc_required)
		
		if(form.elements[i].sc_required == "true"){
			passed = false;
			
			// Text fields
			if(form.elements[i].type == "text"){
				if(form.elements[i].value == ""){
					if(form.elements[i].sc_alert != null){
						alert(form.elements[i].sc_alert)
					}
					else {
						alert("The field " + form.elements[i].name + " cannot be left blank.")
					}
					
					form.elements[i].focus()
					break;
				}
				else if(form.elements[i].sc_datatype != "any"){
					// Check datatype
					passed = false;
					
					if(form.elements[i].sc_datatype == "numeric"){
						//alert("Numeric")
						if(IsNumeric(form.elements[i].value) == true){
							passed = true;
						}
						else{
							if(form.elements[i].sc_alert != null){
								alert(form.elements[i].sc_alert)
							}
							else {
								alert("The value in this field is not numeric.")
							}
							form.elements[i].focus()
							break;
						}
					}
					if(form.elements[i].sc_datatype == "numeric_pos"){
						//alert("Numeric")
						if(IsPositiveNumeric(form.elements[i].value) == true){
							passed = true;
						}
						else{
							if(form.elements[i].sc_alert != null){
								alert(form.elements[i].sc_alert)
							}
							else {
								alert("The value in this field is not numeric.")
							}
							form.elements[i].focus()
							break;
						}
					}
					else if(form.elements[i].sc_datatype == "numeric_ext"){
						if(IsNumericExt(form.elements[i].value) == true){
							passed = true;
						}
						else{
							if(form.elements[i].sc_alert != null){
								alert(form.elements[i].sc_alert)
							}
							else {
								alert("The value in this field is not valid.")
							}
							form.elements[i].focus()
							break;
						}
					}
					else if(form.elements[i].sc_datatype == "email"){
						if((IsEmail(form.elements[i].value) == true)){
							passed = true;
						}
						else{
						
						
							if(form.elements[i].sc_alert != null){
								alert(form.elements[i].sc_alert)
							}
							else {
								alert("The value in the field " + form.elements[i].name + " is not a valid email address.")
							}
							form.elements[i].focus()
							break;
						}
					}
					else{
						alert("Unrecognized datatype.")
					}		
				}
			}
			
			
			if(form.elements[i].type == "textarea"){
				if(form.elements[i].value == ""){
					if(form.elements[i].sc_alert != null){
						alert(form.elements[i].sc_alert);
					}
					else {
						alert("The field " + form.elements[i].name + " cannot be left blank.");
					}
					
					form.elements[i].focus();
					break;
				}
				else if(form.elements[i].sc_maxlength != null && form.elements[i].sc_maxlength > 0){
					// Check for maxlength.
				
					if(form.elements[i].value.length > form.elements[i].sc_maxlength){
						if(form.elements[i].sc_alert_maxlength != null){
							alert(form.elements[i].sc_alert_maxlength);
						}
						else {
							alert("The value in the field " + form.elements[i].name + " cannot exceed " + form.elements[i].sc_maxlength + " characters.");
						}
						form.elements[i].focus()
						break;
					}
				}
			}
			
			
			
			// Select list
			else if((form.elements[i].type == "select-one") || (form.elements[i].type == "select-multiple")){
				if(form.elements[i].selectedIndex == 0){
				
					if(form.elements[i].sc_alert != null){
						alert(form.elements[i].sc_alert)
					}
					else {
						alert("Please make a selection.")
					}
					form.elements[i].focus()
					break;
				}
			}			
		}
		
		// Check if datatype is email - it does not need to be required to validate.
		if(form.elements[i].sc_datatype == "email"){
			if((IsEmail(form.elements[i].value) == true)){
				passed = true;
			}
			else{					
				if(form.elements[i].sc_alert != null){
					alert(form.elements[i].sc_alert)
				}
				else {
					alert("The value in the field " + form.elements[i].name + " is not a valid email address.")
				}
				passed = false;
				form.elements[i].focus()
				break;
			}
		}
		else{
			passed = true;
		}
	}
	
	// If submitbutton name is "sc_submitbutton" it should be disabled right after submit, to prevent multiple postings.
	if( (form.elements["sc_submitbutton"] != null) && (passed == true)){
		form.elements["sc_submitbutton"].disabled = true;
	}
	return passed;
}



// Store all form element names in a hidden form field (for Request purposes).
function GetFormElementNames(sFormName){
	var o = document.forms[sFormName];	
	var sVal = "";
	var bFirst = 1;

	for (var i = 0; i < o.length; i++){
		var oItem = o.elements[i];
		if(oItem.name != undefined && oItem.name != "sc_form_fields"){
			if(oItem.type != "submit" && oItem.type != "reset" && oItem.type != "button"){
			
				if(oItem.name != sName){
					var sName = oItem.name;
					if(bFirst != 1){
						sVal += ";"
					}
					sVal += sName
					bFirst = 0;
				}
			}
		}
	}
	
	
	if(o.sc_form_fields){
		o.sc_form_fields.value = sVal;
	}
	
}



//-->
