	if (document.layers) {
	  document.captureEvents(Event.KEYDOWN);
	  document.captureEvents(Event.KEYPRESS);
	  document.captureEvents(Event.KEYUP);
	}

	document.onkeydown = traderValidateForms;
	document.onkeypress = traderValidateForms;
	document.onkeyup = traderValidateForms;
	
	var validTraderDate = "xxxx-xx-xx";
	var validTraderTime = "xx:xx:xx";
	var validTraderDateTime = "xxxx-xx-xx xx:xx:xx";
	
	function traderValidateForms(e) {
		var target
			if (document.all){
				target = window.event.srcElement;
			}else{target = e.target};
			
			var className = target.className;
			className = className.toLowerCase( );
			aRange=getRange(target);
			if (className.substr(0, 7) == "integer"){
				var tmpMaxSize = getTraderValidNumber(className);
				var value = target.value;
				if (value.length > 0){
					value = getTraderValidNumber(value);
					if (!isNaN(parseInt(aRange.to))){
						value = checkValue(value,aRange.to);
					}
					if (!isNaN(parseInt(value))) {
						if (target.value != parseInt(value)) {
							target.value = parseInt(value);
						}
					}else{target.value = ""}
				}
			}
						
			if (className.substr(0, 9) == "buildyear"){
				var value = target.value;
				value = checkBuildYear(value)
				if (target.value != value) target.value = value;
			}
			
			if (className.substr(0, 5) == "float"){
				var value = target.value;
				value = value.replace(",",".");
				value = getTraderValidNumber(value);
				
				if (!isNaN(parseFloat(aRange.to))){
					value = checkValue(value,aRange.to);
				}
				if (!isNaN(parseFloat(value))) {
					if (target.value != value) target.value = value;
				}else{
					target.value = "";
				}
			}
			
			if (className.substr(0, 4) == "date"){
				var value = target.value;
				value = checkTraderDateTimeMask(validTraderDate,value)
				if (target.value != value) target.value = value;
			}
			
			if (className.substr(0, 8) == "datetime"){
				var value = target.value;
				value = checkTraderDateTimeMask(validTraderDateTime,value)
				if (target.value != value) target.value = value;
			}
			
			if (className.substr(0, 4) == "time"){
				var value = target.value;
				value = checkTraderDateTimeMask(validTraderTime,value)
				if (target.value != value) target.value = value;
			}

			if (className.substr(0, 6) == "string"){
				var tmpMaxSize = getTraderValidNumber(className)
				if (!isNaN(parseInt(tmpMaxSize))){
					var maxSize = parseInt(tmpMaxSize);
					var value = target.value;
					if (value.length > maxSize) target.value = value.substr(0,maxSize);
				}
			}
			
			
	}
	
	function getTraderValidNumber(value){
		var c;
		var retval = "";
		for (var i = 0; i<value.length; i++){
			c = value.substr(i,1);
			if ("0123456789.".indexOf(c) >= 0) retval = retval.concat(c);
		}
		value = retval;
		retval = "";
		var commaexists = false;
		for (var i = (value.length-1); i>=0; i--){
			c = value.substr(i,1);
			if ((c!=".") || (!commaexists)) retval = c+""+retval;
			if (c == ".") commaexists = true;
		}		
		return retval;
	}
	
	
	function getTraderValidDateTimeChars(value){
		var c;
		var retval = "";
		var goodstring = "0123456789-: "
		for (var i = 0; i<value.length; i++){
			c = value.substr(i,1);
			if (goodstring.indexOf(c) >= 0) retval = retval.concat(c);
		}				
		return retval;
	}
	
	function checkBuildYear(value){
		if (value.length > 0){
			var aYear = ((1900+(((new Date()).getYear())%1900)).toString()).substr(2,2);
			var rexpstr = "^((18\\d\\d|19\\d\\d|20"+aYear+")|(18\\d|19\\d|20"+aYear.substr(0,1)+")|(18\\d|19\\d|20"+aYear.substr(0,1)+"\\d)|(18|19|20)|(1|2))";
			var re = new RegExp(rexpstr);
			var matchar = value.match(re);
			if (matchar){
				if (matchar.length > 0) {retval = matchar[0]}  else {retval = ""};
			}else{retval = "";}
		}else{retval = ""}
		return retval;
	}
	
	function changeDTToMask(value){
		var c;
		var retval = "";
		for (var i = 0; i<value.length; i++){
			c = value.substr(i,1);
			if ("0123456789".indexOf(c) >= 0) {
				retval = retval.concat("x")}else{retval = retval.concat(c)
			}
		}
		return retval;
	}
	
	function checkTraderDateTimeMask(mask,value){
		var tmpval = value;
		var validformat=/^\d{4}\-\d{1,2}\-\d{1,2}$/
		if (!validformat.test(value)){
			var retval = "";
			tmpvalmask = "";
			for (var i = 1; i<=tmpval.length;i++){
				tmpvalmask = changeDTToMask(tmpval);
				if (mask.substr(0,i) == tmpvalmask.substr(0,i)) retval = tmpval.substr(0,i)
			} 
		} else retval = value
		return retval;
	} 
	
	function checkValue(value,maxvalue){
		var retval = "";
		var c;
		if ((value.length > 0)&&(!isNaN(parseFloat(value)))) {
			value = parseFloat(value); 
			if (value > maxvalue) {
				for (var i = 0; i<value.toString().length; i++){
					c = value.toString().substr(i,1);
					if  (parseFloat(retval.concat(c))<=maxvalue){
						retval = retval.concat(c);
					}
				}
			}else{
				retval = value;
			}
		}
		return retval;
	}
	
	function getRange(obj){
		if (document.getElementById("test")) document.getElementById("test").value = "aaa";
		var range = new CRange();
		if (obj){
			var tmp = "";
			var rangestr = "";
			var cname = obj.className;
			if (cname.length>0){
				cname = cname.replace("\t"," ");
				cname = cname.replace("\t"," ");
				cname = cname.replace("\t"," ");
				cnamear = (cname+" ").split(" ");
				for (i=0;i<cnamear.length;i++){
					tmp = (cnamear[i]).toLowerCase();
					if (tmp.length>0){if (tmp.indexOf("integer")==0) rangestr = tmp.replace("integer","");}
					if (tmp.length>0){if (tmp.indexOf("float")==0) rangestr = tmp.replace("float","");}
					if (tmp.length>0){if (tmp.indexOf("buildyear")==0) rangestr = tmp.replace("buildyear","");}
					if (tmp.length>0){if (tmp.indexOf("date")==0) rangestr = tmp.replace("date","");}
					if (tmp.length>0){if (tmp.indexOf("datetime")==0) rangestr = tmp.replace("datetime","");}
					if (tmp.length>0){if (tmp.indexOf("time")==0) rangestr = tmp.replace("time","");}
					if (tmp.length>0){if (tmp.indexOf("string")==0) rangestr = tmp.replace("string","");}
					if (tmp.length>0){if (tmp.indexOf("inputemail")==0) rangestr = tmp.replace("inputemail","");}
				}
			}
			if (rangestr.length>0){
				if (rangestr.indexOf("^")>=0){
					rangestrar = rangestr.split("^");
					range.from = rangestrar[0];
					range.to = rangestrar[1];
				}else{
					range.to = rangestr;
				}
			}
		}
		if (document.getElementById("test")) document.getElementById("test").value = range.toString();
		return range
	}
	
	function ValidateDateInput(input, inputname){
		var validformat=/^\d{4}\-\d{1,2}\-\d{1,2}$/ 
		var returnval=false
		if (!validformat.test(input.value))
			alert("Nieprawidłowy format daty w polu "+inputname+". Proszę wpisać w formacie RRRR-MM-DD")
		else{ 
	
		var monthfield=input.value.split("-")[1]
		var dayfield=input.value.split("-")[2]
		var yearfield=input.value.split("-")[0]
		var dayobj = new Date(yearfield, monthfield-1, dayfield)
	
		if ((dayobj.getMonth()+1!=monthfield)||(dayobj.getDate()!=dayfield)||(dayobj.getFullYear()!=yearfield))
			alert("Nieprawidłowa data w polu "+inputname)
		else
			returnval=true
		}
		return returnval;
	}

	function CRange(from,to) {
		if (from){
			this.from=from;
		}else{this.from=""}
		if (to){
			this.to=to;
		}else{this.to=""}
	}
	function CRangeToString(){return this.from+"^"+this.to;}
	CRange.prototype.toString = CRangeToString;
	
	function internalValidateForm(form){
		var ret = true;
		if (form){
			if (form.elements){
				var elem;
				var aRange;
				var msg = "";
				for (i=0;((i<form.elements.length)&&(msg==""));i++){
					elem = form.elements[i];
					if (elem){
						if (elem.type.toLowerCase()=="text"){
							aRange = getRange(elem);
							var basetype = "";							
							var cname = elem.className;
							if (cname.length>0){
								cname = cname.replace("\t"," ");
								cname = cname.replace("\t"," ");
								cname = cname.replace("\t"," ");
								cnamear = (cname+" ").split(" ");
								for (i=0;i<cnamear.length;i++){
									tmp = (cnamear[i]).toLowerCase();
									if (tmp.length>0){if (tmp.indexOf("integer")==0) basetype="integer";}
									if (tmp.length>0){if (tmp.indexOf("float")==0) basetype="float";}
									if (tmp.length>0){if (tmp.indexOf("buildyear")==0) basetype="buildyear";}
									if (tmp.length>0){if (tmp.indexOf("date")==0) basetype="date";}
									if (tmp.length>0){if (tmp.indexOf("datetime")==0) basetype="datetime";}
									if (tmp.length>0){if (tmp.indexOf("time")==0) basetype="time";}
									if (tmp.length>0){if (tmp.indexOf("string")==0) basetype="string";}
									if (tmp.length>0){if (tmp.indexOf("inputemail")==0) basetype="inputemail";}
								}
							}							
							if (basetype!=""){
								if ((aRange.toString()).length > 1){
									if (aRange.from.length>0) {
										if ((";integer;float;buildyear;").indexOf(";"+basetype+";") > 0){
											if (parseFloat(elem.value) < parseFloat(aRange.from)) msg += "wartość tego pola musi być większa od: "+aRange.from+"\n";
										}

										if ((";date;datetime;time;").indexOf(";"+basetype+";") > 0){
											if (elem.value < aRange.from) msg += "wartość tego pola musi być większa od: "+aRange.from+"\n";
										}

										if ((";string;inputemail;").indexOf(";"+basetype+";") > 0){
											if (elem.value.length < aRange.from) msg += "ilość znaków tego pola musi być większa od: "+aRange.from+"\n";
										}
									}
									if (aRange.to.length>0) {
										if ((";integer;float;buildyear;").indexOf(";"+basetype+";") > 0){
											if (parseFloat(elem.value) > parseFloat(aRange.to)) msg += "wartość tego pola musi być mniejsza niż: "+aRange.to+"\n";
										}

										if ((";date;datetime;time;").indexOf(";"+basetype+";") > 0){
											if (elem.value > aRange.to) msg += "wartość tego pola musi być mniejsza niż: "+aRange.to+"\n";
										}

										if ((";string;inputemail;").indexOf(";"+basetype+";") > 0){
											if (elem.value.length > aRange.to) msg += "ilość znaków tego pola musi być mniejsza niż: "+aRange.to+"\n";
										}
									}
								}
							}
						}
					}
				}
				if (msg!=""){
					ret = false;
					try{
						showAlertAdv("Błąd formularza",msg,"btn_fadeefect|btn_autohide|btn_timerhide",elem,"","");
					}catch(e){;}
				}
			}
		}
		return ret;
	}
	

