/*
COPYRIGHT NOTICE - DO NOT REMOVE
MunchAway POS Integrated Online Ordering System for Restaurants
Designed by: Robert H. Johnson
Developed by: Team MunchAway, V2 Solutions, Inc.
Copyright 2007, Lone Tree Technology, Inc., all rights reserved.
Copyright 2008, LT2 Systems, Inc., all rights reserved.
Copyright 2009-2010, MunchAway, LLC., all rights reserved.
This file contains Confidential and Proprietary Information of MunchAway, LLC.
Using or copying this file or any portions of its contents without the expressed written consent of MunchAway LLC is strictly prohibited.
*/

function drawEachPolygon(arr_points,desc,colorCode,zoomLevel) {
//    icon = new GIcon();
//    icon.image = "/images/orange.png";
//    icon.shadow = "/images/mm_20_shadow.png";
//    icon.iconSize = new GSize(12, 12);
//    icon.shadowSize = new GSize(12, 12);
//    icon.iconAnchor = new GPoint(6, 20);

    var polygonPoints = new Array();
    var bounds = new GLatLngBounds();
    var num_of_points = arr_points.length;
    if(num_of_points > 2){
        for (var a = 0 ; a < num_of_points  ; a++ ) {
                var point = new GLatLng(arr_points[a][0], arr_points[a][1]);
                polygonPoints.push(point);
                bounds.extend(point);
            }
        polygonPoints.push(new GLatLng(arr_points[0][0], arr_points[0][1]));
        polygon = new GPolygon(polygonPoints, colorCode, 2, 1,'#000000', 0.25);
        map.addOverlay(polygon);
        var polyCenter = polygon.getBounds().getCenter();
    //    var marker = new GMarker(polyCenter, {icon: icon, title: desc});
    //    map.addOverlay(marker);
        var label = new ELabel(polyCenter, desc,'style', new GSize(-20,0), 60, true);
        map.addOverlay(label);
        zoomLevel = map.getBoundsZoomLevel(bounds)
        map.setZoom(zoomLevel -1);
        return polyCenter;
    }
  }

  function random_color() {
    var rint = Math.round(0xffffff * Math.random());
    return ('#0' + rint.toString(16)).replace(/^#0([0-9a-f]{6})$/i, '#$1');
  }

  function datadraw(existing_pts, vertex_ids, insert_after)
   {
    icon = new GIcon();
    icon.image = "/images/1.png";
    icon.iconSize = new GSize(25, 25);
    icon.shadowSize = new GSize(22, 20);
    icon.iconAnchor = new GPoint(6, 20);
    if(vertex_ids && vertex_ids != ""){
        var vertex_id_array = vertex_ids.split('||')
    }
    var zoom = map.getZoom();
    var current_center = map.getCenter();
    drawMap();
    var arr1 = $("area_points").value.split("\n") ;
    var arr = [];
    for (var i = 0; i < arr1.length; i++)
    {
      if(arr1[i]){
        arr.push(arr1[i].split(",")) ;
      }
    }
    var points = [];
    for (i = 0; i < arr.length; i++)
    {
      points.push(new GLatLng(arr[i][0], arr[i][1])) ;
      var marker = new GMarker(new GLatLng(arr[i][0],arr[i][1]), {draggable:true, icon:icon});
      map.addOverlay(marker)
    }
    //points.push(new GLatLng(arr[0][0], arr[0][1])) ;
    if(existing_pts){
        var polygonPoints = [];
        for (i = 0; i < existing_pts.length; i++)
        {
          polygonPoints.push(new GLatLng(existing_pts[i][0], existing_pts[i][1])) ;
          var mapIcon = MapIconMaker.createLabeledMarkerIcon({addStar: false, label: vertex_id_array[i], primaryColor: "#00ff00"});
          marker = new GMarker(new GLatLng(existing_pts[i][0],existing_pts[i][1]), {draggable:true, icon:mapIcon});
          map.addOverlay(marker)
        }
        var start = polygonPoints.slice(0,insert_after);
        var end = polygonPoints.slice(insert_after);
        var pts_array = [];
        if(existing_pts.length > 0)
            pts_array = pts_array.concat(start,points,end,start[0]);
        else
            pts_array = pts_array.concat(points,points[0]);
    }else{
        points.push(new GLatLng(arr[0][0], arr[0][1])) ;
        pts_array = points
    }
    var poly = new GPolygon(pts_array, '#ff0000', 2, 1, '#000000', 0.25,{clickable:false});
    map.addOverlay(poly) ;
    map.setZoom(zoom);
    map.setCenter(current_center);
   }
   function validateGeocode() {
    var latitude = $("delivery_area_vertex_latitude");
    var longitude = $("delivery_area_vertex_longitude");
    if(latitude.value == "" || longitude.value == "")
    {
      alert("Please enter location coordinates");
      return false
    }
  }
  function generateGeocode() {
    var address = $("delivery_area_vertex_address");
    var full_address = address.value
    var geocoder = new GClientGeocoder();
    geocoder.getLatLng(
            full_address,
             function(point) {
                      if (!point) {
                        $("delivery_area_vertex_latitude").value = "";
                        $("delivery_area_vertex_longitude").value = "";
                        alert("Geocode generation failed !!. Please enter valid Address");
                      } else {
                             newPoint = point;
                             $("delivery_area_vertex_latitude").value = newPoint.lat();
                             $("delivery_area_vertex_longitude").value = newPoint.lng();
                      }
             });
  }

  function drawMap(clickable) {
    var lineSeperator = "\n";
    if (document.all) {// If Browser is IE
        lineSeperator = "\r\n";
    }
    icon = new GIcon();
    icon.image = "/images/1.png";
    icon.iconSize = new GSize(25, 25);
    icon.shadowSize = new GSize(22, 20);
    icon.iconAnchor = new GPoint(6, 20);
    container = $("map_div");
    map = new GMap2(container, {draggableCursor:"crosshair"});
    map.setCenter(centerPoint, 14);
    addInfoWindowToMarker(centerMarker, balloonContent, {});map.addOverlay(centerMarker);
    map.addControl(new GScaleControl());
    map.addControl(new GLargeMapControl());
    map.addControl(new GMapTypeControl());
    if(clickable){
      GEvent.addListener(map, "click", function(overlay, latlng) {
        if($("area_points")){
          var marker = new GMarker(latlng, {icon:icon});
          GEvent.addListener(marker, "click", function(){
            var val = $("area_points").value.replace(latlng.toUrlValue()+lineSeperator, '');
            $("area_points").value = val;
            marker.remove();
          });
          map.addOverlay(marker);
          $("area_points").value += latlng.toUrlValue() + lineSeperator;
        }
      })
    }
  }


  function drawPolygon(arr_points, sequence,vertex_ids, clickable,draggable, zoomlevel){
    var lineSeperator = "\n";
    if (document.all) {// If Browser is IE
        lineSeperator = "\r\n";
    }
    var icon = new GIcon();    
    var arr_sequence = []
    var vertex_id_array = []
    icon.image = "/images/1.png";
    icon.shadow = "/images/mm_20_shadow.png";
    icon.iconSize = new GSize(25, 25);
    icon.shadowSize = new GSize(22, 20);
    icon.iconAnchor = new GPoint(6, 20);
    var zoom = zoomlevel;
    if(!zoomlevel) {
        zoom = 14;
	}
    if(sequence != ""){
        arr_sequence = sequence.split('||')
    }
    if(vertex_ids != ""){
        vertex_id_array = vertex_ids.split('||')
    }
    map = new GMap2(container, {draggableCursor:"crosshair"});
    map.clearOverlays();
    map.setCenter(centerPoint, zoom);
    addInfoWindowToMarker(centerMarker, balloonContent, {});
	map.addOverlay(centerMarker);
    map.addControl(new GScaleControl());
    map.addControl(new GLargeMapControl());
    map.addControl(new GMapTypeControl());
    var polygonPoints = new Array();
    var bounds = new GLatLngBounds();
    var num_of_points = arr_points.length;
    if(num_of_points > 0){
        for (var a = 0 ; a < num_of_points  ; a++ ) {
            var point = new GLatLng(arr_points[a][0], arr_points[a][1]);
            if(draggable){
                $("latlong_"+a).value =  arr_points[a][0] + ',' + arr_points[a][1];
                $("refresh_map_id").show();
                var mapIcon = MapIconMaker.createLabeledMarkerIcon({addStar: false, label: vertex_id_array[a], primaryColor: "#00ff00"});
                window['name' + a] = new GMarker(new GLatLng(arr_points[a][0],arr_points[a][1]), {draggable:true, name: ''+a, icon:mapIcon})
                GEvent.addListener(window['name' + a],"dragend", function() {
                  var p = this.getPoint();
                  arr_points[this.name][0] = p.lat();
                  arr_points[this.name][1] = p.lng();
                  $("latlong_"+this.name).value =  p.lat() + ',' + p.lng();
                  drawPolygon(arr_points, sequence,vertex_ids, true, true, map.getZoom());
                  $("update_button").click();
                });
            }else {
                $("refresh_map_id").hide();
                mapIcon = MapIconMaker.createLabeledMarkerIcon({addStar: false, label: vertex_id_array[a], primaryColor: "#00ff00"});
                window['name' + a] = new GMarker(new GLatLng(arr_points[a][0],arr_points[a][1]), {draggable:false, name: ''+a, icon:mapIcon})
            }
            map.addOverlay(window['name' + a]);
            polygonPoints.push(point);
            bounds.extend(point);
        }
        if(num_of_points > 1){
            polygonPoints.push(new GLatLng(arr_points[0][0], arr_points[0][1]));
            polygon = new GPolygon(polygonPoints, '#000000', 2, 1, '#000000', 0.25,{clickable:false});
            map.addOverlay(polygon);
            zoom = map.getBoundsZoomLevel(polygon.getBounds())
        }else{
            polygonPoints.push(centerPoint);
            polygonPoints.push(new GLatLng(arr_points[0][0], arr_points[0][1]));
            polygon = new GPolygon(polygonPoints, '#000000', 2, 1, '#000000', 0.25,{clickable:false});
            zoom = map.getBoundsZoomLevel(polygon.getBounds())-1
        }
        if(!zoomlevel) {
            map.setZoom(zoom);
        }
        var center = polygon.getBounds().getCenter();
        map.setCenter(center);
    }
    if(clickable){
      GEvent.addListener(map, "click", function(overlay, latlng) {
        if($("delivery_area_vertex_longitude")){
          var current_center = map.getCenter();
          var current_zoom = map.getZoom();
          arr_points[arr_sequence.length] = [latlng.lat(),latlng.lng()];
          drawPolygon(arr_points,sequence,vertex_ids,true,false,current_zoom);
          var vertex = new GMarker(latlng, {icon:icon});
          map.addOverlay(vertex);
          map.setCenter(current_center);
          map.setZoom(current_zoom);
          $("delivery_area_vertex_longitude").value = latlng.lng();
          $("delivery_area_vertex_latitude").value = latlng.lat();
        }
        if($("area_points")){
          var marker = new GMarker(latlng, {icon:icon});
          GEvent.addListener(marker, "click", function(){
            var val = $("area_points").value.replace(latlng.toUrlValue()+lineSeperator, '');
            $("area_points").value = val;
            marker.remove();
          });
          map.addOverlay(marker);
          $("area_points").value += latlng.toUrlValue() + lineSeperator;
        }
      });
    }

  }

  // Functions Used by Location.show page

  function drawLocationMap() {
    container = $("map_div");
    map = new GMap2(container, {draggableCursor:"crosshair"});
    map.setCenter(centerPoint, zoom);
    addInfoWindowToMarker(centerMarker, balloonContent, {});map.addOverlay(centerMarker);
    map.addControl(new GScaleControl());
    map.addControl(new GLargeMapControl());
    map.addControl(new GMapTypeControl());
}

 function drawEachPolygonOnLocationPage(arr_points,desc,colorCode) {
//    icon = new GIcon();
//    icon.image = "/images/orange.png";
//    icon.shadow = "/images/mm_20_shadow.png";
//    icon.iconSize = new GSize(12, 12);
//    icon.shadowSize = new GSize(12, 12);
//    icon.iconAnchor = new GPoint(6, 20);
    var polygonPoints = new Array();
    var bounds = new GLatLngBounds();
    var num_of_points = arr_points.length;

    if(num_of_points > 2){
        for (var a = 0 ; a < num_of_points  ; a++ ) {
			var point = new GLatLng(arr_points[a][0], arr_points[a][1]);
			polygonPoints.push(point);
			bounds.extend(point);
		}
        polygonPoints.push(new GLatLng(arr_points[0][0], arr_points[0][1]));
        polygon = new GPolygon(polygonPoints, colorCode, 2, 1,'#000000', 0.25);
        map.addOverlay(polygon);
        var polyCenter = polygon.getBounds().getCenter();
    //    var marker = new GMarker(polyCenter, {icon: icon, title: desc});
    //    map.addOverlay(marker);
        var label = new ELabel(polyCenter, desc,'style', new GSize(-20,0), 60, true);
        map.addOverlay(label);
        //map.setZoom(map.getBoundsZoomLevel(bounds));
        return polyCenter;
    }
  }

  function drawCircle(circleRadius, circleUnits){
	if (circle) {
		map.removeOverlay(circle);
	}
	if (centerMarker) {
		map.setCenter(centerMarker.getLatLng())
	}
	else {
		centerMarker = new GMarker(map.getCenter(),{draggable:true});
		GEvent.addListener(centerMarker,'dragend',drawCircle)
		map.addOverlay(centerMarker);
	}
	var center = map.getCenter();
	var bounds = new GLatLngBounds();
	var circlePoints = Array();
	with (Math) {
		if (circleUnits == 1) {
			var d = circleRadius/6378.8;	// radians
		}
		else { //miles
			var d = circleRadius/3963.189;	// radians
		}

		var lat1 = (PI/180)* center.lat(); // radians
		var lng1 = (PI/180)* center.lng(); // radians

		for (var a = 0 ; a < 361 ; a++ ) {
			var tc = (PI/180)*a;
			var y = asin(sin(lat1)*cos(d)+cos(lat1)*sin(d)*cos(tc));
			var dlng = atan2(sin(tc)*sin(d)*cos(lat1),cos(d)-sin(lat1)*sin(y));
			var x = ((lng1-dlng+PI) % (2*PI)) - PI ; // MOD function
			var point = new GLatLng(parseFloat(y*(180/PI)),parseFloat(x*(180/PI)));
			circlePoints.push(point);
			bounds.extend(point);
		}
		if (d < 1.5678565720686044) {
			circle = new GPolygon(circlePoints, '#000000', 2, 1, '#000000', 0.25);
		}
		else {
			circle = new GPolygon(circlePoints, '#000000', 2, 1);
		}
		map.addOverlay(circle);
		map.setZoom(map.getBoundsZoomLevel(bounds));
	}
}


