var dayLength = 86400000;

var errorMessages = new Array;
errorMessages[1] = new Array;
errorMessages[2] = new Array;
errorMessages[1][1] = 'Дата приезда должна быть в формате ДД.ММ.ГГ';
errorMessages[1][2] = 'Дата отъезда должна быть в формате ДД.ММ.ГГ';
errorMessages[1][3] = 'Дата приезда должна предшествовать дате отъезда';
errorMessages[1][4] = 'Время приезда должно быть в формате ЧЧ.ММ';
errorMessages[1][5] = 'Время отъезда должно быть в формате ЧЧ.ММ';
errorMessages[1][6] = 'Пожалуйста укажите Вашу фамилию';
errorMessages[1][7] = 'Пожалуйста укажите Ваше имя';
errorMessages[1][8] = 'Пожалуйста укажите Ваш контактный телефон';
errorMessages[1][9] = 'Пожалуйста правильно укажите Ваш настоящий E-mail';
errorMessages[1][10] = 'Пожалуйста выберите вариант размещения';
errorMessages[1][11] = 'В поле "Дополнительные сведения" укажите, пожалуйста, ФИО, возраст и паспортные данные гостей. Так же уточните, пожалуйста, время заезда.';
errorMessages[2][1] = 'Please enter your Arrival Date (DD/MM/YY)';
errorMessages[2][2] = 'Please enter your Departure Date (DD/MM/YY)';
errorMessages[2][3] = 'Please note: Departure Date can not precede Arrival Date';
errorMessages[2][4] = 'Please enter your Arrival Time (hh/mm)';
errorMessages[2][5] = 'Please enter your Departure Time (hh/mm)';
errorMessages[2][6] = 'Please enter your Last Name';
errorMessages[2][7] = 'Please enter your First Name';
errorMessages[2][8] = 'Please enter your contact phone #';
errorMessages[2][9] = 'Please submit your valid e-mail address';
errorMessages[2][10] = 'Please specify the type of room and number of beds';
errorMessages[2][11] = 'В поле "Дополнительные сведения" укажите, пожалуйста, ФИО, возраст и паспортные данные гостей. Так же уточните, пожалуйста, время заезда.';

function getPeriod(date) {
	year = date.getFullYear();
	season3min = new Date(year,4,24);
	season3max = new Date(year,6,25);
	season1min = new Date(year,6,26);
	season1max = new Date(year,8,26); 
	if (date >= season1min && date <= season1max) return 1;
	if (date >= season3min && date <= season3max) return 3;
	return 2;
}

function fixDates(f) {

	var dateParts = f['data[Booking][date_from]'].value.split('.');
	var startDate = new Date('20'+dateParts[2],dateParts[1]-1,dateParts[0]);

	var dateParts = f['data[Booking][date_to]'].value.split('.');
	var endDate = new Date('20'+dateParts[2],dateParts[1]-1,dateParts[0]);

	if (startDate.getTime() >= endDate.getTime()) {
		endDate = new Date(startDate.getTime() + dayLength);
		f['data[Booking][date_to]'].value = (endDate.getDate()<10?'0'+String(endDate.getDate()):String(endDate.getDate())) + '.' +
											(endDate.getMonth()+1<10?'0'+String(endDate.getMonth()+1):String(endDate.getMonth()+1)) + '.' +
											(endDate.getFullYear()-2000<10?'0'+String(endDate.getFullYear()-2000):String(endDate.getFullYear()-2000));
	}
}

