	function ss_showError(element, show, msg){
		if(!msg){
			msg = "required field"
		}
		if(show){
			element.up().addClassName("ss_reqboxactive");
			if(!$("error_" + element.name)){
				var error = new Element("div", {"class": "ss_error", style: "display: none", id: "error_" + element.name}).update(msg)
				error.className = "ss_error";
				element.up().insertBefore(error, element.nextSibling)
				error.appear({duration: 0.5});
			}else{
				$("error_" + element.name).appear({duration: 0.5})
			}
		}else{
			if(element.up().hasClassName("ss_reqbox") || element.up().hasClassName("ss_notreqbox")){
				$(element.up()).removeClassName("ss_reqboxactive");
			}
		
			if($("error_" + element.name)){
				$("error_" + element.name).fade({duration: 0.5});
			}
		}
	}
	
	function daysInFebruary (year){
		// February has 29 days in any year evenly divisible by four,
    	// EXCEPT for centurial years which are not also divisible by 400.
    	return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
	}
	function DaysArray(n) {
		for (var i = 1; i <= n; i++) {
			this[i] = 31
			if (i==4 || i==6 || i==9 || i==11) {this[i] = 30}
			if (i==2) {this[i] = 29}
		} 
		return this
	}
	var daysInMonth = DaysArray(12)

	function ss_checkForm(form){
		var success = true;
		$(form).select("div.ss_reqbox input,div.ss_reqbox textarea,div.ss_reqbox select").each(
			function(element){
				if(element.hasClassName("emailaddress") || element.hasClassName("captcha") || element.hasClassName("password") || element.hasClassName("date")){
					return;
				}
				
				if(element.readAttribute("type") == "radio"){
					//Process radio only one time for the first element
					if(element != form[element.name][0]){
						return;
					}
					var checked = false;
					for(var i = 0; i < form[element.name].length; i++){
						if(form[element.name][i].checked){
							checked = true;
							break;
						}
					}
					if(checked == false){
						ss_showError(element, true, "reqired field");
						success = false;
					}else{
						ss_showError(element, false)
					}
				}else if(element.nodeName=="SELECT"){
					if(element.value.length == 0 || element.value == -1){
						ss_showError(element, true, "reqired field");
						success = false;
					}else{
						ss_showError(element, false)
					}
				}else{
					if(element.value.length == 0){
						ss_showError(element, true, "reqired field");
						success = false;
					}else{
						ss_showError(element, false)
					}
				}
			}
		);
		$(form).select("div.ss_reqbox input.date").each(
			function(element){				
				var filter = /^([0-9]{1,2})\/([0-9]{1,2})\/([0-9]{4})$/;
				
				if (!filter.test(element.value)){					
					success = false;
					ss_showError(element, true, "invalid date format: DD/MM/YYYY")
				}else{
						
					var res = true;
					
					
					var value = element.value;
					var pos = value.indexOf("/");
					var day = parseInt(value.substring(0, pos));
					value = value.substring(pos+1);
					pos = value.indexOf("/");
					var month = parseInt(value.substring(0, pos));
					
					var year = parseInt(value.substring(pos+1))
					if(year < 2009){
						res = false;
					}else if (month < 1 || month > 12){
						res = false;
					}else if(day < 1 || day > 31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month]){
						res = false
					}else{
						
					}
					
					if(res == false){
						success = false;
						ss_showError(element, true, "such date does not exist")						
					}else{
						ss_showError(element, false)
					}
				}
			}
		)
		$(form).select("div.ss_notreqbox input.filepdf").each(
			function(element){
				if(element.value.length > 0){
					var len = element.value.length
					var fileType = element.value.substring(len - 3).toLowerCase();
					if(fileType != "pdf"){						
						success = false;
						ss_showError(element, true, "invalid file extension")
					}else{
						ss_showError(element, false)
					}					
				}else{
					ss_showError(element, false)
				}
			}
		)
		$(form).select("div.ss_reqbox input.emailaddress").each(
			function(element){
				var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
				
				if (!filter.test(element.value)){
					success = false;
					ss_showError(element, true, "invalid email address")
				}else{
					ss_showError(element, false)
				}
			}
		)
		$(form).select("div.ss_notreqbox input.emailaddress").each(
			function(element){
				if(element.value.length > 0){
					var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
				
					if (!filter.test(element.value)){
						success = false;
						ss_showError(element, true, "invalid email address")
					}else{
						ss_showError(element, false)
					}
				}else{
					ss_showError(element, false)
				}
			}
		)
		var passwordElements = $(form).select("div.ss_reqbox input.password");
		if(passwordElements.length > 0){
			var equal = true;
			for(var i = 1; i < passwordElements.length; i++){
				if(passwordElements[i].value != passwordElements[0].value){
					equal = false;
					for(var j = 0; j < passwordElements.length; j++){
						ss_showError(passwordElements[j], true, "not equal passwords")
					}
					break;
				}
			}
			if(equal){
				var minLength = -1;
				if(form.passwordlength){
					minLength = form.passwordlength.value
					if(passwordElements[0].value.length < minLength){
						for(var j = 0; j < passwordElements.length; j++){
							ss_showError(passwordElements[j], true, "too short password")
						}
					}else{
						for(var j = 0; j < passwordElements.length; j++){
							ss_showError(passwordElements[j], false)
						}
					}
				}
			}
		}
		
		$(form).select("input.captcha").each(
			function (element){
				if(element.value.length == 0){
					success = false;
					ss_showError(element, true, "invalid value");
				}else{
					//form.disable();
					var formtype = "";
					if(form.formtype){
						formtype = "&formtype=" + form.formtype.value
					}
					new Ajax.Request(
						"securimage/checkcapture.php", {
							method: "get",
							parameters: "code=" + element.value + formtype,
							onSuccess: function (transport){
								var result = transport.responseXML.documentElement.childNodes.item(0).nodeValue
								if(result == "valid"){
									ss_showError(element, false)
									if(success){
										form.submit();
									}else{
										//form.enable();
									}
								}else{
									ss_showError(element, true, "invalid value")
									//form.enable();
								}
							}
						}
					)
				}
			}
		);
		
		if($(form).select("input.captcha").length == 0){
			if(success){
				//form.disable();
			}
			return success;
		}
		return false;
	}
	
function verifyLength(obj, len){
	if(obj.value.length > len){
		
		obj.value = obj.value.substring(0, len)
	}
	
	return true;
}
