var poly = [];
var line;
var supplierLinks_html = "";
var gLat;
var gLong;

var localSearch = new GlocalSearch();
var point2;

// arrays to hold copies of the markers and html used by the side_bar
// because the function closure trick doesnt work there
var markersArray = [];
var htmls = [];
var i = 0;



function getIndependantCinemasData(latitude, longitude, distance, km){

    var soapMessage = '<?xml version="1.0" encoding="utf-8"?> \
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> \
  <soap:Body> \
    <GetIndependantCinemasDataXML xmlns="http://p-mm.co.uk/webservices/"> \
      <userLat>' + latitude + '</userLat> \
      <userLong>' +
    longitude +
    '</userLong> \
      <maxRadius>' +
    distance +
    '</maxRadius> \
      <milesKm>' +
    km +
    '</milesKm> \
    </GetIndependantCinemasDataXML> \
  </soap:Body> \
</soap:Envelope>';
    

    var geoServiceUrl = 'http://localhost/GSvc/svcGeoSearch.asmx?op=GetIndependantCinemasDataXML';
    // var geoServiceUrl = 'http://www.pandmm.co.uk/googlesvc/svcGeoSearch.asmx?op=GetLocalProvidersXML';
    
    // var latitude = $('#txtLat').val();
    // var longitude = $('#txtLong').val();
    
    //  var radius = $('#ddDistance').val();
    var radius = distance;
    var myArray = [];
    var map = new google.maps.Map2(document.getElementById("map"));
    map.setCenter(new GLatLng(53, -1), 6);
    map.setMapType(G_NORMAL_MAP);
    map.setUIToDefault();
    //options = new Object();
    //options.resultList = resultsCanvas;
    var bounds = new GLatLngBounds();
        
     
    //    map.setCenter(new google.maps.LatLng(latitude, longitude), zoom);
    var startPoint = new GLatLng(latitude, longitude);
    
    bounds.extend(startPoint);
    map.addOverlay(new GMarker(startPoint));
    //    
    drawCircle(map, startPoint, radius, 50);
    var listing = "";
    
    $('#listing').text("");
    $.ajax({
        url: geoServiceUrl,
        type: "POST",
        dataType: "xml",
        data: soapMessage,
        contentType: "text/xml; charset=\"utf-8\"",
        success: function(xml){
            $('#col3').show();
            $(xml).find('data').each(function(){
                var name = $(this).find('CinemaName').text();
                var postcode = $(this).find('Postcode').text();
                var geolat = $(this).find('Geo_Lat').text();
                var geolong = $(this).find('Geo_Long').text();
                var distance = $(this).find('Distance').text();
                
                var point = new GLatLng(geolat, geolong);
                var marker = createMarker(point, '<strong>' + name + '</strong><br />' + postcode + '<br /> Distance ' + Math.round(distance) + ' miles', name);
                map.addOverlay(marker);
                bounds.extend(point);
                listing = name + ' ' + postcode + ' (' + Math.round(distance) + ' miles) <br />';
            });
            map.setZoom(map.getBoundsZoomLevel(bounds) - 1);
            map.setCenter(startPoint);
            //close each(
        }
    }); //close $.ajax
    return false;
}


