var fromValidator = null;
var customer_type = "shakhsi";

function abfa_services_changeCitie(cities) {
	$("city_id").length = 0;
	cities.each( function(node) {
		var opt = new Element("option", {
			'html': node.title,
			'id': node.id,
			'value': node.id
		}).inject("city_id").store("waver2", node.waver2).store("waver3", node.waver3).store("rate", node.rate).store("home_cost", node.home_cost).store("lavazem_ab",[node.cost_3.toInt(),node.cost_2.toInt(), node.cost_1.toInt()]).store("lavazem_fab",node.cost_f.toInt());
	});

}

function  abfa_service_toggleDescription() {
	var trg = $("abfa_services_description");
	if(trg.getStyle("display") == "none") {
		trg.removeClass("TDW_hidden");
	} else {
		trg.addClass("TDW_hidden");
	}
}

function abfa_service_changeCustomerType(type) {
	$("abfa_services_namefamily").className = (type == "shakhsi") ? "" : "hidden";
	$("abfa_services_namecompany").className = (type == "shakhsi") ? "hidden" : "";
	$("abfa_services_idnational").className = (type == "shakhsi") ? "" : "hidden";
	$("abfa_services_idregistration").className = (type == "shakhsi") ? "hidden" : "";

	customer_type = type;
	$("national_code_or_registration_code").set("value", "");
}

function initFormValidate(form, options) {
	window.addEvent("domready", function() {
		fromValidator = new FormCheck(form, options);
	});

}

//var diagonalCost = [1540000, 1400000, 2620000];
var constant1 = 600000;
var constant2 = 150000;
//var LAVAZEM_FAZELAB = 1550000;

