
// Ajax with timer & min length
$.fn.delayKeyStroke = function(iTimeout,oCallOpen,oCallClose, term_size) {
	return this.each(function(){
	var t;
	$(this).keyup(function() {
		if($(this).val().length > term_size) {
			t = setTimeout(oCallOpen,(iTimeout*1000));
		} else {
			clearTimeout(t);
			oCallClose();
			add_keyword('', '', '', '', '');
		}
	});
	$(this).keydown(function() { clearTimeout(t);});
  });
};

// Hack to get CSS to validate(ish..) for lightbox opacity
if(document.styleSheets[0].addRule) {
	document.styleSheets[0].addRule("#TB_HideSelect", "filter: alpha(opacity=0);");
}

// Populates properties on board
function properties(term, lang, drop_id, search_id, size, homepage) {
	timeout=0;
	$('#search_opts #options').hide(); 
	$('#search_opts #return').show();
	$("#"+ drop_id).show().html("<div style=\"margin: auto; text-align: center; padding: 7px;\"><img src=\"img/site/loading_big.gif\" /></div>").load("/properties/?term="+ term +"&lang="+ lang +"&dropb="+ drop_id +"&searchb="+ search_id +"&size="+ size +"&home="+ homepage);
	
	
}

// Adds keyword to the destination box on board
function add_keyword(term, dest, drop_id, search_id, homepage) {
	if(term != "") {
		$("#"+ search_id).val(term);
		$("#dest").val(dest);
	}
	if(drop_id == "autocomplete") {
		$("#occupants").show();
	}
	$("#"+ drop_id).hide();

	if(document.getElementById('search_opts')) {
		$('#search_opts #options').show();
		$('#search_opts #return').hide();
	}


	
	//alert("h "+ homepage);
	if(homepage == "y") document.search.submit();
}

// AJAX runner
function ajax(target_id, data) {
	if(target_id != "") $('#'+ target_id).load(data);
}

// Popup for search page
function popup_wait(text_bits) {
	var text_bits = text_bits.split("|");
	var search_bits = text_bits[3] +"|"+ text_bits[4];

	//$("#searchresults").html("<div id=\"pleasewait\" style=\"background:url('/images/loading-bg.jpg') top left no-repeat;\"><img src=\"/images/ajax-loader.gif\" alt=\"\"><br/><br/><span class=\"waitheader\">"+ text_bits[0] +"</span><br/><div id=\"please_wait_beaches\"></div><p>"+ text_bits[1] +"</p><p>"+ text_bits[2] +"</p><div id=\"hotel_count\">"+ text_bits[3] +" 50 "+ text_bits[4] +"</div></div>");
	$("#searchresults").html("<div id=\"pleasewait\" style=\"background:url('/images/loading-bg.jpg') top left no-repeat;\"><img src=\"/images/ajax-loader.gif\" alt=\"\"></div>");
	hotel_counter(0, search_bits);
}

// Hotel counter for popup "please wait" box
if(!timeout) var timeout;
var timerID = "";
function hotel_counter(value, text) {
	var text_bits = text.split("|");

	clearInterval(timerID);
	//alert("here: "+ value);

	if(document.getElementById("hotel_count")) {
		$('#hotel_count').html(text_bits[0] +" "+ parseInt(value+1500) +" "+ text_bits[1]);
		timerID = setInterval("hotel_counter("+ (value+1500) +",'"+ text +"')", 500);
	}
}

//  Property drop on search page
function prop_pop(id, ln) {
	//alert("id: "+ id);
	$('#prop_pop_'+ id).toggle().html("<div class=\"prop_pop_loading\">&nbsp;</div>").load(ln +"/propertyinfo/"+ id +"/?size=l", "", function() {
		prop_show_pop(id, "info");
	});
}

// Updates calendar
function update_calendar(id, lang, date, use_calendar, time, room) {
	ajax("calendar", "/calendar/?id="+ id +"&ln="+ lang +"&date="+ date +"&use_calendar="+ use_calendar +"&use_room="+ room +"&time="+ time);
}

