﻿// Prebble, umee.tv, 2009

var xmlhttp;
var dataUrl = "proxy.aspx?url=" + encodeURI("http://www.zoopla.co.uk/datafeed/postcode_radius_data/telegraph");
var listingsUrl = "proxy.aspx?url=" + encodeURI("http://www.zoopla.co.uk/datafeed/postcode_radius_listings/telegraph");


function getPropertyData(url, handlerTag, postcode)
{
    if (window.XMLHttpRequest)
    {
        xmlhttp=new XMLHttpRequest();
    }
    else if (window.ActiveXObject)
    {
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    else
    {
        alert("Your browser does not have the functionality to support this application.");
    }
    
    xmlhttp.onreadystatechange=function(){ stateChanged(handlerTag, postcode); };
    xmlhttp.open("GET",url,true);
    xmlhttp.send(null);
}


function stateChanged(handle, postcode)
{
    if (handle == "init")
    {
        //var url = "_cache_data.xml"; //"http://www.zoopla.co.uk/datafeed/postcode_radius_data/telegraph"
        getPropertyData(dataUrl, "data", postcode);
    }
    else if(xmlhttp.readyState==4)
    {
        var xmlDoc = xmlhttp.responseXML;
        var value = '';
        if (handle == "data")
        {
            try
            {
                value = selectSingleNode(xmlDoc, "datafeed/items/item[@postcode='" + postcode + "']/mean_estimate");
                if (value.toString() != "")
                    document.getElementById("averageprice").innerHTML = formatMoney(value);
                value = selectSingleNode(xmlDoc, "datafeed/items/item[@postcode='" + postcode + "']/mean_estimate_D");
                if (value.toString() != "")
                    document.getElementById("detachedprice").innerHTML = formatMoney(value);
                value = selectSingleNode(xmlDoc, "datafeed/items/item[@postcode='" + postcode + "']/mean_estimate_T");
                if (value.toString() != "")
                    document.getElementById("terraceprice").innerHTML = formatMoney(value);
                value = selectSingleNode(xmlDoc, "datafeed/items/item[@postcode='" + postcode + "']/mean_estimate_S");
                if (value.toString() != "")
                    document.getElementById("semiprice").innerHTML = formatMoney(value);
                value = selectSingleNode(xmlDoc, "datafeed/items/item[@postcode='" + postcode + "']/mean_estimate_F");
                if (value.toString() != "")
                    document.getElementById("flatprice").innerHTML = formatMoney(value);

                document.getElementById("seeall").innerHTML = "<span>See all property for sale near </span><a href='" + selectSingleNode(xmlDoc, "datafeed/items/item[@postcode='" + postcode + "']/url_for_sale") + "' target='_blank'>" + postcode + "</a>";
                
                getPropertyData(listingsUrl, "list", postcode);

            }
            catch (e)
            {
                //alert(e);
                document.getElementById("averageprice").innerHTML = "-";
                document.getElementById("detachedprice").innerHTML = "-";
                document.getElementById("terraceprice").innerHTML = "-";
                document.getElementById("semiprice").innerHTML = "-";
                document.getElementById("flatprice").innerHTML = "-";
            }
        }
        else if (handle == "list")
        {
            try
            {
                var nodes = selectNodes(xmlDoc, "datafeed/areas/area[@postcode='" + postcode + "']/for_sale_listings/listing");
                var propertylist = document.getElementById("propertylist");
                propertylist.innerHTML = "";
                for (i=0;i<nodes.length && i<5;i++)
                {
                //selectSingleNode(nodes[i], "listing_url")
                //+ "<span class=''propAttDesc'> - " + selectSingleNode(nodes[i], "attributes_description") + "</span><br />"
                    var sHtml = 
                    
                    
                    "<div class='dataItem'>"
                    + "<span class='propPrice'>" + selectSingleNode(nodes[i], "price_display") + "</span>"
                    + "<a class='propAttDesc' href='" + selectSingleNode(nodes[i], "listing_url") + "' target='_blank'> - " + selectSingleNode(nodes[i], "attributes_description") + "</a><br/>"
                    + "<a href='" + selectSingleNode(nodes[i], "listing_url") + "' target='_blank'><span class='propAdd'>" + selectSingleNode(nodes[i], "displayable_address") + "</span></a><br />"
                    + "<table><tr><td><a href='" + selectSingleNode(nodes[i], "listing_url") + "' target='_blank'><img class='propImg' alt='Property for sale' src='" + selectSingleNode(nodes[i], "thumbnail_image_url") + "'/></a>"
                    + "</td><td class='propDesc'>" + selectSingleNode(nodes[i], "short_description_truncated") + "</td></tr></table>"
                    + "</div>";
                    propertylist.innerHTML += sHtml;
                }
            }
            catch (e)
            {
                alert(e);
            }
        }
    }
}
function selectNodes(xmlDoc, xPath)
{
    if(window.ActiveXObject)
    {
        return xmlDoc.selectNodes(xPath);
    }
    else
    {
        var oEvaluator = new XPathEvaluator();
        var oResult = xmlDoc.evaluate(xPath, xmlDoc, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null);
        var aNodes = new Array();
        if (oResult != null) {
            var oElement = oResult.iterateNext();
            while (oElement) {
                aNodes.push(oElement);
                oElement = oResult.iterateNext();
            }
        }
        return aNodes;
    }
}
function selectSingleNode(xmlDoc, elementPath)
{
    if(window.ActiveXObject)
    {
        return xmlDoc.selectSingleNode(elementPath).text;
    }
    else
    {
        var xpe = new XPathEvaluator();       
        var xPath = new XPathEvaluator();
        var results = [];
        var tobj = xPath.evaluate(elementPath, xmlDoc, null, XPathResult.ANY_TYPE, null );
        var tmp = tobj.iterateNext();
        while(tmp)
        {
            results.push(tmp.textContent);
            tmp = tobj.iterateNext();
        }
        return results;
    }
}
function formatTime(value)
{
    var mins = parseInt(value) % 60;
    var hours = (parseInt(value) - mins) / 60;

    var returnstring = "";
    if (hours > 1)
        returnstring = hours + " hours ";
    else if (hours == 1)
        returnstring = hours + " hour ";
    returnstring += mins + " minutes";
    return returnstring;
}

function formatMoney(value)
{
    value += '';
    valuearray = value.split('.');
    part1 = valuearray[0];
    part2 = valuearray.length > 1 ? '.' + valuearray[1] : '';
    var rgx = /(\d+)(\d{3})/;
    while (rgx.test(part1)) {
	    part1 = part1.replace(rgx, '$1' + ',' + '$2');
    }
    return "£" + part1 + part2;
}

function load()
{
    setTimeout("document.getElementById('instructions').style.visibility = 'hidden';",500);
}
function searchProperties(station, postcode, ticketprice, journeytime)
{
    document.getElementById("averageprice").innerHTML = "";
    stateChanged("init", postcode);        

    var stationelement = document.getElementById("stationname");
    var ticketpriceelement = document.getElementById("ticketprice");
    var journeytimeelement = document.getElementById("journeytime");
    
    stationelement.innerHTML = station;
    ticketpriceelement.innerHTML = formatMoney(ticketprice);
    journeytimeelement.innerHTML = formatTime(journeytime) + " to London.";
    document.getElementById("row1").style.visibility = "visible";
    document.getElementById("stationresults").style.visibility = "visible";
}
function showInfo(title,time,evt)
{
    var msg = formatTime(time) + " to London.";
    showToolTip(title,msg,evt);
}
function showToolTip(title,msg,evt)
{
    var url;
    
    if (evt) {
        url = evt.target;
    }
    else
    {
        evt = window.event;
        url = evt.srcElement;
    }
    var yPos = parseInt(evt.clientY) - 42;
    var xPos = parseInt(evt.clientX) - 75;
    if (xPos + 164 > 612) xPos -= 90;
    if (xPos < 0) xPos += 80;
    if (yPos < 0) yPos += 80;
    
    var toolTip = document.getElementById("toolTip");
    var shadow = document.getElementById("toolTipShadow");
    toolTip.innerHTML = "<span class='toolTipTitle'>"+title+"</span></br><span class='toolTipMsg'>"+msg+"</span>";
    
    
    toolTip.style.top = yPos + "px";
    toolTip.style.left = xPos + "px";
    shadow.style.top = yPos + 3 + "px";
    shadow.style.left = xPos + 3 + "px";
    shadow.style.visibility = "visible";
    toolTip.style.visibility = "visible";
}

function hideToolTip()
{
    var toolTip = document.getElementById("toolTip");
    toolTip.style.visibility = "hidden";
    var shadow = document.getElementById("toolTipShadow");
    shadow.style.visibility = "hidden";
}