var pFieldOkColor="white";
var pBadFieldColor="red";
var pAlertText="Mandatory fields missing: ";
var s_password_dont_match="passwords don't match";

function remove_XS_whitespace(string) {
	string = string.replace(/\r/g, " ");
	
	//There are regex switchs for printing /nonprinting characters 
	//but they stripped some characters either needed or left some not wanted,
	//thats why the following replacement exists.
	
	string = string.replace(/[^ A-Za-z0-9`~!@#\$%\^&\*\(\)-_=\+\\\|\]\[\}\{'";:\?\/\.>,<]/g, "");
	string = string.replace(/'/g, "");
	string = string.replace(/ +/g, " ");  
	string = string.replace(/^\s/g, "");
	string = string.replace(/\s$/g, "");	
	if (string == ' '){string = ''};
		return string;
	}

function wordcount(string) {
	var a = string.split(/\s+/g); // split the sentence into an array of words
	return a.length;
	}

function hilite(theInputObj, flDoIt){
	theInputObj.style.backgroundColor=(flDoIt)?pBadFieldColor:pFieldOkColor;
	return flDoIt;
	}
	

function isempty(theInputObj){
	switch(theInputObj.type){
		case "text":
		case "password":
			return hilite(theInputObj, theInputObj.value=="");
			break;
		case "file":
			return hilite(theInputObj, theInputObj.value=="");
			break;
		case "select":
		case "select-one":
			//alert(theInputObj.selectedIndex);
			return hilite(theInputObj, theInputObj.options[ttheInputObj.selectedIndex].value=="");
			break;
		case "textarea":
			var tCleanString=remove_XS_whitespace(theInputObj.value)
			var tWordsCount=wordcount(tCleanString);
			//alert(tWordsCount + '\"'+remove_XS_whitespace(theInputObj.value)+'\"')
			return hilite(theInputObj, tWordsCount==0 | tCleanString=="");
			break;
		case "radio":
		case "checkbox":
			return hilite(theInputObj, theInputObj.checked);
			break;
		}
	return false;
	}

function getName(theInputObj){
	switch(theInputObj.type){
		case "text":
		case "password":
		case "file":
		case "select":
		case "select-one":
		case "textarea":
		case "radio":
		case "checkbox":
			if (theInputObj.title!="")
				return theInputObj.title;
			else
				return theInputObj.name;
		}
	return theInputObj.name;
	}

function validate(form) {
	var fields = new Array
	var cont = 0
	var alertboxnames = ""
	var contcheckbox = 1
	var multiple = new Array
	var isfirst = true
	multiple[1] = new Array;
	multiple[1][1] = "";
	multiple[1][2] = 0;
	tFirstBadItem=""
	
	function addError(theInputObj){
		alertboxnames = alertboxnames + getName(theInputObj) + "\n";
		if (tFirstBadItem==""){
			tFirstBadItem=theInputObj;
			}
		}
	for (var i = 0; i < form.elements.length; i++) {
		var tClass=form.elements[i].className;
		if ((tClass.indexOf('required')>=0) || form.elements[i].className=='required' || form.elements[i].required) {
			switch (form.elements[i].type) {
				case "select-one":
					if (form.elements[i].value.length == 0) {
						addError(form.elements[i]);
						cont++
						}
					break;
				case "checkbox":
					if (form.elements[i].name == multiple[contcheckbox][1]) {
						if (form.elements[i].checked) {
							multiple[contcheckbox][2]++
							}
						}
					else {
						contcheckbox++;
						multiple[contcheckbox] = new Array (3);
						multiple[contcheckbox][1] = form.elements[i].name;
						if (form.elements[i].checked) {
							multiple[contcheckbox][2] = 1;
							}
						else {
							multiple[contcheckbox][2] = 0;					
							}
						multiple[contcheckbox][3]=i;
						}
					break;
				case "radio":
					if (form.elements[i].name == multiple[contcheckbox][1]) {
						if (form.elements[i].checked) {
							multiple[contcheckbox][2]++
							}
						}
					else {
						contcheckbox++;
						multiple[contcheckbox] = new Array (3);
						multiple[contcheckbox][1] = form.elements[i].name;
						if (form.elements[i].checked) {
							multiple[contcheckbox][2] = 1;
							}
						else {
							multiple[contcheckbox][2] = 0;					
							}
						multiple[contcheckbox][3]=i;
						}
					break;
				default:
					if (isempty(form.elements[i])) {
						addError(form.elements[i]);
						cont++;
						}
				}
			}
		}
	if (contcheckbox > 1) {
		for (var j = 2; j < contcheckbox+1; j++) {
			if (multiple[j][2] == 0) {
				addError(form.elements[multiple[j][3]]);
				cont++;
				}
			}
		}
	if (cont == 0) {
		if (form.scratchemail1) {
			if (form.scratchemail1.value != form.scratchemail2.value) {
				alert ("<<NotMatchingMail>>");
				return false
				}
			if (form.scratchemail1.value.indexOf("@") == -1 || form.scratchemail1.value.indexOf(".") == -1) {
				alert ("<<Invalidemail>>");
				}
			}
		if (form.elements["personalInfo.email"]) {
			if (form.elements["personalInfo.email"].value.indexOf("@") == -1 || form.elements["personalInfo.email"].value.indexOf(".") == -1)  {
				alert ("<<Invalidemail>>");
				return false
				}
			}
		if (form.scratchpassword1) {
			if (form.scratchpassword1.value != form.scratchpassword2.value) {
				alert ("<<NotMatchingPasswd>>");
				return false
				}
			}
		if ((form.password) &&(form.password_confirm)) {
			if (form.password.value != form.password_confirm.value) {
				hilite(form.password, true);
				hilite(form.password_confirm, true);
				alert (s_password_dont_match);
				return false
				}
			}
		return true
		}
		
	else {
		var fieldserror = alertboxnames.substring (0, alertboxnames.length-1)
		alert (pAlertText + "\n\n" + fieldserror); 
		tFirstBadItem.focus();
		}
	return false
	}


