/*
*/

HotelGeoNavigator = new function () {
	this.dataElement = null;
	
	this.show = function (theForm, pointType, event) {
		//this.dataElement = theForm.elements[pointType];
		this.dataElement = PSK.common.findFormElement(theForm, pointType);
		this.showWnd(event);
	}
	
	this.setPoint = function (value, code) {
		if (this.dataElement != null) {
			var $input = $(this.dataElement);
			$input.val(value);
			$input.next().val(code);
		}
	}
	
	this.showWnd = function (event) {
		var geoNav = document.getElementById("geoNavDiv");
		if (event.pageX == null && event.clientX != null ) { 
    		var html = document.documentElement
   			var body = document.body
 
    		event.pageX = event.clientX + (html && html.scrollLeft || body && body.scrollLeft || 0) - (html.clientLeft || 0)
		    event.pageY = event.clientY + (html && html.scrollTop || body && body.scrollTop || 0) - (html.clientTop || 0)
		}
		if (event.pageX != null) {
			geoNav.style.left = event.pageX - 150 + "px";
			geoNav.style.top = event.pageY + "px";
		} else {
			geoNav.style.left = event.x - 150 + document.body.scrollLeft + "px";
			geoNav.style.top = event.y + document.body.scrollTop + "px";
		}
		geoNav.style.display = "block";
		var newSrc = "/system/modules/com.gridnine.opencms.modules.pososhok/elements/locations_hotels.jsp?pattern=" + encodeURIComponent(this.dataElement.value);
		document.getElementById("geoNavFrame").src = newSrc;
	}
	
	this.closeWindow = function (windowRef) {
		if ((windowRef.opener != null) && (windowRef.opener != self)) {
			windowRef.opener.GeoNavigator.hideWnd(windowRef);
		} else {
			windowRef.parent.GeoNavigator.hideWnd();
		}
	}
	
	this.hideWnd = function (windowRef) {
		if (windowRef != null) {
			windowRef.close();
		} else  {
			document.getElementById("geoNavDiv").style.display = "none";
			document.getElementById("geoNavFrame").src = "about:blank";
		}
	}
}