function abfa_calculateKarbariTax() {
	var cityWaver2 = $("city_id").options[$("city_id").selectedIndex].retrieve("waver2").toInt();
	var cityWaver3 = $("city_id").options[$("city_id").selectedIndex].retrieve("waver3").toInt();
	var homeCost = $("city_id").options[$("city_id").selectedIndex].retrieve("home_cost").toInt();
	var cityRate = $("city_id").options[$("city_id").selectedIndex].retrieve("rate").toInt();
	var cityId = $("city_id").options[$("city_id").selectedIndex].get("value").toInt();
	var diagonalCost=$("city_id").options[$("city_id").selectedIndex].retrieve("lavazem_ab");
	console.log('diagonalCost',diagonalCost);
	var LAVAZEM_FAZELAB =$("city_id").options[$("city_id").selectedIndex].retrieve("lavazem_fab").toInt();
	console.log('LAVAZEM_FAZELAB',LAVAZEM_FAZELAB);
	//var diameterTaxes = [];
	var total = 0;
	var tmp;

	$$("label.abfa_labels").set("html", 0);

	var waver2_total = 0;
	var waver3_total = 0;
	var abCost_total = 0;
	var fabCost_total = 0;
	var lavazemAb_total = 0;
	var lavazemFab_total = 0;

	var calculateHome = function(flag) {
		var lavazemAb_h = diagonalCost[$("home_branch_diagonal_id").selectedIndex] || 0; // FIXME
		var waver3_h = cityWaver3 * $('number_of_home_units').value.toInt();
		var waver2_h = cityWaver2 * $('number_of_home_units').value.toInt();
		var abCost_h = ((waver3_h + homeCost + waver2_h) * $('number_of_home_units').value.toInt());
		
		if(flag)
			return abCost_h;

		abCost_total += abCost_h;
		waver2_total += waver2_h;
		waver3_total += waver3_h;
		lavazemAb_total += lavazemAb_h;
	}

	var calculateCommercial = function(flag) {
		var waver3_c = constant2 * cityRate * $("capacity_of_commercial").value.toInt();
		var waver2_c = cityWaver2;
		var lavazemAb_c = diagonalCost[$("commercial_branch_diagonal_id").selectedIndex] || 0;
		var hazineh_c = waver3_c + (constant1 * $('number_of_commercial_units').value.toInt());
		var abCost_c = waver3_c + hazineh_c + waver2_c;
		
		if(flag)
			return abCost_c;
			
		abCost_total += abCost_c;
		waver2_total += waver2_c;
		waver3_total += waver3_c;
		lavazemAb_total += lavazemAb_c;
	}

	var calculatePublic = function(flag) {
		var waver3_p = constant2 * cityRate * $("capacity_of_public").value.toInt();
		var waver2_p = cityWaver2;
		var lavazemAb_p = diagonalCost[$("public_branch_diagonal_id").selectedIndex] || 0;
		var hazineh_p = waver3_p;
		var abCost_p = waver3_p + hazineh_p + waver2_p;
		
		if(flag)
			return abCost_p;

		abCost_total += abCost_p;
		waver2_total += waver2_p;
		waver3_total += waver3_p;
		lavazemAb_total += lavazemAb_p;
	}

	switch ($('abfa_branch_cost').selectedIndex) {
		case 0:
			if ($("abfa_calculateKarbaritax_home").checked) {// مسکونی
				calculateHome();
			}
			if ($("abfa_calculateKarbaritax_commercial").checked) {// تجاری
				calculateCommercial();
			}
			if ($("abfa_calculateKarbaritax_public").checked) {// عمومی
				calculatePublic();
			}
			break;
		case 1:
			if(cityId != 41 && cityId != 11 && cityId != 48 && cityId != 69)
				break;

			if ($("abfa_calculateKarbaritax_home").checked) {// مسکونی
				lavazemFab_total += LAVAZEM_FAZELAB;
				fabCost_total += calculateHome(true) * 0.7;
			}
			if ($("abfa_calculateKarbaritax_commercial").checked) {// تجاری
				lavazemFab_total += LAVAZEM_FAZELAB;
				fabCost_total += calculateCommercial(true);
			}
			if ($("abfa_calculateKarbaritax_public").checked) {// عمومی
				lavazemFab_total += LAVAZEM_FAZELAB;
				fabCost_total += calculatePublic(true);
			}
			break;
		default:
			break;
	}

	$("abfa_ab_cost").set("html", abCost_total);
	$("abfa_fazelab_cost").set("html", fabCost_total);
	$("abfa_tabsareh_2").set("html", waver2_total);
	$("abfa_tabsareh_3").set("html", waver3_total);
	$("abfa_lavazem_ab").set("html", lavazemAb_total);
	$("abfa_lavazem_fazelab").set("html", lavazemFab_total);
	$("abfa_maliyat").set("html", (lavazemAb_total + lavazemFab_total) * 0.04);

	var sum = 0;

	$$("label.abfa_labels").each( function(node, index) {
		if(index == 2 || index == 3)
			return;
			
		sum += Number(node.get("html"));
	});

	$("abfa_totalsum").set("html", sum);
}

function abfa_toggleEnable(parent, toggleShow) {
	$$("input.TDW_com_toggler").each( function(toggler) {
		var toToggleCount = toggler.get("rev") ? toggler.get("rev").toInt() : 1;

		toggler.getParent(parent).getAllNext().each( function(node, index) {
			if (index < toToggleCount) {
				node.getElements("input, select, textarea").set("disabled", !toggler.get("checked"));

				if (toggleShow) {
					node.setStyle("display", "none");
				}
			}
		});

		toggler.addEvent("click", function() {
			this.getParent(parent).getAllNext().each( function(node, index) {
				if (index < toToggleCount) {
					node.getElements("input, select, textarea").set("disabled", !this.get("checked"));
					if (toggleShow) {
						node.setStyle("display", this.get("checked") ? "" : "none");
					}
				}
			}, this);

		});

	});

}

