//Creating namespaces.
createNamespace("NH");
createNamespace("NH.Template");
createNamespace("NH.Module");
createNamespace("NH.Error");
var currState = "";

NH.LCM = function(pcodeElem)
{
    if(pcodeElem)
        this.hlId = NH.Module.getHLId(pcodeElem.id);
    this.pcode = pcodeElem;
    this.popupMsg = null;
    this.pcodePref = "";
    this.modules = [];
    
    var as = new NH.Anim.AutoSuggest(this.pcode);
    as._funcOnSelect = NH.Util.createThisCallback(this, "reloadMods");
    as._elemToAttachSug = document.getElementById("cat_hl_" + this.hlId);
    
    //static vars
    this.DEF_PCODE_MSG = "enter suburb or postcode";

    this.checkPcodeKeyDown = function(e)
    { //This is now handled in the auto suggest
        var e = e || event;
        var code = e.which || e.keyCode;
        if (code == '13')
        {
            this.reloadMods(e);
            return NH.Util.preventDefault(e);
        }
    }
    
    this.reloadMods = function(e, doValidate)
    {
        NH.Error.clearError();
                
        var event;
        var e = e || event;
        if(!doValidate && (!this.pcode || !this.pcode.value || !this.validatePcode(this.pcode.value)))
        {
            if(parseInt(this.pcode.value))
                NH.Error.showError(null, NH.Error.BAD_PCODE);
        }
        else
        {
            if(!doValidate)
            {
                this.pcodePref = this.pcode.value;
                if(parseInt(this.pcodePref))
                    Ninemsn.Site.NH.Profile.Set("postcode", this.pcodePref);
                var tid = eval("hl" + this.hlId + "_AdTCat");
                AdTrack.t(window.location.href, tid + "_INT", 0);

            }

            //Remove the current weather details before refreshing everything
            if(this.pcode && this.pcode.value && (this.pcode.value != this.DEF_PCODE_MSG))
            {
                var weatherNow = document.getElementById("hl" + this.hlId + "_weatherNow");
                if(weatherNow)
                    weatherNow.innerHTML = "";
            }

            for(var i = 0; i < this.modules.length; i++)
            {
                var module = this.modules[i];
                module.animElem.hasData = false;
                module.animElem.reloadURL = this.attachPostcode(module.originalURL);
                if(module.animElem.isOpen)
                {
                    module.setIsOpen(true);
                    module.animElem.isOpen = false;
                }
                if(module.isOpen)
                {
                    if(!module.animElem.hasDefaultWeather)
                        NH.loadModule(module.animElem);
                    else
                        module.animElem.hasDefaultWeather = false;
                }
            }
        }
        return NH.Util.preventDefault(e);
    }
    
    this.validatePcode = function(pcode)
    {
        if(!pcode || isNaN(pcode) || pcode.length < 3 || pcode.length > 4)
            return false;
        if(pcode.length == 3)
            pcode = '0' + pcode;
        if(pcode.match(/\d{4}/))
            return true;
    }
    
    this.attachPostcode = function(url)
    {
        if(!url || url == "undefined")
            return undefined;
        if(!this.pcode || !this.pcode.value || !this.validatePcode(this.pcode.value))
            return url.replace('#postcode#', '2000');
        else
            return url.replace('#postcode#', this.pcode.value);
    }
    
    this.addModule = function(module)
    {
        if(module)
            this.modules.push(module);
    }
    
    this.addDefaultText = function()
    {
        if(!this.pcode)
            return false;
            
        new NH.Template.addInputDefaultText(this.pcode, "2000");
    }
    
    this.renderPopup = function(isOpen)
    {
        var container = document.getElementById("cat_hl_" + this.hlId);
        if(container)
        {
            this.popupMsg = container.appendChild(document.createElement("img"));
            this.popupMsg.src = "/img/lcm_find/overlay_bg.gif";
            this.popupMsg.className = "popupMsg";
            //this.popupMsg.style.display = isOpen ? "block" : "none";
            
            NH.Util.attachEvent(this.popupMsg, "onclick", NH.Util.createThisCallback(this, "closePopup"));
        }
        
        var btn = document.getElementById("hl" + this.hlId + "_helpImg");
        if(btn)
            NH.Util.attachEvent(btn, "onclick", NH.Util.createThisCallback(this, "openPopup"));

        if(pcode)
            NH.Util.attachEvent(pcode, "onfocus", NH.Util.createThisCallback(this, "closePopup"));
    }

    this.closePopup = function()
    {
        if(this.popupMsg && this.popupMsg.style)
            this.popupMsg.style.display = "none";
    }

    this.openPopup = function()
    {
        //if(this.popupMsg && this.popupMsg.style)
        //    this.popupMsg.style.display = "block";
    }
}

