// (c)2009 ninemsn

createNamespace("NH");createNamespace("NH.Template");createNamespace("NH.Module");createNamespace("NH.Error");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);this.DEF_PCODE_MSG="enter suburb or postcode";this.checkPcodeKeyDown=function(e)
{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);}
if(this.pcode&&this.pcode.value&&(this.pcode.value!="2000"&&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
{var postcode=this.pcode.value;if(postcode.length==3)
postcode='0'+postcode;return url.replace('#postcode#',postcode);}}
this.addModule=function(module)
{if(module)
this.modules.push(module);}
this.addDefaultText=function()
{if(!this.pcode)
return false;new NH.Template.addInputDefaultText(this.pcode,this.DEF_PCODE_MSG);}
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)
{if(!container||!fields||!data)
return false;if(!numLinked)
numLinked=1;var table=container.appendChild(document.createElement("table"));var tBody=table.appendChild(document.createElement("tbody"));if(data.length)
{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)
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 imgSubmit=document.createElement("input");imgSubmit.type="image";NH.Util.addClassName(imgSubmit,"find_go_btn");imgSubmit.value="Go";imgSubmit.src="/img/lcm_find/silvergo.gif";if(submitFnc)
NH.Util.attachEvent(imgSubmit,"onclick",submitFnc);container.appendChild(imgSubmit);return imgSubmit;}
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.renderWeather=function(container,data)
{if(!container)
return false;container.innerHTML="";var forecast=(data&&data.HttpTransferResult&&data.HttpTransferResult.data&&data.HttpTransferResult.data.weather&&data.HttpTransferResult.data.weather.countries)?data.HttpTransferResult.data.weather.countries.country.location.forecasts.forecast:undefined;var forecastDiv=container.appendChild(document.createElement("div"));NH.Util.addClassName(forecastDiv,"fcast");if(forecast)
{if(forecast.length==4)
buildForecast(forecastDiv,forecast);else
NH.Error.showError(container,NH.Error.BAD_FEED,NH.Module.getHLId(container.id));}
else if(data.HttpTransferResult.data.weather==null)
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));if(forecast&&weather_bDiv_0.m=="0")
{weather_bDiv_0.u=data.HttpTransferResult.data.weather.countries.country.location.links.link[3].url.replace('www.weatherzone.com.au','weather.ninemsn.com.au');}
var 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 buildForecast(container,forecast)
{NH.Util.addClassName(container,"four_day");for(var i=0;i<forecast.length;i++)
{var day=forecast[i];buildIcon(forecastDiv,day,i==0);}
renderCurrWea();}
function renderCurrWea()
{var weatherNow=document.getElementById("hl"+NH.Module.getHLId(container.id)+"_weatherNow");var temp_curr=data.HttpTransferResult.data.weather.countries.country.location.conditions.temp_c.value;if(weatherNow&&temp_curr)
weatherNow.innerHTML="Currently "+temp_curr+"&deg;";}
function buildIcon(forecastDiv,day,isFirst)
{var dayDiv=forecastDiv.appendChild(document.createElement("div"));NH.Util.addClassName(dayDiv,"fc_day");if(isFirst)
NH.Util.addClassName(dayDiv,"first_day");var link=data.HttpTransferResult.data.weather.countries.country.location.links.link[0].url.replace('www.weatherzone.com.au','weather.ninemsn.com.au');if(day.icon.value)
{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.icon.value;img.src="/img/lcm_find/weather_icons/"+day.icon.filename.toLowerCase();}
if(day.day_name)
{var textDiv=dayDiv.appendChild(document.createElement("div"));var textLink=textDiv.appendChild(document.createElement("a"));textLink.href=link;textLink.innerHTML="<b class='blue'>"+day.day_name.substr(0,3)+": </b>"+day.temp_min_c.value+"&deg;/"+day.temp_max_c.value+"&deg;";}}}
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)
{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;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.renderMaps=function(container)
{if(!container||container.rendered==true)
return false;var fields={};var defStartText="George St, Sydney, NSW  ";var defEndText="North Ryde, NSW  ";var divs=NH.Template.createDivs(container,3);var start_span=divs[0].appendChild(document.createElement("span"));start_span.innerHTML="Start";fields.start=divs[0].appendChild(document.createElement("input"));fields.start.type="text";new NH.Template.addInputDefaultText(fields.start,defStartText);var end_span=divs[1].appendChild(document.createElement("span"));end_span.innerHTML="End";fields.end=divs[1].appendChild(document.createElement("input"));fields.end.type="text";new NH.Template.addInputDefaultText(fields.end,defEndText);var imgSubmit=NH.Template.renderFindGoBtn(divs[2],submitMaps);imgSubmit.src="/img/lcm_find/maps/get.gif";imgSubmit.style.width="89px";imgSubmit.style.height="20px";var links=[{n:"More maps &amp; directions",u:"http://maps.ninemsn.com.au/index.aspx"}];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;container.rendered=true;function submitMaps(e)
{var startval=(fields.start.value==""||fields.start.value==defStartText)?"":fields.start.value;var endval=(fields.end.value==""||fields.end.value==defEndText)?"":fields.end.value;locURL="http://maps.ninemsn.com.au/index.aspx?action=direction&stpt="+escape(startval)+"&endpt="+escape(endval);window.location=locURL;NH.Util.preventDefault(e);}}
NH.Module.prepareHWWMod=function(container,data)
{if(!container)
return false;var response=(data&&data.HttpTransferResult&&data.HttpTransferResult.response)?data.HttpTransferResult.response:undefined;if(!response)
{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;}
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)
{if(tid)
AdTrack.t(aObj,modName,count,tid);else
AdTrack.t(aObj,modName,count);}
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);}
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.","Sorry, this is not a valid postcode. Please enter a 3 or 4 digit number.","TabControl object could not be found. Please import tab.js file.","You have started to enter a combo of letters and numbers. Please only use letters for a subburb or numbers for a postcode."];NH.Error.showError=function(elem,errCode,catId)
{var errText=errCode?NH.Error.ERROR_TEXT[errCode]:NH.Error.ERROR_TEXT[NH.Error.DEF_ERR];var newErr=document.getElementById("hl"+catId+"_statusBox");if(newErr)
{if(elem)
elem.innerHTML="<div style='padding:10px;'>This module could not load. Please see message above.</div>";newErr.style.display="block";newErr.innerHTML=errText;}
else if(elem)
elem.innerHTML="<div style='padding:10px;'>"+errText+"</div>";}
NH.Error.clearError=function(catId)
{var newErr=document.getElementById("hl"+catId+"_statusBox");if(newErr)
{newErr.innerHTML="";newErr.style.display="none";}}
NH.Error.showNoContent=function(elem)
{if(!elem)
return false;elem.innerHTML="<div style='padding:10px;'>There is no content available at this time.</div>";}