/*
 * League of Extraordinary Designers (r) CMS
 * Copyright (c) 2008, LXD. All rights reserved.
 * Author : Babak Taraghi 'babak.taraghi@gmail.com'
 * Code licensed under the BSD License.
 * version: 1.4.0.0
 */
 
var FormValidator = {
	errors : new Array(),
	forms : new Array(),
	setElement : function(formId,id,persianName,type,isRequired){
		for(var index in this.forms){
			if(this.forms[index].id == formId){
				var formExist = true;
				form = this.forms[index];
			}else{
				var formExist = false;
			}
		}
		if(!formExist){
			form = new Object();
			form.id = formId;
			form.elements = new Array();
			this.forms.push(form);
		}
		if(type == "radio"){
			i = 0;
			while(ele = document.getElementById(id+(++i))){
				ele.ctype = type;
				ele.pName = persianName;
				ele.isR = isRequired;
				form.elements.push(ele);
			}
		}else{
			ele = document.getElementById(id);
			ele.pName = persianName;
			ele.ctype = type;
			ele.isR = isRequired;
			form.elements.push(ele);
			ele = null;
		}
	},
	validate : function(formId){
		this.errors = new Array();
		this.radioError = false;
		this.radioChecked = false;
		
		for(var index in this.forms){
			if(this.forms[index].id == formId){
				form = this.forms[index];
			}
		}
		for(var index in form.elements){
			ele = form.elements[index];
			if((ele.ctype == "text" || ele.ctype == "email") && ele.isR && ele.value == ""){
				this.errors.push("پر کردن فیلد "+ele.pName+" الزامیست.");
			}
			if(ele.ctype == "checkbox" && ele.isR){
				if(!ele.checked){
					this.errors.push("چک کردن فیلد "+ele.pName+" الزامیست.");
				}
			}
			if(ele.ctype == "radio" && ele.isR){
				if(ele.checked)
					this.radioChecked = true;
				if(!ele.checked && !this.radioError){
					this.errors.push("انتخاب یکی از گزبنه های "+ele.pName+" الزامیست.");
					this.radioError = true;
				}
				if((this.radioChecked || ele.checked) && this.radioError){
					this.errors.pop();
					this.radioError = false;
				}
			}
			if(ele.ctype === "select" && ele.isR && ele.value == ""){
				this.errors.push("انتخاب فیلد "+ele.pName+" الزامیست.");
			}
			if(ele.ctype == "email" && ele.value != ""){
				p = ele.value.indexOf('@');
				if(p<1 || p==(ele.value.length-1)){
					this.errors.push("آدرس ایمیل وارد شده در فیلد "+ele.pName+" نا معتبر است.");
				}
			}
			if(ele.ctype.indexOf("-") != -1){
				splitedCtype = ele.ctype.split("-");
				if(splitedCtype[0] == "number"){
					if(ele.value != ""){
						val = parseFloat(ele.value);
		          		if (isNaN(val)){
							this.errors.push("فقط شماره در فیلد "+ele.pName+" وارد کنید.");
		          		}else if(splitedCtype[1] != 0){
							if(ele.value.length < splitedCtype[1]){
								this.errors.push("تعداد کارکترهای وارد شده در فیلد "+ele.pName+" کمتر از حد مجاز می باشد.");
							}
						}
					}else if(ele.isR && ele.value == ""){
						this.errors.push("پر کردن فیلد "+ele.pName+" الزامیست.");
					}
				}
			}
		}
		if(this.errors.length > 0){
			this.showErrors();
			return false;
		}
		return true;
	},
	showErrors : function(){
		html = "<table width='100%' cellpadding='0' cellspacing='0' border='0'><tr height='1px'><td valign='top'><span style='cursor:pointer;' onclick='FormValidator.hideErrors()'>&nbsp;X</span></td><td width='100%' dir='rtl'>لطفآ پس از بررسی و رفع خطا های زیر دکمه مرحله بعد را فشار دهید.<hr noshade='noshade'></td></tr></table><div style='overflow:auto;width:420px;height:160px;'><table cellpadding='0' cellspacing='0' width='100%' height='100%'>";
		if(document.getElementById("errorsContainer")){
			container = document.getElementById("errorsContainer");
			for(var index in this.errors){
				html += "<tr><td colspan='2' dir='rtl'>&bull;&nbsp;&nbsp;"+this.errors[index]+"</td></tr>";
			}
			container.style.display = "inline"
		}else{
			var container = document.createElement("div");
			container.setAttribute("id","errorsContainer");
			container.setAttribute("style","border:1px solid black;position:fixed;top:200px;left:280px;width:420px;height:200px;background-color:white;padding:8px;");
			for(var index in this.errors){
				html += "<tr><td colspan='2' dir='rtl'>&bull;&nbsp;&nbsp;"+this.errors[index]+"</td></tr>";
			}
			document.body.appendChild(container);
		}
		html += "<tr height='100%'><td>&nbsp;</td></tr></table></div>";
		container.innerHTML = html;
	},
	hideErrors : function(){
		document.getElementById("errorsContainer").style.display = "none";
	}
};