NH.Template.renderRowItems = function(container, fields, numLinked, data)
{
    //No data returned. Show error msg.
    if(!container || !fields || !data)
        return false;
    
    //default numLinked to first item only
    if(!numLinked)
        numLinked = 1;
    
    //Create table structure for this data.
    var table = container.appendChild(document.createElement("table"));
    var tBody = table.appendChild(document.createElement("tbody"));

    //data can be either an array of objects, or if there is only 1 node in the XML, data is the object itself
    if(data.length)//is an array
    {
        //Loop through each row of data and build table row
        for(var i = 0; i < data.length; i++)
            buildDataRow(tBody, data[i], fields);
    }
    else
        buildDataRow(tBody, data, fields);
    
    function buildDataRow(tBody, dataRow, fields)
    {
        var tr = tBody.appendChild(document.createElement("tr"));
        NH.Util.addClassName(tr, ((i % 2) == 0 ? "odd" : "even"));
        var url = (fields[0] && fields[0].n) ? dataRow[fields[0].n] : undefined;
        
        for(var j = 1; j < fields.length; j++)
        {
            var td = tr.appendChild(document.createElement("td"));
            NH.Util.addClassName(td, "column_" + j);
            
            var field = fields[j].n ? dataRow[fields[j].n] : undefined;
            td.title = field;
            if(field && fields[j].t)
                field = field.truncate(fields[j].t);
            
            if(numLinked && j <= numLinked && url)
            {
                var anchor = td.appendChild(document.createElement("a"));
                anchor.href = url;
                anchor.innerHTML = field;
            }
            else
                td.innerHTML = field;
        }
    }
}
NH.Template.renderBottomLinks = function(container, links)
{
    if(!container || !links)
        return false;
    
    var bottomDiv = container.appendChild(document.createElement("div"));
    NH.Util.addClassName(bottomDiv, "bottomDiv");
    
    var divider = bottomDiv.appendChild(document.createElement("div"));
    NH.Util.addClassName(divider, "divider");

    for(var i = 0; i < links.length; i++)
    {
        var link = links[i];
        if(link && link.n)
        {
            var linkDiv = bottomDiv.appendChild(document.createElement("div"));
            NH.Util.addClassName(linkDiv, "bDiv_" + (link.m? link.m : i));

            linkDiv.title = link.n;
            if(link.n && link.t)
                link.n = link.n.truncate(link.t);
            var innerText = "";
            if(link.m == "weather") 
                innerText = link.n;
            else
                innerText = "<b><span class='blue'>" + link.n.substring(0, link.n.indexOf(" ")) + " </span>" + link.n.substring(link.n.indexOf(" ") + 1, link.n.length) + "</b>";
            
            if(link.u)
            {
                var anchor = linkDiv.appendChild(document.createElement("a"));
                anchor.href = link.u;
                if(link.m == "weather") anchor.target = "_blank";
                anchor.innerHTML = innerText;
            }
            else
                linkDiv.innerHTML = innerText;
        }
    }

    var clearDiv = container.appendChild(document.createElement("div"));
    NH.Util.addClassName(clearDiv, "clearDiv");
}
NH.Template.createSelect = function(container, arr)
{
    var dropDown = document.createElement("select");

    for(var i = 0; i < arr.length; i++)
    {
        var selectNode = document.createElement("option");
        if(arr[i].n && arr[i].v)
        {
            selectNode.innerHTML = arr[i].n;
            selectNode.value = arr[i].v;
            if(arr[i].selected)
                selectNode.selected = true;
            dropDown.appendChild(selectNode);
        }
    }
    
    container.appendChild(dropDown);

    return dropDown;
}
NH.Template.createDivs = function(container, num)
{
    var divs = [];
    for(var i = 0; i < num; i++)
    {
        var div = container.appendChild(document.createElement("div"));
        NH.Util.addClassName(div, "genDiv" + i);
        divs.push(div);
    }

    return divs;
}
NH.Template.renderFindGoBtn = function(container, submitFnc)
{
    var btnSubmit = document.createElement("input");
    btnSubmit.type = "button";
    NH.Util.addClassName(btnSubmit, "find_go_btn");
    btnSubmit.value = "Go";
    //btnSubmit.src = "/img/lcm_find/silvergo.gif";
    
    if(submitFnc)
        NH.Util.attachEvent(btnSubmit, "onclick", submitFnc);
    
    container.appendChild(btnSubmit);
    
    return btnSubmit;
}
NH.Template.addInputDefaultText = function(inputElem, text)
{
    if(!inputElem)
        return false;
    
    this.inputElem = inputElem;
    this.text = text;
    
    this.inputElem.value = this.text;

    NH.Util.attachEvent(this.inputElem, "onfocus", NH.Util.createThisCallback(this, "onElemFocus"));
    NH.Util.attachEvent(this.inputElem, "onblur", NH.Util.createThisCallback(this, "onElemBlur"));

    this.onElemFocus = function()
    {
        if(this.inputElem && this.inputElem.value == this.text)
            this.inputElem.value = "";
    }

    this.onElemBlur = function()
    {
        if(this.inputElem && this.inputElem.value == "")
            this.inputElem.value = this.text;
    }
}

