jslib.namespace("jslib.form.validator");


jslib.form.validator.__settips = function(o, tipobj, tips, focus, msgbox){
	if(tipobj){
		var errorcss = tipobj.getAttribute("errorcss");
		if(errorcss)tipobj.className = errorcss;
		if(tipobj.getAttribute("oldtips") == null)
			tipobj.setAttribute("oldtips",tipobj.innerHTML);
		tipobj.innerHTML = tips;
	}else{
		if(tips && msgbox){
			if(typeof(messagebox) == 'function'){
				messagebox(tips);
			}else{
				alert(tips);
			}
		}
	}
	if(focus)o.focus();
}
jslib.form.validator.__cleartips = function(o, tipobj){
	if(tipobj){
		tipobj.innerHTML = '';
		var successcss = tipobj.getAttribute("successcss");
		if(successcss)tipobj.className = successcss;
	}
}
jslib.form.validator.isvalid = function(formId){
	var form = jslib.$(formId);

	if(!isvalidelements(jslib.$tag(form,'input')))return false;
	if(!isvalidelements(jslib.$tag(form,'select')))return false;
	if(!isvalidelements(jslib.$tag(form,'textarea')))return false;

	
	function isvalidelements(elements){
		for(var i=0; i<elements.length; i++){
			if(!checkisvalid(elements[i])){
				return false;
			}
		}
		return true;
	}

	function checkisvalid(o){
		var pattern = o.getAttribute("pattern");
		var compareid = o.getAttribute("compareid");
		if(pattern || compareid){
			var tips = o.getAttribute("tips");
			var tipsid = o.getAttribute("tipsid");
			var empty = o.getAttribute("empty");
			var tipso = (tipsid ? jslib.$(tipsid) : null);
			if(tipso){
				if(!tipso.getAttribute('attachkeypress')){
					jslib.event.attach(o,'onkeypress',function(event){
						jslib.form.validator.__cleartips(o,tipso);
					});
					tipso.setAttribute('attachkeypress', 'true');
				}
			}
			if(o.disabled){
				if(empty){
					jslib.form.validator.__cleartips(o,tipso);
					return true;
				}else{
					jslib.form.validator.__settips(o,tipso,tips,true,true);
					return false;
				}
			}
			if(o.value == ''){
				if(empty){
					jslib.form.validator.__cleartips(o,tipso);
					return true;
				}else{
					if(compareid){
						var co = jslib.$(compareid);
						if(co && co.value == ''){
							jslib.form.validator.__cleartips(o,tipso);
							return true;
						}
					}
					jslib.form.validator.__settips(o,tipso,tips,true,true);
					return false;
				}				
			}

			if(compareid){
				var co = jslib.$(compareid);
				if(co){					
					if(co.value != o.value){
						jslib.form.validator.__settips(o,tipso,tips,true,true);
						return false;
					}else{
						jslib.form.validator.__cleartips(o,tipso);
						return true;
					}
				}
			}else{
				var r = new RegExp(pattern,"im");
				if(r.test(o.value)){
					jslib.form.validator.__cleartips(o,tipso);
					return true;
				}else{
					jslib.form.validator.__settips(o,tipso,tips,true,true);
					return false;
				}
			}		
		}
		return true;
	}

	return true;
}

jslib.form.validator.applyform = function(formId){
	var form = jslib.$(formId);

	applyelements(jslib.$tag(form,'input'));
	applyelements(jslib.$tag(form,'select'));
	applyelements(jslib.$tag(form,'textarea'));

	function applyelements(elements){
		for(var i=0; i<elements.length; i++){
			attachonblur(elements[i]);
		}
	}

	function attachonblur(o){
		var pattern = o.getAttribute("pattern");
		var compareid = o.getAttribute("compareid");
		if(pattern || compareid){
			jslib.event.attach(o,"onblur",function(){
				var tips = o.getAttribute("tips");
				var tipsid = o.getAttribute("tipsid");
				var empty = o.getAttribute("empty");
				var tipso = (tipsid ? jslib.$(tipsid) : null);
				if(o.disabled){
					if(empty){
						if(tipso){
							var normalcss = tipso.getAttribute("normalcss");
							if(normalcss)tipso.className = normalcss;
							tipso.innerHTML = tipso.getAttribute("oldtips") ? tipso.getAttribute("oldtips") : tipso.innerHTML;
						}
					}else{
						jslib.form.validator.__settips(o,tipso,tips);
					}
					return;
				}
				if(o.value == ''){
					if(empty){
						if(tipso){
							var normalcss = tipso.getAttribute("normalcss");
							if(normalcss)tipso.className = normalcss;
							tipso.innerHTML = tipso.getAttribute("oldtips") ? tipso.getAttribute("oldtips") : tipso.innerHTML;
						}
					}else{
						if(compareid){
							var co = jslib.$(compareid);
							if(co && co.value != ''){
								jslib.form.validator.__settips(o,tipso,tips);
							}
						}else{
							jslib.form.validator.__settips(o,tipso,tips);
						}
					}
					return;
				}				

				if(compareid){
					var co = jslib.$(compareid);
					if(co){
						if(co.value != o.value){
							jslib.form.validator.__settips(o,tipso,tips);
						}else{
							if(tipso){
								var successcss = tipso.getAttribute("successcss");
								if(successcss)tipso.className = successcss;
								if(tipso.getAttribute("oldtips") == null)
									tipso.setAttribute("oldtips",tipso.innerHTML);
								tipso.innerHTML = tipso.getAttribute("successtips") ? tipso.getAttribute("successtips") : "&nbsp;";
							}
						}
					}
				}else{
					var r = new RegExp(pattern,"im");
					if(r.test(o.value)){
						if(tipso){
							var successcss = tipso.getAttribute("successcss");
							if(successcss)tipso.className = successcss;
							if(tipso.getAttribute("oldtips") == null)
								tipso.setAttribute("oldtips",tipso.innerHTML);
							tipso.innerHTML = tipso.getAttribute("successtips") ? tipso.getAttribute("successtips") : "&nbsp;";
						}
					}else{
						jslib.form.validator.__settips(o,tipso,tips);
					}
				}
			});
		}
	}	
}