(function($){

	$.fn.mallguideMaps = function(options){

		
		var opts = $.fn.extend({}, $.fn.mallguideMaps.defaults, options);
		var count = 1;
		
		return this.each(function(){
		
			$this = $(this);
			
			//alert(opts.toSource());
			
			if(opts.edit){
				$.fn.mallguideMaps.makeEditable(opts.map_x,opts.map_y);
								
			}else{
				if(opts.map_x == 0 && opts.map_y == 0){
				
				jQuery($this).jmap('init', {'mapType':'map','mapCenter':[opts.mapCenter_x, opts.mapCenter_x]});
				 jQuery($this).hide();
				 
			    var found = $.fn.mallguideMaps.searchAddress(opts.address,opts.mallID);
			    if(!found){
			    	var found2 = $.fn.mallguideMaps.searchAddress(opts.suburb + " , " +opts.alternateAddress,opts.mallID);
			    	
			    	if(!found2 ){
			    		$.fn.mallguideMaps.searchAddress(opts.alternateAddress,opts.mallID);
			    	}
			    	
			    }
			         
			     
			}else{
				//alert("options not set");
				jQuery($this).jmap('init', {'mapType':'map','mapCenter':[opts.map_x, opts.map_y]});
				
				 jQuery($this).jmap('AddMarker',{
                     'pointLatLng':[opts.map_x, opts.map_y],
                     'pointHTML':"",
                     'centerMap': true              
                 },function(marker,options){
                	//if point is draggable add draggable Events
                		if(options.pointIsDraggable){
                			GEvent.addListener(marker, "dragstart", function() {
                					
                				  //map.closeInfoWindow();
                			});

                			GEvent.addListener(marker, "dragend", function() {
                				var point = this.getPoint();
                				               				
                			 });

                		}
                	 
                 });
				
			}
				
			}//else not editable
		});
	
	};//mallguideMaps
	
	$.fn.mallguideMaps.makeEditable = function(map_x,map_y){
		//alert("options not set");
		
		if(mapX != "" && mapY != ""){
			map_x = mapX;
			map_y = mapY;
		}
		
		jQuery($this).jmap('init', {'mapType':'map','mapCenter':[map_x, map_y]});
		
		 jQuery($this).jmap('AddMarker',{
             'pointLatLng':[map_x, map_y],
             'pointHTML':"",
             'centerMap': true,
             'pointIsDraggable':true
         },function(marker,options){
        	//if point is draggable add draggable Events
        		if(options.pointIsDraggable){
        			GEvent.addListener(marker, "dragstart", function() {
        					  //map.closeInfoWindow();
        			});

        			GEvent.addListener(marker, "dragend", function() {
        				var pointX = this.getPoint().lat();
        				var pointY = this.getPoint().lng();
        				
        				$("#newMap_x").val(pointX);
        				$("#newMap_y").val(pointY);
        				//alert(pointX + ">> " + pointY);
        				
        			 });

        		}
        		
        	 
         });
		 
		 $("#saveArea").show();
		 
		
	};
	
	$.fn.mallguideMaps.searchAddress = function(address,mallID){
		var found = false;
		 jQuery($this).jmap('SearchAddress', {
	         'query': address,
	         'returnType': 'getLocations'
	     }, function(result, options) {
	         
	         var valid = Mapifies.SearchCode(result.Status.code);
	      //   alert(result.toSource());
	         if (valid.success) {
	         jQuery.each(result.Placemark, function(i, point){
		         	//alert(point.toSource());
		         	
			       //  alert(point.Point.toSource());
	             jQuery($this).jmap('AddMarker',{
	                     'pointLatLng':[point.Point.coordinates[1], point.Point.coordinates[0]],
	                     'pointHTML':point.address,
	                     'centerMap': true
	                 });
	             
	            //add json request to save x and y co-ordinate.
	             jQuery.getJSON("php_include/locationUpdater.php",{map_x: point.Point.coordinates[1], map_y: point.Point.coordinates[0], mallID: mallID});
	            
	             
	         	mapX = point.Point.coordinates[1];
	         	//alert(mapX);
	         	mapY = point.Point.coordinates[0];
	         	//alert(mapY);
	             
	             });
	         	jQuery($this).show();
	         
	         	var found = true;
	         } else {
	             jQuery('#address').val(valid.message);
	         }
	     });
		 
		 return found;
	};
	
  $.fn.mallguideMaps.defaults = {

  map_x: 0,
  map_y: 0,
  address: "",
  alternateAddress: "",
  suburb: "",
  mapCenter_x: 55.307485,
  mapCenter_y:  25.271139,
  mallID: 0,
  edit: false

  };//defaults

	
})(jQuery);
