
function processData(data){
    var obj = jQuery.parseJSON(data);
    if ((obj.location[0].x > 0)&&(obj.location[0].y > 0)){
        // setLatLong(obj.location[0].x + "," + obj.location[0].y, obj.location[0].url);
        var str = "u=" + obj.location[0].url + "&c=" + obj.location[0].x + "," + obj.location[0].y;
        $("iframe#displaymap").attr("src", "http://www.email4property.co.uk/map.aspx?" + str);
    }
    else{
        GetLocationPostcodeWithLocation($('#select_location option:selected').text());
    } 
}


function setLatLong(coords, url) {
    var CoordsArr = coords.split(',');
    x = CoordsArr[0]
    y = CoordsArr[1]
    
    if ((x > 0)&&(y > 0)){
            var LtLngArr = OSGridToLatLong(x, y).split(',');
            lat = LtLngArr[0]
            lng = LtLngArr[1]
            initialize2(lat, lng, url)
    }
    else {
         GetLocationPostcode();
    }
}

function GetLocationPostcode() {

    var locationName = $('#Loc').val();
        $.ajax({
            url: '/ajax/getLocationPostcode.aspx?v=' + $("#isVillage").val() + '&loc=' + locationName,
            success: function (data) {
                 var obj = jQuery.parseJSON(data);
                 SetDefaultPostcodeLocation(obj.location[0].postcode, obj.location[0].url)
            }
        });
}


function setLatLong(coords, url, loc, isVillage) {
    var CoordsArr = coords.split(',');
    x = CoordsArr[0]
    y = CoordsArr[1]
    
    if ((x > 0)&&(y > 0)){
            var LtLngArr = OSGridToLatLong(x, y).split(',');
            lat = LtLngArr[0]
            lng = LtLngArr[1]
            initialize2(lat, lng, url)
    }
    else {
         GetLocationPostcode(loc, isVillage);
    }
}

function GetLocationPostcode(loc, isVillage) {
        $.ajax({
            url: '/ajax/getLocationPostcode.aspx?v=' + isVillage + '&loc=' + loc,
            success: function (data) {
                 var obj = jQuery.parseJSON(data);
                 SetDefaultPostcodeLocation(obj.location[0].postcode, obj.location[0].url)
            }
        });
}


function GetLocationPostcodeWithLocation(location) {
        $.ajax({
            url: '/ajax/getLocationPostcode.aspx?v=' + $("#isVillage").val() + '&loc=' + location,
            success: function (data) {
                 var obj = jQuery.parseJSON(data);
                 SetDefaultPostcodeLocation(obj.location[0].postcode, obj.location[0].url)
            }
        });

}

function SetDefaultPostcodeLocation(postcode, url){
          var localSearch = new google.search.LocalSearch();
                localSearch.execute(postcode + ", UK");
                localSearch.setSearchCompleteCallback(null, function () {
                  var resultLat = localSearch.results[0].lat;
                  var resultLng = localSearch.results[0].lng;
                  initialize2(resultLat, resultLng, url)
          });
}

function initialize2(lat, lng, url) {
                var map = new GMap2(document.getElementById("map_canvas"));
                map.setCenter(new GLatLng(lat, lng), 11);
                var point = new GLatLng(lat,lng)
                
		var marker = new GMarker(point);
		GEvent.addListener(marker, "click", function() {
		    // window.location = url;
		    parent.document.location.href = url;
		});
		map.addOverlay(marker);                
                map.setUIToDefault();        
}


