var meteoXml;
var sTownNodeXPTemplateIndex = '//Location[#index#]';
var sTownNodeXPTemplateId = "//Location[@id='#id#']";
var sTownNodeName = '/@name';
var sTownNodeDepartment = '/@departement';
var sTownNodeAttributeId = '/@id';
var sTownNodePositionLatitude = '/@latitude';
var sTownNodePositionLongitude = '/@longitude';

var sMeteoNodeDay = '/Day/@val';
var sMeteoNodeDayTemplate = "/Day[@val='#val#']";
var sTownNodeTemperatureMin = '/TempMor';
var sTownNodeTemperatureMax = '/TempAft';
var sTownNodeSymbolDay = '/SymbDay';
var sTownNodeTextDay = '/TxtDay';

var sCurrentTownId;
var sCurrentDay;

var cookie_meteo = 'isere_en_live_meteo';

var ID2ALPES = '07469016';
var tPeriodMeteo;

window.addEvent('domready',initMeteo);
Date.prototype.toMeteoString = function ()
{
    var sMonth = this.getMonth() + 1;
    if (sMonth < 10)
    {
        sMonth = '0' + sMonth;
    }
	var sDay = this.getDate();
	if (sDay < 10)
    {
        sDay = '0' + sDay;
    }
	
    return this.getFullYear() + '' + sMonth + '' + sDay;
}

function initMeteo()
{
    var meteoRequest = new Request({method: 'get', url: 'xml/meteo.xml'});
    meteoRequest.addEvent('success',meteoLoaded);
    meteoRequest.addEvent('success',setTownSelect);
    meteoRequest.send();
    $$('#day_list a').each(setDayValues);
    $$('#day_list a').each(setDayClickAction);
}

function setMeteoSelectScroll()
{
    if( $('meteo_town_selector_main') 
        && $('meteo_town_selector_opt'))
    {
        $$('.optMain').setStyle('display','block');
        if($('meteo_town_selector_opt').offsetHeight != 0
            && $('meteo_town_selector_opt').offsetWidth != 0)
        {
            $clear(tPeriodMeteo);
            $oWebcamScrollBar = new ScrollBar(
                'meteo_town_selector_main',
                'meteo_town_selector_opt', 
                {
                    'hScroll': false
                }
            );
        }
        $$('.optMain').setStyle('display','none');
    }

}

function setDayValues(item, i)
{
    var aDayNames = Array('DIM','LUN','MAR','MER','JEU','VEN','SAM');
    var oDate = new Date();
    var iDay = oDate.getDay() + i;
    if (iDay >= aDayNames.length)
    {
        iDay -= aDayNames.length;
    }
    item.innerHTML = aDayNames[iDay];
    var sValue = new Date(oDate.getFullYear(), oDate.getMonth(), oDate.getDate() + i).toMeteoString();
    item.setAttribute('value', sValue);
    if (0 == i)
    {
        selectDay(item);
    }
    findTownData();
}

function setDayClickAction(item, i)
{
    item.addEvent('click',function(event){
		if(event)
		{
			event.stop();
		}
        $$('#day_list a').each(unselectDay);
        selectDay(item);
        findTownData();
    });
}

function selectDay(item)
{
    item.addClass('current');
    sCurrentDay = item.getAttribute('value');	
}

function unselectDay(item)
{
    item.removeClass('current');
}

function meteoLoaded(reponseText, responseXML)
{
    meteoXml = responseXML;
}


function getTownNodeByIndex(iIndex)
{
    if (! window.ActiveXObject)
    {
        iIndex += 1;
    }
    return sTownNodeXPTemplateIndex.replace('#index#', iIndex);
}

function getTownNodeById(iID)
{
    return sTownNodeXPTemplateId.replace('#id#', iID);
}

function getNodeDayByMeteoDate(sDate)
{
    return sMeteoNodeDayTemplate.replace('#val#', sDate);
}