NH.Module.renderEBay = function(container)
{
    var fields = {};
    var defText = "Enter search term";
    var catValues = [
        {n:"All categories...",v:"-1"},
        {n:"Antiques",v:"353"},
        {n:"Art",v:"550"},
        {n:"Baby &amp; Maternity",v:"2984"},
        {n:"Books, Comics &amp; Mags",v:"267"},
        {n:"Beauty &amp; Health",v:"26395"},
        {n:"Business &amp; Industrial",v:"12576"},
        {n:"Cameras &amp; Accessories",v:"625"},
        {n:"Cars, Bikes &amp; Boats",v:"9800"},
        {n:"Clothing &amp; Accessories",v:"11450"},
        {n:"Coins",v:"11116"},
        {n:"Collectables",v:"1"},
        {n:"Crafts",v:"120"},
        {n:"Computers &amp; IT",v:"160"},
        {n:"Dolls &amp; Bears",v:"237"},
        {n:"DVDs &amp; Movies",v:"11232"},
        {n:"Electronics",v:"293"},
        {n:"Home &amp; Lifestyle",v:"11700"},
        {n:"Jewellery, Gems, Watches",v:"281"},
        {n:"Mobiles &amp; Phones",v:"3286"},
        {n:"Music",v:"11233"},
        {n:"Musical Instruments",v:"619"},
        {n:"PC &amp; Video Games",v:"1249"},
        {n:"Pottery &amp; Glass",v:"870"},
        {n:"Sporting Goods",v:"382"},
        {n:"Sports Memorabilia",v:"888"},
        {n:"Stamps",v:"260"},
        {n:"Tickets &amp; Travel",v:"11730"},
        {n:"Toys &amp; Hobbies",v:"220"}
    ];
    if(!container)
        return false;

    var divs = NH.Template.createDivs(container, 4);

    divs[0].innerHTML = "Search eBay:";

    fields.satitle = divs[1].appendChild(document.createElement("input"));
    fields.satitle.type = "text";
    new NH.Template.addInputDefaultText(fields.satitle, defText);
    NH.Util.attachEvent(fields.satitle, "onkeydown", NH.Util.preventInputSubmit);

    fields.sacat = NH.Template.createSelect(divs[2], catValues);
    
    NH.Template.renderFindGoBtn(divs[2], submitEbay);
    
    NH.Util.addClassName(divs[3], "partnerLink");
    var link = divs[3].appendChild(document.createElement("a"));
    link.href = "http://rover.ebay.com/rover/1/705-10129-5668-433/4/?id=1";
    link.innerHTML = "Go to eBay";

    NH.Module.registerTracking(container, hl13177_AdTCat, 1);

    container.hasData = true;

    function submitEbay(e)
    {
        // enter the mediaplex rotation to use here
        mediaplexrotation = "705-10129-5668-434";

        // enter the local search url (must include http:// and trailing /)
        localsearchurl = escape("http://search.ebay.com.au/");

        // this constructs the URL (without the MPRE) that the user will be redirected to if they don't enter a query
        urlifuserdoesnotenteraquery = "http://rover.ebay.com/rover/1/" + mediaplexrotation + "/4?mpre=http://www.ebay.com.au";

        // this constructs the rover redirect with a query
        startbit="http://rover.ebay.com/rover/1/" + mediaplexrotation + "/4?mpre=" + localsearchurl;
        endbit="_W0QQ";
        
        var searchTerm = (fields.satitle.value == "" || fields.satitle.value == defText) ? "" : fields.satitle.value;
        
        var locURL = "";
        if(searchTerm == "" && fields.sacat.value == "-1")
            locURL = urlifuserdoesnotenteraquery;
        else
            locURL = startbit + escape(searchTerm.replace(" ","-")) + endbit + 'sacatZ' + fields.sacat.value;

        AdTrack.t(locURL, hl13177_AdTCat, 1);
        window.location = locURL;
        return NH.Util.preventDefault(e);
    }
}
NH.Module.renderCarpoint = function(container)
{
    var fields = {};
    var defText = "Enter model";
    var makeValues = [
        {n:"All makes...",v:"any"},
        {n:"AC",v:"4294964991"},
        {n:"ACCESSORIES",v:"4294965027"},
        {n:"ALFA ROMEO",v:"4294967101"},
        {n:"AMAROO",v:"4294956800"},
        {n:"ASIA",v:"4294963275"},
        {n:"ASTON MARTIN",v:"4294966954"},
        {n:"AUDI",v:"4294967234"},
        {n:"AUSTIN HEALEY",v:"4294965675"},
        {n:"BEDFORD",v:"4294961463"},
        {n:"BENTLEY",v:"4294963137"},
        {n:"BMW",v:"4294967219"},
        {n:"BOB LINKE",v:"4294917113"},
        {n:"BORGWARD",v:"4294963987"},
        {n:"BUFORI",v:"4294962204"},
        {n:"BUICK",v:"4294958972"},
        {n:"CADILLAC",v:"4294967125"},
        {n:"CATERHAM",v:"4294955410"},
        {n:"CHEVROLET",v:"4294966891"},
        {n:"CHRYSLER",v:"4294966989"},
        {n:"CITROEN",v:"4294965840"},
        {n:"CLUBMAN",v:"4294964622"},
        {n:"COBRA",v:"4294965249"},
        {n:"DAEWOO",v:"4294967098"},
        {n:"DAIHATSU",v:"4294967205"},
        {n:"DAIMLER",v:"4294967015"},
        {n:"DATSUN",v:"4294967115"},
        {n:"DE SOTO",v:"4294965453"},
        {n:"DE TOMASO",v:"4294959649"},
        {n:"DODGE",v:"4294964582"},
        {n:"ELFIN",v:"4294956459"},
        {n:"EUNOS",v:"4294955158"},
        {n:"FERRARI",v:"4294966867"},
        {n:"FIAT",v:"4294966329"},
        {n:"FORD",v:"4294967239"},
        {n:"FPV",v:"4294966238"},
        {n:"GMC",v:"4294965995"},
        {n:"HILLMAN",v:"4294964331"},
        {n:"HINO",v:"4294962952"},
        {n:"HOLDEN",v:"4294967244"},
        {n:"HONDA",v:"4294967188"},
        {n:"HOT ROD",v:"4294912955"},
        {n:"HSV",v:"4294967075"},
        {n:"HUMBER",v:"4294954463"},
        {n:"HUMMER",v:"4294965897"},
        {n:"HYUNDAI",v:"4294967199"},
        {n:"INTERNATIONAL",v:"4294958585"},
        {n:"ISO",v:"4294954300"},
        {n:"ISUZU",v:"4294964566"},
        {n:"IVECO",v:"4294965441"},
        {n:"JAGUAR",v:"4294966599"},
        {n:"JEEP",v:"4294967155"},
        {n:"JENSEN",v:"4294963886"},
        {n:"KIA",v:"4294966927"},
        {n:"KIT CARS",v:"4294962780"},
        {n:"LADA",v:"4294956928"},
        {n:"LAMBORGHINI",v:"4294961764"},
        {n:"LANCIA",v:"4294965183"},
        {n:"LAND ROVER",v:"4294966725"},
        {n:"LEXUS",v:"4294966720"},
        {n:"LEYLAND",v:"4294962672"},
        {n:"LINCOLN",v:"4294965563"},
        {n:"LOTUS",v:"4294966124"},
        {n:"MASERATI",v:"4294966857"},
        {n:"MAZDA",v:"4294967084"},
        {n:"MERCEDES",v:"4294942924"},
        {n:"MERCEDES-BENZ",v:"4294967053"},
        {n:"MG",v:"4294965930"},
        {n:"MINI",v:"4294966494"},
        {n:"MITSUBISHI",v:"4294967254"},
        {n:"MORGAN",v:"4294959955"},
        {n:"MORRIS",v:"4294964605"},
        {n:"NISSAN",v:"4294967225"},
        {n:"NUMBER PLATES",v:"4294966340"},
        {n:"OKA",v:"4294963014"},
        {n:"OLDSMOBILE",v:"4294961868"},
        {n:"PEUGEOT",v:"4294966833"},
        {n:"PLYMOUTH",v:"4294964087"},
        {n:"PONTIAC",v:"4294965945"},
        {n:"PORSCHE",v:"4294967194"},
        {n:"PROTON",v:"4294965865"},
        {n:"PULSE",v:"4294926763"},
        {n:"PURVIS",v:"4294914966"},
        {n:"RAMBLER",v:"4294964201"},
        {n:"RANGE ROVER",v:"4294964372"},
        {n:"RELIANT",v:"4294957707"},
        {n:"RENAULT",v:"4294966621"},
        {n:"REPLICA",v:"4294913207"},
        {n:"RILEY",v:"4294964050"},
        {n:"ROLLS-ROYCE",v:"4294967000"},
        {n:"ROVER",v:"4294965964"},
        {n:"SAAB",v:"4294967210"},
        {n:"SEAT",v:"4294965728"},
        {n:"SMART",v:"4294965404"},
        {n:"SSANGYONG",v:"4294967060"},
        {n:"STUDEBAKER",v:"4294966445"},
        {n:"SUBARU",v:"4294967230"},
        {n:"SUNBEAM",v:"4294961974"},
        {n:"SUZUKI",v:"4294966334"},
        {n:"TATA",v:"4294964872"},
        {n:"TD 2000",v:"4294962128"},
        {n:"TOYOTA",v:"4294967259"},
        {n:"TRAILER",v:"4294960709"},
        {n:"TRIUMPH",v:"4294964954"},
        {n:"TVR",v:"4294961641"},
        {n:"VOLKSWAGEN",v:"4294967249"},
        {n:"VOLVO",v:"4294967019"},
        {n:"WESTFIELD",v:"4294962028"},
        {n:"WILLYS",v:"4294961145"},
        {n:"WOLSELEY",v:"4294960326"}
    ];
    var fromValues = [
        {n:"Any",v:"any"},
        {n:"$1",v:"386"},
        {n:"$2,000",v:"387"},
        {n:"$2,500",v:"461"},
        {n:"$4,000",v:"388"},
        {n:"$5,000",v:"462"},
        {n:"$6,000",v:"389"},
        {n:"$7,500",v:"463"},
        {n:"$8,000",v:"390"},
        {n:"$10,000",v:"391"},
        {n:"$12,500",v:"392"},
        {n:"$15,000",v:"393"},
        {n:"$17,500",v:"394"},
        {n:"$20,000",v:"395"},
        {n:"$25,000",v:"396"},
        {n:"$30,000",v:"397"},
        {n:"$35,000",v:"464"},
        {n:"$40,000",v:"398"},
        {n:"$45,000",v:"465"},
        {n:"$50,000",v:"399"},
        {n:"$55,000",v:"466"},
        {n:"$60,000",v:"467"},
        {n:"$70,000",v:"468"},
        {n:"$75,000",v:"400"},
        {n:"$80,000",v:"469"},
        {n:"$90,000",v:"470"},
        {n:"$100,000",v:"401"},
        {n:"$120,000",v:"471"},
        {n:"$140,000",v:"472"},
        {n:"$150,000",v:"402"},
        {n:"$160,000",v:"473"},
        {n:"$180,000",v:"474"},
        {n:"$200,000",v:"403"},
        {n:"$250,000",v:"475"},
        {n:"$300,000",v:"476"},
        {n:"$350,000",v:"477"},
        {n:"$400,000",v:"478"},
        {n:"$450,000",v:"479"},
        {n:"$500,000",v:"480"}
    ];
    var toValues = [
        {n:"Any",v:"any"},
        {n:"$2,000",v:"404"},
        {n:"$2,500",v:"441"},
        {n:"$4,000",v:"405"},
        {n:"$5,000",v:"442"},
        {n:"$6,000",v:"406"},
        {n:"$7,500",v:"443"},
        {n:"$8,000",v:"407"},
        {n:"$10,000",v:"408"},
        {n:"$12,500",v:"409"},
        {n:"$15,000",v:"410"},
        {n:"$17,500",v:"411"},
        {n:"$20,000",v:"412"},
        {n:"$25,000",v:"413"},
        {n:"$30,000",v:"414"},
        {n:"$35,000",v:"444"},
        {n:"$40,000",v:"415"},
        {n:"$45,000",v:"445"},
        {n:"$50,000",v:"416"},
        {n:"$55,000",v:"446"},
        {n:"$60,000",v:"447"},
        {n:"$70,000",v:"448"},
        {n:"$75,000",v:"417"},
        {n:"$80,000",v:"449"},
        {n:"$90,000",v:"450"},
        {n:"$100,000",v:"418"},
        {n:"$120,000",v:"451"},
        {n:"$140,000",v:"452"},
        {n:"$150,000",v:"419"},
        {n:"$160,000",v:"453"},
        {n:"$180,000",v:"454"},
        {n:"$200,000",v:"420"},
        {n:"$250,000",v:"455"},
        {n:"$300,000",v:"456"},
        {n:"$350,000",v:"457"},
        {n:"$400,000",v:"458"},
        {n:"$450,000",v:"459"},
        {n:"$500,000",v:"460"}
    ];
    
    var divs = NH.Template.createDivs(container, 4);
    
    fields.model = NH.Template.createSelect(divs[0], makeValues);

    var modelText = divs[1].appendChild(document.createElement("span"));
    modelText.innerHTML = "Model:";
    
    fields.ntt = divs[1].appendChild(document.createElement("input"));
    fields.ntt.type = "text";
    new NH.Template.addInputDefaultText(fields.ntt, defText);
    NH.Util.attachEvent(fields.ntt, "onkeydown", NH.Util.preventInputSubmit);
    
    fields.fromAmnt = NH.Template.createSelect(divs[2], fromValues);
    NH.Util.addClassName(fields.fromAmnt, "fromAmnt");

    var toText = divs[2].appendChild(document.createElement("span"));
    toText.innerHTML = "to";

    fields.toAmnt = NH.Template.createSelect(divs[2], toValues);
    NH.Util.addClassName(fields.toAmnt, "toAmnt");

    NH.Template.renderFindGoBtn(divs[2], submitCarpoint);
    
    NH.Util.addClassName(divs[3], "partnerLink");
    var link = divs[3].appendChild(document.createElement("a"));
    link.href = "http://secure-au.imrworldwide.com/cgi-bin/a/ci_450304/et_2/cg_801577/pi_1005244/ai_859704";
    link.innerHTML = "Go to Carpoint";

    NH.Module.registerTracking(container, hl13177_AdTCat, 2);

    container.hasData = true;

    function submitCarpoint(e)
    {
        var n = (fields.model.value != "any" || fields.fromAmnt.value != "any" || fields.toAmnt.value != "any") ? "N=279" : "";
        n += fields.model.value == "any" ? "" : "%20" + fields.model.value;
        n += fields.fromAmnt.value == "any" ? "" : "%20" + fields.fromAmnt.value;
        n += fields.toAmnt.value == "any" ? "" : "%20" + fields.toAmnt.value;
        if(n)
            n += "&";
        var ntt = (fields.ntt.value && fields.ntt.value != defText) ? "Ntk=CarAll&Ntt=" + fields.ntt.value : "";

        var locURL = "http://ninemsn.carpoint.com.au/used-cars/search.aspx?" + n + ntt + "&refid=NH_search_quicklinks";

        AdTrack.t(locURL, hl13177_AdTCat, 2);

        // Register AI Click
        _rs_pixel = new Image(1,1);
        _rs_pixel.src="http://secure-au.imrworldwide.com/cgi-bin/a/ci_450304/et_2/cg_801577/pi_1005244/ai_859731";

        window.location = locURL;
        return NH.Util.preventDefault(e);
    }
}
NH.Module.renderPersonals = function(container)
{
    var fields = {};
    var femaleO = {n:"female",v:"F"};
    var maleO = {n:"male",v:"M"};
    var ageValues = [
        {n:"18 - 24",v:"18.24"},
        {n:"25 - 34",v:"25.34",selected:"true"},
        {n:"35 - 44",v:"35.44"},
        {n:"45 - 54",v:"45.54"},
        {n:"55 - 64",v:"55.64"},
        {n:"65 +",v:"65.99"}
    ];
    
    var divs = NH.Template.createDivs(container, 3);

    var iAmText = divs[0].appendChild(document.createElement("span"));
    iAmText.innerHTML = "I am";

    fields.phunter = NH.Template.createSelect(divs[0], [femaleO, maleO]);
    NH.Util.addClassName(fields.phunter, "iAmSelect");

    var seekingText = divs[0].appendChild(document.createElement("span"));
    seekingText.innerHTML = "seeking";

    fields.ptarget = NH.Template.createSelect(divs[0], [maleO, femaleO]);
    NH.Util.addClassName(fields.ptarget, "seekingSelect");

    var agesText = divs[1].appendChild(document.createElement("span"));
    agesText.innerHTML = "Between the ages";
    
    fields.ageRange = NH.Template.createSelect(divs[1], ageValues);
    
    NH.Template.renderFindGoBtn(divs[1], submitPersonals);
    
    NH.Util.addClassName(divs[2], "partnerLink");
    var link = divs[2].appendChild(document.createElement("a"));
    link.href = "http://lavalife9.ninemsn.com.au/clickthru/clickthru.act?context=an99&locale=en_AU&a=18937&_t=37586";
    link.innerHTML = "Go to Lavalife";

    NH.Module.registerTracking(container, hl13177_AdTCat, 3);

    container.hasData = true;

    function submitPersonals(e)
    {
        var phunter = "&phunter=" + fields.phunter.value;
        var ptarget = "&ptarget=" + fields.ptarget.value;
        var ageRange = "&ageRange=" + fields.ageRange.value;

        var locURL = "http://lavalife9.ninemsn.com.au/clickthru/clickthru.act?context=ad99&locale=en_AU&searchType=country&pict=true&a=22057&id=nineMsnSearch&location=003" + phunter + ptarget + ageRange;

        AdTrack.t(locURL, hl13177_AdTCat, 3);
        window.location = locURL;
        return NH.Util.preventDefault(e);
    }
}
NH.Module.renderSeek = function(container)
{
    var fields = {};
    var defText = "Enter keyword";
    var classValues = [
        {n:"Job type...",v:"0"},
        {n:"Accounting",v:"1200"},
        {n:"Administration",v:"1201"},
        {n:"Advert./Media/Entertain.",v:"1202"},
        {n:"Banking &amp; Fin. Services",v:"1203"},
        {n:"Call Centre/Cust. Service",v:"1204"},
        {n:"Community &amp; Sport",v:"1205"},
        {n:"Construction",v:"1206"},
        {n:"Consulting &amp; Corp. Strategy",v:"1207"},
        {n:"Education &amp; Training",v:"1208"},
        {n:"Engineering",v:"1209"},
        {n:"Government/Defence",v:"1210"},
        {n:"Healthcare &amp; Medical",v:"1211"},
        {n:"Hospitality &amp; Tourism",v:"1212"},
        {n:"HR &amp; Recruitment",v:"1213"},
        {n:"I.T. &amp; T",v:"1215"},
        {n:"Insurance &amp; Superannuation",v:"1214"},
        {n:"Legal",v:"1216"},
        {n:"Manufacturing/Operations",v:"1217"},
        {n:"Mining, Oil &amp; Gas",v:"1218"},
        {n:"Primary Industry",v:"1219"},
        {n:"Real Estate &amp; Property",v:"1220"},
        {n:"Retail &amp; Consumer Prods.",v:"1221"},
        {n:"Sales &amp; Marketing",v:"1222"},
        {n:"Science &amp; Technology",v:"1223"},
        {n:"Self-Employment",v:"1224"},
        {n:"Trades &amp; Services",v:"1225"},
        {n:"Transport &amp; Logistics",v:"1226"}
    ];
    var locValues = [
        {n:"Any location...",v:"0"},
        {n:"Sydney",v:"1000"},
        {n:"NSW - Other",v:"1001"},
        {n:"Melbourne",v:"1002"},
        {n:"VIC - Other",v:"1003"},
        {n:"Brisbane",v:"1004"},
        {n:"Gold Coast",v:"1005"},
        {n:"QLD - Other",v:"1006"},
        {n:"Perth",v:"1009"},
        {n:"WA - Other",v:"10010"},
        {n:"Adelaide",v:"1007"},
        {n:"SA - Other",v:"1008"},
        {n:"Hobart",v:"1011"},
        {n:"TAS - Other",v:"1012"},
        {n:"ACT",v:"1015"},
        {n:"Darwin",v:"1013"},
        {n:"Northern Territory",v:"1014"},
        {n:"Auckland",v:"1018"},
        {n:"Wellington",v:"1019"},
        {n:"Nth Island - Other",v:"1020"},
        {n:"Christchurch",v:"1021"},
        {n:"Sth Island - Other",v:"1022"},
        {n:"UK - London",v:"1023"},
        {n:"UK - Other",v:"1024"},
        {n:"Ireland",v:"1025"},
        {n:"Overseas - Other",v:"1016"}
    ];

    var divs = NH.Template.createDivs(container, 4);

    var keywordText = divs[0].appendChild(document.createElement("span"));
    keywordText.innerHTML = "Keyword:";
    
    fields.keywords = divs[0].appendChild(document.createElement("input"));
    fields.keywords.type = "text";
    new NH.Template.addInputDefaultText(fields.keywords, defText);
    NH.Util.attachEvent(fields.keywords, "onkeydown", NH.Util.preventInputSubmit);

    fields.catindustry = NH.Template.createSelect(divs[1], classValues);
    
    fields.catlocation = NH.Template.createSelect(divs[2], locValues);

    NH.Template.renderFindGoBtn(divs[2], submitSeek);
    
    NH.Util.addClassName(divs[3], "partnerLink");
    var link = divs[3].appendChild(document.createElement("a"));
    link.href = "http://ninemsn.seek.com.au/index.aspx?tracking=sk:INT:sk:nine:0:HPfind:seekfind";
    link.innerHTML = "Go to SEEK";

    NH.Module.registerTracking(container, hl13177_AdTCat, 4, "25984");

    container.hasData = true;

    function submitSeek(e)
    {
        var keywords = "keywords=" + ((fields.keywords.value == defText) ? "" : fields.keywords.value);
        var catindustry = "&catindustry=" + fields.catindustry.value;
        var catlocation = "&catlocation=" + fields.catlocation.value;

        var locURL = "http://ninemsn.seek.com.au/jobsearch/index.ascx?" + keywords + catindustry + catlocation;

        AdTrack.t(locURL, hl13177_AdTCat, 4, "25984");
        window.location = locURL;
        return NH.Util.preventDefault(e);
    }
}
NH.Module.renderMyLocal = function(container)
{
    var fields = {};
    var defFindText = "Category, product or service";
    var defWhereText = "Suburb, state or postcode";
    
    var divs = NH.Template.createDivs(container, 4);

    var findText = divs[0].appendChild(document.createElement("span"));
    findText.innerHTML = "Find:";

    fields.q = divs[0].appendChild(document.createElement("input"));
    fields.q.type = "text";
    fields.q.id = "mylocal_what";
    new NH.Template.addInputDefaultText(fields.q, defFindText);
    NH.Util.attachEvent(fields.q, "onkeydown", NH.Util.preventInputSubmit);

    //Have to use innerHTML dues to IE's lack of support for dynamically created radio buttons. Ref: http://cf-bill.blogspot.com/2006/03/another-ie-gotcha-dynamiclly-created.html
    divs[1].innerHTML = "By<input id='find_mylocal_kt' type='radio' name='mylocaltype' checked='true' onclick='javascript:displaydefFindText();' />keyword or<input id='find_mylocal_bt' type='radio' name='mylocaltype' onclick='javascript:hidedefFindText();' />business name";

    var whereText = divs[2].appendChild(document.createElement("span"));
    whereText.innerHTML = "Where:";

    fields.w = divs[2].appendChild(document.createElement("input"));
    fields.w.type = "text";
    new NH.Template.addInputDefaultText(fields.w, defWhereText);
    NH.Util.addClassName(fields.w, "whereInput");
    NH.Util.attachEvent(fields.w, "onkeydown", NH.Util.preventInputSubmit);

    NH.Template.renderFindGoBtn(divs[2], submitMyLocal);
    
    NH.Util.addClassName(divs[3], "partnerLink");
    var link = divs[3].appendChild(document.createElement("a"));
    link.href = "http://mylocal.ninemsn.com.au/";
    link.innerHTML = "Go to mylocal.com.au";

    NH.Module.registerTracking(container, hl13177_AdTCat, 5);

    container.hasData = true;

    function submitMyLocal(e)
    {
        //var q = "q=" + ((fields.q.value == defFindText) ? "" : fields.q.value);
        var q = ((fields.q.value == defFindText) ? "" : fields.q.value);
        var yval = document.getElementById("find_mylocal_kt");
        //var y = "&y=" + ((yval && yval.checked) ? "k" : "b" );
        var y = ((yval && yval.checked) ? "business_type" : "business_name" );
        //var w = "&w=" + ((fields.w.value == defWhereText) ? "" : fields.w.value);
        var w = ((fields.w.value == defWhereText) ? "" : fields.w.value);

        var locURL = " http://mylocal.ninemsn.com.au/index.cfm?action=search&what=" + q + "&where=" + w + "&type=" + y;

        AdTrack.t(locURL, hl13177_AdTCat, 5);
        window.location = locURL;
        return NH.Util.preventDefault(e);
    }

}

