var Messages = (function() {
	return _lang == 'bg' ? {
		required	:	'Не сте попълнили всички задължителни полета',
		incorrect	:	'Не сте въвели коректни дати на пристигане и заминаване.\nФормат: ГГГГ-ММ-ДД,\nкато първата е преди втората'
	} : {
		required	:	'Please fill all required fields',
		incorrect	:	'Invalid arrival/departure dates. Format: YYYY-MM-DD,\nas the arrival date should be before departure date'
	};
})();

var Observe = (function(){
	if(document.attachEvent){
		return function(ele, eve, fun){
			ele.attachEvent('on' + eve, function(){
				var eve		= window.event;
				var target	= eve.srcElement;
				eve.targe	= target;
				fun.apply(window, [eve, target]);
			});
		}
	}else{
		var f = function(fun){
			return function(){
				fun.apply(this, [arguments[0], arguments[0].target]);
			}
		}
		return function(ele, eve, fun){
			ele.addEventListener(eve, f(fun), false);
		}
	}
})();

Observe(window, 'load', function(){
	var form			= document.getElementById('registration');
	//var hotel_prices	= {'bg' : [264, 135, 66, 284, 155, 86], 'en' : [135, 69, 34, 145, 79, 44]};
	var hotel_prices	= {'bg' : [192, 215, 106, 82, 215, 235, 137, 102], 'en' : [98, 110, 54, 42, 110, 120, 70, 52]};
	//var rila_price		= {'bg' : 44, 'en' : 22};
	var hotel_total		= document.getElementById('reg_hotel_total');
	var hotel_night		= document.getElementById('reg_nights');
	var ticket			= document.getElementById('reg_social_ticket_count');
	var grand_total		= document.getElementById('grand_total');
	//var event_total		= document.getElementById('social_total');

	//Calendar.setup({inputField:form['registration[departure_date]'], button: form['registration[departure_date]'].id + '_bnt', onSelect : onSelectDate});
	//Calendar.setup({inputField:form['registration[arrival_date]'], button: form['registration[arrival_date]'].id + '_bnt' , onSelect : onSelectDate});

	Calendar.setup({
		dateField		: form['registration[departure_date]'],
		triggerElement	: form['registration[departure_date]'].id + '_bnt',
		selectHandler	: onSelectDate
	});
	Calendar.setup({
		dateField		: form['registration[arrival_date]'],
		triggerElement	: form['registration[arrival_date]'].id + '_bnt',
		selectHandler	: onSelectDate
	});

	form.real_action	= form.action;
	form.action			= 'javascript:;';

	Observe(form, 'submit', function(){
		var eles = document.getElementById('user_info').getElementsByTagName('input');
		var regtype_selected = false;

		for(var z = 0; z < eles.length; z++){
			if(eles[z].className && eles[z].className.indexOf('required') > -1){
				if(!eles[z].value.replace(/^\s+|\s+$/gi, '').length){
					alert(Messages.required);
					eles[z].focus();
					return;
				}
			}
		}

		if( !validateDates( document.getElementById('reg_arival_date').value , document.getElementById('reg_departure_date').value )){
			return alert(Messages.incorrect)
		}

		form.action = form.real_action;
		form['reg_button'].disabled = 'true';
		form.submit();
	});

	Observe(hotel_night, 'keyup', calculateTotal);
	0&& Observe(ticket, 'keyup', calculateTotal);
	Observe(document.getElementById('invoice_check'), 'click', function(){
		var ele = document.getElementById('invoice_data');
		ele.style.display = ele.offsetWidth ? 'none' : 'block';

		if(document.all && 'IE 6'){
			document.all.footer_wrapper.style.zoom = document.all.footer_wrapper.style.zoom > 0 ? 0 : 1;
		}
	});

	for(var z = 0; z < form['registration[room_type]'].length; z++){
		Observe(form['registration[room_type]'][z], 'click', function(){
			var ele = arguments[1];
			form['registration[hotel_room]'][(ele.id == 'room_type_1' ? 4 : 0)].checked = true;
			calculateTotal();
		});
	}

	for(var z = 0; z < form['registration[hotel_room]'].length; z++){
		var ele = form['registration[hotel_room]'][z];
		Observe(ele, 'click', (function(that) {
			return function() {
				form['registration[room_type]'][[0, 6, 8, 9].indexOf(parseInt(that.id.replace(/^hotel_room_/, '')) || 0) != -1 ? 0 : 1].checked = true;
				calculateTotal();
			}
		})(ele));
	}

	calculateTotal();

	function calculateTotal(){
		var night = hotel_night.value = parseInt(hotel_night.value, 10) ? parseInt(hotel_night.value, 10) : 1;

		for(var z = 0; z < form['registration[hotel_room]'].length; z++){
			var ele = form['registration[hotel_room]'][z];

			if(ele.checked){
				hotel_total.value = hotel_prices[_lang][z] * night;
			}
		}

		//event_total.value = (parseInt(ticket.value, 10) ? parseInt(ticket.value, 10) * rila_price[_lang] : 0);

		grand_total.value = parseInt(hotel_total.value)/* + parseInt(event_total.value)*/;
	}

	function validateDates(date_arrive, date_leave){
		var date_arrive = date_arrive.split('-');
		var date_leave = date_leave.split('-');

		if(!validate_date_format(date_arrive) || !validate_date_format(date_leave)){
			return false;
		}

		var seconds_arrive = Date.UTC(date_arrive[0] , date_arrive[1], date_arrive[2]);
		var seconds_leave  = Date.UTC(date_leave[0] , date_leave[1], date_leave[2]);
		if (seconds_arrive >= seconds_leave){
			return false;
		}

		return true;
	}

	function validate_date_format(date_x){
		var param_type = typeof(date_x);
		if(param_type.toLowerCase() == 'string'){
			date_x = date_x.split('-');
		}

		if(date_x.length != 3){
			return false;
		}

		if(date_x[0].length != 4 || date_x[1].length != 2 || date_x[2].length != 2){
			return false;
		}

		return true;
	}

	function calculate_day_diff(date_x, date_y) {
		var devisor = 1000 * 60 * 60 * 24 ;
		var diff =  Date.UTC( date_y[0], date_y[1], date_y[2] ) - Date.UTC( date_x[0], date_x[1], date_x[2] ) ;
		var quotient =  diff/devisor;

		return (quotient > 0 ? quotient : 0);
	}


	function onSelectDate(calendar, value) {
		var field = calendar.dateField.id,
			nights_count 	= parseInt(document.getElementById('reg_nights').value) || 0,
			date_arrive_str	= field == 'reg_arival_date'	? value : $F('reg_arival_date'),
			date_leave_str	= field == 'reg_departure_date'	? value : $F('reg_departure_date'),
			date_arrive		= date_arrive_str.split('-'),
			date_leave		= date_leave_str.split('-');

		if(!validate_date_format(date_arrive) || !validate_date_format(date_leave) || date_arrive_str >= date_leave_str){
			return false;
		}

		nights_count = calculate_day_diff(date_arrive, date_leave);

		calendar.dateField.value = value;
		document.getElementById('reg_nights').value = nights_count;

		calculateTotal();

		return true;
	}
});