function abfa_toggleRadioEnable(parent, selector, toggleShow) {
	$$("input." + selector + "[type=radio]").each( function(toggler) {
		var toToggleCount = toggler.get("rev") ? toggler.get("rev").toInt() : 1;

		toggler.getParent(parent).getAllNext().each( function(node, index) {
			if (index < toToggleCount) {
				node.getElements("input, select, textarea").set("disabled", !toggler.get("checked"));

				if (toggleShow && !toggler.get("checked")) {
					node.setStyle("display", "none");
				}
			}
		});

		toggler.addEvent("click", function() {
			$$("input." + selector + "[type=radio]").each( function(toggler) {
				var toToggleCount = toggler.get("rev") ? toggler.get("rev").toInt() : 1;
				if (toggler != this) {
					toggler.getParent(parent).getAllNext().each( function(node, index) {
						if (index < toToggleCount) {
							node.getElements("input, select, textarea").set("disabled", !toggler.get("checked"));

							if (toggleShow) {
								node.setStyle("display", "none");
							}
						}
					});

				}
			});

			this.getParent(parent).getAllNext().each( function(node, index) {
				if (index < toToggleCount) {
					node.getElements("input, select, textarea").set("disabled", !this.get("checked"));
					if (toggleShow) {
						node.setStyle("display", this.get("checked") ? "" : "none");
					}
				}
			}, this);

		});

	});

}

function checkNationalCode(el) {
	if(customer_type == "hoghughi") {
		return true;
	}

	var meli_code;
	meli_code = el.value;

	if (meli_code.length == 10) {
		if (meli_code == '1111111111' ||
		meli_code == '0000000000' ||
		meli_code == '2222222222' ||
		meli_code == '3333333333' ||
		meli_code == '4444444444' ||
		meli_code == '5555555555' ||
		meli_code == '6666666666' ||
		meli_code == '7777777777' ||
		meli_code == '8888888888' ||
		meli_code == '9999999999') {
			el.errors.push("کد ملی صحیح نمی باشد");
			return false;
		}

		c = parseInt(meli_code.charAt(9));
		n = parseInt(meli_code.charAt(0)) * 10 +
		parseInt(meli_code.charAt(1)) * 9 +
		parseInt(meli_code.charAt(2)) * 8 +
		parseInt(meli_code.charAt(3)) * 7 +
		parseInt(meli_code.charAt(4)) * 6 +
		parseInt(meli_code.charAt(5)) * 5 +
		parseInt(meli_code.charAt(6)) * 4 +
		parseInt(meli_code.charAt(7)) * 3 +
		parseInt(meli_code.charAt(8)) * 2;
		r = n - parseInt(n / 11) * 11;

		if ((r == 0 && r == c) || (r == 1 && c == 1) || (r > 1 && c == 11 - r)) {
			return true;
		} else {
			el.errors.push("کد ملی صحیح نمی باشد");
			return false;
		}
	} else {
		el.errors.push("کد ملی صحیح نمی باشد");
		return false;
	}
}

function checkRequiredCheckBoxes() {
	return document.id("TDW_chkCheckHolder").getElements("input.TDW_chkCheck").some( function(node) {
		return node.checked;
	});

}

/*
 ---
 script: Tips.js
 description: Class for creating nice tips that follow the mouse cursor when hovering an element.
 license: MIT-style license
 authors:
 - Valerio Proietti
 - Christoph Pojer
 requires:
 - core:1.2.4/Options
 - core:1.2.4/Events
 - core:1.2.4/Element.Event
 - core:1.2.4/Element.Style
 - core:1.2.4/Element.Dimensions
 - /MooTools.More
 provides: [Tips]
 ...
 */