function displaydefFindText()
{
    if (document.getElementById('mylocal_what').value == "")
    {
        document.getElementById('mylocal_what').value = "Category, product or service";
    }
}

function hidedefFindText()
{
    if (document.getElementById('mylocal_what').value == "Category, product or service")
    {
        document.getElementById('mylocal_what').value = "";
    }
}

NH.Module.renderRealEstate = function(container)
{
    var fields = {};
    var defSuburbText = "Enter location";
    var defMinText = "Minimum";
    var defMaxText = "Maximum";

    var typeValues = [
        {n:"Search type...",v:"res"},
        {n:"Buy",v:"res"},
        {n:"Sell",v:"as-fin"},
        {n:"Rent",v:"ren"},
        {n:"Share",v:"shr"},
        {n:"Holiday",v:"hol"}
    ];
    var stateValues = [
        {n:"State",v:"any"},
        {n:"ACT",v:"act"},
        {n:"NSW",v:"nsw"},
        {n:"NT",v:"nt"},
        {n:"QLD",v:"qld"},
        {n:"SA",v:"sa"},
        {n:"TAS",v:"tas"},
        {n:"VIC",v:"vic"},
        {n:"WA",v:"wa"}
    ];

    var divs = NH.Template.createDivs(container, 4);
    
    fields.t = NH.Template.createSelect(divs[0], typeValues);

    var whereText = divs[1].appendChild(document.createElement("span"));
    whereText.innerHTML = "Suburb:";
    
    fields.tb = divs[1].appendChild(document.createElement("input"));
    fields.tb.type = "text";
    new NH.Template.addInputDefaultText(fields.tb, defSuburbText);
    NH.Util.attachEvent(fields.id, "onkeydown", NH.Util.preventInputSubmit);

    fields.s = NH.Template.createSelect(divs[1], stateValues);
    
    fields.pme = divs[2].appendChild(document.createElement("input"));
    fields.pme.type = "text";
    new NH.Template.addInputDefaultText(fields.pme, defMinText);
    NH.Util.addClassName(fields.pme, "fromInput");
    NH.Util.attachEvent(fields.pme, "onkeydown", NH.Util.preventInputSubmit);

    var toText = divs[2].appendChild(document.createElement("span"));
    toText.innerHTML = "to";

    fields.pxe = divs[2].appendChild(document.createElement("input"));
    fields.pxe.type = "text";
    new NH.Template.addInputDefaultText(fields.pxe, defMaxText);
    NH.Util.addClassName(fields.pxe, "toInput");
    NH.Util.attachEvent(fields.pxe, "onkeydown", NH.Util.preventInputSubmit);

    NH.Template.renderFindGoBtn(divs[2], submitRealEstate);
    
    NH.Util.addClassName(divs[3], "partnerLink");
    var link = divs[3].appendChild(document.createElement("a"));
    link.href = "http://ninemsn.realestate.com.au/cgi-bin/rsearch?a=bhp&t=res&cu=MSN&linkfrom=9msn-quicklink&_t=753023888&_r=NH_Quick_Link";
    link.innerHTML = "Go to realestate.com.au";

    NH.Module.registerTracking(container, hl13177_AdTCat, 6);

    container.hasData = true;
    
    function submitRealEstate(e)
    {
        var tb = "&tb=" + ((fields.tb.value == defSuburbText) ? "" : fields.tb.value);
        var s = (fields.s.value != "any") ? "&s=" + fields.s.value : "";
        var pme = "&pm=" + ((fields.pme.value == defMinText) ? "" : fields.pme.value);
        var pxe = "&px=" + ((fields.pxe.value == defMaxText) ? "" : fields.pxe.value);
        var t = "&t=" + fields.t.value;
        var a = "&a=" + (fields.t.value == "as-fin" ? "findagentsform" : "s");

        var locURL = "http://ninemsn.realestate.com.au/cgi-bin/rsearch?cu=MSN" + tb + s + pme + pxe + t + a;

        AdTrack.t(locURL, hl13177_AdTCat, 6);
        window.location = locURL;
        return NH.Util.preventDefault(e);
    }
}
NH.Module.renderWeather = function(container, data)
{
    if(!container)
        return false;

    container.innerHTML = "";
    
    var forecast = (data && data.WeatherResult && data.WeatherResult.NewDataSet && data.WeatherResult.NewDataSet.WEATHER) ? data.WeatherResult.NewDataSet.WEATHER : undefined;
    var dow = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
    
    var forecastDiv = container.appendChild(document.createElement("div"));
    //forecastDiv.Id = 'hl_' + NH.Module.getHLId(container.id) + '_fcast';
    NH.Util.addClassName(forecastDiv, "fcast");
    NH.Util.addClassName(forecastDiv.parentNode.parentNode, "mod_box_container");
    
    if(forecast && forecast[0] && forecast[0].type)
    {
        if(forecast[0].type.match("4_day"))
            build4Day(forecastDiv, forecast);
        else if(forecast[0].type.match("1_day"))
            build1Day(forecastDiv, forecast);
        else //error.  all data should return at least a 1 or 4 day forecast
            NH.Error.showError(container, NH.Error.BAD_PCODE, NH.Module.getHLId(container.id));
    }
    else if(data && data.WeatherResult && data.WeatherResult.ErrorMessage && data.WeatherResult.ErrorMessage.NoRecords && data.WeatherResult.ErrorMessage.NoRecords.toLowerCase() == "no records found")
        NH.Error.showError(container, NH.Error.BAD_PCODE, NH.Module.getHLId(container.id));
    else
        NH.Error.showError(container, NH.Error.DEF_ERR, NH.Module.getHLId(container.id));

    var links;
    if(typeof weather_bDiv_0 != "undefined")
    { 
        links = [
            weather_bDiv_0,
            {n:"More weather",u:"http://weather.ninemsn.com.au/weather"}
        ];
        NH.Template.renderBottomLinks(container, links);
    }

    if(NH.Module.hasTracking())
    {
        var tid = eval("hl" + NH.Module.getHLId(container.id) + "_AdTCat");
        NH.Module.registerTracking(container, tid, 1);
    }

    container.hasData = true;

    function build4Day(container, forecast)
    {
        NH.Util.addClassName(container, "four_day");
        

        for(var i = 0; i < forecast.length; i++)
        {
            var day = forecast[i];
            if(day && day.type.match("4_day"))
            {
                buildIcon(forecastDiv, day, i == 0, forecast[forecast.length - 1].temp_curr);
            }
        }
        
        //last, render the current conditions (it is always the last node)
        //renderCurrentConditions(container, forecast[forecast.length - 1]);
    }

    function build1Day(container, forecast)
    {
        var currentTemp;
        NH.Util.addClassName(container, "one_day");
        
        //first pull out the 1 day forecast info (could have 2 days so only use the last one)
        for(var i = 0; i < forecast.length; i++)
        {
            if(forecast[i].type && forecast[i].type.match("1_day"))
            {
                var day = forecast[i];
            }
        }
        
        
        if(day)
        {
            buildIcon(forecastDiv, day, true, forecast[forecast.length - 1].temp_curr);
        }
        
        //last, render the current conditions (it is always the last node)
        
        renderCurrentConditions(container, forecast[forecast.length - 1]);
    }
    
    function buildIcon(forecastDiv, day, isFirst, currentTemp)
    {
        //var longdow = ["Sunday", "Monday", "Tueday", "Wednesday", "Thursday", "Friday", "Saturday"];
        var longdow = ["Sun", "Mon", "Tue", "Wed", "Thur", "Fri", "Sat"];
        //order of day
        //          0    1     2    3     4     5      6    7      8    9     10    11    12    13    14    15    16    17    18    19    20    21    22    23    24    25    26    27    28    29    30    31
        var ood = ["", "st", "nd", "rd", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "st", "nd", "rd", "th", "th", "th", "th", "th", "th", "th", "st"];
        var weatherCondition;
        var dayDiv = forecastDiv.appendChild(document.createElement("div"));
        NH.Util.addClassName(dayDiv, "fc_day");
        
        var link = "http://weather.ninemsn.com.au/weather/national/" + day.State + ".asp?location=" + day.location.replace(" ", "+");
        currState = day.State;

        if(day.precis)
        {
            //render date
            var dateStr = new String();
            dateStr = day.Date_edition;
            var dateEd = new Date();
            
            dateEd.setFullYear( parseInt(dateStr.substr(0,4),10));
            dateEd.setMonth( parseInt(dateStr.substr(5,2), 10)-1, parseInt(dateStr.substr(8,2),10));

//            dateEd.setDate( parseInt(dateStr.substr(8,2),10) );
//            alert('date:' + dateEd);
            
            var weatherCondition = day.precis;
            var imgDiv = dayDiv.appendChild(document.createElement("div"));
            
            var imgLink = imgDiv.appendChild(document.createElement("a"));
            imgLink.href = link;
            
            var img = imgLink.appendChild(document.createElement("img"));
            img.alt = day.precis;

            var dateDiv = dayDiv.appendChild(document.createElement("div"));
            var dateLink = dateDiv.appendChild(document.createElement("a"));
            dateLink.href = link;
            
            //dateDiv.innerHTML = longdow[dateEd.getDay()] + ' ' + dateEd.getDate() + ood[dateEd.getDate()];
            if (isFirst)
            {
                dateLink.innerHTML = 'Today';
            }
            else
            {
                dateLink.innerHTML = longdow[dateEd.getDay()];
            }
            
            NH.Util.addClassName(dateDiv, "date");
            //replace function only replaces the first instance.  Loop through to cater for all spaces.
            do
            {
                day.precis = day.precis.replace(" ", "_");
                var hasSpace = (day.precis.indexOf(" ") != -1);
            }while(hasSpace)

            img.src = "/img/lcm_find/weather_icons/" + day.precis.toLowerCase() + ".gif";
        }

        if (weatherCondition)
        {
            if (isFirst)
            {
                NH.Util.addClassName(dayDiv, "first_day");
            }
            
            var weatherNow = dayDiv.appendChild(document.createElement("div"));
            NH.Util.addClassName(weatherNow, "wt_now");

            if(weatherNow && currentTemp)
            {
                weatherNow.innerHTML = "<div id='weatherMinMax'>" + day.temp_min + "&deg;/" + day.temp_max + "&deg;</div>";
            }
            
        }
    }

    function renderCurrentConditions(container, day)
    {
        if(day)
        {
            var coDiv = container.appendChild(document.createElement("div"));
            NH.Util.addClassName(coDiv, "curr_conditions");
            var coDivs = NH.Template.createDivs(coDiv, 4);
            
            if(day.wind) coDivs[0].innerHTML = "Wind: " + day.wind;
            if(day.rain_fall && day.rain_period) coDivs[1].innerHTML = "Rain: " + day.rain_fall + "mm " + day.rain_period;
            if(day.location) coDivs[2].innerHTML = "<a href='http://weather.ninemsn.com.au/weather/national/" + currState + ".asp?location=" + day.location + "'>Full " + day.location + " forecast</a>";
            NH.Util.addClassName(coDivs[2], "link_off");
        }
    }

}