function setTownSelect()
{
    var aTowns = meteoXml.getElementsByTagName('Location');
    var cookie_value = Cookie.read(cookie_meteo);	
	var randomTownIndex = Math.round(Math.random() * aTowns.length);	
    for(var i = 0 ; i < aTowns.length ; i++)
    {
        var sTownId = SelectSingleNode(meteoXml, getTownNodeByIndex(i) + sTownNodeAttributeId);
        var sTownName = SelectSingleNode(meteoXml, getTownNodeById(sTownId) + sTownNodeName);
		var bAllowedTown = ('38' 	  == SelectSingleNode(meteoXml, getTownNodeById(sTownId) + sTownNodeDepartment)
						|| ID2ALPES == sTownId);
        if (bAllowedTown)
		{
			var opt = new Option();
	        opt.value = sTownId;
	        if (cookie_value == opt.value || (!cookie_value && i == randomTownIndex))
	        {
	            opt.selected = true;
	        }
			
	        opt.innerHTML = sTownName;
	        document.getElementById('meteo_html_select').appendChild(opt);
			// get random info if no cookie set
	        if (!cookie_value && i == randomTownIndex)
	        {
	            sCurrentTownId = sTownId;
	        }
	        else if (cookie_value)
	        {
	            sCurrentTownId = cookie_value;
	        }
	        else
	        {
	        	sCurrentTownId = sTownId;
	        }
		}
    }
    
    var townSelect = new CustomSelect('meteo_town_selector');

    $$('.optContainer .opt').each(function(item, i){
        item.addEvent('click',function(event){
            if(item.getParent().id == 'meteo_town_selector_text')
            {
                if(event)
                {
                    event.stop();
                }
                sCurrentTownId = this.value;
                findTownData();
                setMeteoCookie(this.value)
            }
        });
    });

    findTownData();
    
    tPeriodMeteo = setMeteoSelectScroll.periodical(200);
}

function findTownData()
{
    if (sCurrentTownId != '' && sCurrentDay != '' && meteoXml)
    {
        var sTownNode = getTownNodeById(sCurrentTownId);
        var sLatitude = SelectSingleNode(meteoXml, sTownNode + sTownNodePositionLatitude);
        var sLongitude = SelectSingleNode(meteoXml, sTownNode + sTownNodePositionLongitude);
        if (ID2ALPES == sCurrentTownId)
        {
        	sLatitude = 45.01;
        	sLongitude = 6.12;
        }
        var sNodeTownAndDay = getTownNodeById(sCurrentTownId) + getNodeDayByMeteoDate(sCurrentDay);
        var sCurrentTemparatureMin = SelectSingleNode(meteoXml,sNodeTownAndDay + sTownNodeTemperatureMin);
        var sCurrentTemparatureMax = SelectSingleNode(meteoXml,sNodeTownAndDay + sTownNodeTemperatureMax);
        var aPosition = getCoordonates(sLongitude, sLatitude);
        var iSymbol = SelectSingleNode(meteoXml, sNodeTownAndDay + sTownNodeSymbolDay);
        var sText = SelectSingleNode(meteoXml, sNodeTownAndDay + sTownNodeTextDay);
		if (iSymbol > 19)
		{
			iSymbol = 1;
		}
        $('town_cursor').className = 'weather picto_'+ iSymbol;
        var iXPos = aPosition[0];
        var iYPos = aPosition[1];
        
        if ( iXPos >= 139 )
        	iXPos = 0;

        if ( iYPos >= 150 )
            iYPos = 0;
        
        $('town_cursor').setStyles({left: iXPos, top: iYPos});
        $('town_cursor').setAttribute('title', sText);
        $$('#temperature_info #min')[0].innerHTML = sCurrentTemparatureMin + '°';
        $$('#temperature_info #max')[0].innerHTML = sCurrentTemparatureMax + '°';
        setTemperatureInfoCoordinates(iXPos, iYPos)
    }
}

function getCoordonates(f_x_Deg, f_y_Deg)
{
    var origin_x_Deg = 4.8758;
    var origin_x_Px = 16;
    var iPictoWidth = 40;
    var f_x_DegInPx = 67 / 0.851145;
    var xPos = Math.floor((f_x_Deg - origin_x_Deg ) * f_x_DegInPx ) + origin_x_Px;

    var origin_y_Deg = 45.5253;
    var origin_y_Px = 46;
    var iPictoHeight = 40;
    var f_y_DegInPx = - 37 / 0.337522;
    var yPos = Math.floor((f_y_Deg - origin_y_Deg ) * f_y_DegInPx ) + origin_y_Px;

    return Array(xPos - iPictoWidth/2, yPos - iPictoHeight/2);
}

function setTemperatureInfoCoordinates(iTownXPos, iTownYPos)
{
    var iHeight = 20;
    var iWidth = 46;       
    var xPos;
    var yPos;
    xPos = iTownXPos - 3;
    yPos = iTownYPos + iHeight + 20;
    $('temperature_info').setStyles({'left':xPos,'top': yPos});
    $('temperature_info').className = 'noarrow';
}

function setMeteoCookie(sId)
{
    var myCookie  = Cookie.write(cookie_meteo, sId, {duration: 15});

}

