/**
 *  js isere_en_live component's controller
 */
var snowXml;
var sStationsNodeXPTemplateIndex = '//skiinfo_swc4_basic[#index#]';
var sStationsNodeXPTemplateId = '//skiinfo_swc4_basic[@destid="#id#"]';
var sStationNameNode = '/meta/resort';
var sStationAttributeId = '/@destid';
var sLastFallNode = '/weather/snowfall/date';
var sSnowHeight = '/stations/station/snow_total_cm';
var sSnowSlopesOpened = '/disciplines/discipline[@type="alpine"]/slopes_open';
var sSnowSlopesTotal = '/disciplines/discipline[@type="alpine"]/slopes_total';
var sSnowTempMin = '/stations/station[@type="top"]/temp_today';
var sSnowTempMax = '/stations/station[@type="base"]/temp_today';
var sSnowWeatherSymbol ='/stations/station[@type="base"]/weather_today_icon';
var cookie_snow = 'isere_en_live_snow';
var sOpenStationAttribute = '/general/open/@textId';
var sStationClosedTextId = /(ClosedEndSeason)|(No)/i;
var tPeriodBulletinNeige;

window.addEvent('domready', initBulletinNeige);

function initBulletinNeige()
{
    var snowRequest= new Request({method: 'get', url: 'xml/bulletin_neige.xml'});
    snowRequest.addEvent('success',snowLoaded);
    snowRequest.addEvent('success',setStationSelect);
    snowRequest.send();
}

function setBulletinNeigeSelectScroll()
{
    if( $('snow_station_selector_main') 
        && $('snow_station_selector_opt'))
    {
        $$('.optMain').setStyle('display','block');
        if($('snow_station_selector_opt').offsetHeight != 0
            && $('snow_station_selector_opt').offsetWidth != 0)
        {
            $clear(tPeriodBulletinNeige);
            $oWebcamScrollBar = new ScrollBar(
                'snow_station_selector_main',
                'snow_station_selector_opt', 
                {
                    'hScroll': false
                }
            );
        }
        $$('.optMain').setStyle('display','none');
    }
}

function snowLoaded(reponseText, responseXML)
{
    snowXml = responseXML;

}
function getStationNodeByIndex(iIndex)
{
	if (! window.ActiveXObject)
    {
        iIndex += 1;
    }
    return sStationsNodeXPTemplateIndex.replace('#index#', iIndex);
}
function getStationNodeById(iID)
{
    return sStationsNodeXPTemplateId.replace('#id#', iID);
}
function setStationSelect(){
    var aStations = snowXml.getElementsByTagName('skiinfo_swc4_basic');
    var cookie_value = Cookie.read(cookie_snow);    
    for(var i = 0 ; i < aStations.length ; i++)
    {
        var sStationId = SelectSingleNode(snowXml, getStationNodeByIndex(i) + sStationAttributeId);
        var sStationName = SelectSingleNode(snowXml, getStationNodeById(sStationId) + sStationNameNode);
		var bStationOpen = ! sStationClosedTextId.test(SelectSingleNode(snowXml, getStationNodeById(sStationId) + sOpenStationAttribute));
        if (bStationOpen)
		{
			var opt = new Option();
	        if (cookie_value == sStationId)
	        {
	            opt.selected = true;
	        }
	        opt.value = sStationId;
	        opt.innerHTML = sStationName;
	        document.getElementById('snow_station_html_select').appendChild(opt);
	    
		    if (!cookie_value && i == 0)
		    {
		        findStationData (sStationId);
		    }
		    else if (cookie_value)
		    {
		        findStationData (cookie_value);
		    }
		}
	}
	
	if (document.getElementById('snow_station_html_select').options.length == 0)
	{
		$$('.bulletin_neige', '.bulletin_neige_content').each(function (item, i){
			item.setStyle('display','none');
		});
	}
	else
	{
	    var stationSelect = new CustomSelect('snow_station_selector');

	    $$('.optContainer .opt').each(function(item, i){
	        item.addEvent('click',function(event){
                if(item.getParent().id == 'snow_station_selector_text')
                {
                    if(event)
                    {
                        event.stop();
                    }
                    findStationData (this.value);
                    setSnowCookie(this.value);
                }
	        });
	    });
        
        tPeriodBulletinNeige = setBulletinNeigeSelectScroll.periodical(200);
	}
}

String.prototype.usDateToFr = function()
{
    var reg;
    var sReturn;
    if (this != '')
    {
        if (reg = /^([0-9]{4})[-]{1}([0-9]{2})[-]{1}([0-9]{2})$/.exec(this))
        {
            sReturn = reg[3] + "/" + reg[2] + "/" + reg[1];
        }
        else
        {
            sReturn = this;
        }
    }
    else
    {
        sReturn = 'N/A';
    }
    return sReturn;

}
String.prototype.convertCmToM = function()
{
    var height_m = 0;
    var height_cm = 0;
    var sReturn = "";
    if (this > 100)
    {
        height_m = Math.floor(this / 100);
        height_cm = this % 100;
    }
    else
    {
        height_cm = this;
    }
    if (height_m > 0)
    {
        sReturn = height_m + "m";
    }
    sReturn += " " + height_cm + "cm";
    return sReturn;
}

function findStationData (stationID)
{
    var snowHeight;
    var lastFall;
    var iSymbol;
    var tempMax;
    var tempMin;
    var sSnowSlopes; 
    var sStationNode = getStationNodeById(stationID);	

    lastFall = SelectSingleNode(snowXml, sStationNode + sLastFallNode);;
    $('last_snow_fall').innerHTML = lastFall.usDateToFr();

     snowHeight = SelectSingleNode(snowXml, sStationNode + sSnowHeight);
    $('snow_height').innerHTML = snowHeight.convertCmToM();

	tempMin = SelectSingleNode(snowXml, sStationNode + sSnowTempMin);	
	$('snow_temp_min').innerHTML = tempMin + '°';

	tempMax = SelectSingleNode(snowXml, sStationNode + sSnowTempMax);	
	$('snow_temp_max').innerHTML = tempMax + '°';

	sSnowSlopes = SelectSingleNode(snowXml, sStationNode + sSnowSlopesOpened);
	sSnowSlopes += ' / ' +  SelectSingleNode(snowXml, sStationNode + sSnowSlopesTotal);
	$('snow_slopes').innerHTML = sSnowSlopes;

	iSymbol = SelectSingleNode(snowXml, sStationNode + sSnowWeatherSymbol);
	$('snow_symbol').className = 'picto_' + iSymbol;	
}

function setSnowCookie(sId)
{
    var myCookie  = Cookie.write(cookie_snow, sId, {duration: 15});
}