// Prop pics
function prop_show_pic(accom, id, pending) {
	(pending == "y") ? dir = "accom_pending" : dir = "accommodation1";
	$('#pic_0_'+ accom).background("transparent url('http://www.beach.es/img/"+ dir +"/"+ accom +"/"+ accom +"_"+ id +".jpg') no-repeat center center;");
}

// Generate boxes for the populate_occupancy page
function sync_occupancy()
{
	var form = document.search;
	var index = 0;

	var index_1 = 0;
	var index_2 = 0;

	//alert("HERE");

	for(i=0;i<form.length;i++) {
			element = form.elements[i];
			switch(element.name) {
				case "rooms":
					if (document.occupancy.rooms.value != element.value)
					{
						document.occupancy.rooms.value=element.value;
						update_occupancy('occupants', 'normal');
						i = form.length;
					}
					break;
				case "ch[]":
						document.getElementById('ch_' + index).value = element.value;
					if (index_1 == 1 && index_2 == 1)
					{
						index++;
						index_1 = 0;
						index_2 = 0;
					}
					index = index + 1
					break;
				case "ad[]":
						document.getElementById('ad_' + index).value = element.value;
					if (index_1 == 1 && index_2 == 1)
					{
						index++;
						index_1 = 0;
						index_2 = 0;
					}
					break;
			}
	}
}

// Save occupancy for search page
function save_occupancy() {
	var form = document.search;
	if(form) {
		var inputs = new Array();
		var rooms = new Array();
		var children = 0;
		var adults = 0;
		var firstadult = true;
		var firstchild = true;
		/*for(i=0;i<form.length;i++) {
			element = form.elements[i];
			switch(element.name) {
				case "rooms":
					rooms = element.value;
					break;
				case "ad[]":
					if(!firstadult){
						//inputs.push(Array("ad[]", element.value));
						if(element.value > 0) adults += parseInt(element.value);
					}
					firstadult = false;
					break;
				case "ch[]":
					if(!firstchild){
						//inputs.push(Array("ch[]", element.value));
						if(element.value > 0) children += parseInt(element.value);
					}
					firstchild = false;
					break;
				default:
					if(element.name.indexOf("_age[]") != -1) {
						inputs.push(Array(element.name, element.value));
					}
					break;
			}
		}*/
		var form = $("#search");
		var adultsArray = new Array;
		var childArray = new Array;
		var ageArray = new Array;
		var ageHtml = "";
		
		form.find(':input[rel=occ_ad_change]').each(function()
		{
			adultsArray.push($(this).val());
		});
		form.find(':input[rel=occ_ch_change]').each(function()
		{
			childArray.push($(this).val());
		});
		form.find(':input[rel=occ_age_change]').each(function()
		{
			ageArray[$(this).attr("name")] = $(this).val();
			ageHtml = ageHtml + "<input type=\"hidden\" name=\"" + $(this).attr("name") + "\" value=\""+ $(this).val() +"\" />";
		});
		form.find(':input[rel=occ_room_change]').each(function()
		{
			rooms = parseInt($(this).val());
		});
		
		
		for(i=0;i<adultsArray.length;i++) {
			if(adultsArray[i] > 0) adults += parseInt(adultsArray[i]);
		}
		for(i=0;i<childArray.length;i++) {
			if(childArray[i] > 0) children += parseInt(childArray[i]);
		}

		$('#rooms_box').html("<span class=\"room_big\">"+ rooms +"</span> room"+ (rooms > 1 ? "s":"") + " - "+ adults +" adults, "+ children +" children<input type=\"hidden\" name=\"rooms\" value=\""+ rooms +"\" />");

		for(x=0;x<adultsArray.length;x++) {
			$('#rooms_box').html($('#rooms_box').html() +"<input type=\"hidden\" name=\"ad[]\" value=\""+ adultsArray[x] +"\" />");
		}
		for(x=0;x<childArray.length;x++) {
			$('#rooms_box').html($('#rooms_box').html() +"<input type=\"hidden\" name=\"ch[]\" value=\""+ childArray[x] +"\" />");
		}
		$('#rooms_box').html($('#rooms_box').html() +ageHtml);
		
		$('#occupants').html("");
		$('#occupants').hide();
	}
}

