/*
 * @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 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(){
		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]), 5, 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 stringFilter (s) {
filteredValues = ",-";     // Characters stripped out
var i;
var returnString = "";
for (i = 0; i < s.length; i++) {  // Search through string and append to unfiltered values to returnString.
var c = s.charAt(i);
if (filteredValues.indexOf(c) == -1) returnString += c;
}
return returnString;
}

	function submit_search_query(){
		var form = document.forms.search_map;
		var query = form.query.value;	
		var strValidChars = "0123456789";
   		var strChar;
   		var blnResult = true;
var qr =stringFilter(query);
var chk = /^\d+$/.test(qr);
// alert(chk);

   if(chk==false){
   var strString=query;
   if (strString.length == 0) return false;

   //  test strString consists of valid characters listed above
   for (i = 0; i < strString.length && blnResult == true; i++)
      {
      strChar = strString.charAt(i);
      if (strValidChars.indexOf(strChar) > -1)
         {
         blnResult = false;
         }
      }

		if(blnResult==false){
		var on=query.split("d");
		var one=on[0];
		var tw=on[1].split("m");
		var two=tw[0];
		var points=one+","+two;
		map.setCenter(new GLatLng(one, two), 5);
		}
		if(blnResult==true){
		geocoder = new GClientGeocoder();
		if (geocoder) {
			geocoder.getLatLng(
			query,
			function(point) {
			if (!point) {
			alert(query + " not found");
			} else {
			map.setCenter(point, 5);
			var marker = new GMarker(point, {draggable: false});
              		map.addOverlay(marker);
			GEvent.trigger(marker, "click");
			}
			}
			);
		}
		}
}
if(chk==true){

 		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();
		},

		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();
		}
	}
}();
