/*validates form*/
/*input array format (keys):*/
/* 0...type of validation*/
/* 1...id of input element*/
/* 2...id of second input element (for password match)*/
/* 3...id of checkbox element. if it is checked, do the validation*/
/* 4...bad format message*/
/* 5...empty field message*/
/* 6...field importance (mandatory field if 1, voluntary if 0)*/
function validate(inputs,mainErrorMsg){
	var errorMsg = "";
	var focusInput = true;
	var doValidation = true;
	
	for(mKey = 0; mKey < inputs.length; mKey++){
		doValidation = true;
		/*if the field is conditional on checked checkbox with id = inputs[mKey][3]*/
		if (inputs[mKey][3] != ""){
			checkbox = document.getElementById(inputs[mKey][3]);
			doValidation = checkbox.checked;
		}
		/*if the element is TinyMCE editor*/
		if (inputs[mKey][0] == 12){
			elem = tinymce.EditorManager.get(inputs[mKey][1]);
			elem_value = elem.getContent();
		}
		else {
			elem = document.getElementById(inputs[mKey][1]);
			elem_value = elem.value;
		}
		/*if the field is conditional and must be in special format*/
		if (elem_value == ""){
			if ((inputs[mKey][3] == "") || ((inputs[mKey][3] != "") && (checkbox.checked)))
				if (inputs[mKey][6] > 0){
					errorMsg += "\n - " + inputs[mKey][5];
					doValidation = false;
				}
				else	
					doValidation = false;
		}
		/*if validate*/
		if (doValidation){
			switch(inputs[mKey][0]){
				/*string*/
				case 1:
					if (elem_value == "")
						errorMsg += "\n - " + inputs[mKey][4];
				break;
				/*int*/
				case 2:
					var regex = /^-?\d+$/;
					if (!regex.test(elem_value))
						errorMsg += "\n - " + inputs[mKey][4];
				break;
				/*positive int*/
				case 3:
					var regex = /^\d+$/;
					if (!regex.test(elem_value))
						errorMsg += "\n - " + inputs[mKey][4];
				break;
				/*float*/
				case 4:
					var regex = /(^-?\d\d*(\.|\,)\d*$)|(^-?\d\d*$)/;
					if (!regex.test(elem_value))
						errorMsg += "\n - " + inputs[mKey][4];
				break;
				/*positive float*/
				case 5:
					var regex = /(^\d\d*(\.|\,)\d*$)|(^\d\d*$)/;
					if (!regex.test(elem_value))
						errorMsg += "\n - " + inputs[mKey][4];
				break;
				/*email*/
				case 6:
					var regex = /^((\"[^\"\f\n\r\t\v\b]+\")|([\w\!\#\$\%\&'\*\+\-\~\/\^\`\|\{\}]+(\.[\w\!\#\$\%\&'\*\+\-\~\/\^\`\|\{\}]+)*))@((\[(((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))\])|(((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))|((([A-Za-z0-9\-])+\.)+[A-Za-z\-]+))$/;
					if (!regex.test(elem_value))
						errorMsg += "\n - " + inputs[mKey][4];
				break;
				/*url*/
				case 7:
					var regex = /^(http|https|ftp):\/\/([a-zA-Z0-9\.\-]+(:[a-zA-Z0-9\.&%\$\-]+)*@)?((25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])|([a-zA-Z0-9\-]+\.)*[a-zA-Z0-9\-]+\.[a-zA-Z]{2,4})(\:[0-9]+)?(\/[^\/][a-zA-Z0-9\.\,\?\/\'\\\+&%\$#\=~_\-@]*)*$/;
					if (!regex.test(elem_value))
						errorMsg += "\n - " + inputs[mKey][4];
				break;
				/*string with minimal length*/
				case 8:
					if ((elem_value == "") || (elem_value.length < inputs[mKey][2]))
						errorMsg += "\n - " + inputs[mKey][4];
				break;
				/*match of two fields, e.g. passwords*/
				case 9:
					var regex = /^[a-zA-Z0-9]+$/;
					elem2 = document.getElementById(inputs[mKey][1] + '_repeat');
					if ((elem2.value != elem_value) || !regex.test(elem_value) || (elem_value.length < inputs[mKey][2]))
						errorMsg += "\n - " + inputs[mKey][4];
				break;
				/*us date*/
				case 10:
					var regex = /^\d{4}-\d{1,2}-\d{1,2}$/;
					if (!regex.test(elem_value))
						errorMsg += "\n - " + inputs[mKey][4];
				break;
				/*smart url*/
				case 11:
					var regex = /^[a-zA-Z0-9]+((-{1}[a-zA-Z0-9]+)*)$/;
					if (!regex.test(elem_value))
						errorMsg += "\n - " + inputs[mKey][4];
				break;
				/*login name A-Z a-z 0-9*/
				case 13:
					var regex = /^[a-zA-Z0-9]+$/;
					if (!regex.test(elem_value) || (elem_value.length <= inputs[mKey][2]))
						errorMsg += "\n - " + inputs[mKey][4];
				break;
				/*hexadecimal color*/
				case 14:
					var regex = /^#[a-fA-F0-9]{6}$/;
					if (!regex.test(elem_value))
						errorMsg += "\n - " + inputs[mKey][4];
				break;
			}
		}
		if (focusInput && (errorMsg != "")){
			elem.focus();
			focusInput = false;
		}
	}
	
	if (errorMsg != "") {
		errorMsg = mainErrorMsg + errorMsg;
		alert(errorMsg);
		return false;
	}
	return true;
}
