/*
 * @author frukt
 */

var frukt = function(){
	var mile_markers = [];
	var map;
	var has_searched_markers = false;
	var event_searching = false;
	var icons = {
		available : '/px_custom/markers/white.png',
		searched : '/px_custom/markers/yellow.png',
		locked : '/px_custom/markers/lightblue.png',
		bought : '/px_custom/markers/darkblue.png',
		boat : '/px_custom/markers/anchor.png'
	};

	function create_mile_marker(point, content, status){
		var icon = new GIcon();
		if(status == 0){ icon.image = icons.available; }
		else if(status == 1){ icon.image = icons.locked; }
		else if(status == 2){ icon.image = icons.searched; has_searched_markers = true; }
		else if(status == 3){ icon.image = icons.bought; }
		icon.iconSize = new GSize(16, 16);
		icon.iconAnchor = new GPoint(8, 8);
		icon.infoWindowAnchor = new GPoint(8, 8);

		var t = new GMarker(point, icon);
		GEvent.addListener(t, "mouseover", function(){
			this.openInfoWindowHtml(content);
		});
		mile_markers[mile_markers.length] = t;
		return t;
	}

	function clear_mile_markers(){
		for(var i = 0; i < mile_markers.length; i++){
			mile_markers[i].remove();
		}
		mile_markers = [];
	}

	function cookie_create(name, value, days) {
		if(days){
			var date = new Date();
			date.setTime(date.getTime()+(days*24*60*60*1000));
			var expires = "; expires="+date.toGMTString();
		}
		else var expires = "";
		document.cookie = name+"="+value+expires+"; path=/";
	}

	function read_cookie(name){
		var nameEQ = name + "=";
		var ca = document.cookie.split(';');
		for(var i=0;i < ca.length;i++) {
			var c = ca[i];
			while (c.charAt(0)==' ') c = c.substring(1,c.length);
			if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
		}
		return null;
	}

	function get_markers_by_bounds(){
		var bounds = map.getBounds();
		var zoom = map.getZoom();
		var x1 = escape(bounds.getSouthWest().lat());
		var y1 = escape(bounds.getSouthWest().lng());
		var x2 = escape(bounds.getNorthEast().lat());
		var y2 = escape(bounds.getNorthEast().lng());
		

		GDownloadUrl("/marthaworldcruise/extensions/kaart/output_markers_rect.php?x1="+x1+"&y1="+y1+"&x2="+x2+"&y2="+y2+"&zoom="+zoom, function(data, responseCode){
			
			var xml = GXml.parse(data);
			var markers = xml.documentElement.getElementsByTagName("marker");

			clear_mile_markers();
			if(markers.length > 0){
				for(var i = 0; i < markers.length; i++) {
					marker = create_mile_marker(new GLatLng(parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("lng"))), markers[i].getAttribute("info"), markers[i].getAttribute("status"));
					map.addOverlay(marker);
				}
			}

			if(has_searched_markers){
				document.getElementById('buy_searched_miles').disabled = false;
				document.getElementById('clear_searched_miles').disabled = false;
			}
		
		});
	}

	function load_minimap(){
		if(GBrowserIsCompatible()){
			map = new GMap2(document.getElementById("map"));
			map.disableDragging();
			GDownloadUrl("/marthaworldcruise/extensions/kaart/output_center.php", function(data, responseCode){
				var xml = GXml.parse(data);
				var center = xml.documentElement.getElementsByTagName("center");
				var coords = [parseFloat(center[0].getAttribute("lat")), parseFloat(center[0].getAttribute("lng"))];
				map.setCenter(new GLatLng(coords[0], coords[1]), 6, G_SATELLITE_MAP);
				var icon = new GIcon();
				icon.image = icons.boat;
				icon.iconSize = new GSize(16, 16);
				icon.iconAnchor = new GPoint(8, 8);
				icon.infoWindowAnchor = new GPoint(8, 8);
				var martha_marker = new GMarker(new GLatLng(coords[0], coords[1]), icon);
				GEvent.addListener(martha_marker, "mouseover", function(){
					this.openInfoWindowHtml(center[0].getAttribute("info"));
				});
				map.addOverlay(martha_marker);
			});
		}
	}

	function load_map(zoom){
		if(GBrowserIsCompatible()){
			map = new GMap2(document.getElementById("map"));
			map.addControl(new GMapTypeControl());
			map.addControl(new GSmallMapControl());
			
			GDownloadUrl("/marthaworldcruise/extensions/kaart/output_center.php", function(data, responseCode){
				var xml = GXml.parse(data);
				var center = xml.documentElement.getElementsByTagName("center");
				var coords = [parseFloat(center[0].getAttribute("lat")), parseFloat(center[0].getAttribute("lng"))];
				map.setCenter(new GLatLng(coords[0], coords[1]), zoom, G_SATELLITE_MAP);
				var icon = new GIcon();
				icon.image = icons.boat;
				icon.iconSize = new GSize(16, 16);
				icon.iconAnchor = new GPoint(8, 8);
				icon.infoWindowAnchor = new GPoint(8, 8);
				var martha_marker = new GMarker(new GLatLng(coords[0], coords[1]), icon);
				GEvent.addListener(martha_marker, "mouseover", function(){
					this.openInfoWindowHtml(center[0].getAttribute("info"));
				});
				map.addOverlay(martha_marker);
			});

			// load planned trajectory
			GDownloadUrl("/marthaworldcruise/extensions/kaart/output_trajectory_xml.php", function(data, responseCode) {
				var xml = GXml.parse(data);
				var markers = xml.documentElement.getElementsByTagName("marker");
				var points = [];
				var count = 0;
				if(markers.length > 1){
					for(var i = 0; i < markers.length; i++) {
						if(parseFloat(markers[i].getAttribute("lat")) != 0.0 && parseFloat(markers[i].getAttribute("lng")) != 0.0){
							points[count] = new GLatLng(parseFloat(markers[i].getAttribute("lat")),	parseFloat(markers[i].getAttribute("lng")));
							count++;
						}
					}
				}

				var polyline = new GPolyline(points, "#00FF00", 4);
				map.addOverlay(polyline);
			});

			// load actual trajectory
			GDownloadUrl("/marthaworldcruise/extensions/kaart/output_actual_trajectory.php", function(data, responseCode) {
				var xml = GXml.parse(data);
				var markers = xml.documentElement.getElementsByTagName("marker");
				var points = [];
				var count = 0;
				if(markers.length > 1){
					for(var i = 0; i < markers.length; i++) {
						if(parseFloat(markers[i].getAttribute("lat")) != 0.0 && parseFloat(markers[i].getAttribute("lng")) != 0.0){
							points[count] = new GLatLng(parseFloat(markers[i].getAttribute("lat")),	parseFloat(markers[i].getAttribute("lng")));
							count++;
						}
					}
				}

				var polyline = new GPolyline(points, "#FF9900", 4);
				map.addOverlay(polyline);
			});
			var strParamName='miil';		 
var strReturn = "";
  var strHref = window.location.href;
	if ( strHref.indexOf("?") > -1 ){
	var strQueryString = strHref.substr(strHref.indexOf("?")).toLowerCase();
	var aQueryString = strQueryString.split("&");
		for ( var iParam = 0; iParam < aQueryString.length; iParam++ ){
			if (
			aQueryString[iParam].indexOf(strParamName.toLowerCase() + "=") > -1 ){
				var aParam = aQueryString[iParam].split("=");
				strReturn = aParam[1];
				break;
			}
		}
	}
var qur= unescape(strReturn);



			GEvent.addListener(map, "load", function(){ map.setMapType(G_HYBRID_MAP);get_markers_by_bounds();
		if(qur.length>0){
		document.search_map.query.value=qur;
		submit_search_query();
		} 
		get_markers_by_bounds();
		});
			GEvent.addListener(map, "dragend", function(){ if(!event_searching){ get_markers_by_bounds(); } });
			GEvent.addListener(map, "zoomend", function(){ if(!event_searching){ get_markers_by_bounds(); } });
			GEvent.addListener(map, "moveend", function(){ if(!event_searching){ get_markers_by_bounds(); } });
			GEvent.addListener(map, "click", function(overlay, point){ get_mile_at_point(point); });
		}
	
	
	}

	function submit_search_query(){
		var form = document.forms.search_map;
		var query = form.query.value;

		var bounds = map.getBounds();
		var zoom = map.getZoom();
		var x1 = escape(bounds.getSouthWest().lat());
		var y1 = escape(bounds.getSouthWest().lng());
		var x2 = escape(bounds.getNorthEast().lat());
		var y2 = escape(bounds.getNorthEast().lng());
		event_searching = true;

		GDownloadUrl("/marthaworldcruise/extensions/kaart/output_markers_rect.php?x1="+x1+"&y1="+y1+"&x2="+x2+"&y2="+y2+"&zoom="+zoom+"&query="+query, function(data, responseCode){
			var xml = GXml.parse(data);
			var markers = xml.documentElement.getElementsByTagName("marker");
			var zoom = xml.documentElement.getElementsByTagName("zoom");
			var center = xml.documentElement.getElementsByTagName("center");

			/*if(zoom){
				map.setZoom(parseInt(zoom[0].getAttribute("level")));
			}*/

			if(center.length > 0){
				if(parseFloat(center[0].getAttribute("lat")) != 0.0 && parseFloat(center[0].getAttribute("lng")) != 0.0){
					map.panTo(new GLatLng(parseFloat(center[0].getAttribute("lat")), parseFloat(center[0].getAttribute("lng"))));
				}
			}

			clear_mile_markers();
			if(markers.length > 0){
				for(var i = 0; i < markers.length; i++) {
					lat = parseFloat(markers[i].getAttribute("lat"));
					lng = parseFloat(markers[i].getAttribute("lng"));
					marker = create_mile_marker(new GLatLng(lat, lng), markers[i].getAttribute("info"), markers[i].getAttribute("status"));
					map.addOverlay(marker);
				}
			}
			
			if(has_searched_markers){
				document.getElementById('buy_searched_miles').disabled = false;
				document.getElementById('clear_searched_miles').disabled = false;
			}

			event_searching = false;
		});
	}

	function get_mile_at_point(point){
		if(point){
			GDownloadUrl("/marthaworldcruise/extensions/kaart/output_marker_point.php?lng="+point.lng(), function(data, responseCode){
				var xml = GXml.parse(data);
				var info = xml.documentElement.getElementsByTagName("info");
				if(info.length > 0){
					map.openInfoWindowHtml(point, info[0].getAttribute("content"));
				}
			});
		}
	}

	function buy_a_mile(mile){
		var mile_value = mile;
		if(mile_value){
			cookie_create('mile_search_query', mile, 0);
		}
	}

	return {
		load : function(){
			load_map(5);
		},
		load_bigmap : function(){
			load_map(1);
		},

		load_mini : function(){
			load_minimap();
		},

		search_miles : function(){
			submit_search_query();
		},

		buy_mile : function(mile){
			buy_a_mile(mile);
		},

		clear_searched_miles : function(){
			has_searched_markers = false;
			document.getElementById('buy_searched_miles').disabled = true;
			document.getElementById('clear_searched_miles').disabled = true;
			cookie_create('mile_search_query', '', -1);
			get_markers_by_bounds();
		},

		init_helper: function(){
			if(read_cookie('hide_helper') == null){
				var img = document.createElement('img');
				img.setAttribute('src', '/public/saabumise-plakat.jpg');
				img.setAttribute('usemap', '#map_helper');

				var div = document.createElement('div');
				div.setAttribute('id', 'helper');
				div.className = 'helper';
				div.onclick = function(){
					frukt.close_helper();
				}

				div.appendChild(img);
				document.body.appendChild(div);
			}
		},

		close_helper: function(permanent){
			if(permanent == true){ cookie_create('hide_helper', '1', 30); }
			document.getElementById('helper').style.display = 'none';
		}
	}
}();