NH.Module.renderTVGuide = function(container, data)
{
    if(!container || !NH.Module.prepareHWWMod(container, data))
        return false;

    var channelData = data.HttpTransferResult.response.programs;
    var channels = (channelData && channelData.channel) ? channelData.channel : undefined;
    if(!channelData)
    {
        NH.Error.showNoContent(container, NH.Error.BAD_FEED);
        return false;
    }
    else if(channels)
    {
        //To handle error if tab.js is not imported.
        if(typeof(TabControl) != "function")
        {
            NH.Error.showError(container, NH.Error.NO_TAB, NH.Module.getHLId(container.id));
            
            var links = [
                null,
                {n:"Full TV Guide",u:channelData.url}
            ];
            NH.Template.renderBottomLinks(container, links);
            
            return false;
        }
        var tc = new TabControl("TVGuideTabControl");
        tc.DisableAutoHide();
        
        var maxChannels = 5;

        //Create tab buttons
        var tabsContainer = container.appendChild(document.createElement("div"));
        NH.Util.addClassName(tabsContainer, "tabMenu");
        
        var uniqueTabNames = [];
        for(var i = 0; i < channels.length && i < maxChannels; i++)
        {
            var chName = (channels[i] && channels[i]["name"]) ? channels[i]["name"] : "";
            
            var isUnique = true;
            for(var j = 0; j < uniqueTabNames.length; j++)
            {
                if(chName == uniqueTabNames[j])
                {
                    isUnique = false;
                    break;
                }
            }
            if(!isUnique)
            {
                maxChannels++;
                continue;
            }
            else
                uniqueTabNames.push(chName);
    
            var tBtn = tabsContainer.appendChild(document.createElement("div"));
            tBtn.innerHTML = chName;
            tBtn.id = "TVGTab_" + chName;
            NH.Util.addClassName(tBtn, "tab-unselected");
            if(i == channels.length - 1 || i == maxChannels - 1)
                NH.Util.addClassName(tBtn, "tab-last");
        }

        var defaultTab;
        var uniqueTabCNames = [];
        for(var i = 0; i < channels.length && i < maxChannels; i++)
        {
            var channel = (channels[i] && channels[i].program) ? channels[i].program : undefined;
            var chName = (channels[i] && channels[i].name) ? channels[i].name : "";

            var isUnique = true;
            for(var j = 0; j < uniqueTabCNames.length; j++)
            {
                if(chName == uniqueTabCNames[j])
                {
                    isUnique = false;
                    break;
                }
            }
            if(!isUnique)
                continue;
            else
                uniqueTabCNames.push(chName);
            
            var now = (channels[i] && channels[i].now) ? channels[i].now : "";
            
            if(!channel)
            {
                NH.Error.showError(container, NH.Error.BAD_FEED, NH.Module.getHLId(container.id));
                return false;
            }
            
            var channelContainer = container.appendChild(document.createElement("div"));
            channelContainer.id = "TVGCont_" + chName;
            NH.Util.addClassName(channelContainer, "tabContainer");
            channelContainer.style.display = "none";
            
            var tab = new Tab("TVGTab_" + chName, "TVGCont_" + chName);
            tc.RegisterTab(tab);
            if(i == 0)
                defaultTab = tab;
            else if(chName.toLowerCase() == "nine" || chName.toLowerCase() == "win" || chName.toLowerCase() == "nbn" || chName.toLowerCase() == "imparja")
                defaultTab = tab;

            var fields = [
                null,
                {n:"time",t:10},
                {n:"name",t:38}
            ];
            NH.Template.renderRowItems(channelContainer, fields, 0, channel);

            var links = [
                {n:"Now: " + (now ? now.name : ""),u:(now ? now.url : ""),t:28},
                {n:"Full TV Guide",u:channelData.url}
            ];
            NH.Template.renderBottomLinks(channelContainer, links);
        }

        tc.SetDefaultTab(defaultTab);
    }
    else
        NH.Error.showNoContent(container, NH.Error.BAD_FEED);
    
    if(NH.Module.hasTracking())
    {
        var tid = eval("hl" + NH.Module.getHLId(container.id) + "_AdTCat");
        NH.Module.registerTracking(container, tid, 11);
    }

    container.hasData = true;
}

