var ArenaCalcThis;
var ArenaCalc = Class.create({
initialize: function () {
	ArenaCalcThis = this;
	this.types = new Hash();
	this.flatrates = new Array();
	this.now = pjs_time();
	this.SetTypes();
	this.SetFlatRates();
	this.SetSpecialRates();
	this.SetControls();
},
SetTypes: function () {
	this.types = arena_types;
},
SetFlatRates: function () {
	this.flatrates = arena_flatrates;
},
SetSpecialRates: function () {
	this.specrates = arena_specialrates; 
},
SetControls: function() {
	var sTypes = "";
	this.types.each(function (k) { sTypes += '<option value="'+k.key+'">'+k.value+'</option>'});
	$('SelectTypePlace').innerHTML = '<select id="SelectType" name="SelectType">'+sTypes+'</select>';
	$('SelectRatePlace').innerHTML = '<select id="SelectRate" name="SelectRate" disabled></select>';
	$('CalcModeDate').checked = true;
	$('DFrom').value = pjs_date("d.m.Y", this.now);
	Calendar.setup({
                inputField: "DFrom",
                dateFormat: "%d.%m.%Y",
                trigger: "DFromBtn",
                disabled: function (dat) { return ArenaCalcThis.disallowPlainDates1(dat); },
                onSelect: function() { ArenaCalcThis.Recalculate(null); this.hide() }
                });
	$('DTo').value = pjs_date("d.m.Y", this.now + 86400);
	Calendar.setup({
                inputField: "DTo",
                dateFormat: "%d.%m.%Y",
                trigger: "DToBtn",
                disabled: function (dat) { return ArenaCalcThis.disallowPlainDates2(dat); },
                onSelect : function() { ArenaCalcThis.Recalculate(null); this.hide() }
                });
	$('DFromS').value = pjs_date("d.m.Y", this.now);
	Calendar.setup({
                inputField: "DFromS",
                dateFormat: "%d.%m.%Y",
                trigger: "DFromBtnS",
                disabled: function (dat) { return ArenaCalcThis.disallowSpecialDates1(dat); },
                onSelect: function() { ArenaCalcThis.ApplyRestrictionsRuntime(); ArenaCalcThis.Recalculate(null); this.hide() }
                });
	$('DToS').value = pjs_date("d.m.Y", this.now + 86400);
	Calendar.setup({
                inputField: "DToS",
                dateFormat: "%d.%m.%Y",
                trigger: "DToBtnS",
                disabled: function (dat) { return ArenaCalcThis.disallowSpecialDates2(dat); },
                onSelect : function() { ArenaCalcThis.Recalculate(null); this.hide() }
                });
	Event.observe($('SelectType'), 'change', function (evnt) {ArenaCalcThis.TypeChanged(evnt)}.bindAsEventListener());
	Event.observe($('DFrom'), 'change', function (evnt) {ArenaCalcThis.Recalculate(evnt)}.bindAsEventListener());
	Event.observe($('DTo'), 'change', function (evnt) {ArenaCalcThis.Recalculate(evnt)}.bindAsEventListener());
	Event.observe($('DFromHrs'), 'change', function (evnt) {ArenaCalcThis.Recalculate(evnt)}.bindAsEventListener());
	Event.observe($('DToHrs'), 'change', function (evnt) {ArenaCalcThis.Recalculate(evnt)}.bindAsEventListener());
	Event.observe($('CalcModeDate'), 'click', function (evnt) {ArenaCalcThis.changedSection(evnt)}.bindAsEventListener());
	Event.observe($('CalcModeSpecial'), 'click', function (evnt) {ArenaCalcThis.changedSection(evnt)}.bindAsEventListener());
	Event.observe($('CalcRestr'), 'change', function (evnt) {ArenaCalcThis.Recalculate(evnt)}.bindAsEventListener());
	this.ShowSpecialRates();
	Event.observe($('SelectRate'), 'change', function (evnt) {ArenaCalcThis.SpecialChanged(evnt)}.bindAsEventListener());
	Event.observe($('DFromS'), 'change', function (evnt) {ArenaCalcThis.Recalculate(evnt)}.bindAsEventListener());
	Event.observe($('DToS'), 'change', function (evnt) {ArenaCalcThis.Recalculate(evnt)}.bindAsEventListener());
	Event.observe($('DFromHrsS'), 'change', function (evnt) {ArenaCalcThis.Recalculate(evnt)}.bindAsEventListener());
	Event.observe($('DToHrsS'), 'change', function (evnt) {ArenaCalcThis.Recalculate(evnt)}.bindAsEventListener());
	this.disableSection();
	this.Recalculate(null);
},
changedSection: function(evnt) {
	this.disableSection();
	this.SpecialChanged(null);
	this.Recalculate();
},
disableSection: function() {
	var mode = $('CalcModeDate').checked;
	$('SelectRate').disabled = mode;
	$('DFromS').disabled = mode;
	$('DFromHrsS').disabled = mode;
	$('DToS').disabled = mode;
	$('DToHrsS').disabled = mode;
	$('DFrom').disabled = !mode;
	$('DFromHrs').disabled = !mode;
	$('DTo').disabled = !mode;
	$('DToHrs').disabled = !mode;
},
disallowPlainDates1: function (dat) {
	if (Math.round(dat.getTime()/1000) >= this.now - 86400) return false; 
	return true;
},
disallowPlainDates2: function (dat) {
	var tos = this.ParseDate($('DFrom').value).getTime()+86400*1000;	
	return (dat.getTime() >= tos)?false:true; 
},
disallowSpecialDates1: function (dat) {
	if (dat.getTime()/1000 < this.now-86400) return true;  
	if (this.fixwday) {
		var ret = true;
		var day = dat.getDay();
		this.fixwday.each(function (p) { if (p == day) ret = false; });
		return ret; 
	}	
},
disallowSpecialDates2: function (dat) {
	if (dat.getTime()/1000 < this.now-86400) return true;  
	if (this.fixlen) {
		var tos = this.ParseDate($('DFromS').value).getTime()+86400*1000*(this.fixlen-1);	
		//alert(tos+" "+dat.getTime());
		return (dat.getTime() == tos)?false:true; 
	}
	return false;
},
ParseDate: function (str) {
	var p = str.split(/\./);
	if (p.size() != 3) return false;
	var d = p[0];
	var m = p[1]-1;
	var y = p[2];
	return new Date(y, m, d);
},
ShowSpecialRates: function () {
	var model = $('SelectType').value;
	var sRates = '';
	this.specrates.each(function (v) { if (v['rate'][model]) sRates += '<option>'+v['name']+'</option>'});
	if (sRates == '') {
		$('SelectRatePlace').innerHTML = '<select id="SelectRate" name="SelectRate" disabled><option>Нет предложений</option></select>';	
		$('CalcModeSpecial').disabled = true;
		$('CalcModeDate').checked = true;
	} else {
		$('SelectRatePlace').innerHTML = '<select id="SelectRate" name="SelectRate">'+sRates+'</select>';
		$('CalcModeSpecial').disabled = false;
	}
},
FindSelectText: function (select, val) {
	var index = 0;
	var ret = -1;
	$A(select.options).each(function (e) {
		if (e.innerHTML == val) ret = index;
		index ++;
	});
	return ret;
},
ApplyRestrictions: function (rate) {
	if ($('CalcModeSpecial').checked) {
		if (rate.fixtime) {
			var p = rate.fixtime.split(/-/);
			$('DFromHrsS').selectedIndex = this.FindSelectText($('DFromHrsS'), p[0]);
			$('DFromHrsS').disabled = true;
			$('DToHrsS').selectedIndex = this.FindSelectText($('DToHrsS'), p[1]);
			$('DToHrsS').disabled = true;
		}
		if (rate.fixwday) {
			this.fixwday = rate.fixwday.toArray();
			this.fixdate = null;
			$('DFromS').disabled = false;
		}
		if (rate.fixlen) {
			this.fixlen = rate.fixlen;
			$('DToS').disabled = true;
			$('DFromS').disabled = false;
		} else {
			this.fixlen = null;
		}
		if (rate.fixdate) {
			this.fixwday = null;
			var p = rate.fixdate.split(/-/);
			$('DFromS').value = p[0];
			$('DToS').value = p[1];
			$('DToS').disabled = true;
			$('DFromS').disabled = true;

		}
		this.ApplyRestrictionsRuntime();
	}
},
ApplyRestrictionsRuntime: function () {
	if (this.fixlen) {
		$('DToS').value = pjs_date("d.m.Y", (this.ParseDate($('DFromS').value).getTime()+86400*1000*(this.fixlen-1))/1000);
	}
},
SpecialChanged: function (evnt) {
	var rate = this.specrates[$('SelectRate').selectedIndex];	
	this.ApplyRestrictions(rate);
	this.Recalculate(evnt);
},
TypeChanged: function (evnt) {
	this.Recalculate(null);
},
Recalculate: function (evnt) {
	if ($('CalcModeDate').checked) {
		if (this.flatrates[$('SelectType').value]) {
			var rates = $H(this.flatrates[$('SelectType').value]);
			var from = this.ParseDate($('DFrom').value).getTime()/1000 + parseInt($('DFromHrs').value);
			var to = this.ParseDate($('DTo').value).getTime()/1000 + parseInt($('DToHrs').value);
			diff = (to - from) / 86400;
			if (diff < 1) diff = 1;
			days = 0;
			rates.each(function (a) {
				if (diff <= a.key) {
					days = a.key;		
					throw $break;
				}
			});
			index = $("CalcRestr").checked?1:0;
			tariff = rates.get(days)[index];
			priceall = rates.get(days)[index] * diff;
			$('PricePerDay').innerHTML = tariff; 	
			$('PriceAll').innerHTML = Math.round(priceall); 	
		} else {
			$('PricePerDay').innerHTML = 'n/a'; 
			$('PriceAll').innerHTML = 'n/a'; 
		}
	} else {
		var rate = this.specrates[$('SelectRate').selectedIndex];
		$('PricePerDay').innerHTML = '&#151;'; 
		$('PriceAll').innerHTML = rate.rate[$('SelectType').value][0];
	}
}
});