// Login
function do_login(lang, extra) {
	var form = document.login;
	var go = "n";
	if(form) {
		if(form.login_type.value == "beach" && form.b_username) {
			t = "beach";
			u = form.b_username.value;
			p = form.b_password.value;
			if (form.remember.checked) {
				r = 1;
			} else {
				r = 0;
			}
			go = "y";
		} else if(form.a_username) {
			t = "agent";
			u = form.a_username.value;
			p = form.a_password.value;
			if (form.remember.checked) {
				r = 1;
			} else {
				r = 0;
			}
			go = "y";
		}
		
		if(go == "y") {
			$("#login_boxes").load("do_login/?ln="+ lang + "&go=y&t="+ t +"&u="+ u +"&p="+ p + "&r=" + r +"&"+ extra, '', function() { TB_init(); });
		} else {
			$("#login_boxes").load("do_login/?ln="+ lang + "&go=y&"+ extra, '', function() { TB_init(); });
		}
	} else {
		$("#login_boxes").load("do_login/?ln="+ lang +"&"+ extra, '', function() { TB_init(); });
	}
}

// Rates change for agents
function change_rates(r, lang, db) {
	if(r == 'r') {
		$('#r_rate').addClass("selected");
		$('#n_rate').removeClass("selected");
	} else {
		$('#n_rate').addClass("selected");
		$('#r_rate').removeClass("selected");
	}
	if(db == "y") {
		$.ajax({
		type: "GET",
		url: "ajaxdb/?action=update_rates&rate="+ r,
		success: function() {
			do_search(lang, '1', 'reload=y', '');
			}
		});
	}
}

// Small DB Ajax updater
function ajaxdb(stuff) {
	$.ajax({
		type: "GET",
		url: "ajaxdb/?"+ stuff
	});
}

// Adds PHP equivalent of in_array() for arrays
Array.prototype.has = function(v){
	for (i=0;i<this.length;i++){
		if (this[i]==v) return true;
	}
	return false;
}

// Change search destination
function change_dest(lang, term, dest, extra) {
	add_keyword(term.replace(/QZY/g, "'"), dest, 'dest_autocomplete', 'dest_search', 'n');
	document.search.submit();
	//do_search(lang, '1', 'term='+ term, extra);
}

// Check search box
function dest_box(text) {
	if($('#dest_search').val() == text) {
		$('#dest_search').val('');
	}
}

// Account page change
function account_page(which, lang, params) {
	$('#account_main').html("<br/><div style=\"text-align: center;\"><img src=\"/img/site/loading_big.gif\" /></div>").load("/"+ lang +"/account_pages/"+ which +"/?"+ params);
}

// Account form send
function account_form(page, lang, params) {
	var form = document.acc;
	var send = "";
	if(form) {
		for(i=0;i<form.length;i++) {
			element = form.elements[i];
			if(element.name != "" && element.value != "") send += "&"+ element.name +"="+ element.value.replace(new RegExp(/(\r|\n)/g), "|NEW|");
		}
		send = send.substr(1);
		//alert("Sending: "+ send);
		account_page(page, lang, 'action=save&'+ send +"&"+ params);
	} else {
		alert("No form: "+ form_name);
	}
}

// Text area max character count
function text_count(element, s_length) {
	field = $('#'+ element);
	if (field.val().length > s_length)
		field.val(field.val().substr(0, s_length));
	else if ($('#text_counter'))
		$('#text_counter').val(s_length - field.val().length);
}

// Send feedback
function send_feedback() {
	var form = document.feedback_form;
	var bits = Array();
	var send = "";
	for(i=0;i<form.length;i++) {
		element = form.elements[i];
		if(element.name != "" && element.value != "") {
			bits[element.name] = element.value;
			send += "&"+ element.name +"="+ element.value.replace(new RegExp(/\n/g), "|NEW|");
		}
	}
	if(!bits['name'] || bits['name'] == "") { $('#feedback_error').html("Please enter your name!").show();
	} else if(!bits['email'] || bits['email'] == "" || bits['email'].indexOf('@') == -1) { $('#feedback_error').html("Please enter your email address!").show();
	} else if(!bits['content'] || bits['content'] == "" || bits['content'].length < 21) { $('#feedback_error').html("Please enter some comments for us!").show();
	} else {
		ajaxdb("action=send_feedback"+ send);
		$('#form_feedback').hide();
		$('#feedback_ok').show();
	}
}