NH.Module.renderMovies = function(container, data)
{
    if(!container || !NH.Module.prepareHWWMod(container, data))
        return false;

    var cinemas = data.HttpTransferResult.response.cinemas;
    if(!cinemas)
    {
        NH.Error.showNoContent(container, NH.Error.BAD_FEED);
        return false;
    }
    else if(cinemas.cinema)
    {
        var fields = [
            {n:"url",t:null},
            {n:"name",t:35},
            {n:"suburb",t:12}
        ];
        NH.Template.renderRowItems(container, fields, 1, cinemas.cinema);
    }
    else
        NH.Error.showNoContent(container, NH.Error.BAD_FEED);

    var links = [
        {n:"More cinemas",u:cinemas.relurl},
        {n:"Latest movies",u:cinemas.url}
    ];
    NH.Template.renderBottomLinks(container, links);

    if(NH.Module.hasTracking())
    {
        var tid = eval("hl" + NH.Module.getHLId(container.id) + "_AdTCat");
        NH.Module.registerTracking(container, tid, 12);
    }

    container.hasData = true;
}
NH.Module.renderRestaurants = function(container, data)
{
    if(!container || !NH.Module.prepareHWWMod(container, data))
        return false;

    var restaurants = data.HttpTransferResult.response.restaurants;
    if(!restaurants)
    {
        NH.Error.showNoContent(container, NH.Error.BAD_FEED);
        return false;
    }
    else if(restaurants && restaurants.restaurant)
    {
        var fields = [
            {n:"url",t:null},
            {n:"name",t:27},
            {n:"cuisine",t:16},
            {n:"price",t:5}
        ];

        NH.Template.renderRowItems(container, fields, 1, restaurants.restaurant);
    }
    else
        NH.Error.showNoContent(container, NH.Error.BAD_FEED);
    
    var links = [
        {n:"More restaurants",u:restaurants.relurl},
        {n:"Full guide & reviews",u:restaurants.url}
    ];
    NH.Template.renderBottomLinks(container, links);

    if(NH.Module.hasTracking())
    {
        var tid = eval("hl" + NH.Module.getHLId(container.id) + "_AdTCat");
        NH.Module.registerTracking(container, tid, 13);
    }

    container.hasData = true;
}
NH.Module.renderBars = function(container, data)
{
    if(!container || !NH.Module.prepareHWWMod(container, data))
        return false;

    var bars = data.HttpTransferResult.response.bars;
    if(!bars)
    {
        NH.Error.showNoContent(container, NH.Error.BAD_FEED);
        return false;
    }
    else if(bars && bars.bar)
    {

        var fields = [
            {n:"url",t:null},
            {n:"name",t:35},
            {n:"suburb",t:12}
        ];
        NH.Template.renderRowItems(container, fields, 1, bars.bar);
    }
    else
        NH.Error.showNoContent(container, NH.Error.BAD_FEED);
    
    var links = [
        {n:"More pubs & bars",u:bars.relurl},
        {n:"Full guide & reviews",u:bars.url}
    ];
    NH.Template.renderBottomLinks(container, links);

    if(NH.Module.hasTracking())
    {
        var tid = eval("hl" + NH.Module.getHLId(container.id) + "_AdTCat");
        NH.Module.registerTracking(container, tid, 14);
    }

    container.hasData = true;
}
NH.Module.prepareHWWMod = function(container, data)
{
    if(!container)
        return false;
    
    var response = (data && data.HttpTransferResult && data.HttpTransferResult.response) ? data.HttpTransferResult.response : undefined;
    if(!response) //No data returned. Show error msg.
    {
        NH.Error.showError(container, NH.Error.BAD_FEED, NH.Module.getHLId(container.id));
        return false;
    }
    else if(response.error && response.error.toLowerCase() == "unknown postcode")
    {
        NH.Error.showError(container, NH.Error.BAD_PCODE, NH.Module.getHLId(container.id));
        return false;
    }

    //Ready to render. Clear everything (presumably loading text)
    container.innerHTML = "";
    
    return true;
}

