var months=["января","февраля","марта","апреля","мая","июня","июля","августа","сентября","октября","ноября","декабря"];var weekdays=["воскресенье","понедельник","вторник","среда","четверг","пятница","суббота"];var timeofday=["ночью","утром","днем","вечером"];var directions=["северный","северо-восточный","восточный","юго-восточный","южный","юго-западный","западный","северо-западный"];var cloudiness=["ясно","малооблачно","облачно","пасмурно"];var precipations=["дождь","ливень","снег","снег","гроза","","без осадков"];var probability=["возможен","возможна"];function convertMonth(t)
{if(t>=1&&t<=12)
return months[t-1];else
return"";}
function convertWeekday(w)
{if(w>=1&&w<=7)
return weekdays[w-1];else
return"";}
function convertToD(t)
{if(t>=0&&t<=3)
return timeofday[t];else
return"";}
function convertDirection(d)
{if(d>=0&&d<=7)
return directions[d];else
return"";}
function convertCloudiness(c)
{if(c>=0&&c<=3)
return cloudiness[c];else
return"";}
function convertPrecipitation(p,r,s)
{if(p>=4&&p<=10)
ret=precipations[p-4];else
ret="";if(p>=4&&p<=7&&r==0)ret=probability[0]+" "+ret;if(p==8&&s==0)ret=probability[1]+" "+ret;return ret;}
function getAttributes(node)
{var ret=new Object();if(node.attributes)
for(var i=0;i<node.attributes.length;i++)
{var attr=node.attributes[i];ret[attr.name]=attr.value;}
return ret;}
function getXMLDocument(url)
{var xml;if(window.XMLHttpRequest)
{xml=new window.XMLHttpRequest();xml.open("GET",url,false);xml.send("");return xml.responseXML;}
else
if(window.ActiveXObject)
{xml=new ActiveXObject("Microsoft.XMLDOM");xml.async=false;xml.load(url);return xml;}
else
{alert("Загрузка XML не поддерживается браузером");return null;}}
function parseGismeteoXML(url,template)
{var output="";var xml=null;try
{xml=getXMLDocument(url);if(!xml)return"<font color='red'>Нет данных</font>";}
catch(e)
{return"<font color='red'>"+e.message+"</font>";}
var towns=xml.getElementsByTagName("TOWN");var town=null;if(towns)
for(var i1=0;i1<towns.length;i1++)
{town=towns[i1];var tw_attr=getAttributes(town);var t_town=template.town.replace(/\{sname\}/g,unescape(tw_attr['sname'])).replace(/\{latitude\}/g,tw_attr['latitude']).replace(/\{longitude\}/g,tw_attr['longitude']).replace(/\{index\}/g,tw_attr['index']);var forecasts=town.getElementsByTagName("FORECAST");var forecast=null;var t_forecasts="";if(forecasts)
for(var i2=0;i2<forecasts.length;i2++)
{forecast=forecasts[i2];var fc_attr=getAttributes(forecast);var t_forecast=template.forecast.replace(/\{weekday\}/g,fc_attr['weekday']).replace(/\{sweekday\}/g,convertWeekday(fc_attr['weekday'])).replace(/\{tod\}/g,fc_attr['tod']).replace(/\{stod\}/g,convertToD(fc_attr['tod'])).replace(/\{day\}/g,fc_attr['day']).replace(/\{smonth\}/g,convertMonth(fc_attr['month'])).replace(/\{month\}/g,fc_attr['month']).replace(/\{year\}/g,fc_attr['year']).replace(/\{hour\}/g,fc_attr['hour']).replace(/\{predict\}/g,fc_attr['predict']);var params=forecast.childNodes;var t_heat=t_phenomena=t_pressure=t_temperature=t_wind=t_relwet="";if(params)
for(var i3=0;i3<params.length;i3++)
{param=params[i3];var tmp=getAttributes(param);switch(param.nodeName)
{case"PHENOMENA":var t_phenomena=template.phenomena.replace(/\{scloudiness\}/g,convertCloudiness(tmp["cloudiness"])).replace(/\{cloudiness\}/g,tmp['cloudiness']).replace(/\{rpower\}/g,tmp['rpower']).replace(/\{spower\}/g,tmp['spower']).replace(/\{precipitation\}/g,tmp['precipitation']).replace(/\{sprecipitation\}/g,convertPrecipitation(tmp["precipitation"],tmp["rpower"],tmp["spower"]));break;case"PRESSURE":var t_pressure=template.pressure.replace(/\{min\}/g,tmp['min']).replace(/\{max\}/g,tmp['max']);break;case"TEMPERATURE":var t_temperature=template.temperature.replace(/\{min\}/g,tmp['min']).replace(/\{max\}/g,tmp['max']);break;case"WIND":var t_wind=template.wind.replace(/\{min\}/g,tmp['min']).replace(/\{max\}/g,tmp['max']).replace(/\{direction\}/g,tmp['direction']).replace(/\{sdirection\}/g,convertDirection(tmp['direction']));break;case"RELWET":var t_relwet=template.relwet.replace(/\{min\}/g,tmp['min']).replace(/\{max\}/g,tmp['max']);break;case"HEAT":var t_heat=template.heat.replace(/\{min\}/g,tmp['min']).replace(/\{max\}/g,tmp['max']);break;}}
var t_forecast=template.t_forecast.replace(/\{forecast\}/g,t_forecast).replace(/\{phenomena\}/g,t_phenomena).replace(/\{pressure\}/g,t_pressure).replace(/\{temperature\}/g,t_temperature).replace(/\{wind\}/g,t_wind).replace(/\{relwet\}/g,t_relwet).replace(/\{heat\}/g,t_heat);t_forecasts+=t_forecast;}
var t_forecast_town=template.t_template.replace(/\{town\}/g,t_town).replace(/\{forecasts\}/g,t_forecasts);output+=t_forecast_town;}
return output;}
function drawGismeteoInformer(url,div,template)
{var div=document.getElementById(div);if(!div)return;var output=parseGismeteoXML(url,template);div.innerHTML=output;}