// Loads the map
var markers_array = Array();
function load_map(resort, destination, country, lang, size) {
	//alert("Loading map: resort: "+ resort +", destination: "+ destination +", country: "+ country +", size: "+ size);
	var finished = "n";
	if (GBrowserIsCompatible()) {
		if(size == "b") {
			var mapObj = document.getElementById('map_big');
		} else {
			var mapObj = document.getElementById('map');
		}
		var map = new GMap2(mapObj); 
		map.addControl(new GSmallMapControl());

		var icon = new GIcon();
		icon.image = "img/site/marker_resort.png";
		icon.iconSize = new GSize(20, 23);
		icon.shadow = "img/site/marker_resort_shadow.png";
		icon.shadowSize = new GSize(40, 23);
		icon.iconAnchor = new GPoint(5, 23);
		icon.infoWindowAnchor = new GPoint(5, 2);
		//icon.transparent = "mytran.png";
		//icon.printImage = "mymarkerie.gif";
		//icon.mozPrintImage = "mymarkerff.gif";
		//icon.printShadow = "myshadow.gif";
		//icon.imageMap=[9,0,6,1,4,2,2,4,0,8,0,12,1,14,2,16,5,19,7,23,8,26,9,30,9,34,11,34,11,30,12,26,13,24,14,21,16,18,18,16,20,12,20,8,18,4,16,2,15,1,13,0];
		
		GEvent.addListener(map, "dragend", function() { map.savePosition(); if(finished == "y") get_markers(map, "/do_map/?coords="+ map.getCenter() +"&lang=1", "n"); });
		GEvent.addListener(map, "zoomend", function() { map.savePosition(); if(finished == "y") get_markers(map, "/do_map/?coords="+ map.getCenter() +"&lang=1", "n"); });

		var mouse_pos = null;
		GEvent.addListener(map, "mousemove", function (point) { mouse_pos = point; });
		GMap2.prototype.wheelZoom = function(event){
			map.setCenter(mouse_pos);
			
			if(event.cancelable) event.preventDefault();
			
			if((event.detail || -event.wheelDelta) < 0) { 
				map.zoomIn();
			} else {
				map.zoomOut();
			}
			return false;
		}


		GEvent.addDomListener(mapObj, "DOMMouseScroll", map.wheelZoom);
		GEvent.addDomListener(mapObj, "mousewheel", map.wheelZoom); 
		map.setCenter(new GLatLng(40,10), 1);

		if(resort && destination && country) {
			get_markers(map, "/do_map/?resort="+ resort +"&destination="+ destination +"&country="+ country +"&lang="+ lang, "y");
			map.setMapType(G_SATELLITE_TYPE);
			finished = "y";
		}
	}
}

// Adds markers to the map
function get_markers(map, url, center_map) {
	if(!markers_array[map]) markers_array[map] = Array();
	//alert("coords: "+ map.getCenter());
	GDownloadUrl(url, function(data, responseCode) {
		var xml = GXml.parse(data);
		var where = xml.documentElement.getElementsByTagName("location");
		if(!where[0].getAttribute("error")) {
			if(center_map == "y") {
				var latmin = new GLatLng(parseFloat(where[0].getAttribute("minx")), parseFloat(where[0].getAttribute("miny")));
				var latmax = new GLatLng(parseFloat(where[0].getAttribute("maxx")), parseFloat(where[0].getAttribute("maxy")));
				var bounds = new GLatLngBounds(latmin, latmax);
				var zoom = map.getBoundsZoomLevel(bounds);

				var point = new GLatLng(parseFloat(where[0].getAttribute("lat")), parseFloat(where[0].getAttribute("long")));
				map.setCenter(point, zoom);
			}

			// Put markers on map (if there are any)
			var markers = xml.documentElement.getElementsByTagName("marker");
			for(var m=0; m<markers.length; m++) {
				if(!markers_array.has(markers[m].getAttribute("id"))) {
					//alert("Adding marker: "+ markers[m].getAttribute("name"));
					points = new GLatLng(parseFloat(markers[m].getAttribute("lat")), parseFloat(markers[m].getAttribute("lng")));
					createMarker(map, points, markers[m].getAttribute("name"), markers[m].getAttribute("marker_pos"), markers[m].getAttribute("id"), markers[m].getAttribute("dest"));
					markers_array[map].push(markers[m].getAttribute("id"));
				}
			}
		}
	});/**/
}

