var lockAddExtraBed = false;
var myLightWindow = null;



changeAdditionalBedsCount = function(packageId, index) {
	
	var suffix = packageId != null ? 'package_' + packageId + "_" : "";

	if ($('#add_additional_' + suffix + index).length == 0) {
		return;
	}
	
	if ($('#order_rooms_' + suffix + index + '_room_count').val() > 0) {
	
		if ($('#add_additional_' + suffix + index).length == 0) {
			return;
		}
		 
		
		$('#add_additional_block_' + suffix + index).html("");
		$('#add_additional_' + suffix + index).html(langs.add);
		
		$('#add_additional_' + suffix + index).show();
		
		var currentValueSerialized = $('#order_rooms_' + suffix + index + '_extra_beds').val();
	
		var roomsCount = parseInt($('#order_rooms_' + suffix + index + '_room_count').val());
	
		if (currentValueSerialized.length > 0) {
			
			currentValueSerialized = Base64.decode(currentValueSerialized);
		
			eval("var currentValue = " + currentValueSerialized + ";");
			var newValue = {};
			for (var i in currentValue) {
				if (i < roomsCount) {
					newValue[i] = currentValue[i];
				} else {
					break;
				}
			}
		
			$('#order_rooms_' + suffix + index + '_extra_beds').val(Base64.encode($.toJSON(newValue)));
			renderExtraBeds(packageId, index);
			
			calculatePrice();
		}
	} else {
		$('#add_additional_' + suffix + index).hide();
		$('#add_additional_block_' + suffix + index).html(langs.available);
		$('#order_rooms_' + suffix + index + '_extra_beds').val('');
		
	}		
}	
	
checkAvailabilityRules = function() {
	
	if (blockValidation) {
		return;
	}

	var date_from = document.forms.orderform['order[date_from]'].value;
	var date_to = document.forms.orderform['order[date_from]'].value;
	
	if (date_from.length == 0 || date_to.length == 0) {
		return;
	}
	
	var orderform = $(document.forms.orderform).serialize();
	
	var url = checkAvailabilityUrl;
	var params = orderform + "&act=hotels/view/check_availability&";
	

	$.post(url, params, cbCheckAvailabilityRules.curry(this, []), 'html');
}	

	
cbCheckAvailabilityRules = function(result) {
	
	eval('result = ' + result + ';');

	$('#availability_error_block').hide();
	
	if (typeof(result.rooms) != 'undefined') {
		if (result.rooms.request_availability_rule_error) {
			$('#availability_error_block').html(langs.five_day_rule);
			$('#availability_error_block').show();
		} else if (result.rooms.request_availability_rule2_error) {
			$('#availability_error_block').html(langs.online_availability_notice);
			$('#availability_error_block').show();
		} else {
			$('#availability_error_block').hide();
		}
	}	

	if (typeof(result.packages) != 'undefined') {
		for (var packageId in result.packages) {
			if (result.packages[packageId].request_availability_rule_error) {
				$('#availability_error_block_package_' + packageId).html(langs.five_day_rule);
				$('#availability_error_block_package_' + packageId).show();
			} else if (result.packages[packageId].request_availability_rule2_error) {
				$('#availability_error_block_package_' + packageId).html(langs.online_availability_notice);
				$('#availability_error_block_package_' + packageId).show();
			} else {
				$('#availability_error_block_package_' + packageId).hide();
			}
		}
	}
	
			
}


initGMap = function(map_param) {   
	
	if (map_param) {
		
		map = new GMap2($("#map").get(0));

		var centerPoint = eval("new GLatLng(" + map_param + ")");
		    
		map.setCenter(centerPoint, 15);
		
		var icon = new GIcon(G_DEFAULT_ICON);    		
		icon.image = "http://www.google.com/intl/en_us/mapfiles/ms/micons/blue-dot.png";                
		icon.iconSize = new GSize(32, 32);
		var marker = new GMarker(centerPoint, {"icon": icon});
	    map.addOverlay(marker);   
	    
	    map.addControl(new GSmallZoomControl()); 	
		
		GEvent.addListener(map, "dblclick", function() {
			$("#dialog .dialog_content").html('');

			$.get(hotelMapUrl, {hotel_id: hotelId}, function (data) {
			
				$("#dialog .dialog_content").html(data);
			}, 'html');			

			$("#dialog").dialog({minWidth: 620, minHeight: 500, resizable: false, title: hotelName});
		});  		 
	}
}

addMarker = function(map, object) {
	var point = new GLatLng(object.y, object.x);
	var marker = createMarker(point, object.hotel_id, object.title);
	map.addOverlay(marker);
}

createMarker = function(point, hotel_id, title) {
	var marker = new GMarker(point,{title:title});
	GEvent.addListener(marker, "click", function() {
		marker.openInfoWindowHtml('<div style="width:250px;">' + title + '<br /><a href="' + hotelsViewUrl + '&hotel_id=' + hotel_id + '">' + langs['goto'] + '</a></div>');
	});
	return marker;
}
	