HotelUtil = new function() {

	var rooms_size_child_enabled = Array();

	rooms_size_child_enabled['DBL'] = 1;
	rooms_size_child_enabled['DBL_SOLO'] = 0;
	rooms_size_child_enabled['QUAD'] = 1;
	rooms_size_child_enabled['SGL'] = 0;
	rooms_size_child_enabled['TRPL'] = 0;
	rooms_size_child_enabled['TWIN'] = 1;
	rooms_size_child_enabled['TWIN_SOLO'] = 1;
	
	var rooms_size_baby_count_enabled = Array();

	rooms_size_baby_count_enabled['DBL'] = 1;
	rooms_size_baby_count_enabled['DBL_SOLO'] = 0;
	rooms_size_baby_count_enabled['QUAD'] = 0;
	rooms_size_baby_count_enabled['SGL'] = 0;
	rooms_size_baby_count_enabled['TRPL'] = 0;
	rooms_size_baby_count_enabled['TWIN'] = 1;
	rooms_size_baby_count_enabled['TWIN_SOLO'] = 0;
	
	var oldCheckOutValue;
		
	this.updateNightsCount = function () {
		var checkInDate, checkOutDate; 	
		try {checkInDate = $.datepicker.parseDate('dd.mm.yy', document.getElementById('checkInDateStr_0').value);} catch (ex) {checkInDate = new Date ();}
		try {checkOutDate = $.datepicker.parseDate('dd.mm.yy', document.getElementById('checkOutDateStr_0').value);} catch (ex) {checkOutDate = new Date ();}
		if (Math.round((checkOutDate.getTime()-checkInDate.getTime())/(1000*60*60*24))>30) {
			alert('Период пребывания не может превышать 30 дней.');
			document.getElementById('nightsCount_0').value=30;
			checkOutDate.setTime(checkInDate.getTime()+1000*60*60*24*30);
			document.getElementById('checkOutDateStr_0').value=$.datepicker.formatDate('dd.mm.yy', checkOutDate);
			return;
		}
		document.getElementById('nightsCount_0').value=
			Math.round((checkOutDate.getTime()-checkInDate.getTime())/(1000*60*60*24));
		oldCheckOutValue=document.getElementById('checkOutDateStr_0').value;
	}
	
	this.updateCheckOutDate = function () {
		try {var newCheckOutDate = $.datepicker.parseDate('dd.mm.yy', document.getElementById('checkInDateStr_0').value);} catch (ex){
			newCheckOutDate = new Date ();
		}
	
		var nightsCount = document.getElementById('nightsCount_0').value;
		newCheckOutDate.setTime(newCheckOutDate.getTime() + nightsCount*1000*60*60*24+3600000*5); 
		document.getElementById('checkOutDateStr_0').value=$.datepicker.formatDate('dd.mm.yy', newCheckOutDate);
	}

	this.updateChildAgeandBabyCount = function (select) {
		document.getElementById('childAge_0').value='-1';
		document.getElementById('babyCount_0').value='0';

		document.getElementById('childAge_0').disabled=
			!rooms_size_child_enabled[select.value];
		document.getElementById('babyCount_0').disabled=
			!rooms_size_baby_count_enabled[select.value];
	}	
	
	this.init = function (isExtended, eng, definedResUid) {
		  if (isExtended) {
			  $('.more-options-switch').click();
		  }
		  if (eng && definedResUid) {
			document.getElementById('booking_com_city_name').value= document.getElementById('citySelect').value;
			try {
				var inDate = $.datepicker.parseDate('dd.mm.yy', document.getElementById('checkInDateStr_0').value);} catch (ex) {
				inDate = new Date ();
			}
			 
			 document.getElementById('checkin_monthday').value=inDate.getDate();
			 document.getElementById('checkin_month').value=inDate.getMonth()+1;
			 document.getElementById('checkin_year').value=inDate.getFullYear();//+1900;
			 try {var outDate = $.datepicker.parseDate('dd.mm.yy', document.getElementById('checkOutDateStr_0').value);} catch (ex){
				 outDate = new Date ();
			 }
			 document.getElementById('checkout_monthday').value=outDate.getDate();
			 document.getElementById('checkout_month').value=outDate.getMonth()+1;
			 document.getElementById('checkout_year').value=outDate.getFullYear();//+1900;
			  $("#search_button_btn").click();
		  }  
	}
	
	var toggleStatesHF = Array(10);
	var initHF='0';
	
	this.toggleHF = function (buttonIndex,buttonName) {
		if (initHF=='0') {
			for(i=0;i<toggleStatesHF.length;i++) {
				if (document.getElementById('HotelSearchForm.facility.' + i).value=='false')
					toggleStatesHF[i]='0';
				else toggleStatesHF[i]='1';
			};
			initHF = '1';
		}
		if (toggleStatesHF[buttonIndex] == '0'){
			toggleStatesHF[buttonIndex] = '1';
			document.getElementById('HotelSearchForm.facility.' + buttonName+'_img').src = '/system/modules/com.gridnine.opencms.modules.pososhok/resources/pics/hotels/'+buttonName+'.gif';
			document.getElementById('HotelSearchForm.facility.' + buttonIndex).value='true';
		}   
		else{
			toggleStatesHF[buttonIndex] = '0';
			document.getElementById('HotelSearchForm.facility.' + buttonName+'_img').src = '/system/modules/com.gridnine.opencms.modules.pososhok/resources/pics/hotels/'+buttonName+'-noactive.gif';
			document.getElementById('HotelSearchForm.facility.' + buttonIndex).value='false';
		}
	}	

	var toggleStatesRA = Array(4);
	var initRA='0';
	
	this.toggleRA = function (buttonIndex,buttonName) {
		if (initRA=='0') {
			for(i=0;i<toggleStatesRA.length;i++) {
				if (document.getElementById('HotelSearchForm.amenity.' + i).value=='false')
					toggleStatesRA[i]='0';
				else toggleStatesRA[i]='1';
			};
			initRA='1';
		}
		if (toggleStatesRA[buttonIndex] == '0'){
		      toggleStatesRA[buttonIndex] = '1';
		      document.getElementById('HotelSearchForm.amenity.' + buttonName+'_img').src = '/system/modules/com.gridnine.opencms.modules.pososhok/resources/pics/hotels/'+buttonName+'.gif';
		      document.getElementById('HotelSearchForm.amenity.' + buttonIndex).value='true';
		 }   
		 else{
			 toggleStatesRA[buttonIndex] = '0';
			 document.getElementById('HotelSearchForm.amenity.' + buttonName+'_img').src = '/system/modules/com.gridnine.opencms.modules.pososhok/resources/pics/hotels/'+buttonName+'-noactive.gif';
		     document.getElementById('HotelSearchForm.amenity.' + buttonIndex).value='false';
		 }
	}	
	
	this.toggleButtons = function (index) {
		if (index=='1') {
			 document.getElementById('search-button').style.display="block";
			 document.getElementById('search-button2').style.display="none";
		}	
		else {
			document.getElementById('search-button').style.display="none";
			 document.getElementById('search-button2').style.display="block";
		}	
	}	
	
	var prepaymentMode=true;
	
	this.togglePaymentMode = function (pm) {
		prepaymentMode=pm;
		if (prepaymentMode) {
			 document.getElementById('cityStrDiv').style.display="block";
			 document.getElementById('roomsDiv').style.display="block";
			 document.getElementById('childsDiv').style.display="block";
			 document.getElementById('maxPriceStrDiv').style.display="block";
			 document.getElementById('visaSupportDiv').style.display="block";
			 document.getElementById('hotelNameCatDiv').style.display="block";
			 document.getElementById('locationDiv').style.display="block";
			 document.getElementById('sortDiv').style.display="block";
			 document.getElementById('hotel_facilities').style.display="block";
			 document.getElementById('room_amenities').style.display="block";
			 document.getElementById('booking_com_city_div').style.display="none";
			 document.getElementById('booking_com_cat_div').style.display="none";
			 document.getElementById('booking_com_sort_div').style.display="none";
			 document.getElementById('booking_com_facilities').style.display="none";
		}	
		else {
			 document.getElementById('cityStrDiv').style.display="none";
			 document.getElementById('roomsDiv').style.display="none";
			 document.getElementById('childsDiv').style.display="none";
			 document.getElementById('maxPriceStrDiv').style.display="none";
			 document.getElementById('visaSupportDiv').style.display="none";
			 document.getElementById('hotelNameCatDiv').style.display="none";
			 document.getElementById('locationDiv').style.display="none";
			 document.getElementById('sortDiv').style.display="none";
			 document.getElementById('hotel_facilities').style.display="none";
			 document.getElementById('room_amenities').style.display="none";
			 document.getElementById('booking_com_city_div').style.display="block";
			 document.getElementById('booking_com_cat_div').style.display="block";
			 document.getElementById('booking_com_sort_div').style.display="block";
			 document.getElementById('booking_com_facilities').style.display="block";
		}
	}
	
	this.doSearch = function (theForm, eng) {
		var checkInDate = document.getElementById('checkInDateStr_0');
		var re = /^\d{1,2}\.\d{1,2}\.\d{4}$/;
		if (checkInDate.value != '' && !checkInDate.value.match(re)) {
			 alert("Неправильный формат даты: " + checkInDate.value); 
			 checkInDate.focus();
			 return false;
		} 
		var checkOutDate = document.getElementById('checkOutDateStr_0');
		if (checkOutDate.value != '' && !checkOutDate.value.match(re)) {
			 alert("Неправильный формат даты: " + checkOutDate.value); 
			 checkOutDate.focus();
			 return false;
		}
		if (!prepaymentMode || eng) {
			try {
				var inDate = $.datepicker.parseDate('dd.mm.yy', document.getElementById('checkInDateStr_0').value);
			} catch (ex) {
				inDate = new Date ();
			}
		
			 document.getElementById('checkin_monthday').value=inDate.getDate();
			 document.getElementById('checkin_month').value=inDate.getMonth()+1;
			 document.getElementById('checkin_year').value=inDate.getFullYear();//+1900;
			try {
				var outDate = $.datepicker.parseDate('dd.mm.yy', document.getElementById('checkOutDateStr_0').value);
			} catch (ex) {
				outDate = new Date ();
			}
			 document.getElementById('checkout_monthday').value=outDate.getDate();
			 document.getElementById('checkout_month').value=outDate.getMonth()+1;
			 document.getElementById('checkout_year').value=outDate.getFullYear();//+1900;

			 if (document.getElementById('main-content')) {
				 document.getElementById('main-content').style.width="100%";
			 } 
			 if (document.getElementById('partner-main-content')) {
				 document.getElementById('partner-main-content').style.width="100%";
			 } 
			 document.getElementById('content-explorer').style.display="none";
			 if (document.getElementById('customer')) {
				 document.getElementById('customer').style.display="none";
			 }	 
			 if (document.getElementById('expinfo')) {
				 document.getElementById('expinfo').style.display="none";
			 }	 
			 document.getElementById('validateForm').value="false";
			 if(document.getElementById('secondary-content')){
				 document.getElementById('secondary-content').style.display="none";
			 }
			 if(document.getElementById('partner-left-content')){
				 document.getElementById('partner-left-content').style.display="none";
			 }
			 if(document.getElementById('partner-right-content')){
				 document.getElementById('partner-right-content').style.display="none";
			 }
			 document.getElementById('booking_com').height=1500;
			 document.getElementById('form0').target="booking_com";
			 document.getElementById('form0').action="http://www.booking.com/searchresults.html";
			 document.getElementById('form0').method="GET";
			 return true;
		}	
		var city=document.getElementById('citySelect');
		if (PSK.common.isBlank(city.value)) {
			alert("Введите город.");
			city.focus();
			return false;
		}
		var searchbutton = 'search-button';
		var sbutton = document.getElementById(searchbutton);
		if (sbutton) {
			sbutton.style.display = 'none';
		}	
		var searchbutton2 = 'search-button2';
		var sbutton2 = document.getElementById(searchbutton2);
		if (sbutton2) {
			sbutton2.style.display = 'none';
		}	
		if (document.getElementById('main-content')) {
			document.getElementById('main-content').style.display="block";
		} 
		if (document.getElementById('patner-main-content')) {
			document.getElementById('partner-main-content').style.display="block";
		} 
		if (document.getElementById('validateForm')) {
			document.getElementById('validateForm').value="true";
		}
		if (document.getElementById('secondary-content')) {
			document.getElementById('secondary-content').style.display="block";
		}	
		if(document.getElementById('partner-left-content')){
			document.getElementById('partner-left-content').style.display="block";
		}
		if(document.getElementById('partner-right-content')){
			document.getElementById('partner-right-content').style.display="block";
		}
		return true;	
	}
	this.genderChanged = function (value, roomIdx, guestIdx) {
		document.getElementById('guestGender.'+roomIdx+'.'+guestIdx).value=value;
	}
	
	this.updateAreasList = function updateAreasList(cityId, selectedTypicalAreaId, selectedAreaId) {
		var areaSelect = document.getElementById('area');
		if (cityId == null || cityId=='-1') {
			areaSelect.options.length = 0;
			return;
	    }
		if (cityId=='-2') {
			document.getElementById('cityStr').value='-1';
			HotelGeoNavigator.show(document.forms["hotelSearchForm"], 'hotelStaying[0].countryStr','hotelStaying[0].cityStr',false,'location');
			return;
	    }
		areaSelect.options.length = 0;
		areaSelect.options[areaSelect.options.length] = new Option("идет загрузка", "", false, true);
	    var theForm = document.forms["hotelSearchForm"];
	    
	    var cmd = {};
	    cmd['cmd'] = 'get_areas';
	    if (cityId != null) {
	    	cmd['cityId'] = cityId;
	    }
	    if (selectedTypicalAreaId != null) {
	    	cmd['selectedTypicalAreaId'] = selectedTypicalAreaId;
	    }
	    if (selectedAreaId != null) {
	    	cmd['selectedAreaId'] = selectedAreaId;
	    }

		$.post('/system/modules/com.gridnine.opencms.modules.pososhok/pages/ajax_provider_hotels.jsp',
			cmd,
			function(result) {
				areaSelect.options.length = 0;
	            if (result.status == 'success') {
	                var data = result.data;
	                areaSelect.options[0]=new Option('В любом районе', '', false, true);
	                 
	                for (var i = 0; i < data.length; i++) {
	                    var pair = data[i];
	                    areaSelect.options[areaSelect.options.length] = new Option(pair.name, pair.code, false, pair.selected==true);
	                    if ((selectedTypicalAreaId != null && pair.code == selectedTypicalAreaId) ||
	                    		(selectedAreaId != null && pair.code == selectedAreaId)) {
	                    	areaSelect.selectedIndex=i+1;
	                    }    
	                }
	            } else if (result.status == 'error') {
	                for (var l = 0; l < result.errors.length; l++) {
	                    var e = result.errors[l];
	                    alert('ERROR: ' + e.name + '\n\n' + e.stacktrace);
	                }
	            } else {
	                alert('Undefined status: ' + result.status);
	            }
	    	}, "json");
	}
	
	this.hotelStayingDateChanged = function (field) {
		var theForm = field.form, outDate, inDate;
	
		try {inDate = $.datepicker.parseDate('dd.mm.yy', field.value);} catch (ex) {inDate = new Date ();}
	
		try {
			outDate = $.datepicker.parseDate('dd.mm.yy', theForm.checkOutDateStr_0.value);
		} catch (ex) {
			outDate = new Date ();
			inDate.setDate(inDate.getDate() + 1);
			theForm.checkOutDateStr_0.value = $.datepicker.formatDate('dd.mm.yy', inDate);
			theForm.nightsCount_0.value=1;
		}
	
		if (outDate.getTime() <= inDate.getTime()) {
			inDate.setDate(inDate.getDate() + 1);
			theForm.checkOutDateStr_0.value = $.datepicker.formatDate('dd.mm.yy', inDate);
			theForm.nightsCount_0.value=1;
		}
		else {
			var duration = Math.floor((outDate.getTime()-inDate.getTime())/(1000*60*60*24));
			if (duration<=30) {
				theForm.nightsCount_0.value=duration;
			}
			else {
				alert('Период пребывания не может превышать 30 дней.');
				inDate.setDate(inDate.getDate() + 30);
				theForm.checkOutDateStr_0.value = $.datepicker.formatDate('dd.mm.yy', inDate);
				theForm.nightsCount_0.value='30';
			}
		}	
	}
	
	this.setPassengerHotels = function(idx) {
		var source = $('select[name="select_pass_' + idx + '"] option:selected');
		if (source.val() != '') {
			//obj['cmd'] = 'get_passenger';
			//obj['idx'] = idx;
			//obj['passenger_uid'] = source.val();
			
			var request = getAllFormInputs($('#rooms_form'));
			request.push({
				name : 'cmd',
				value : 'get_passenger'
			});
			request.push({
				name : 'idx',
				value : idx
			});
			request.push({
				name : 'passenger_uid',
				value : source.val()
			});
			
			
			$.post("/system/modules/com.gridnine.opencms.modules.pososhok/pages/ajax_provider_account.jsp", request, function(data) {
				if (data.status == 'success') {
					$('input[name="HotelBookingForm.gst.firstName.' + idx + '"]').val(data.passenger.firstName);
					$('input[name="HotelBookingForm.gst.lastName.' + idx + '"]').val(data.passenger.lastName);
					$('input[name="HotelBookingForm.gst.gender.' + idx + '"]').val(data.passenger.gender);
					var gender = $('input[name=gender_radio.' + idx + '][value~=' + data.passenger.gender + ']');
					if (gender.length > 0) {
						gender.attr('checked', true);
					}
				} else {
					$('input[name="HotelBookingForm.gst.firstName.' + idx + '"]').val('');
					$('input[name="HotelBookingForm.gst.lastName.' + idx + '"]').val('');
				}
				ProfileHelper.updateGrey('rooms_form');
			}, 'json');
		}
		return false;
	}
}