NH.Module.registerTracking = function(container, modName, num, tid)
{
    if(!container.trackOn)
    {
        NH.Util.attachEvent(container, "onclick", NH.Util.createCallback("NH.Module.trackClick", modName, num, tid));
        container.trackOn = true;
    }
}
NH.Module.trackClick = function(modName, count, tid, e)
{
    e = e || window.event;
    var source = e.target || e.srcElement;

    if(e && source)
        var aObj = lookForAnchor(source);

    if(aObj) //found a parent anchor. Track as click through
    {
        if(tid)
            AdTrack.t(aObj, modName, count, tid);
        else
            AdTrack.t(aObj, modName, count);
    }
    
    //Recursively looks for anchor object which is a parent of obj and returns it if found.  Returns null otherwise.
    function lookForAnchor(obj)
    {
        if(obj && obj.tagName == "A" && obj.href)
            return obj;
        else if(obj)
            return lookForAnchor(obj.parentElement);
        else
            return null;
    }
}
NH.Module.hasTracking = function()
{
    if(AdTrack)
        return true;
    else
        return false;
}
NH.Module.getHLId = function(containerId)
{
    var endIndex = containerId.indexOf("_", 2);
    if(endIndex > 2)
        return containerId.substring(2, endIndex);
}

NH.loadModule = function(container)
{
    if(!container || container.hasData)
        return false;
    
    if(container.reloadURL)
    {
        NH.Anim.showLoading(container);
        setTimeout(NH.Util.createCallback("getDelayedFeed", container), 100); //done to combat a timeing issue in IE6
    }
    else
        container.reloadFunc.call(undefined);
}