function recalculate() {

	var f = document.getElementById('main_form');
	if (!f) {
		f = document.getElementById('left_booking_form');
		if (!f) return;
		fixDates(f);
		return;
	}
	fixDates(f);

	var dateParts = f['data[Booking][date_from]'].value.split('.');
	var startDate = new Date('20'+dateParts[2],dateParts[1]-1,dateParts[0]);
	var dateParts = f['data[Booking][date_to]'].value.split('.');
	var endDate = new Date('20'+dateParts[2],dateParts[1]-1,dateParts[0]);

	var timeParts = f['data[Booking][time_from]'].value.split(':');
	if (parseInt(timeParts[0],10) < 13) {
		startDate = new Date(startDate.getTime() - dayLength);
	}

	var timeParts = f['data[Booking][time_to]'].value.split(':');
	if (parseInt(timeParts[0],10) > 12 || (parseInt(timeParts[0],10) == 12 && parseInt(timeParts[1],10))) {
		startDate = new Date(startDate.getTime() - dayLength);
	}

	var days = Math.round((endDate - startDate) / dayLength);
	var daysPerPeriod = new Array();
	for (var i = 1; i <= 3; i++) daysPerPeriod[i] = 0;
	for (var i = 0; i < days; i++) {
		var day = new Date(startDate.getTime()+i*dayLength);
		daysPerPeriod[getPeriod(day)]++;
	}
	
	var total = 0;
	var totalRooms = 0;
	var roomsString = '';

	
	for (i in roomPrices) {
		var roomPrice = new Array();
		var roomQuantity = 0;
		var roomQuantity1 = 0;
		var roomQuantity2 = 0;
		roomQuantity1 = parseInt(document.getElementById('room' + i + '_quantity1').value,10);
		if (isNaN(roomQuantity1)) roomQuantity1 = 0;
		document.getElementById('room' + i + '_quantity1').value = roomQuantity1;
		roomQuantity2 = parseInt(document.getElementById('room' + i + '_quantity2').value,10);
		if (isNaN(roomQuantity2)) roomQuantity2 = 0;
		document.getElementById('room' + i + '_quantity2').value = roomQuantity2;
		roomQuantity = roomQuantity1 + roomQuantity2;
		totalRooms += roomQuantity;
		if (roomQuantity) {
			roomsString += String(i) + ':' + String(roomQuantity1) + ',' + String(roomQuantity2) + ';';
		}
		for (var j = 1; j <= 3; j++) {
			if (daysPerPeriod[j] > 0) {
				total += roomQuantity * daysPerPeriod[j] * roomPrices[i][j];
				roomPrice[roomPrice.length] = roomPrices[i][j];
			}
		}
		var roomPriceString = '';
		if (roomPrice.length == 1) {
			roomPriceString = formatPrice(roomPrice[0]);
		} else {
			roomPrice.sort();
			roomPriceString = formatPrice(roomPrice[0]) + ' - ' + formatPrice(roomPrice[roomPrice.length-1]);
		}
		document.getElementById('room' + i + '_price').innerHTML = roomPriceString;
	}
	
	
	var discount = 0;

	//if (totalRooms > 9) {
	//	discount = total;
	//	for (var j = 1; j <= 3; j++) {
	//		if (daysPerPeriod[j] > 0) {
	//			discount -= totalRooms * daysPerPeriod[j] * specialPrices[j];
	//		}
	//	}
	//} else {
	//	if (days > 6) discount += Math.round(total*0.05);
	//}

	for (var i in services) {
		if (document.getElementById('additional_service' + i).checked) total += services[i] * totalRooms;
	}

	document.getElementById('days_total').innerHTML = days;
	document.getElementById('beds_total').innerHTML = totalRooms;

	document.getElementById('subtotal').innerHTML = formatPrice(total);
	//document.getElementById('discount').innerHTML = formatPrice(discount);
	document.getElementById('discount_row').style.display = 'block';
	//else document.getElementById('discount_row').style.display = 'none';

	document.getElementById('total').innerHTML = formatPrice(total - discount);
	document.getElementById('selected_rooms').value = roomsString;
	
	if (totalRooms > 9) {
		show('arrival_time_req',true);
		show('comments_req',true);
		show('comments_note_req');
	} else {
		hide('arrival_time_req',true);
		hide('comments_req',true);
		hide('comments_note_req');
	}
}

function error(i) {
	alert(errorMessages[langId][i]);
	return false;
}

function compareDates(date,dateString) {
	dateParts = dateString.split('.');
	if ( date.getDate() == parseInt(dateParts[0],10) &&
		 date.getMonth()+1 == parseInt(dateParts[1],10) &&
		 date.getFullYear() == parseInt('20' + dateParts[2],10) ) return true;
	else return false;
}