// Tooltip
var tooltip_timer = 1;
function JT_init(howlong){
	$("a.jTip")
		.hover(function(){
			if(tooltip_timer == 1) {
				tooltip_timer = setTimeout('JT_show(\''+ this.href+'\',\''+this.id+'\',\''+this.name+'\')', howlong);
			}
		},
		function(){
			clearTimeout(tooltip_timer);
			tooltip_timer = 1;
			$('#tt').remove();
		})
		.click(function(){return false});
}

function JT_show(url,linkId,title){
	if(title == false)title="&nbsp;";
	var de = document.documentElement;
	var w = self.innerWidth || (de&&de.clientWidth) || document.body.clientWidth;
	
	var queryString = url.replace(/^[^\?]+\??/,'');
	var params = parseQuery( queryString );

	var hasArea = w - getAbsoluteLeft(linkId);

	if(params['left'] !== undefined) {
		var left_it = params['left'];
	} else {
		if(hasArea>((params['width']*1)+75)){
			var arrowOffset = getElementWidth(linkId) + 11;
			var left_it = getAbsoluteLeft(linkId) + arrowOffset;
		} else {
			var left_it = getAbsoluteLeft(linkId) - ((params['width']*1) + 15);
		}
	}
	
	if(params['top'] === undefined) {
		var clickElementy = getAbsoluteTop(linkId) - 3;
	} else {
		var clickElementy = params['top'];
	}
	
	if(params['width'] === undefined){params['width'] = 250};
	if(params['link'] !== undefined){
	$('#' + linkId).bind('click',function(){window.location = params['link']});
	//$('#' + linkId).css('cursor','pointer');
	}
	
	$("body").append("<div id='tt' style='width:"+params['width']*1+"px'><div class='title'>"+title+"</div><div id='tt_text'><div class='JT_loader'><div></div></div>");

	var clickElementx = left_it; //set x position
	
	$('#tt').css({left: clickElementx+"px", top: clickElementy+"px"});
	$('#tt').show();
	$('#tt_text').load(url);

}

function getElementWidth(objectId) {
	x = document.getElementById(objectId);
	return x.offsetWidth;
}

function getAbsoluteLeft(objectId) {
	// Get an object left position from the upper left viewport corner
	o = document.getElementById(objectId)
	oLeft = o.offsetLeft            // Get left position from the parent object
	while(o.offsetParent!=null) {   // Parse the parent hierarchy up to the document element
		oParent = o.offsetParent    // Get parent object reference
		oLeft += oParent.offsetLeft // Add parent left position
		o = oParent
	}
	return oLeft
}

function getAbsoluteTop(objectId) {
	// Get an object top position from the upper left viewport corner
	o = document.getElementById(objectId)
	oTop = o.offsetTop            // Get top position from the parent object
	while(o.offsetParent!=null) { // Parse the parent hierarchy up to the document element
		oParent = o.offsetParent  // Get parent object reference
		oTop += oParent.offsetTop // Add parent top position
		o = oParent
	}
	return oTop
}

function parseQuery ( query ) {
   var Params = new Object ();
   if ( ! query ) return Params; // return empty object
   var Pairs = query.split(/[;&]/);
   for ( var i = 0; i < Pairs.length; i++ ) {
      var KeyVal = Pairs[i].split('=');
      if ( ! KeyVal || KeyVal.length != 2 ) continue;
      var key = unescape( KeyVal[0] );
      var val = unescape( KeyVal[1] );
      val = val.replace(/\+/g, ' ');
      Params[key] = val;
   }
   return Params;
}

function blockEvents(evt) {
              if(evt.target){
              evt.preventDefault();
              }else{
              evt.returnValue = false;
              }
}