/*
 * Image preview script 
 * powered by jQuery (http://www.jquery.com)
 * written by Alen Grakalic (http://cssglobe.com)
 * for more info visit http://cssglobe.com/post/1695/easiest-tooltip-and-image-preview-using-jquery
 *
 */
 
this.imagePreview = function(){	
	/* CONFIG */
		
		xOffset = 10;
		yOffset = 30;
		
		// these 2 variable determine popup's distance from the cursor
		// you might want to adjust to get the right result
		
	/* END CONFIG */
	$("a.preview").hover(function(e){
		this.t = this.title;
		this.title = "";	
		var c = (this.t != "") ? "<br/>" + this.t : "";
		$("body").append("<p id='preview'><img src='"+ this.href +"' alt='Image preview' />"+ c +"</p>");								 
		$("#preview")
			.css("top",(e.pageY - xOffset) + "px")
			.css("left",(e.pageX + yOffset) + "px")
			.fadeIn("fast");						
    },
	function(){
		this.title = this.t;	
		$("#preview").remove();
    });	
	$("a.preview").mousemove(function(e){
		$("#preview")
			.css("top",(e.pageY - xOffset) + "px")
			.css("left",(e.pageX + yOffset) + "px");
	});			
};


function setAutocomplete($cObj) {
	
	function findValue(li) {
		var sValue = '';
		if( li == null ) return alert("No match!");
		if( !!li.extra ) {
			sValue = li.extra[0];
		} else {
			sValue = li.selectValue;
		}
		return sValue;
	}

	function selectItem(li, input) {
		var cityCode = findValue(li);
		$(input).next().val(cityCode);
		HotelUtil.updateAreasList(cityCode,'','');
	}
	
	$cObj.each(function(i) {
    	$(this).autocomplete({ 
			source: "/system/modules/com.gridnine.opencms.modules.pososhok/pages/ajax_provider_locations_hotels.jsp", 
			minLength: 0,
            focus: function(event, ui) {
            	return false;
            },
            select: function(event, ui) {
            	if (ui.item.value == 'more_link')
            		return false;
            	$(this)
            	.val(ui.item.label)
            	.next()
            	.val(ui.item.value);
            	return false;
            }
		});
    
    }).keyup(function(event) {
    	switch (event.keyCode) {
			case 13:
			case 65:
			case 17:
			case 16:
			case 33:
			case 34:
			case 35:
			case 36:
			case 37:
			case 38:
			case 39:
			case 40:
			case 9:
				break;
		default:
			$(this).next().val('');
				break;
		}
    });
}


// starting the script on page load
$(document).ready(function(){
	imagePreview();
});