function OSGridToLatLong(x, y) {

    

    //    //check to see if lat coords in the correct length
    var tempy = y + "";

    if (tempy.length < 5) { 
        tempy= "0" + tempy;
    }

    var i = tempy.length
        while (i < 6) {
            tempy = tempy + "0";
            i = i + 1;
        }


    //    //check to see if long coords in the correct length
   var tempx = x + "";
   if (tempx.length < 5) {
           tempx = "0" + tempx;
   }

   var j = tempx.length
        while (j < 6) {
            tempx = tempx + "0";
            j = j + 1;
       }

    var E = tempx, N = tempy;

    var a = 6377563.396, b = 6356256.910;              // Airy 1830 major & minor semi-axes
    var F0 = 0.9996012717;                             // NatGrid scale factor on central meridian
    var lat0 = 49 * Math.PI / 180, lon0 = -2 * Math.PI / 180;  // NatGrid true origin
    var N0 = -100000, E0 = 400000;                     // northing & easting of true origin, metres
    var e2 = 1 - (b * b) / (a * a);                          // eccentricity squared
    var n = (a - b) / (a + b), n2 = n * n, n3 = n * n * n;

    var lat = lat0, M = 0;
    do {
        lat = (N - N0 - M) / (a * F0) + lat;

        var Ma = (1 + n + (5 / 4) * n2 + (5 / 4) * n3) * (lat - lat0);
        var Mb = (3 * n + 3 * n * n + (21 / 8) * n3) * Math.sin(lat - lat0) * Math.cos(lat + lat0);
        var Mc = ((15 / 8) * n2 + (15 / 8) * n3) * Math.sin(2 * (lat - lat0)) * Math.cos(2 * (lat + lat0));
        var Md = (35 / 24) * n3 * Math.sin(3 * (lat - lat0)) * Math.cos(3 * (lat + lat0));
        M = b * F0 * (Ma - Mb + Mc - Md);                // meridional arc

    } while (N - N0 - M >= 0.00001);  // ie until < 0.01mm

    var cosLat = Math.cos(lat), sinLat = Math.sin(lat);
    var nu = a * F0 / Math.sqrt(1 - e2 * sinLat * sinLat);              // transverse radius of curvature
    var rho = a * F0 * (1 - e2) / Math.pow(1 - e2 * sinLat * sinLat, 1.5);  // meridional radius of curvature
    var eta2 = nu / rho - 1;

    var tanLat = Math.tan(lat);
    var tan2lat = tanLat * tanLat, tan4lat = tan2lat * tan2lat, tan6lat = tan4lat * tan2lat;
    var secLat = 1 / cosLat;
    var nu3 = nu * nu * nu, nu5 = nu3 * nu * nu, nu7 = nu5 * nu * nu;
    var VII = tanLat / (2 * rho * nu);
    var VIII = tanLat / (24 * rho * nu3) * (5 + 3 * tan2lat + eta2 - 9 * tan2lat * eta2);
    var IX = tanLat / (720 * rho * nu5) * (61 + 90 * tan2lat + 45 * tan4lat);
    var X = secLat / nu;
    var XI = secLat / (6 * nu3) * (nu / rho + 2 * tan2lat);
    var XII = secLat / (120 * nu5) * (5 + 28 * tan2lat + 24 * tan4lat);
    var XIIA = secLat / (5040 * nu7) * (61 + 662 * tan2lat + 1320 * tan4lat + 720 * tan6lat);

    var dE = (E - E0), dE2 = dE * dE, dE3 = dE2 * dE, dE4 = dE2 * dE2, dE5 = dE3 * dE2, dE6 = dE4 * dE2, dE7 = dE5 * dE2;
    lat = lat - VII * dE2 + VIII * dE4 - IX * dE6;
    var lon = lon0 + X * dE - XI * dE3 + XII * dE5 - XIIA * dE7;

    return (lat.toDeg() + ", " + lon.toDeg());
}

Number.prototype.toDeg = function () {  // convert radians to degrees (signed)
    return this * 180 / Math.PI;
}


function LatLongToOSGrid(lat, lng) {
    var lat = lat, lon = lng;

    var a = 6377563.396, b = 6356256.910;          // Airy 1830 major & minor semi-axes
    var F0 = 0.9996012717;                         // NatGrid scale factor on central meridian
    var lat0 = (49).toRad(), lon0 = (-2).toRad();  // NatGrid true origin
    var N0 = -100000, E0 = 400000;                 // northing & easting of true origin, metres
    var e2 = 1 - (b * b) / (a * a);                      // eccentricity squared
    var n = (a - b) / (a + b), n2 = n * n, n3 = n * n * n;

    var cosLat = Math.cos(lat), sinLat = Math.sin(lat);
    var nu = a * F0 / Math.sqrt(1 - e2 * sinLat * sinLat);              // transverse radius of curvature
    var rho = a * F0 * (1 - e2) / Math.pow(1 - e2 * sinLat * sinLat, 1.5);  // meridional radius of curvature
    var eta2 = nu / rho - 1;

    var Ma = (1 + n + (5 / 4) * n2 + (5 / 4) * n3) * (lat - lat0);
    var Mb = (3 * n + 3 * n * n + (21 / 8) * n3) * Math.sin(lat - lat0) * Math.cos(lat + lat0);
    var Mc = ((15 / 8) * n2 + (15 / 8) * n3) * Math.sin(2 * (lat - lat0)) * Math.cos(2 * (lat + lat0));
    var Md = (35 / 24) * n3 * Math.sin(3 * (lat - lat0)) * Math.cos(3 * (lat + lat0));
    var M = b * F0 * (Ma - Mb + Mc - Md);              // meridional arc

    var cos3lat = cosLat * cosLat * cosLat;
    var cos5lat = cos3lat * cosLat * cosLat;
    var tan2lat = Math.tan(lat) * Math.tan(lat);
    var tan4lat = tan2lat * tan2lat;

    var I = M + N0;
    var II = (nu / 2) * sinLat * cosLat;
    var III = (nu / 24) * sinLat * cos3lat * (5 - tan2lat + 9 * eta2);
    var IIIA = (nu / 720) * sinLat * cos5lat * (61 - 58 * tan2lat + tan4lat);
    var IV = nu * cosLat;
    var V = (nu / 6) * cos3lat * (nu / rho - tan2lat);
    var VI = (nu / 120) * cos5lat * (5 - 18 * tan2lat + tan4lat + 14 * eta2 - 58 * tan2lat * eta2);

    var dLon = lon - lon0;
    var dLon2 = dLon * dLon, dLon3 = dLon2 * dLon, dLon4 = dLon3 * dLon, dLon5 = dLon4 * dLon, dLon6 = dLon5 * dLon;

    var N = I + II * dLon2 + III * dLon4 + IIIA * dLon6;
    var E = E0 + IV * dLon + V * dLon3 + VI * dLon5;

    return gridrefNumToLet(E, N, 8);
}


