    var bCancel = false;
	var currentStage = 0;
	

    function validateContactDetailsForm() {
		var form = document.forms['ContactDetailsForm']
			
        if (bCancel) {
            return true;
        }
		var messages = new Array();
        if (currentStage == 0){
			
			validateContactDetailsForm_firstName(form, form["firstName"], messages.length == 0, messages);
	       	validateContactDetailsForm_surname(form, form["surname"], messages.length == 0, messages);
			validateContactDetailsForm_email(form, form["email"], messages.length == 0, messages);
			validateContactDetailsForm_postcode1(form, form["postcode1"], messages.length == 0, messages);
			validateContactDetailsForm_town(form, form["town"], messages.length == 0, messages);
	       	validateContactDetailsForm_premises(form, form["premises"], messages.length == 0, messages);
	        validateContactDetailsForm_street(form, form["street"], messages.length == 0, messages);
	     	validateContactDetailsForm_sSex(form, form["sSex"], messages.lenght == 0, messages);
			validateContactDetailsForm_birth(form, form["birth"], messages.lenght == 0, messages);
			validateContactDetailsForm_birth1(form, form["birth1"], messages.lenght == 0, messages);
			validateContactDetailsForm_birth2(form, form["birth2"], messages.lenght == 0, messages);
			validateContactDetailsForm_country(form, form["country"], messages.lenght == 0, messages);
			validateContactDetailsForm_isAgreed(form, form["isAgreed"], messages.lenght == 0, messages);
			
			
			if (form["isContactableByPhone"].checked){
				validateContactDetailsForm_homePhone(form, form["homePhone"], messages.lenght == 0, messages);
			}
			     
        }else if (currentStage == 1){
		
		}else  if (currentStage == 2){ 
			validateContactDetailsForm_lastPhone(form, form["lastPhone"], messages.length == 0, messages);
			validateContactDetailsForm_diller(form, form["diller"], messages.lenght == 0, messages);
		}
		
        if (messages.length > 0) {
            return handleFormErrors(form, messages);
        }else {
			if (currentStage ==2){
				form.submit();	
			}else{
				displayDivUsedCar(currentStage+1);
				currentStage +=1
				return false;
			}
		
		}
    }
		
	    function validateContactDetailsFormTD() {
		var form = document.forms['ContactDetailsForm']
		if (bCancel) {
            return true;
        }
        var messages = new Array();
        if (currentStage == 0){
			validateContactDetailsForm_firstName(form, form["firstName"], messages.length == 0, messages);
	       	validateContactDetailsForm_surname(form, form["surname"], messages.length == 0, messages);
			validateContactDetailsForm_email(form, form["email"], messages.length == 0, messages);
			validateContactDetailsForm_postcode1(form, form["postcode1"], messages.length == 0, messages);
			validateContactDetailsForm_town(form, form["town"], messages.length == 0, messages);
	       	validateContactDetailsForm_premises(form, form["premises"], messages.length == 0, messages);
	        validateContactDetailsForm_street(form, form["street"], messages.length == 0, messages);
	     	validateContactDetailsForm_sSex(form, form["sSex"], messages.lenght == 0, messages);
			validateContactDetailsForm_birth(form, form["birth"], messages.lenght == 0, messages);
			validateContactDetailsForm_birth1(form, form["birth1"], messages.lenght == 0, messages);
			validateContactDetailsForm_birth2(form, form["birth2"], messages.lenght == 0, messages);
			validateContactDetailsForm_country(form, form["country"], messages.lenght == 0, messages);
			validateContactDetailsForm_isAgreed(form, form["isAgreed"], messages.lenght == 0, messages);
			if (form["isContactableByPhone"].checked){
				validateContactDetailsForm_homePhone(form, form["homePhone"], messages.lenght == 0, messages);
			}
			     
        }
        if (messages.length > 0) {
			return handleFormErrors(form, messages);
        }else {
			if (currentStage == 6){
				form.submit();	
			}else{
				displayDiv(currentStage+1);
				
				currentStage +=1
				return false;
			}
		
		}
    }
	
	function validatecarValidateForm(){
		var form = document.forms['carValidateForm']
		if (bCancel) {
            return true;
        }

		var messages = new Array();
        if (currentStage == 0){
			if(!isFirstFoto){
				validatecarValidateForm_foto(form, form["cars_foto"], messages.length == 0, messages);
			}
			validatecarValidateForm_model(form, form["cars_audiCars"], messages.length == 0, messages);
			validatecarValidateForm_price(form, form["cars_price"], messages.length == 0, messages);
			validatecarValidateForm_probeg(form, form["cars_probeg"], messages.length == 0, messages);
			validatecarValidateForm_releaseYear(form, form["cars_releaseYear"], messages.length == 0, messages);
	       	validatecarValidateForm_releaseMonth(form, form["cars_month"], messages.length == 0, messages);
	        validatecarValidateForm_dvig(form, form["cars_dvig"], messages.length == 0, messages);
	     	validatecarValidateForm_hrs(form, form["cars_hrs"], messages.lenght == 0, messages);
			validatecarValidateForm_type(form, form["cars_type"], messages.lenght == 0, messages);
			validatecarValidateForm_trans(form, form["cars_trans"], messages.lenght == 0, messages);
			validatecarValidateForm_privod(form, form["cars_privod"], messages.lenght == 0, messages);
			validatecarValidateForm_color(form, form["cars_color"], messages.lenght == 0, messages);
			validatecarValidateForm_city(form, form["cars_city"], messages.lenght == 0, messages);
			validatecarValidateForm_udal(form, form["cars_udal"], messages.lenght == 0, messages);
			validatecarValidateForm_colorname(form, form["cars_colorname"], messages.lenght == 0, messages);
		} else if (currentStage == 2){
			validatecarValidateForm_salon(form, form["cars_salon"], messages.lenght == 0, messages);
		}
		
        if (messages.length > 0) {
			return handleFormErrors(form, messages);
        }else {
		if (currentStage == 7){
				form.submit();	
			}else{
				displayDivUsedCar(currentStage+1);
				
				currentStage +=1
				return false;
			}
		}
				
	}
	/* ------------------------------CAR VALIDATE  ------------------- */
	function validatecarValidateForm_foto(form, field, setFocus, messages) {
		if (!validateRequired(field)) {
            return processError(form, field, -1, null, setFocus, messages, "Загрузите фото");
        }
        if (window.html2ProcessFormField) {
            html2ProcessFormField(form.name, field.name, true, "")
        }
        return true;
    }
	function validatecarValidateForm_colorname(form, field, setFocus, messages) {
		if (!validateRequired(field)) {
            return processError(form, field, -1, null, setFocus, messages, "Укажите цвет");
        }
        if (window.html2ProcessFormField) {
            html2ProcessFormField(form.name, field.name, true, "")
        }
        return true;
    }
	function validatecarValidateForm_model(form, field, setFocus, messages) {
		if (!validateRequired(field)) {
            return processError(form, field, -1, null, setFocus, messages, "Укажите модель");
        }
        if (window.html2ProcessFormField) {
            html2ProcessFormField(form.name, field.name, true, "")
        }
        return true;
    }
	function validatecarValidateForm_price(form, field, setFocus, messages) {
		if (!validateRequired(field)) {
			
            return processError(form, field, -1, null, setFocus, messages, "Укажите цену");
        }
		for (var i=0; i<field.value.length; i++){
			var charCod = field.value.charCodeAt(i);
			if(charCod < 45 || charCod > 57){
				 return processError(form, field, -1, null, setFocus, messages, "Неверные символы в поле");
			}
		}
		if (!validateMaxLength(field, 200)) {
            return processError(form, field, -1, null, setFocus, messages, "");
        }
        if (window.html2ProcessFormField) {
            html2ProcessFormField(form.name, field.name, true, "")
        }
        return true;
    }
	function validatecarValidateForm_probeg(form, field, setFocus, messages) {
		if (!validateRequired(field)) {
            return processError(form, field, -1, null, setFocus, messages, "Укажите пробег");
        }
		for (var i=0; i<field.value.length; i++){
			var charCod = field.value.charCodeAt(i);
			if(charCod < 45 || charCod > 57){
				 return processError(form, field, -1, null, setFocus, messages, "Неверные символы в поле");
			}
		}
        if (!validateMaxLength(field, 200)) {
            return processError(form, field, -1, null, setFocus, messages, "");
        }
        if (window.html2ProcessFormField) {
            html2ProcessFormField(form.name, field.name, true, "")
        }
        return true;
    }
	function validatecarValidateForm_releaseYear(form, field, setFocus, messages) {
		if (!validateRequired(field)) {
            return processError(form, field, -1, null, setFocus, messages, "Укажите год");
        }
        if (window.html2ProcessFormField) {
            html2ProcessFormField(form.name, field.name, true, "")
        }
        return true;
    }
	function validatecarValidateForm_releaseMonth(form, field, setFocus, messages) {
		if (!validateRequired(field)) {
            return processError(form, field, -1, null, setFocus, messages, "Укажите месяц");
        }
        if (window.html2ProcessFormField) {
            html2ProcessFormField(form.name, field.name, true, "")
        }
        return true;
    }
	function validatecarValidateForm_dvig(form, field, setFocus, messages) {
		if (!validateRequired(field)) {
            return processError(form, field, -1, null, setFocus, messages, "Укажите объем двигателя");
        }
        if (window.html2ProcessFormField) {
            html2ProcessFormField(form.name, field.name, true, "")
        }
        return true;
    }
	function validatecarValidateForm_hrs(form, field, setFocus, messages) {
		if (!validateRequired(field)) {
            return processError(form, field, -1, null, setFocus, messages, "Укажите мощность");
        }
        if (window.html2ProcessFormField) {
            html2ProcessFormField(form.name, field.name, true, "")
        }
        return true;
    }
	function validatecarValidateForm_type(form, field, setFocus, messages) {
		if (!validateRequired(field)) {
            return processError(form, field, -1, null, setFocus, messages, "Укажите тип двигателя");
        }
        if (window.html2ProcessFormField) {
            html2ProcessFormField(form.name, field.name, true, "")
        }
        return true;
    }
	function validatecarValidateForm_trans(form, field, setFocus, messages) {
		if (!validateRequired(field)) {
            return processError(form, field, -1, null, setFocus, messages, "Укажите трансмиссию");
        }
        if (window.html2ProcessFormField) {
            html2ProcessFormField(form.name, field.name, true, "")
        }
        return true;
    }
	function validatecarValidateForm_privod(form, field, setFocus, messages) {
		if (!validateRequired(field)) {
            return processError(form, field, -1, null, setFocus, messages, "Укажите привод");
        }
        if (window.html2ProcessFormField) {
            html2ProcessFormField(form.name, field.name, true, "")
        }
        return true;
    }
	function validatecarValidateForm_color(form, field, setFocus, messages) {
		if (!validateRequired(field)) {
            return processError(form, field, -1, null, setFocus, messages, "Укажите группу цветов");
        }
        if (window.html2ProcessFormField) {
            html2ProcessFormField(form.name, field.name, true, "")
        }
        return true;
    }
	function validatecarValidateForm_city(form, field, setFocus, messages) {
		if (!validateRequired(field)) {
            return processError(form, field, -1, null, setFocus, messages, "Укажите город");
        }
        if (window.html2ProcessFormField) {
            html2ProcessFormField(form.name, field.name, true, "")
        }
        return true;
    }
	function validatecarValidateForm_udal(form, field, setFocus, messages) {
		if (!validateRequired(field)) {
            return processError(form, field, -1, null, setFocus, messages, "Укажите удаленность");
        }
        if (!validateMaxLength(field, 200)) {
            return processError(form, field, -1, null, setFocus, messages, "");
        }
        if (window.html2ProcessFormField) {
            html2ProcessFormField(form.name, field.name, true, "")
        }
        return true;
    }
	function validatecarValidateForm_salon(form, field, setFocus, messages) {
		if (!validateRequired(field)) {
            return processError(form, field, -1, null, setFocus, messages, "Укажите тип салона");
        }
        if (window.html2ProcessFormField) {
            html2ProcessFormField(form.name, field.name, true, "")
        }
        return true;
    }
	
	/* --------------- END VALIDATE ---------------------*/
	function displayDivUsedCar(divNum){
		var div0 = document.getElementById('formDiv_0');
		var div1 = document.getElementById('formDiv_1');
		var div2 = document.getElementById('formDiv_2');
		var div3 = document.getElementById('formDiv_3');
		var div4 = document.getElementById('formDiv_4');
		var div5 = document.getElementById('formDiv_5');
		var div6 = document.getElementById('formDiv_6');
		div0.style.display ='none';
		div1.style.display ='none';
		div2.style.display ='none';
		div3.style.display ='none';
		div4.style.display ='none';
		div5.style.display ='none';
		div6.style.display ='none';
		
		var visibleDiv = document.getElementById('formDiv_'+divNum);
		visibleDiv.style.display='block';
	}
	
	function showDiv(divNum){
		displayDivUsedCar(divNum);
		currentStage = divNum;
	}
	function backToDiveUsed(){
		displayDivUsedCar(currentStage-1);
		currentStage -=1
	}
	
	/* ------------------------------OLD CONTENT--------------------- */
	
	function displayDiv(divNum){
		var div0 = document.getElementById('formDiv_0');
		var div1 = document.getElementById('formDiv_1');
		var div2 = document.getElementById('formDiv_2');
		div0.style.display ='none';
		div1.style.display ='none';
		if (div2){
			div2.style.display ='none';
		}
		var visibleDiv = document.getElementById('formDiv_'+divNum);
		visibleDiv.style.display='block'
	}
	
	function backToDive(){
		displayDiv(currentStage-1);
		currentStage -=1
	}
    function backToFirstDiv(){
		displayDiv(currentStage-2);
		currentStage -=2
	}
	 		
    function validateContactDetailsForm_firstName(form, field, setFocus, messages) {
	
        if (!validateRequired(field)) {
            return processError(form, field, -1, null, setFocus, messages, "Пожалуйста, заполните поле \"Имя\".");
        }
        if (!validateMaxLength(field, 64)) {
            return processError(form, field, -1, null, setFocus, messages, "Имя не может быть больше 64 символов.");
        }
        if (window.html2ProcessFormField) {
            html2ProcessFormField(form.name, field.name, true, "")
        }
        return true;
    }

    function validateContactDetailsForm_surname(form, field, setFocus, messages) {
      	if (!validateRequired(field)) {
           return processError(form, field, -1, null, setFocus, messages, "Пожалуйста, заполните поле \"Фамилия\".");
        }
        if (!validateMaxLength(field, 64)) {
            return processError(form, field, -1, null, setFocus, messages, "Фамилия не может быть больше 64 символов.");
        }
        if (window.html2ProcessFormField) {
            html2ProcessFormField(form.name, field.name, true, "")
        }
        return true;
    }
	
	function validateContactDetailsForm_email(form, field, setFocus, messages) {
        if (!validateRequired(field)) {
            return processError(form, field, -1, null, setFocus, messages, "Укажите адрес электронной почты.");
        }
        if (!validateEmail(field)) {
            return processError(form, field, -1, null, setFocus, messages, "Неправильный формат электронноый почты.");
        }
        if (!validateMaxLength(field, 127)) {
            return processError(form, field, -1, null, setFocus, messages, "Электронная почта не может быть больше 127 символов.");
        }
        if (window.html2ProcessFormField) {
            html2ProcessFormField(form.name, field.name, true, "")
        }
        return true;
    }
	
	function validateContactDetailsForm_postcode1(form, field, setFocus, messages) {
        if (!validateRequired(field)) {
            return processError(form, field, -1, null, setFocus, messages, "Пожалуйста, укажите почтовый индекс.");
        }
        if (!validateMaxLength(field, 8)) {
            return processError(form, field, -1, null, setFocus, messages, "Почтовый индекс не может быть больше 8 символов.");
        }
        if (window.html2ProcessFormField) {
            html2ProcessFormField(form.name, field.name, true, "")
        }
        return true;
    }
	
	  function validateContactDetailsForm_country(form, field, setFocus, messages) {
        if (!validateRequired(field)) {
            return processError(form, field, -1, null, setFocus, messages, "Пожалуйста, укажите страну.");
        }
        if (window.html2ProcessFormField) {
            html2ProcessFormField(form.name, field.name, true, "")
        }
        return true;
    }
	
	
	  function validateContactDetailsForm_isAgreed(form, field, setFocus, messages) {
        if (!validateRequired(field)) {
            return processError(form, field, -1, null, setFocus, messages, "Пожалуйста, подтвердите согласие на обработку Ваших персональных данных.");
        }
        if (window.html2ProcessFormField) {
            html2ProcessFormField(form.name, field.name, true, "")
        }
        return true;
    }
	
	 function validateContactDetailsForm_homePhone(form, field, setFocus, messages) {
        if (!validateRequired(field)) {
            return processError(form, field, -1, null, setFocus, messages, "Пожалуйста, укажите контактный телефон.");
        }
        if (window.html2ProcessFormField) {
            html2ProcessFormField(form.name, field.name, true, "")
        }
        return true;
    }
	
	
	function validateContactDetailsForm_sSex(form, field, setFocus, messages) {
        if (!validateRequired(field)) {

			return processError(form, field[0], -1, null, setFocus, messages, "Пожалуйста, укажите Ваш пол.");
        }
        if (window.html2ProcessFormField) {
            html2ProcessFormField(form.name, field.name, true, "")
        }
        return true;
    }
	
	function validateContactDetailsForm_birth(form, field, setFocus, messages) {
        if (!validateRequired(field)) {
			return processError(form, field, -1, null, setFocus, messages, "укажите день;");
			
        }
        if (window.html2ProcessFormField) {
            html2ProcessFormField(form.name, field.name, true, "")
        }
        return true;
    }
	
	function validateContactDetailsForm_birth1(form, field, setFocus, messages) {
        if (!validateRequired(field)) {
			return processError(form, field, -1, null, setFocus, messages, "&nbsp; укажите месяц;");
        }
        if (window.html2ProcessFormField) {
            html2ProcessFormField(form.name, field.name, true, "")
        }
        return true;
    }
	
	function validateContactDetailsForm_birth2(form, field, setFocus, messages) {
        if (!validateRequired(field)) {
			return processError(form, field, -1, null, setFocus, messages, "&nbsp; укажите год;");
        }
        if (window.html2ProcessFormField) {
            html2ProcessFormField(form.name, field.name, true, "")
        }
        return true;
    }
	
			
	 function validateContactDetailsForm_town(form, field, setFocus, messages) {
        if (!validateRequired(field)) {
            return processError(form, field, -1, null, setFocus, messages, " Пожалуйста, заполните поле \"Город\".");
        }
        if (window.html2ProcessFormField) {
            html2ProcessFormField(form.name, field.name, true, "")
        }
        return true;
    }
	
	  function validateContactDetailsForm_street(form, field, setFocus, messages) {
        if (!validateRequired(field)) {
            return processError(form, field, -1, null, setFocus, messages, " Пожалуйста, заполните поле \"Улица\".");
        }
        if (window.html2ProcessFormField) {
            html2ProcessFormField(form.name, field.name, true, "")
        }
        return true;
    }
	
	    function validateContactDetailsForm_premises(form, field, setFocus, messages) {
        if (!validateRequired(field)) {
            return processError(form, field, -1, null, setFocus, messages, "Пожалуйста, укажите номер Вашего дома.");
        }
        if (window.html2ProcessFormField) {
            html2ProcessFormField(form.name, field.name, true, "")
        }
        return true;
    }
	
     function validateContactDetailsForm_lastPhone(form, field, setFocus, messages) {
        if (!validateRequired(field)) {
            return processError(form, field, -1, null, setFocus, messages, "Пожалуйста, укажите контактный телефон.");
        }
        if (window.html2ProcessFormField) {
            html2ProcessFormField(form.name, field.name, true, "")
        }
        return true;
    }
  
	function validateContactDetailsForm_diller(form, field, setFocus, messages) {
        if (!validateRequired(field)) {
            return processError(form, field, -1, null, setFocus, messages, "Пожалуйста, выберите ближайшего к Вам диллера.");
        }
        if (window.html2ProcessFormField) {
            html2ProcessFormField(form.name, field.name, true, "")
        }
        return true;
    }
    
   function validateMaxLength(field, maxLength) {
        var fieldValue = getValueFromField(field);
        if (fieldValue.length > 0) {
            return (fieldValue.length <= parseInt(maxLength));
        }
        return true;
    }

  function validateRequired(field) {
  	    if (field == null) {
            return false;
        }
        if ((field.type == 'hidden' ||
            field.type == 'text' ||
            field.type == 'textarea' ||
            field.type == 'file' ||
            field.type == 'checkbox' ||
            field.type == 'select-one' ||
            field.type == 'password') &&
            field.disabled == false) {

            var value = '';
            // get field's value
            if (field.type == "select-one") {
                var si = field.selectedIndex;
                if (si >= 0) {
                    value = field.options[si].value;
                }
            } else if (field.type == 'checkbox') {
                if (field.checked) {
                    value = field.value;
                }
            } else {
                value = field.value;
            }

            if (value == null || trim(value).length == 0) {
                return false;
            }
        } else if (field.type == "select-multiple") { 
            var numOptions = field.options.length;
            lastSelected=-1;
            for(loop=numOptions-1;loop>=0;loop--) {
                if(field.options[loop].selected) {
                    lastSelected = loop;
                    value = field.options[loop].value;
                    return true;
                }
            }
            return false;
        } else if ((field.length > 0) && (field[0].type == 'radio' || field[0].type == 'checkbox')) {
            isChecked=-1;
            for (loop=0;loop < field.length;loop++) {
                if (field[loop].checked) {
                    isChecked=loop;
                    break; // only one needs to be checked
                }
            }
            if (isChecked < 0) {
                return false;
            }
        }
        return true;
    }


   /*$RCSfile: EmailValidator.js,v $ $Revision: 1.1 $ $Date: 2004/11/15 00:00:00 $ */
   /**
    * Check to see if the field is a valid email address.
    */
    function validateEmail(field) {
        var fieldValue = getValueFromField(field);
        if (fieldValue.length > 0) {
            return checkEmail(fieldValue);
        }
        return true;
    }

    /**
     * Reference: Sandeep V. Tamhankar (stamhankar@hotmail.com),
     * http://javascript.internet.com
     */
    function checkEmail(emailStr) {
        if (emailStr.length == 0) {
            return true;
        }
        // TLD checking turned off by default
        var checkTLD=0;
        var knownDomsPat=/^(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum)$/;
        var emailPat=/^(.+)@(.+)$/;
        var specialChars="\\(\\)><@,;:\\\\\\\"\\.\\[\\]";
        var validChars="\[^\\s" + specialChars + "\]";
        var quotedUser="(\"[^\"]*\")";
        var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
        var atom=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) {
            return false;
        }
        var user=matchArray[1];
        var domain=matchArray[2];
        for (i=0; i<user.length; i++) {
            if (user.charCodeAt(i)>127) {
                return false;
            }
        }
        for (i=0; i<domain.length; i++) {
            if (domain.charCodeAt(i)>127) {
                return false;
            }
        }
        if (user.match(userPat)==null) {
            return false;
        }
        var IPArray=domain.match(ipDomainPat);
        if (IPArray!=null) {
            for (var i=1;i<=4;i++) {
                if (IPArray[i]>255) {
                    return false;
                }
            }
            return true;
        }
        var atomPat=new RegExp("^" + atom + "$");
        var domArr=domain.split(".");
        var len=domArr.length;
        for (i=0;i<len;i++) {
            if (domArr[i].search(atomPat)==-1) {
                return false;
            }
        }
        if (checkTLD && domArr[domArr.length-1].length!=2 && 
            domArr[domArr.length-1].search(knownDomsPat)==-1) {
            return false;
        }
        if (len<2) {
            return false;
        }
        return true;
    }


   /*$RCSfile: ValidatorUtilities.js,v $ $Revision: 1.1 $ $Date: 2004/11/15 00:00:00 $ */
   /**
    * A field is considered valid if greater than the specified minimum.
    * <p>
    * <strong>Caution:</strong> Using <code>validateMinLength</code> on a password field in a 
    *  login page gives unnecessary information away to hackers. While it only slightly
    *  weakens security, we suggest using it only when modifying a password.</p>
    */
    function validateMinLength(field, minLength) {
        var fieldValue = getValueFromField(field);
        if (fieldValue.length > 0) {
            return (trim(fieldValue).length >= parseInt(minLength));
        }
        return true;
    }


    /**
     * Get the value from a field.
     */
    function getValueFromField(field) {
        var fieldValue = '';
        if (field != null && field.length > 0 && field[0].type == 'radio') {
            for (var x=0; x < field.length; x++) {
                if (field[x].disabled == false && field[x].checked) {
                    fieldValue = field[x].value;
                    break;
                }
            }
        } else if (field != null && field.disabled == false) {
            if (field.type == 'hidden' || field.type == 'password' ||
                field.type == 'text'   || field.type == 'textarea' ||
                field.type == 'radio'  || field.type == 'file') {
                fieldValue = field.value;
            }
            if (field.type == 'select-one') {
                var si = field.selectedIndex;
                if (si >= 0) {
                    fieldValue = field.options[si].value;
                }
            }
        }
        return fieldValue == null ? '' : fieldValue;
    }

    /**
     * Determine the size of an Indexed Field.
     */
    function findIndexedSize(form, start, indexedProp, prop) {
        var x = start;
        while (true) { 
            var field = form[indexedProp + "[" + x + "]." + prop];
            if (field == null) {
               return x;
            }
            x++;
        }
        return 0;
    }

    /**
     * Process an Error.
     */
    function processError(form, field, idx, indexProp, setFocus, messages, msg) {
        // Set Focus
        if (setFocus && field != null && !(field.type == 'hidden')) {
            field.focus();
        }

        // Replace message $[bean:property] occurances with their values
        msg = replaceMsgProperties(msg, form, idx, indexProp);

        // Set Focus

		if (messages == null) {
            if (window.html2ProcessFormField) {
                html2ProcessFormField(form.name, field.name, false, msg);
            } else {
                handleFieldError(field, msg);
            }
        } else {
            var temp = new Array();
            temp[0] = field.name;
            temp[1] = msg;
            messages.push(temp);
        }

        return false;
    }

    /**
     * Handle an Individual Field Error.
     */
    function handleFieldError(field, message) {
      	alert(message); return false;
		
    }
 
    /**
     * Handle a set of Form errors.
     */
    function handleFormErrors(form, messages) {
		if (!window.html2ProcessFormField) {
            var errorMessages = new Array();
            for (var i=0; i < messages.length; i++) {
                errorMessages[errorMessages.length] = messages[i][1];
            }
            alert(errorMessages.join('\n')); 
            return false;
        }

        // get the HTML form's elements
        var htmlFormElements = form.elements;
     
        // loop through the elements of the HTML form
        for (var i=0; i < htmlFormElements.length; i++) {
            var htmlFieldNode = htmlFormElements.item(i);
            var attributes = htmlFieldNode.attributes;
            if ((attributes == null) || (attributes.length==0)) {
                continue;
            }
                    
            //var name = htmlFieldNode.attributes.getNamedItem("name");
            var htmlFieldName = htmlFieldNode.name;
            if ((htmlFieldName == null) || (htmlFieldName.length == 0)) {
                // skip those elements without a name
                continue;
            }

            // look for the html field among the messages
            var error = null; 
            for (var j=0; j < messages.length; j++) {
                var temp = messages[j];
                if (temp == null) {
                    // skip null value
                    continue;
                }
                
                var tempFieldName = temp[0];
                if (tempFieldName == htmlFieldName) {
                    // found it
                    error = temp;
                    break; 
                }
            }
            
            var isValid = true;
            var errorMessage = "";
            if (error != null) {
                isValid = false;
                errorMessage = error[1];
            }

            html2ProcessFormField(form.name, htmlFieldName, isValid, errorMessage);
        }
        return false;
    }
 
    /**
     *  replace $[bean:property] occurances with values.
     */
    function replaceMsgProperties(msg, form, idx, indexProp) {
        if (form != null && msg != null) {
            var PREFIX = "$[bean:";
            var start  = 0;
            while (start >= 0) {
                var start = msg.indexOf(PREFIX);
                if (start >= 0) {
                    var end = start + msg.substring(start, msg.length).indexOf(']');
                    if (end < start) {
                        msg = replaceValue(msg, PREFIX, "$[????:");
                    } else {
                        var propName = msg.substring(start + PREFIX.length, end);
                        var othField = form[propName];
                        if (idx >= 0) {
                           var indexedFieldName = indexProp + "[" + idx + "]." + propName;
                           othField = (form[indexedFieldName] == null) ? form[propName] : form[indexedFieldName];
                        }
                        msg = replaceValue(msg, PREFIX + propName + "]", (othField == null) ? "????" : othField.value);
                    }
                }
            }
        }
        return msg;
    }
 
    /**
     *  Replace a value.
     */
    function replaceValue(inputValue, fromValue, toValue) {
        var pos = inputValue.indexOf(fromValue);
        return (pos < 0) ? inputValue : inputValue.substring(0, pos) + toValue + 
                                        inputValue.substring(pos + fromValue.length, inputValue.length);
    }
    
    /**
     * Trim whitespace from left and right sides of s.
     */
    function trim(s) {return s.replace( /^\s*/, "" ).replace( /\s*$/, "" );}
	
	
	