showCheckAvailabilityWindow = function(package_id, title) {

	var form = document.forms.orderform;

	var url = showAvailabilityUrl + "&period_from=" + form['order[date_from]'].value;
	
	if (package_id != null) {
		url += '&package_id=' + package_id;
	}
	$("#dialog .dialog_content").html('');

	$.get(url, {}, function (data) {	
		$("#dialog .dialog_content").html(data);
	}, 'html');			

	$("#dialog").dialog({minWidth: 900, 
							minHeight: 400,
							resizable: false, 
							title: title});
}




showPricesWindow = function(package_id, title) {

	var form = document.forms.orderform;

	var url = exportPricesUrl + "&period_from=" + form['order[date_from]'].value;
	
	if (package_id != null) {
		url += '&package_id=' + package_id;
	}
	$("#dialog .dialog_content").html('');

	$.get(url, {}, function (data) {	
		$("#dialog .dialog_content").html(data);
	}, 'html');			

	$("#dialog").dialog({minWidth: 900, 
							minHeight: 400,
							resizable: false, 
							title: title});
}


showRoomDescription = function(room_id) {
	
	var descriptionElement = $('#room_description_' + room_id);
	var breakfastElement = $('#room_breakfast_' + room_id);
	var dinnerElement = $('#room_dinner_' + room_id);
	var supperElement = $('#room_supper_' + room_id);
	
	
	descriptionElement.toggle();
	
	if (descriptionElement.css('display') == 'none') {
		if (breakfastElement) {
			breakfastElement.show();
		}
		if (dinnerElement) {
			dinnerElement.show();
		}
		if (supperElement) {
			supperElement.show();
		}
	} else {
		if (breakfastElement) {
			breakfastElement.hide();
		}
		if (dinnerElement) {
			dinnerElement.hide();
		}
		if (supperElement) {
			supperElement.hide();
		}
	}
}



showVideo = function() {
	openWindow({"url" : showViewVideoUrl,
				"width" : 360,
				"height" : 288,
				"scroll" : false,
				"resize": false
				});
}


addExtraBed = function(packageId, index) {
	
	if (lockAddExtraBed) {
		return true;
	}
	

	var suffix = (packageId != null ? 'package_' + packageId + "_" : '');
	
	lockAddExtraBed = true;

	var roomTypeObj = $('#order_rooms_' + suffix + index + '_room_type_id');
	var roomCountObj = $('#order_rooms_' + suffix + index + '_room_count');
	var valueObj = $('#order_rooms_' + suffix + index + '_extra_beds');

	if (roomCountObj.val() < 1) {
		return;
	}	
	
    var form = document.forms.orderform;
	var url = addExtraBedUrl 
				+ "&room_type_id=" + roomTypeObj.val() 
				+ "&room_count=" +  roomCountObj.val() 
				+ "&period_from=" + $(form['order[date_from]']).val() 
				+ "&period_to=" + $(form['order[date_to]']).val();
	
	
	if (packageId != null) {
		url += '&package_id=' + packageId;
	}	
	
	if (valueObj.val() != '') {
		url += "&data=" + valueObj.val();
	}
	
	$("#dialog .dialog_content").html('');

	$.get(url, {}, function (data) {	
		$("#dialog .dialog_content").html(data);
	}, 'html');			

	var buttons = {};
	
	buttons[langs["close"]] = function() {
									$("#dialog").dialog('destroy');
							  };
					
	buttons[langs["save"]]  = function(packageId, index) {
											addExtraBedHandler(packageId, index);
											$("#dialog").dialog('destroy');
							  }.curry(this, [packageId, index]);							
								
					
	$("#dialog").dialog({minWidth: 390, 
						 minHeight: 450, 
						 resizable: true, 
						 title: langs.extra_bed,
						 buttons: buttons});


}


addExtraBedHandler = function(packageId, index) {

	var suffix = (packageId != null ? 'package_' + packageId + "_" : '');
	
	if (typeof(extraBedFormData) == 'undefined') {
		return;
	}
	var data = extraBedFormData;

	var valueObj = $('#order_rooms_' + suffix + index + '_extra_beds');

	var value = {};
	for (var roomNo in data) {
		
		var tmp = {};
		var empty = true;
		for (var extraIndex in data[roomNo]) {
		
			if (data[roomNo][extraIndex] != null) {
	
				empty = false;
				if (typeof(tmp[data[roomNo][extraIndex]]) == 'undefined') {
					tmp[data[roomNo][extraIndex]] = 1;
				} else {
					
					tmp[data[roomNo][extraIndex]] += 1;
				}
				
			}
		}	
		
		if (!empty) {
			value[roomNo] = tmp;
			
	
		} 
	}		

	valueObj.val(Base64.encode($.toJSON(value)));
	
	renderExtraBeds(packageId, index);	
	
	calculatePrice();
}