function getIndependantCinemasDataJSON(latitude, longitude, distance, km){


	var radius = distance;
	var map = new google.maps.Map2(document.getElementById("map"));
	map.setCenter(new GLatLng(53, -1), 6);
	map.setMapType(G_NORMAL_MAP);
	map.setUIToDefault();
	//options = new Object();
	//options.resultList = resultsCanvas;
	var bounds = new GLatLngBounds();
	
	//    map.setCenter(new google.maps.LatLng(latitude, longitude), zoom);
	var startPoint = new GLatLng(latitude, longitude);
	
	bounds.extend(startPoint);
	map.addOverlay(new GMarker(startPoint));
	//    
	drawCircle(map, startPoint, radius, 50);
	var listing = "";
	// hide and clear listings
	$('#listing').hide().text("");
	
	$.ajax({
	
		//url: 'http://localhost/GSvc/svcGeoSearch.asmx/GetFilms',
		url: 'http://www.pandmm.co.uk/googlesvc/svcGeoSearch.asmx/GetIndependantCinemasDataJSON',   
		type: 'POST',
		data: "{'userLat':'" + latitude + " ','userLong':'" + longitude + "','maxRadius':'" + distance + " ','milesKm':'" + km + "'}",
		contentType: "application/json; charset=utf-8",
		dataType: 'json',
		success: function(msg){
		
			var oResultData = JSON.parse(msg);
			
			$(oResultData.Table).each(function(){
			
				var name = (this).CinemaName;
				var postcode = (this).Postcode;
				var geolat = (this).Geo_Lat;
				var geolong = (this).Geo_Long;
				var distance = (this).Distance;
				var point = new GLatLng(geolat, geolong);
				var marker = createMarker(point, '<strong>' + name + '</strong><br />' + postcode + '<br /> Distance ' + Math.round(distance) + ' miles', name);
				map.addOverlay(marker);
				bounds.extend(point);
			});
		
			map.setZoom(map.getBoundsZoomLevel(bounds) - 1);
			map.setCenter(startPoint);
			$('#listing').show('slow'); 
			//close each(
		}
	}); //close $.ajax
	return false;
}



function getIndependantCinemasDataJSONWM(latitude, longitude, distance, km) {


    var radius = distance;
    var map = new google.maps.Map2(document.getElementById("map"));
    map.setCenter(new GLatLng(53, -1), 6);
    map.setMapType(G_NORMAL_MAP);
    map.setUIToDefault();

    var bounds = new GLatLngBounds();
    var startPoint = new GLatLng(latitude, longitude);

    bounds.extend(startPoint);
    map.addOverlay(new GMarker(startPoint));
    //    
    drawCircle(map, startPoint, radius, 50);
    var listing = "";
    // hide and clear listings
    $('#listing').hide().text("");

    $.ajax({

        url: 'default.aspx/GetCinemaLocations',
        type: 'POST',
        //  data:"{}",
        data: "{'userLat':'" + latitude + "','userLong':'" + longitude + "','maxRadius':'" + distance + "','milesKm':'" + km + "'}",
        contentType: "application/json; charset=utf-8",
        dataType: 'json',
        success: function (msg) {

            var oResultData = JSON.parse(msg);

            $(oResultData.Table).each(function () {

                var name = (this).CinemaName;
                var postcode = (this).Postcode;
                var geolat = (this).Geo_Lat;
                var geolong = (this).Geo_Long;
                var distance = (this).Distance;
                var point = new GLatLng(geolat, geolong);
                var marker = createMarker(point, '<strong>' + name + '</strong><br />' + postcode + '<br /> Distance ' + Math.round(distance) + ' miles', name);
                map.addOverlay(marker);
                bounds.extend(point);
            });

            map.setZoom(map.getBoundsZoomLevel(bounds) - 1);
            map.setCenter(startPoint);
            $('#listing').show('slow');
            //close each(
        }
    }); //close $.ajax
    return false;
}