function getDelayedFeed(container)
{
    Ninemsn.Site.NH.FeedReader.Get(container.reloadURL, container.reloadFunc);
}


NH.Error.DEF_ERR = 0;
NH.Error.BAD_PCODE = 1;
NH.Error.NO_TAB = 2;
NH.Error.BAD_FEED = 0;
NH.Error.NO_CHAR_AND_INT_ALLOWED = 3;

NH.Error.ERROR_TEXT = [
    "This information is temporarily unavailable. Please try again soon.",
    "This is not a valid postcode.",
    "TabControl object could not be found. Please import tab.js file.",
    "Please only use letters for a suburb or numbers for a postcode."
];


//shows error for an element
NH.Error.showError = function(elem, errCode, catId)
{
    var errText = errCode ? NH.Error.ERROR_TEXT[errCode] : NH.Error.ERROR_TEXT[NH.Error.DEF_ERR];
    if(elem)
        elem.innerHTML = "<div style='padding:10px;'>" + errText + "</div>";
}

//closes error messages
NH.Error.clearError = function(catId)
{
    var newErr = document.getElementById("hl" + catId + "_statusBox");
    if(newErr)
    {
        newErr.innerHTML = "";
        newErr.style.display = "none";
    }
}

//shows error for an element
NH.Error.showNoContent = function(elem)
{
    if(!elem)
        return false;
    
    elem.innerHTML = "<div style='padding:10px;'>There is no content available at this time.</div>";
}