(function() {

	var read = function(option, element) {
		return (option) ? ($type(option) == 'function' ? option(element) : element.get(option)) : '';
	};

	this.Tips = new Class({

		Implements: [Events, Options],

		options: {
			/*
			 onAttach: $empty(element),
			 onDetach: $empty(element),
			 */
			onShow: function() {
				this.tip.setStyle('display', 'block');
			},

			onHide: function() {
				this.tip.setStyle('display', 'none');
			},

			title: 'title',
			text: function(element) {
				return element.get('rel') || element.get('href');
			},

			showDelay: 100,
			hideDelay: 100,
			className: 'tip-wrap',
			offset: {
				x: 16,
				y: 16
			},
			windowPadding: {
				x: 0,
				y: 0
			},
			fixed: false
		},

		initialize: function() {
			var params = Array.link(arguments, {
				options: Object.type,
				elements: $defined
			});
			this.setOptions(params.options);
			if (params.elements)
				this.attach(params.elements);
			this.container = new Element('div', {
				'class': 'tip'
			});
		},

		toElement: function() {
			if (this.tip)
				return this.tip;

			return this.tip = new Element('div', {
				'class': this.options.className,
				styles: {
					position: 'absolute',
					top: 0,
					left: 0
				}
			}).adopt(new Element('div', {
				'class': 'tip-top'
			}), this.container, new Element('div', {
				'class': 'tip-bottom'
			})).inject(document.body);
		},

		attach: function(elements) {
			$$(elements).each( function(element) {
				var title = read(this.options.title, element), text = read(this.options.text, element);

				element.erase('title').store('tip:native', title).retrieve('tip:title', title);
				element.retrieve('tip:text', text);
				this.fireEvent('attach', [element]);

				var events = ['enter', 'leave'];
				if (!this.options.fixed)
					events.push('move');

				events.each( function(value) {
					var event = element.retrieve('tip:' + value);
					if (!event)
						event = this['element' + value.capitalize()].bindWithEvent(this, element);

					element.store('tip:' + value, event).addEvent('mouse' + value, event);
				}, this);

			}, this);

			return this;
		},

		detach: function(elements) {
			$$(elements).each( function(element) {
				['enter', 'leave', 'move'].each( function(value) {
					element.removeEvent('mouse' + value, element.retrieve('tip:' + value)).eliminate('tip:' + value);
				});

				this.fireEvent('detach', [element]);

				if (this.options.title == 'title') { // This is necessary to check if we can revert the title
					var original = element.retrieve('tip:native');
					if (original)
						element.set('title', original);
				}
			}, this);

			return this;
		},

		elementEnter: function(event, element) {
			this.container.empty();

			['title', 'text'].each( function(value) {
				var content = element.retrieve('tip:' + value);
				if (content)
					this.fill(new Element('div', {
						'class': 'tip-' + value
					}).inject(this.container), content);
			}, this);

			$clear(this.timer);
			this.timer = (function() {
				this.show(this, element);
				this.position((this.options.fixed) ? {
					page: element.getPosition()
				} : event);
			}).delay(this.options.showDelay, this);

		},

		elementLeave: function(event, element) {
			$clear(this.timer);
			this.timer = this.hide.delay(this.options.hideDelay, this, element);
			this.fireForParent(event, element);
		},

		fireForParent: function(event, element) {
			element = element.getParent();
			if (!element || element == document.body)
				return;
			if (element.retrieve('tip:enter'))
				element.fireEvent('mouseenter', event);
			else
				this.fireForParent(event, element);
		},

		elementMove: function(event, element) {
			this.position(event);
		},

		position: function(event) {
			if (!this.tip)
				document.id(this);

			var size = window.getSize(), scroll = window.getScroll(), tip = {
				x: this.tip.offsetWidth,
				y: this.tip.offsetHeight
			}, props = {
				x: 'left',
				y: 'top'
			}, obj = {};

			for (var z in props) {
				obj[props[z]] = event.page[z] + this.options.offset[z];
				if ((obj[props[z]] + tip[z] - scroll[z]) > size[z] - this.options.windowPadding[z])
					obj[props[z]] = event.page[z] - this.options.offset[z] - tip[z];
			}

			this.tip.setStyles(obj);
		},

		fill: function(element, contents) {
			if (typeof contents == 'string')
				element.set('html', contents);
			else
				element.adopt(contents);
		},

		show: function(element) {
			if (!this.tip)
				document.id(this);
			this.fireEvent('show', [this.tip, element]);
		},

		hide: function(element) {
			if (!this.tip)
				document.id(this);
			this.fireEvent('hide', [this.tip, element]);
		}

	});

})();