function validateEmail (emailStr) {

	var emailPat=/^(.+)@(.+)$/
	var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]"
	var validChars="\[^\\s" + specialChars + "\]"
	var quotedUser="(\"[^\"]*\")"
	var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/
	var atom=validChars + '+'
	var word="(" + atom + "|" + quotedUser + ")"
	var userPat=new RegExp("^" + word + "(\\." + word + ")*$")
	var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$")

	var matchArray=emailStr.match(emailPat)
	if (matchArray==null) {
  		//alert("Email address seems incorrect (check @ and .'s)")
		return false
	}
	var user=matchArray[1]
	var domain=matchArray[2]

	if (user.match(userPat)==null) {
    	//alert("The username doesn't seem to be valid.")
    	return false
	}

	var IPArray=domain.match(ipDomainPat)
	if (IPArray!=null) {
		for (var i=1;i<=4;i++) {
	    	if (IPArray[i]>255) {
	        	//alert("Destination IP address is invalid!")
				return false
	    	}
    	}
    	return true
	}

	var domainArray=domain.match(domainPat)
	if (domainArray==null) {
		//alert("The domain name doesn't seem to be valid.")
    	return false
	}

	var atomPat=new RegExp(atom,"g")
	var domArr=domain.match(atomPat)
	var len=domArr.length
	if (domArr[domArr.length-1].length<2 ||
    	domArr[domArr.length-1].length>3) {
   		//alert("The address must end in a three-letter domain, or two letter country.")
   		return false
	}

	if (len<2) {
   		//var errStr="This address is missing a hostname!"
   		//alert(errStr)
   		return false
	}

	return true;
}

function validate(f) {

	var dateParts = f['data[Booking][date_from]'].value.split('.');
	if (dateParts.length != 3) return error(1);
	var startDate = new Date('20'+dateParts[2],dateParts[1]-1,dateParts[0]);
	if (!compareDates(startDate,f['data[Booking][date_from]'].value)) return error(1);

	if (f['data[Booking][time_from]'].value.length) {
		var timeParts = f['data[Booking][time_from]'].value.split(':');
		if (timeParts.length != 2) return error(4);
		if (parseInt(timeParts[0],10) < 0 || parseInt(timeParts[0],10) > 23 || parseInt(timeParts[1],10) < 0 || parseInt(timeParts[1],10) > 59) return error(4);
	}

	var dateParts = f['data[Booking][date_to]'].value.split('.');
	if (dateParts.length != 3) return error(2);
	var endDate = new Date('20'+dateParts[2],dateParts[1]-1,dateParts[0]);
	if (!compareDates(endDate,f['data[Booking][date_to]'].value)) return error(2);

	if (f['data[Booking][time_to]'].value.length) {
		var timeParts = f['data[Booking][time_to]'].value.split(':');
		if (timeParts.length != 2) return error(5);
		if (parseInt(timeParts[0],10) < 0 || parseInt(timeParts[0],10) > 23 || parseInt(timeParts[1],10) < 0 || parseInt(timeParts[1],10) > 59) return error(5);
	}

	if (startDate.getTime() >= endDate.getTime()) return error(3);

	if (!f['data[Booking][rooms]'].value.length) return error(10);

	if (!f['data[UserDetail][lastname]'].value.length) return error(6);
	if (!f['data[UserDetail][firstname]'].value.length) return error(7);
	if (!f['data[UserDetail][telephone]'].value.length) return error(8);
	if (!f['data[UserDetail][email]'].value.length || !validateEmail(f['data[UserDetail][email]'].value)) return error(9);
	
	if (parseInt(document.getElementById('beds_total').innerHTML,10)>9) {
		if (!f['data[Booking][comments]'].value.length) return error(11);
	}

	return true;
}

function formatPrice(price) {
	if (langId == 1) return String(price) + ' руб';
	else {
		var usdPrice = price / usdRate;
		var eurPrice = price / eurRate;
		return '$' + usdPrice.toFixed(2) + ' / ' + '&euro;' + String(eurPrice.toFixed(2));
	}
}

function hide(id,lite) {
	if (id) {
		if (lite) document.getElementById(id).style.visibility = 'hidden';
		else document.getElementById(id).style.display = 'none';
	}
	//document.getElementById('footer').style.bottom = 0;
}
function show(id,lite) {
	if (id) {
		if (lite) document.getElementById(id).style.visibility = 'visible';
		else document.getElementById(id).style.display = 'block';
	}
	document.getElementById('footer').style.bottom = 0;
}
function popup() {
	popup = window.open('', 'popup','toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,copyhistory=yes,screenX=150,screenY=150,top=150,left=150');
}

var sc_project=1879165; 
var sc_invisible=1; 
var sc_partition=17; 
var sc_security="1131fa1d"; 