

function CW_Format(){}

//http://www.info.univ-angers.fr/~gh/caracteres.html

var matcherAlphaDigitCplx2 = /^[a-zA-Z0-9_"' \n\r\!\@\#\$\%\^\*\(\)\-\+\=\:\;\,\.\/\?\|\\\~\{\}\[\]]*$/;


CW_Format.prototype ={

	/**
	 * determines an email format
	 * <br/>
	 * corresponding regexp: ("^[a-zA-Z0-9\_]+[a-zA-Z0-9\.\-_]{1,}@[a-zA-Z0-9\-_]{2,}\.[a-zA-Z\.\-_]{1,}[a-zA-Z\-_]+","g");
	 * @type String
	 */
	FORMAT_EMAIL : "email",
	/**
	 * determines an 2tags format
	 * <br/>
	 * 2tags format determines 2, or more, words (minimum 3 characters) separate by space or [,;]
	 * @type String
	 */
	FORMAT_2Tags : "2tags",

	FORMAT_1Tag : "1tag",
	/**
	 * determines an international phone number format
	 * <br/>
	 * corresponding regexp: ("(\+)[0-9]{11}$","g");
	 * @type String
	 */
	FORMAT_INTER_PHONE_NB : "interPhoneNb",

	/**
	 * determines an alpha digit format
	 * <br/>
	 * corresponding regexp: ("^[a-zA-Z0-9]+$");
	 * @type String
	 */
	FORMAT_ALPHA_DIGIT : "alphadigit",

	FORMAT_ALPHA_DIGIT_CPLX : "alphadigitcplx",

	FORMAT_ALPHA_DIGIT_CPLX2 : "alphadigitcplx2",

	FORMAT_DIGIT : "digit",

	invalidCharacters : new Array ("&","<",">"),

	/**
	 *
	 * @param {String} format wanted check format must be a value in CW_Format.FORMAT_(...)
	 * @param {String} value which must be checked
	 * @return {boolean} return true if the given value check the given format, otherwise return false
	 */
	isValidFormat : function (format,value){
		switch(format){

			case (CW_Format.FORMAT_EMAIL):
				return this.isValidEMail(value);
				break;
			case (CW_Format.FORMAT_2Tags):
				return this.isValid2Tags(value);
				break;
			case (CW_Format.FORMAT_1Tag):
				return this.isValid1Tag(value);
				break;
			case (CW_Format.FORMAT_INTER_PHONE_NB):
				return this.isValidInterPhoneNb(value);
				break;
			case (CW_Format.FORMAT_ALPHA_DIGIT):
				return this.isValidAlphaDigit(value);
				break;
			case (CW_Format.FORMAT_ALPHA_DIGIT_CPLX):
				return this.isValidAlphaDigitCPLX(value);
				break;
			case (CW_Format.FORMAT_DIGIT):
				return this.isValidDigit(value);
				break;
			default:
				var e = new Error();
				e.message = "CW_Format : unknown given format:" + format;
				throw e; break;

		}

	},

	/**
	 * the following function check if the given email value is email format
	 * <br/>
	 * corresponding regexp: ("^[a-zA-Z0-9\_]+[a-zA-Z0-9\.\-_]{1,}@[a-zA-Z0-9\-_]{2,}\.[a-zA-Z\.\-_]{1,}[a-zA-Z\-_]+","g");
	 *@param {String} email
	 *@return {boolean} true if the given email value is correct, otherwise return false
	 */
	isValidEMail:function(email){
		var rexegp = new RegExp("^[a-zA-Z0-9\_]+[a-zA-Z0-9\.\-_]{1,}@[a-zA-Z0-9\-_]{2,}\.[a-zA-Z\.\-_]{1,}[a-zA-Z\-_]+","g");
		return rexegp.test(email);
	},

	isValid1Tag:function(tags){
		var simplifyTags = this.getSimplifyTags(tags);
		if (simplifyTags != "" && simplifyTags !=""){
			var tagTestArray = simplifyTags.split(',');
			return tagTestArray.length > 0;
		}else{
			return false;
		}

	},

	/**
	 * the following function check if the given tags value is 2tags format
	 * <br/>
	 * 2tags format determines 2 words (minimum 3 characters) separate by space or [,;]
	 *@param {String} email
	 *@return {boolean} true if the given tags value is correct, otherwise return false
	 */
	isValid2Tags:function(tags){
		var simplifyTags = this.getSimplifyTags(tags);
		if (simplifyTags != "" && simplifyTags !=""){
			var tagTestArray = simplifyTags.split(',');
			return tagTestArray.length > 1;
		}else{
			return false;
		}
	},

	/**
	 * the following function check if the given interPhoneNb value is interPhoneNb format
	 * <br/>
	 * corresponding regexp: ("[+][0-9]{11}$","g");
	 *@param {String} interPhoneNb
	 *@return {boolean} true if the interPhoneNb tags value is correct, otherwise return false
	 */
	isValidInterPhoneNb:function(interPhoneNb){
		if (interPhoneNb==null || interPhoneNb=="null" || interPhoneNb==""){
			return false;
		}
		if (interPhoneNb.length != 12){
			return false;
		}
		var phoneRegExp = new RegExp("[+][0-9]{11}$","g");
		return phoneRegExp.test(interPhoneNb);
	},

	isValidDigit:function(digit){
		if (digit==null || digit=="null" || digit==""){
			return false;
		}
		var digitRegExp = new RegExp("^[0-9]+$","g");
		return digitRegExp.test(digit);
	},

	/**
	 * the following function check if the given alphaDigit value is alphaDigit format
	 * <br/>
	 * corresponding regexp: ("^[a-zA-Z0-9]+$");
	 *@param {String} interPhoneNb
	 *@return {boolean} true if the alphaDigit tags value is correct, otherwise return false
	 */
	isValidAlphaDigit:function(alphaDigit){
		if (alphaDigit==null || alphaDigit=="null" || alphaDigit==""){
			return false;
		}

		var rexegp = new RegExp("^[a-zA-Z0-9]+$");
		return rexegp.test(alphaDigit);
	},

	isValidAlphaDigitCPLX:function(alphaDigit){
		if (alphaDigit==null || alphaDigit=="null" || alphaDigit==""){
			return false;
		}

		var matcher = new RegExp("^[a-zA-Z0-9.,:@? ]+$");
		return matcher.test(alphaDigit);
	},

	isValidAlphaDigitCPLX2:function(alphaDigit){
		alphaDigit = new String (alphaDigit);
		var result = true;
		for (var i=0;i< this.invalidCharacters.length && result;i++){
			result = (alphaDigit.indexOf(this.invalidCharacters[i]) < 0 );
		}
		return result;
	},

	_isInvalidCharacter:function(character){
		var result = false;
		for (var i=0;i< this.invalidCharacters.length && !result;i++){
			result = ((this.invalidCharacters[i]) == character );
		}
		return result;
	},

	getUnvalidCaracAlphaDigitCPLX2:function(texte){
			var invalidCarac = "";
			texte = new String(texte);
			var charac = null;
			for (var i=0;i< texte.length;i++){
				charac = texte.charAt(i);
				var check = this._isInvalidCharacter(charac);
				if (check == true){
					if (invalidCarac.indexOf(charac) <0){
						invalidCarac += charac + ", ";
					}
				}
			}
			return invalidCarac;
	},

	/**
	 * tags format determines words (minimum 3 characters) separate by space or [,;]
	 * so this function permits to convert "  tag1,   tag2 ; "  to -> "tag1 tag2"
	 * @param {String} tags
	 * @return {String} simplify tags
	 */
	 getSimplifyTags:function (text){
		if (text.length <2){
			return "";
		}
		//var matcherTagCarac = new RegExp("[.;:/|\\'\"]","g");
		var matcherTagSpace = new RegExp("[ ]+","g");
		var testText = (new String(text)).toLowerCase();
		//testText = testText.replace(matcherTagCarac,",");
		testText = testText.replace(matcherTagSpace," ");
		var realText = null;
		var testTextArray = testText.split(',')
		for(var index=0; index<testTextArray.length; index++) {
			realText = this.getStringWithoutStartEndSpace(testTextArray[index]);
			if (realText.length < 2){
				return "";
			}else{
				testTextArray[index] = realText;
			}
		}
		return testTextArray.join(",");
	},

	getStringWithoutStartEndSpace:function(text){
		text = new String(text);
		while (text.charAt(0) == " " && text.length > 0){
			text = text.substring(1);
		}
		while (text.length > 0 && text.charAt(text.length-1) == " "){
			text = text.substring(0,text.length-1);
		}
		return text;
	}


}

var CW_Format = new CW_Format();


function CW_FormValidator(){}

CW_FormValidator.prototype = {

	classValidatorNormal : "errorForm",

	classValidatorError : "errorFormActiv",


	check:function(form){

		if (ComWeb_navigator.isSafari()){
			return true;
		}

		var formDivArea = form.getElementsByTagName('div');
		var validatorDivArray = new Array();
		var isValid = true;

		for (var i=0;i<formDivArea.length;i++){
			if(formDivArea.item(i).id == "validator"){
				validatorDivArray.push(formDivArea.item(i));
			}
		}
		var validator  = null;
		while (validatorDivArray.length >0){
				CW_logger.log(CW_logger.LEVEL_INFORMATION, "CW_FormValidator check " + form.name);
				validator = new ComwebFormValidatorElement(validatorDivArray.shift());
				isValid = validator.check(form) &&  isValid;
		}

		return isValid;
	},

	setErrorMessage:function(form,fieldName,message){

		if (ComWeb_navigator.isSafari()){
			alert(message);
			return;
		}


		CW_logger.log(CW_logger.LEVEL_WARNING,"comwebFormValidator.setErrorMessage : " + form + " , " + fieldName + " , " + message);

		var formDivArea = form.getElementsByTagName('div');
		var isValid = true;
		var currentDiv = null;

		for (var i=0;i<formDivArea.length;i++){
			//alert(formDivArea.item(i).id);

			if(formDivArea.item(i).id == "validator"){
				currentDiv = formDivArea.item(i);
//
				//alert(currentDiv.innerText);

				if (currentDiv.innerHTML.indexOf("field:" + fieldName + ";") > 0){

					CW_logger.log(CW_logger.LEVEL_WARNING,"comwebFormValidator.setErrorMessage : fieldName 1:" + currentDiv.innerHTML);


					currentDiv.className = this.classValidatorError;
					var commentText = currentDiv.innerHTML;
					commentText = commentText.substring(commentText.indexOf("<!--"),commentText.indexOf("-->") + 3);

					if (message == null || message == ""){
							message = "&nbsp;"
					}


					currentDiv.innerHTML = message + commentText;

					CW_logger.log(CW_logger.LEVEL_WARNING,"comwebFormValidator.setErrorMessage : fieldName 2:" + currentDiv.innerHTML);

				}
			}
		}
	}


}

var CW_FormValidator = new CW_FormValidator();

/**
 *
 *
 * <ul>
 * 		<li>[obligato]field:values[name of the input field of the form, except if you specifie a date format]</li>
 * 		<li>[obligato]requiered:values[true|false]</li>
 * 		<li>[optional]format:values[email|2tags|interPhoneNb|alphadigit|confirm|date] see:CW_Format.FORMAT_(...)</li>
 * 			<br/>
 * 			<b>case:confirm<b/> this case indicates that this field must have the same value of an other field, so you must indicates this field by:confirmField
 * 			<br/>
 * 			<ul>
 * 				<li>[obligato]confirmField:values[name of the input field of the form which must be confirm]</li>
 * 			</ul>
 * 			<br/>
 * 			<b>case:date<b/> this case indicates a date determines by day, month, year, so we must obtain this differents values
 * 			<br/>
 * 			note that for this format, the 'field' parameter has a the followed value : name of the hidden field which will de contain the sql formated date value
 * 			<br/>
 * 			 <ul>
 * 				<li>[obligato]dateDayName:values[name of the select list which contains the day value]</li>
 * 				<li>[obligato]dateMonthName:values[name of the select list which contains the month value]</li>
 * 				<li>[obligato]dateYearName:values[name of the select list which contains the year value]</li>
 * 			</ul>
 * 		<li>[optional]minLenght:values[minimum size of the field value, must be an integer]</li>
 * 		<li>[optional]maxLenght:values[maximum size of the field value, must be an integer]</li>
 * 		<li>[optional]errorRequiered:values(error message text when the field is required and have no value, by default is : i18n("general.form.errorrequired"))</li>
 * 		<li>[optional]errorFormat:values(error message text when the field value dont check the given format, by default is : i18n("general.form.errorformat") or i18n("general.form.errorformat.required") depend of the required value)</li>
 *		<li>[optional]originalContent:values[original content text of the div, this text is often: (*), if not present this value will be i18n("general.form.requiered") if requiered=true otherwise will be ""]</li>
 * 		<li></li>
 * 		<li></li>
 * 		<li></li>
 * 		<li>filedN</li>
 * 		<li></li>
 * 		<li></li>
 * 		<li></li>
 * 		<li></li>
 * 		<li></li>
 * 		<li></li>
 * 		<li></li>
 * 		<li></li>
 * </ul>
 *
 */

function ComwebFormValidatorElement(divElement){

	/**
	 * validator div, must have "validator" id, and html comment which renseign the differents validator parameters
	 * @type HTMLDivElement
	 */
	this.divElement = null;
	/**
	 * indicates if the input field is required or not
	 * @type boolean
	 */
	this.requiered = null;
	/**
	 * stores the corresponding field name value
	 * @type String
	 */
	this.fieldName= null;
	/**
	 * stores the comment text, which contains the validator parameters
	 * @type String;
	 */
	this.commentText= null;
	/**
	 * stores the validator parameters
	 * @type HashTable
	 */
	this.parameters=null;




	this.initialize(divElement);
}

ComwebFormValidatorElement.prototype = {


	initialize:function(divElement){
		try{
			if (divElement.id == "validator"){
				this._parseDivElement(divElement);
				this.divElement = divElement;
			}else{
				CW_logger.log(CW_logger.LEVEL_ERROR,"cant create ComwebFormValidatorElement the given div ("+divElement+") has not the correct id ('validator')")
			}
			return;
		}catch(e){
			CW_logger.log(CW_logger.LEVEL_ERROR,"cant create ComwebFormValidatorElement, cant parse the given div ("+divElement+"):" + e);
		}
	},

	/**
	 * @private
	 * @ignore
	 */
	_parseDivElement:function(divElement){
		var contentText = divElement.innerHTML;

		//get the comment text which contains the validator parameters
		var indexStartComment = contentText.indexOf("<!--");
		var indexEndComment = contentText.indexOf("-->");
		var commentText = contentText.substring(indexStartComment+4,indexEndComment);
		this.commentText = " <!--" +  commentText + "-->";


		//get the field value
		var regexp = new  RegExp("field:[^\n]+;","g");
		var parameter = regexp.exec(commentText);

		if (parameter== null || parameter=="null" || parameter==""){
			var e = new Error();
			e.message = "comment text have not the obligatory 'field' parameter";
			throw e; return;
		}else{
			//delete the "field:" at start and the ";" at end
			parameter = new String(parameter);
			parameter = parameter.substring(6,parameter.length-1);
			this.fieldName = parameter;
		}



		//get the reqiered value: true or false
		regexp = new  RegExp("requiered:[^\n]+;","g");
		parameter = regexp.exec(commentText);

		if (parameter== null || parameter=="null" || parameter==""){
			var e = new Error();
			e.message = "comment text have not the obligatory 'required' parameter";
			throw e; return;
		}else if (parameter == "requiered:true;"){
			this.requiered = true;
		}else if (parameter == "requiered:false;"){
			this.requiered = false;
		}else{
			var e = new Error();
			e.message = "'required' parameter has no correct value, value must be 'true' or 'false'";
			throw e; return;
		}


		this.parameters = new HashTable();

		//get other fields N
		var hasField = true;
		var fieldIndex = 1;

		while (hasField){
			regexp = new  RegExp("field"+fieldIndex+":[^\n]+;","g");
		    parameter = regexp.exec(commentText);

		    if (parameter== null || parameter=="null" || parameter==""){
		    	hasField = false;
		    }else{
				parameter = new String(parameter);
				parameter = parameter.substring(6+ (new String(fieldIndex)).length,parameter.length-1);
				this.parameters.put("field" + fieldIndex,parameter);
				fieldIndex = fieldIndex +1;
		    }
		}



		//get the format value: CW_Format.FORMAT_(..)
		regexp = new  RegExp("format:[^\n]+;","g");
		parameter = regexp.exec(commentText);
		if (parameter!= null && parameter!="null" && parameter!=""){
			parameter = new String(parameter);
			parameter = parameter.substring(7,parameter.length-1);
			this.parameters.put("format",parameter);

			//see if the obligatory confirmField is present
			if (parameter=="confirm"){
				regexp = new  RegExp("confirmField:[^\n]+;","g");
				parameter = regexp.exec(commentText);
				if (parameter== null || parameter=="null" || parameter==""){
					var e = new Error();
					e.message = "comment text have 'confirm' parameter, but have not the obligatory 'confirmField' parameter";
					throw e; return;
				}else{
					parameter = new String(parameter);
					parameter = parameter.substring(13,parameter.length-1);
					this.parameters.put("confirmField",parameter);
				}
			}else if (parameter=="date"){
				regexp = new  RegExp("dateDayName:[^\n]+;","g");
				var dayName = regexp.exec(commentText);
				regexp = new  RegExp("dateMonthName:[^\n]+;","g");
				var monthName = regexp.exec(commentText);
				regexp = new  RegExp("dateYearName:[^\n]+;","g");
				var yearName = regexp.exec(commentText);

				if (dayName== null || dayName=="null" || dayName=="" || monthName== null || monthName=="null" || monthName=="" || yearName== null || yearName=="null" || yearName=="" ){
					var e = new Error();
					e.message = "comment text have 'date' parameter, but have not the obligatory 'dateDayName' 'dateMonthName' 'dateYearName' parameters";
					throw e; return;
				}else{
					parameter = new String(dayName);
					parameter = parameter.substring(12,parameter.length-1);
					this.parameters.put("dateDayName",parameter);
					parameter = new String(monthName);
					parameter = parameter.substring(14,parameter.length-1);
					this.parameters.put("dateMonthName",parameter);
					parameter = new String(yearName);
					parameter = parameter.substring(13,parameter.length-1);
					this.parameters.put("dateYearName",parameter);
				}
			}
		}

		//get the errorRequiered value: text
		regexp = new  RegExp("errorRequiered:[^\n]+;","g");
		parameter = regexp.exec(commentText);
		if (parameter!= null && parameter!="null"){
			parameter = new String(parameter);
			parameter = parameter.substring(15,parameter.length-1);
			this.parameters.put("errorRequiered",parameter);
		}

		//get the errorFormat value: text
		regexp = new  RegExp("errorFormat:[^\n]+;","g");
		parameter = regexp.exec(commentText);
		if (parameter!= null && parameter!="null"){
			parameter = new String(parameter);
			parameter = parameter.substring(12,parameter.length-1);
			this.parameters.put("errorFormat",parameter);
		}


		//get the minLenght value: number
		regexp = new  RegExp("minLenght:[^\n]+;","g");
		parameter = regexp.exec(commentText);
		if (parameter!= null && parameter!="null" && parameter!=""){
			parameter = new String(parameter);
			parameter = parameter.substring(10,parameter.length-1);
			this.parameters.put("minLenght",parameter);
		}

		//get the maxLenght value: number
		regexp = new  RegExp("maxLenght:[^\n]+;","g");
		parameter = regexp.exec(commentText);
		if (parameter!= null && parameter!="null" && parameter!=""){
			parameter = new String(parameter);
			parameter = parameter.substring(10,parameter.length-1);
			this.parameters.put("maxLenght",parameter);
		}

		//get the originalContent value: text
		regexp = new  RegExp("originalContent:[^\n]*;","g");
		parameter = regexp.exec(commentText);
		if (parameter!= null && parameter!="null" && parameter!=""){
			if (parameter=="originalContent:;"){
				this.parameters.put("originalContent","");
			}else{
				parameter = new String(parameter);
				parameter = parameter.substring(16,parameter.length-1);
				this.parameters.put("originalContent",parameter);
			}
		}

	},

	_setErrorFormat:function(){
		//general.form.errorrequired
		var message = this.parameters.get("errorFormat");
		if (message == null){
			if (this.requiered){
				message = CW_internationalization.getValue("general.form.errorformat.requiered");
			}else{
				message = CW_internationalization.getValue("general.form.errorformat");
			}
		}
		this._setError(message);
	},

	_setErrorRequiered:function(){
		//general.form.errorrequired
		var message = this.parameters.get("errorRequiered");
		if (message == null){
			message = CW_internationalization.getValue("general.form.errorrequired");
		}
		this._setError(message);
	},

	_setError:function(message){
		this.divElement.className = CW_FormValidator.classValidatorError;

		var messageError = this.parameters.get("errorFormat");
		if (messageError != null){
			message = messageError;
		}

		if (message == null || message == ""){
			message = "&nbsp;"
		}


		this.divElement.innerHTML = (message + this.commentText);
	},

	_setNoError:function(){
		var message = this.parameters.get("originalContent");
		if (message == null){
			if (this.requiered){
				message = CW_internationalization.getValue("general.form.requiered");
			}else{
				message = "";
			}
		}
		this.divElement.className = CW_FormValidator.classValidatorNormal;

		if (message == null || message == ""){
			message = "&nbsp;"
		}

		this.divElement.innerHTML = (message + this.commentText);
	},

	/**
	 * The following method check if the relative form element is corectly renseigned
	 * check  and set the appropriate html feedback
	 * @return {boolean} true if the relative form element is correct, false otherwise
	 */
	check:function(form){

		if (this.divElement == null){
			return false;
		}
		var elementForm = CW_util.getFormElement(form,this.fieldName);
		var elementType = new String(elementForm.type).toLowerCase();

		//alert("CHECK:\n" + this.fieldName + "\n" + "requiered:" + this.requiered + "\nvalue:" + elementValue + "\ntype:" + elementType);
		CW_logger.log(CW_logger.LEVEL_INFORMATION, "ComwebFormValidatorElement CHECK:\n" + this.fieldName + "\n" + "requiered:" + this.requiered + "\nvalue:" + elementValue + "\ntype:" + elementType + "\n parameters:" + this.parameters.toString() );

		if (elementType == "radio"){
			//alert("elementType: radio");
		}if (elementType == "checkbox"){
			if (this.requiered){
				if (! elementForm.checked){
					this._setErrorRequiered();
					return false;
				}
			}
		}else{

			var elementValue = elementForm.value;
			var format = this.parameters.get("format");

			if (this.requiered && format != "date"){
				if (elementValue == null || elementValue == "" || elementValue=="null" || elementValue==" "){
					this._setErrorRequiered();
					return false;
				}

				var hasField = true;
				var fieldIndex = 1;
				var fieldN = "";

				while (hasField){
					fieldN = this.parameters.get("field" + fieldIndex);

					if (fieldN == null){
						hasField = false;
					}else{
						var fieldValue = CW_util.getFormElement(form,fieldN).value;
						if (fieldValue == null || fieldValue == "" || fieldValue=="null" || fieldValue==" "){
							this._setErrorRequiered();
							return false;
						}
						fieldIndex = fieldIndex + 1;
					}
				}
			}



			var analysedParameter = "";
			//analysed the format value



			if (format!=null){
				if (format == "date"){
					var year = CW_util.getFormElement(form,this.parameters.get("dateYearName")).value;
					var month = CW_util.getFormElement(form,this.parameters.get("dateMonthName")).value;
					var day = CW_util.getFormElement(form,this.parameters.get("dateDayName")).value;

					if (day== null || day=="null" || day=="" || month== null || month=="null" || month=="" || year== null || year=="null" || year=="" ){
						this._setErrorRequiered();
						return false;
					}else{
						if (CW_util.isValidDate(year,month,day)){
							elementForm.value = CW_util.buildSQLDateFormat(year,month,day);
						}else{
							var requieredParam = "requiered= ";
							if (this.requiered){
								requieredParam = "requiered=" + CW_internationalization.getValue("general.form.requiered");
							}
							this._setError(CW_internationalization.getValue("general.form.errordate"),requieredParam);
							return false;
						}
					}


				}else if (format == "confirm"){
					analysedParameter = this.parameters.get("confirmField");
					if (elementValue != CW_util.getFormElement(form,analysedParameter).value){
						var requieredParam = "requiered= ";
						if (this.requiered){
							requieredParam = "requiered=" + CW_internationalization.getValue("general.form.requiered");
						}
						this._setError(CW_internationalization.getValue("general.form.error.confirmation","max=" + analysedParameter2,requieredParam));
						return false;
					}
				}else if (elementValue != ""){
					 if (! CW_Format.isValidFormat(format,elementValue)){
						this._setErrorFormat();
						return false;
					 }else{
					 	if (format == CW_Format.FORMAT_2Tags || format == CW_Format.FORMAT_1Tag ){
					 		//set the correct value of tags in the corresponding form element
					 		elementForm.value = CW_Format.getSimplifyTags(elementValue);
					 	}
					 }
				}
			}else{
				if (elementValue != "" && !CW_Format.isValidAlphaDigitCPLX2(elementValue)){
					var requieredParam = "requiered= ";
					if (this.requiered){
						requieredParam = "requiered=" + CW_internationalization.getValue("general.form.requiered");
					}
					this._setError(CW_internationalization.getValue("general.form.error.carac","carac=" + CW_Format.getUnvalidCaracAlphaDigitCPLX2(elementValue),requieredParam));
					return false;
				}
			}

			//analysed the minLenght and maxLenght value
			var analysedParameter1 = this.parameters.get("minLenght");
			var analysedParameter2 = this.parameters.get("maxLenght");
			if (analysedParameter1!=null && analysedParameter2!=null){
				analysedParameter1 = parseInt(analysedParameter1);
				analysedParameter2 = parseInt(analysedParameter2);
				var requieredParam = "requiered= ";
				if (this.requiered){
					requieredParam = "requiered=" + CW_internationalization.getValue("general.form.requiered");
				}
				if (elementValue.length < analysedParameter1 || elementValue.length > analysedParameter2 ){
					this._setError(CW_internationalization.getValue("general.form.lenght.between","min=" + analysedParameter1,"max=" + analysedParameter2,requieredParam));
					return false;
				}
			}else if (analysedParameter1!=null){
				analysedParameter1 = parseInt(analysedParameter1);
				var requieredParam = "requiered= ";
				if (this.requiered){
					requieredParam = "requiered=" + CW_internationalization.getValue("general.form.requiered");
				}
				if (elementValue.length < analysedParameter1){
					this._setError(CW_internationalization.getValue("general.form.lenght.min","min=" + analysedParameter1,requieredParam));
					return false;
				}
			}else if (analysedParameter2!=null){
				analysedParameter2 = parseInt(analysedParameter2);
				if (elementValue.length > analysedParameter2){
					var requieredParam = "requiered= ";
					if (this.requiered){
						requieredParam = "requiered=" + CW_internationalization.getValue("general.form.requiered");
					}

					this._setError(CW_internationalization.getValue("general.form.lenght.max","max=" + analysedParameter2,requieredParam));
					return false;
				}
			}
		}
		this._setNoError();
		return true;
	}

}