//Validation for multiple languages.
function validateForm(f){
	//Languages is an external variable.

	if(f.validations){
		for(var lan = 0; lan < languages.length; lan++){
			lng = languages[lan];
			lng = lng.split("|");
			lng = lng[0];

			langEnabled = eval("f.enabled_"+lng+" != null ? f.enabled_"+lng+".checked : true");

			for(var i = 0; i < f.validations.length; i++){
				validation = f.validations[i];

				multilanguage = f.validations[i].multilanguage ? f.validations[i].multilanguage : false;

				fieldName = validation["field"] + (multilanguage ? "_" + lng : "");
				field = eval("f."+fieldName);

				switch(validation["type"]){
					case "REQUIRED":
						//Parameters: none.

						if(langEnabled){
							if(!_validateNotEmpty(field)){
								alert(validation["error"]);
								selectAndFocus(field, multilanguage ? lng : null);
								return false;
							}
						}
						break;

					case "NUMBER":
						//Parameters: <min>|<max>

						params = validation["params"].split("|");
						min = params[0] != null ? params[0] : null;
						max = params[1] != null ? params[1] : null;

						if(!_validateNumberBetween(field, min, max)){
							alert(validation["error"]);
							selectAndFocus(field, multilanguage ? lng : null);
							return false;
						}
						break;
					case "INTEGER":
						//Parameters: <min>|<max>

						params = (validation["params"] ? validation["params"] : "").split("|");
						min = params[0] != null ? params[0] : null;
						max = params[1] != null ? params[1] : null;

						if(!_validateIntegerBetween(field, min, max)){
							alert(validation["error"]);
							selectAndFocus(field, multilanguage ? lng : null);
							return false;
						}
						break;
					case "REGEX":
						//Parameters: <regex>

						if(!_validateRegex(field, validation["params"])){
							alert(validation["error"]);
							selectAndFocus(field, multilanguage ? lng : null);
							return false;
						}
						break;
					case "EMAIL":
						//Parameters: none.

						if(!_validateEmail(field)){
							alert(validation["error"]);
							selectAndFocus(field, multilanguage ? lng : null);
							return false;
						}
						break;
					default:
						// Skip.
						break;
				}
			}
		}
	}

	return true;
}

function selectAndFocus(field, language){
	if(language != null)
		selectLanguage(language);
	field.focus();
	field.select();
}

function _validateNotEmpty(field){
	if(field.value == null || field.value == ""){
		selectAndFocus(field);
		return false;
	} else {
		return true;
	}
}

function _validateNumber(field){
	if(isNaN(field.value)){
		selectAndFocus(field);
		return false;
	} else {
		return true;
	}
}

function _validateInteger(field){
	var integer = parseInt(field.value);
	var trimmed = field.value.trim();
	if(integer != trimmed){
		selectAndFocus(field);
		return false;
	} else {
		return true;
	}
}

function _validateRegex(field, regex){
	if(!field.value.matches(regex)){
		selectAndFocus(field);
		return false;
	} else {
		return true;
	}
}

function _validateNumberBetween(field, min, max){
	if(!_validateNumber(field)){
		selectAndFocus(field);
		return false;
	}

	val = parseFloat(field.value);
	if(min != null && val < parseFloat(min)){
		selectAndFocus(field);
		return false;
	} else if(max != null && val > parseFloat(max)){
		selectAndFocus(field);
		return false;
	} else {
		return true;
	}
}

function _validateIntegerBetween(field, min, max){
	if(!_validateInteger(field)){
		selectAndFocus(field);
		return false;
	}

	val = parseInt(field.value);
	if(min != null && val < parseInt(min)){
		selectAndFocus(field);
		return false;
	} else if(max != null && val > parseInt(max)){
		selectAndFocus(field);
		return false;
	} else {
		return true;
	}
}

function _validateStringLength(field, minLength, maxLength){
	var val = "" + field.value;

	if(val.length < minLength || val.length > maxLength){
		selectAndFocus(field);
		return false;
	} else {
		return true;
	}
}

function _validateEmail(field){
	if( field.value.search(/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/) == -1 ){
		selectAndFocus(field);
		return false;
	} else {
		return true;
	}
}

function _validateTinyMCENotEmpty(fieldName){
	if( tinyMCE.getContent(fieldName).length== "" ){
		tinyMCE.execCommand('mceFocus', false, fieldName);
		return false;
	} else {
		return true;
	}
}