/*Code for Homeflow property feed*/
function CallHomeFlowScript() {

    var xcoord = CheckXYlength($('#TownXY').val().split(",")[0]);
    var ycoord = CheckXYlength($('#TownXY').val().split(",")[1]);
    var LtLngArr = OSGridToLatLong(xcoord, ycoord).split(',');

    var NExcoord = NECoord(CheckXYlength($('#TownXY').val().split(",")[0]));
    var NEycoord = NECoord(CheckXYlength($('#TownXY').val().split(",")[1]));
    var LtLngNEArr = OSGridToLatLong(NExcoord, NEycoord).split(',');

    var SWxcoord = SWCoord(CheckXYlength($('#TownXY').val().split(",")[0]));
    var SWycoord = SWCoord(CheckXYlength($('#TownXY').val().split(",")[1]));
    var LtLngSWArr = OSGridToLatLong(SWxcoord, SWycoord).split(',');

    var script = document.createElement("script");
    script.type = "text/javascript";
    script.src = "http://api.homeflow.co.uk/v1/?method=search_with_bounds&api_key=688d6514ac696d8a0ef123bc8c631bdc&sw_lat=" + jQuery.trim(LtLngSWArr[0]) + "&sw_lng=" + jQuery.trim(LtLngSWArr[1]) + "&ne_lat=" + jQuery.trim(LtLngNEArr[0]) + "&ne_lng=" + jQuery.trim(LtLngNEArr[1]) + "&type=" + getCurrentCat() + "&callback=doHomeFlow";    // use this for linked script
    document.body.appendChild(script);
}

function getCurrentCat() {
    var c = $('#currentCat').val();
    switch (c) {
        case "letting agents":
        case "rent out your property":
            return "lettings"
            break;
        default:
            return "sales"
    };
}

function doHomeFlow(data) {
    //console.log(data);
    //process homeflow data
    var n = data.property_count;
    //get random number so always display different properties on reload.
    var upperItemCount = 2;
    var lowerItemCount = 0;
    var prop = new Array(2);

    var tempCount = genRandomUppperLimit(data.data.length)
    if ((tempCount < data.data.length) && (tempCount > 3)) {
        upperItemCount = tempCount;
        lowerItemCount = tempCount - 2;
    }

    var t = 0
    for (i = lowerItemCount; i <= upperItemCount; i++) {
        //console.log("random" + i);
        if (((data.data[i].photo == null) || (data.data[i].beds == null) || (data.data[i].beds == 0)) && (upperItemCount < data.property_count)) {
            //no image with property, so get the next one.
            upperItemCount = upperItemCount + 1;
        }
        else {
            prop[t] = new Array(4)
            prop[t][0] = data.data[i].id;
            prop[t][1] = data.data[i].photo;
            prop[t][2] = data.data[i].beds;
            prop[t][3] = data.data[i].town;
            prop[t][4] = data.data[i].price;
            t = t + 1
        }
    }
    DisplayData(prop);
}


function DisplayData(arr) {
    var properties = "";
    for (i = 0; i < arr.length; i++) {
        var url = "http://property.email4property.co.uk/" + getCurrentCat() + "/" + arr[i][0];
        properties = properties + '<div class="ad"' + arr[i][0] + '" id="ad">';
        properties = properties + '<a href="' + url + '"><img width="174" height="101" alt="" src="http://www.homeflow.co.uk/' + arr[i][1] + '""></a>';
        properties = properties + '<ul><li><a href="' + url + '">' + arr[i][4] + '</a></li>';
        properties = properties + '<li><a href="' + url + '">' + arr[i][2] + ' Beds</a></li>';
        properties = properties + '<li><a href="' + url + '">' + arr[i][3] + '</a></li>';
        properties = properties + '</ul></div>'
    }
    $('#propertyListing').html(properties)
}



function genRandomUppperLimit(UpperRange) {
    return Math.floor(Math.random() * (parseInt(UpperRange) - 0 + 1)) + 0;
}

function SWCoord(coord) {
    return parseInt(coord) - 2000;
}

function NECoord(coord) {
    return parseInt(coord) + 2000;
}

function CheckXYlength(coord) {
    var i = coord.length
    while (i < 6) {
        coord = coord + "0";
        i = i + 1;
    }
    return coord
}