function getCineworldDataJSONWM(latitude, longitude, distance, km) {


    var radius = distance;
    var map = new google.maps.Map2(document.getElementById("map"));
    map.setCenter(new GLatLng(53, -1), 6);
    map.setMapType(G_NORMAL_MAP);
    map.setUIToDefault();

    var bounds = new GLatLngBounds();
    var startPoint = new GLatLng(latitude, longitude);

    bounds.extend(startPoint);
    map.addOverlay(new GMarker(startPoint));
    //    
    drawCircle(map, startPoint, radius, 50);
    var listing = "";
    // hide and clear listings
    $('#listing').hide().text("");

    $.ajax({

        url: 'CineworldLocations.aspx/GetCineworldLocations',
        type: 'POST',
        //  data:"{}",
        data: "{'userLat':'" + latitude + "','userLong':'" + longitude + "','maxRadius':'" + distance + "','milesKm':'" + km + "'}",
        contentType: "application/json; charset=utf-8",
        dataType: 'json',
        success: function (msg) {

            var oResultData = JSON.parse(msg);

            $(oResultData.Table).each(function () {

                var name = (this).CinemaName;
                var postcode = (this).Postcode;
                var geolat = (this).Geo_Lat;
                var geolong = (this).Geo_Long;
                var distance = (this).Distance;
                var point = new GLatLng(geolat, geolong);
                var marker = createMarker(point, '<strong>' + name + '</strong><br />' + postcode + '<br /> Distance ' + Math.round(distance) + ' miles', name);
                map.addOverlay(marker);
                bounds.extend(point);
            });

            map.setZoom(map.getBoundsZoomLevel(bounds) - 1);
            map.setCenter(startPoint);
            $('#listing').show('slow');
            //close each(
        }
    }); //close $.ajax
    return false;
}




// Draw a circle on map around center (radius in miles)

function drawCircle(map, center, radius, numPoints){
    poly = [];
    var lat = center.lat();
    var lng = center.lng();
    var d2r = Math.PI / 180; // degrees to radians
    var r2d = 180 / Math.PI; // radians to degrees
    var Clat = (radius / 3963) * r2d; //  using 3963 as earth's radius
    var Clng = Clat / Math.cos(lat * d2r);
    
    //Add each point in the circle
    for (var i = 0; i < numPoints; i++) {
        var theta = Math.PI * (i / (numPoints / 2));
        Cx = lng + (Clng * Math.cos(theta));
        Cy = lat + (Clat * Math.sin(theta));
        poly.push(new GLatLng(Cy, Cx));
    }
    
    //Remove the old line if it exists
    if (line) {
        map.removeOverlay(line);
    }
    
    //Add the first point to complete the circle
    poly.push(poly[0]);
    
    //Create a line with the points from poly
    line = new GPolygon(poly, '#0000FF', 1, 0.4, '#0000FF', 0.1);
    
    map.addOverlay(line);
}


function createMarker(point, html, name){
    // Create a lettered icon for this point using our icon class  
    
    blueIcon = new GIcon(G_DEFAULT_ICON);
    blueIcon.image = "images/cinema.png";
    blueIcon.iconSize = new GSize(48, 48);
    blueIcon.shadowSize = new GSize(0, 0);
    // Set up our GMarkerOptions object  marker
    
    markerOptions = {
        icon: blueIcon
    };
    var marker = new GMarker(point, {
        title: name,
        icon: blueIcon
    });
    GEvent.addListener(marker, "click", function(){
        marker.openInfoWindowHtml(html);
    });
    
    
    markersArray[i] = marker;
    htmls[i] = html;
    // add a line to the side_bar html
    supplierLinks_html = '<a href="javascript:myclick(' + i + ')">' + name + '<\/a><br />';
    i++;
    $('#listing').append(supplierLinks_html);
    return marker;
}

// This function picks up the click and opens the corresponding info window
function myclick(i){
    markersArray[i].openInfoWindowHtml(htmls[i]);
}

function usePointFromPostcode(postcode, callbackFunction){

    localSearch.setSearchCompleteCallback(null, function(){
    
        if (localSearch.results[0]) {
            var resultLat = localSearch.results[0].lat;
            var resultLng = localSearch.results[0].lng;
            var point = new GLatLng(resultLat, resultLng);
            callbackFunction(point);     
        }
        else {
            alert("Postcode not found!");
        }
    });
    localSearch.execute(postcode + ", UK");
}

function showPointLatLng(point){
    
	var distance = $('#distance').val();
	getIndependantCinemasDataJSONWM(point.lat(), point.lng(), distance, false);
}

function showCineworld(point) {

    var distance = $('#distance').val();
    getCineworldDataJSONWM(point.lat(), point.lng(), distance, false);
}