renderExtraBeds = function(packageId, index) {

	var suffix = (packageId != null ? 'package_' + packageId + '_' : '');
	
	var container = $('#add_additional_block_' + suffix + index);
	var valueObj = $('#order_rooms_' + suffix + index + '_extra_beds');

	if (valueObj.length == 0) {
		return;
	}
	
	if (container.length > 0) {	
		container.html(langs.extra_bed_available);
	}
	
	if (valueObj.val() == '') {
		return;
	}
	
	container.html("");
		
	eval("var data = " + Base64.decode(valueObj.val()) + ";");
	
	var bedsCount = 0; 
	for (var roomNo in data) {
		var str = "";
		for (var roomType in data[roomNo]) {
			bedsCount += data[roomNo][roomType];

		
			str += '&nbsp;&nbsp;<span style="white-space: nowrap;">' + extraBedTypes[roomType] + ' - ' + data[roomNo][roomType] + '</span><br />';
		}
		if (container != null) {	
			container.html(container.html() + '<span style="font-size:10px; font-weight: bold;">' + langs.room + (parseInt(roomNo) + 1) + ':</span><br /><span style="font-size:10px;">' + str + '</span>');
		}	
	}	
	
	if (bedsCount > 0) {
		$('#add_additional_' + suffix + index).html(langs.edit);
	} else {
		$('#add_additional_' + suffix + index).html(langs.add);
	}
}

renderExtraBedsAll = function(packageId) {
	
	var roomsRows = $('.room_row' + (packageId != null ? '_package_' + packageId : '')).length;
	for (var i = 0; i < roomsRows; i++) {			
		renderExtraBeds(packageId, i);
	}
}

checkoutPackage = function (package_id) {

	$('#order_total_date_from').val($('#order_date_from_package_' + package_id).val());
	$('#order_total_date_to').val($('#order_date_to_package_' + package_id).val());
	
	
	$('#checkout_product').val('package');
	$('#checkout_object_id').val(package_id);
}

checkoutRoom = function () {
	$('#order_total_date_from').val($('#order_date_from').val());
	$('#order_total_date_to').val($('#order_date_to').val());
	
	$('#checkout_product').val('room');
	$('#checkout_object_id').val('');
}



transferSeatCountChanged = function() {
	calculatePrice();
}


$(function () {

	blockValidation = false;

	if (viewMode == 'rooms') {
		renderExtraBedsAll(null);
	} else if (viewMode == 'packages') {		
		for (var i in packageSettings) {
			renderExtraBedsAll(i);	
		}
	} 


	if (hotelCoord) {
		initGMap(hotelCoord);
		
		for (var i = 0; i < mapPoints.length; i++) {
			addMarker(map, {"x": mapPoints[i].x, "y" : mapPoints[i].y, "hotel_id": mapPoints[i].hotel_id, "title": mapPoints[i].title});
		}
	}	
	
	if (viewMode == 'rooms') {
		handler = restrictPreviousDayInCalendar;
	} else if (viewMode == 'packages') {
		handler = restrictPackageStartCalendar;
	} 
	
	if (viewMode == 'packages') {
	
		$.datepicker._updateDatepicker2 = $.datepicker._updateDatepicker;
		$.datepicker._updateDatepicker =  function(inst) {
			this._updateDatepicker2(inst);	

			if(typeof(inst.settings.extensionType) != 'undefined') {
				var packageId = inst.id.replace('order_date_' + inst.settings.extensionType  + '_package_', '');
				
				if (packageSettings[packageId].allowExtraDays == 1) {
					if (inst.settings.extensionType == 'from') {
						addFromCalendarExtensions();
					} else if (inst.settings.extensionType == 'to') {
						addToCalendarExtensions();
					}
				}	
			}
		}
	}	

	$(".order_date_from").datepicker({
		dateFormat: 'yy-mm-dd',
		firstDay: 1,
		extensionType: 'from',
		onSelect: function(dateText, inst) {	
			var packageId = null;
	
			if (viewMode == 'packages') {
				packageId = getSelectedPackageId($(this));
			}
			setDateFrom(packageId, dateText);			
		},
		beforeShowDay: handler
	});	
	
	


	$(".order_date_from_selector").bind('click', function () {
		var elementId = $(this).attr('id').replace('order_date_from_selector', 'order_date_from');
		
		$("#" + elementId).datepicker("show");
	});	
	


	if (viewMode == 'rooms') {
		handler = restrictDayBeforeFrom;
	} else if (viewMode == 'packages') {
		handler = restrictPackageEndCalendar;
	} 
	

	$(".order_date_to").datepicker({
		dateFormat: 'yy-mm-dd',
		firstDay: 1,
		extensionType: 'to',
		onSelect: function(dateText, inst) {
			var packageId = null;
		
			if (viewMode == 'packages') {
				packageId = getSelectedPackageId($(this));
			}
			setDateTo(packageId, dateText);	
		},
		beforeShowDay: handler		
	});	
	
	$(".order_date_to_selector").bind('click', function () {
		var elementId = $(this).attr('id').replace('order_date_to_selector', 'order_date_to');
		
		$("#" + elementId).datepicker("show");
	});	

});
