// Copyright (C) 2008 BlueGolf, LLC. All Rights Reserved
function Weather(lat,lon,display)
{Weather.display=display;var ajax=window.XMLHttpRequest?new XMLHttpRequest():new ActiveXObject('Microsoft.XMLHTTP');ajax.onreadystatechange=function()
{if(ajax.readyState==4&&ajax.status==200)
{eval(ajax.responseText);Weather.forecast=Weather.parse();if(typeof display==='function')
{display();}}}
var now=new Date();var year=now.getFullYear();var month=String(101+now.getMonth()).substring(1);var day=String(100+now.getDate()).substring(1);var url='/forecasts/weather.json?jsonp=ndfd%3D&lat='+lat+'&lon='+lon+'&startDate='+year+'-'+month+'-'+day;ajax.open('GET',url);ajax.send(null);}
Weather.elementByAttribute=function(obj,key,value,sub)
{var result=undefined;for(var i=0;obj&&i<obj.length;i++)
{if((sub?obj[i][key][sub]:obj[i][key])==value)
{result=obj[i];break;}}
return result;}
Weather.getDetailLink=function(zip,delta)
{return'http://www.weather.com/outlook/recreation/golf/wxdetail/'+zip+((delta>0)?('?dayNum='+delta):'');}
Weather.indexByAttribute=function(obj,key,value)
{var result=undefined;for(var i=0;obj&&i<obj.length;i++)
{if(obj[i][key]==value)
{result=i;break;}}
return result;}
Weather.parse=function()
{var result=[];if(window.ndfd&&ndfd.dwml&&ndfd.dwml.data)
{var high=Weather.elementByAttribute(ndfd.dwml.data.parameters.temperature,'@type','maximum');var low=Weather.elementByAttribute(ndfd.dwml.data.parameters.temperature,'@type','minimum');var days=Weather.elementByAttribute(ndfd.dwml.data['time-layout'],'layout-key',high['@time-layout'],'$')['start-valid-time'];for(var i=0;days&&i<days.length;i++)
{var dayIso=days[i].$;if(dayIso.substring(10,19)!='T06:00:00')
{continue}
var day=result[result.length]={};day.iso=dayIso.substring(0,4)+dayIso.substring(5,7)+dayIso.substring(8,10);result['@'+day.iso]=day;if(high.value[i])
{day.high=high.value[i].$;}
var data=low;var times=Weather.elementByAttribute(ndfd.dwml.data['time-layout'],'layout-key',data['@time-layout'],'$')['start-valid-time'];var nightIso=dayIso.substring(0,10)+'T18:00:00'+dayIso.substring(19);var index=Weather.indexByAttribute(times,'$',nightIso);if(data.value[index])
{day.low=data.value[index].$;}
data=ndfd.dwml.data.parameters.weather;times=Weather.elementByAttribute(ndfd.dwml.data['time-layout'],'layout-key',data['@time-layout'],'$')['start-valid-time'];index=Weather.indexByAttribute(times,'$',dayIso);if(data['weather-conditions'][index])
{day.description=data['weather-conditions'][index]['@weather-summary'];}
data=ndfd.dwml.data.parameters['probability-of-precipitation'];times=Weather.elementByAttribute(ndfd.dwml.data['time-layout'],'layout-key',data['@time-layout'],'$')['start-valid-time'];index=Weather.indexByAttribute(times,'$',dayIso);if(data.value[index])
{day.day=data.value[index].$;}
data=ndfd.dwml.data.parameters['conditions-icon'];times=Weather.elementByAttribute(ndfd.dwml.data['time-layout'],'layout-key',data['@time-layout'],'$')['start-valid-time'];index=Weather.indexByAttribute(times,'$',dayIso);if(data['icon-link'][index]&&(/\/(hi_)?n?([a-z]+)([0-9]*)\.((gif)|(jpg)|(png))$/i).test(data['icon-link'][index].$))
{var icon=Weather.iconMap[RegExp.$2];day.icon='/_img/weather/'+(icon?icon:'ptcldy')+'.gif';}
if(day.high&&day.high<32)
{day.type='snow';}
else if(day.low&&day.low<33||day.high&&day.high<40)
{day.type='rain or snow';}
else
{day.type='rain';}}}
return result;}
Weather.iconMap={'bkn':'ptcldy','blizzard':'snow','cold':'snow','du':'haze','few':'ptcldy','fg':'foggy','fu':'haze','fzra':'rain','hot':'sunny','hurr':'windy','ip':'snow','mix':'snow','ovc':'cloudy','raip':'snow','ra':'rain','rasn':'snow','sctfg':'foggy','sct':'ptcldy','scttsra':'rain','shra':'rain','shwrs':'rain','skc':'sunny','sn':'snow','tor':'tstrms','tsra':'tstrms','wind':'windy'};