/* --- Constants ---*/

var TEMPLATE_ULTIMAS    = 0;
var TEMPLATE_DESPORTO   = 1;
var TEMPLATE_GRELHA     = 2;
var TEMPLATE_TEMPO      = 3;
var TEMPLATE_BOLSA      = 4;
var TEMPLATE_INFORMACAO = 5;

var TEMPO_HOJE = 0;
var TEMPO_AMANHA = 1;

/* --- //Constants ---*/

/* --- Variaveis Globais --- */

//array dos templates
var widgetTemplates = 
    [ 
        {   name:"&#218;ltimas",
            id:"1", 
            contentclass: "ContentUltimas",
            initfunction: function(){ initUltimas();},
            feed:"http://sic.aeiou.pt/online/scripts/2008/widget/xmlUltimas.aspx",
            template:"1" 
        },
        {   name:"Desporto",
            id:"2", 
            contentclass: "ContentDesporto",
            initfunction: function(){ initDesporto();},
            feed:"http://sic.aeiou.pt/online/scripts/2008/widget/xmlCanais.aspx?ch=desporto",
            template:"2"
        },
        {   name:"Grelha",
            id:"3", 
            contentclass: "ContentGrelha",
            initfunction: function(){ initGrelha();},
            feed:"http://tempo.sic.pt/xml/grelha/programacaoCMS.asp", 
            template:"3" 
        },
        {   name:"Tempo",
            id:"4", 
            contentclass: "ContentTempo",
            initfunction: function(){ initTempo();},
            feed_today:"http://tempo.sic.pt/xml/temponovo/tempo1.xml",
            feed_tomorrow:"http://tempo.sic.pt/xml/temponovo/tempo2.xml", 
            template:"4" 
        },
        {   name:"Bolsa",
            id:"5", 
            contentclass: "ContentBolsa",
            initfunction: function(){ initBolsa();},
            feed_psi20:"http://sic.symexportugal.com/teletext/indices_XML.html",
            feed_subidas:"http://sic.symexportugal.com/teletext/euronext_XML.html?filter=HIGHER",
            feed_descidas:"http://sic.symexportugal.com/teletext/euronext_XML.html?filter=LOWER", 
            feed_negociadas:"http://sic.symexportugal.com/teletext/euronext_XML.html?filter=NEGOCIADAS",
            template:"5",
            template_psi20:"6"
        },
        {   name:"+ Informac&#227;o",
            id:"6", 
            contentclass: "ContentInformacao",
            initfunction: function(){ initInformacao();},
            
            //feed_visao:"http://aeiou.visao.pt/_layouts/Edimpresa/Visao/Lusa/Feed.ashx",
            feed_aeiou:"http://babel.aeiou.pt/feed/em_foco_sic.xml",
            feed_expresso:"http://aeiou.expresso.pt/gen.pl?p=rss",
            template:"7"
        }
    ];
    
//template corrente
var currentTemplateIndex = 0;
var currentTemplate = widgetTemplates[currentTemplateIndex];
//endereço do proxy
var proxy_url = "http://widget.sic.pt/XmlProxy.ashx";
//endereço do serviço de votações
var rate_url = "http://widget.sic.pt/Rate.ashx"
//area de conteudo
var content_area = "ContentArea";

//canais da grelha
var channels = 
    [ 
        {   name:"SIC",
            id:"1",
            image:"images/sic.png" 
        },
        {   name:"SIC Radical",
            id:"2",
            image:"images/sic_radical.png" 
        },
        {   name:"SIC Internacional",
            id:"4",
            image:"images/sic_internacional.png" 
        },
        {   name:"SIC Notícias",
            id:"5",
            image:"images/sic_noticias.png" 
        },
        {   name:"SIC Mulher",
            id:"6",
            image:"images/sic_mulher.png" 
        }
    ];

//canal corrente
var currentChannelIndex = 0;
var currentChannel = channels[currentChannelIndex];

//dias da semana
var daysofweek = 
    [
        {   name:"Domingo",
            prefix:"D",
            id:"1"
        },
        {   name:"Segunda-Feira",
            prefix:"S",
            id:"2"
        },
        {   name:"Terça-Feira",
            prefix:"T",
            id:"3"
        },
        {   name:"Quarta-Feira",
            prefix:"Q",
            id:"4"
        },
        {   name:"Quinta-Feira",
            prefix:"Q",
            id:"5"
        },
        {   name:"Sexta-Feira",
            prefix:"S",
            id:"6"
        },
        {   name:"Sabado",
            prefix:"S",
            id:"7"
        }
    ];

//dia corrente
var dateTimeNow = new Date();
var currentChannelDayIndex = dateTimeNow.getDay();
var currentChannelDay = daysofweek[currentChannelDayIndex];

//navegacao da informacao
var newsSources = 
    [
        {   name:"AEIOU",
            id:"1",
            feed:widgetTemplates[TEMPLATE_INFORMACAO].feed_aeiou,
            image:'images/aeiou.png'
        },
        {   name:"Expresso",
            id:"2",
            feed:widgetTemplates[TEMPLATE_INFORMACAO].feed_expresso,
            image:'images/expresso.png'
        },
       /* {   name:"Visao",
            id:"3",
            feed:widgetTemplates[TEMPLATE_INFORMACAO].feed_visao,
            image:'images/visao.png'
        }*/
    ];

var currentNewsSourceIndex = 0;
var currentNewsSource = newsSources[currentNewsSourceIndex];

//pedido de ajax corrente
var currentRequest = null;

//valor da cache
var cache_time = 1;

//votação
var currentRateItemID = null;
var currentRateValue = null;

//publicidade
var pubtop_url = 'http://zahirx.aeiou.pt/pl/serve.pl?S=145&F=xml&ord=';
var pubtop_img = 'images/pubBanner.jpg';
var pubtop_link = null;

var pubbottom_url = 'http://zahirx.aeiou.pt/pl/serve.pl?S=146&F=xml&ord=';
var pubbottom_img = 'images/pubBanner.jpg';
var pubbottom_link = null;

//imagens
var imageCollection = 
    [
        {   
            image:'images/VotarStarPrimeira.png'
        },
        {   
            image:'images/VotarStarUltima_hi.png'
        },
        {   
            image:'images/VotarStarUltima.png'
        },
        {   
            image:'images/VotarStarUltima_hi.png'
        },
        {   
            image:'images/VotarStar.png'
        },
        {   
            image:'images/VotarStar_hi.png'
        }
    ];

/* --- //Variaveis Globais --- */

/* --- Funções de Inicialização --- */

function initWidget()
{
    initEvents();
    initTemplate(currentTemplate);
}

function initEvents()
{
    //registar eventos da navegação 
    initNavigation();
    
    //iniciar publicidade
    initPub();
        
    //registar eventos da barra de canais
    registerClick('lnkUltimas',0);
    registerClick('lnkDesporto',1);
    registerClick('lnkGrelha',2);
    registerClick('lnkTempo',3);
    registerClick('lnkBolsa',4);
    registerClick('lnkInformacao',5);
    
    //init images
    initImages();
    
    //registar evento de refresh (loading error)
    $("LoadingRefresh").addEvent('click',function(){
        currentTemplate.initfunction();
    });
}

function initNavigation()
{
    $("previousTemplate").addEvent('click', function(event) {
        event.stop();  
        setPreviousTemplate();
    });
    
    $("nextTemplate").addEvent('click', function(event) {
        event.stop();  
        setNextTemplate();
    });
}

function setPreviousTemplate()
{
    --currentTemplateIndex;
    currentTemplateIndex = (currentTemplateIndex < 0) ? widgetTemplates.length-1 : currentTemplateIndex;
    currentTemplate = widgetTemplates[currentTemplateIndex];
    currentTemplate.initfunction();
}

function setNextTemplate()
{
    ++currentTemplateIndex;
    currentTemplateIndex = (currentTemplateIndex > widgetTemplates.length-1) ? 0 : currentTemplateIndex;
    currentTemplate = widgetTemplates[currentTemplateIndex];
    currentTemplate.initfunction();
}

function initTemplate(template)
{
    //chamar função de inicialização do template
    currentTemplate.initfunction();
}

function initPub()
{
    //pub top
    var newRequest = new Request({  
        method: 'get',
	link: 'chain',  
        url: proxy_url + "?url=" + escape(pubtop_url+$random(1,10000)), 
        onRequest: function() {}, 
        onSuccess: function(responseText, responseXML) {initPubTop(responseText);},
        onFailure: function(instance) {},
        onCancel: function() {}
    }).send(); 
    
    //pub bottom
    var newRequest = new Request({  
        method: 'get', 
	    link: 'chain', 
        url: proxy_url + "?url=" + escape(pubbottom_url+$random(1,10000)), 
        onRequest: function() {}, 
        onSuccess: function(responseText, responseXML) {initPubBottom(responseText);},
        onFailure: function(instance) {},
        onCancel: function() {}
    }).send(); 
}

function initPubTop(responseText,responseXML)
{

    var parser = new DOMParser();
    var xmldoc = parser.parseFromString(responseText, "text/xml");
    
    var root_node = xmldoc.getElementsByTagName('RootNode')[0];
    var banner = root_node.getElementsByTagName('banner')[0];
    var link = root_node.getElementsByTagName('url')[0];
    var viewurl = root_node.getElementsByTagName('view')[0];
    
    pubtop_img = banner.firstChild.nodeValue;
    pubtop_link = link.firstChild.nodeValue;

        
    // se houver pub para mostrar
    if(banner.childNodes.length > 0)
    {
        var pubTopDiv = new Element('div', {
            'id' : 'PubTop',
            'class': 'PublicidadeTop'
        }); 

        var pubTopAnchor = new Element('a', {
            'id': 'lnkPubTopOpen',
            'class': 'linkBanner',
            'target': '_blank',
            'href': pubtop_link,
            'html': '<img src="' + pubtop_img + '" alt="Abrir">'
        });
		
		var requestView = new Request({  
		    method: 'get',  
		    link: 'chain',
		    url: proxy_url + "?url=" + escape(viewurl.firstChild.nodeValue), 
		    onRequest: function() {}, 
		    onSuccess: function(responseText, responseXML) {},
		    onFailure: function(instance) {},
		    onCancel: function() {}
		}).send(); 

        pubTopDiv.grab(pubTopAnchor);
        
        $('Header').grab(pubTopDiv,'top');   
    }
}

function initPubBottom(responseText,responseXML)
{


    var parser = new DOMParser();
    var xmldoc = parser.parseFromString(responseText, "text/xml");

    var root_node = xmldoc.getElementsByTagName('RootNode')[0];
    var banner = root_node.getElementsByTagName('banner')[0];
    var link = root_node.getElementsByTagName('url')[0];
    var viewurl = root_node.getElementsByTagName('view')[0];
    
    pubbottom_img = banner.firstChild.nodeValue;
    pubbottom_link = link.firstChild.nodeValue;


    // se houver pub para mostrar
    if(banner.childNodes.length > 0)
    {
        var pubBottomDiv = new Element('div', {
            'id' : 'PubBottom',
            'class': 'PublicidadeBottom'
        }); 

        var pubBottomAnchor = new Element('a', {
            'id': 'lnkPubBottomOpen',
            'class': 'linkBanner',
            'target': '_blank',
            'href': pubbottom_link,
            'html': '<img src="' + pubbottom_img + '" alt="Abrir">'
        });
		
		var requestView = new Request({  
		    method: 'get',  
		    link: 'chain',
		    url: proxy_url + "?url=" + escape(viewurl.firstChild.nodeValue), 
		    onRequest: function() {}, 
		    onSuccess: function(responseText, responseXML) {},
		    onFailure: function(instance) {},
		    onCancel: function() {}
		}).send(); 

        pubBottomDiv.grab(pubBottomAnchor);
        
        $('Global').grab(pubBottomDiv);
    }
}

function initImages()
{
    this.preload = new Image();
    imageCollection.each(function(item, index){
        this.preload.src = item.image;         
   }); 
}

function initUltimas()
{
    //actualizar template actual
    currentTemplateIndex = TEMPLATE_ULTIMAS;
    currentTemplate = widgetTemplates[currentTemplateIndex];
    
    $("tituloTemplate").set('html',currentTemplate.name);
    
    var feed_url = proxy_url + "?url=" + escape(currentTemplate.feed) + "&template=" + currentTemplate.template + "&cache=" + cache_time + "&addvote=1";
    
    //clear
    $(content_area).set('html','');
    
    //mudar class
    $(content_area).set('class',currentTemplate.contentclass);
        
    //load do conteudo
    loadContentArea(feed_url,content_area);
}

function initDesporto()
{
    //actualizar template actual
    currentTemplateIndex = TEMPLATE_DESPORTO;
    currentTemplate = widgetTemplates[currentTemplateIndex];
    
    $("tituloTemplate").set('html',currentTemplate.name);
    
    var feed_url = proxy_url + "?url=" + escape(currentTemplate.feed) + "&template=" + currentTemplate.template + "&cache=" + cache_time + "&addvote=1";
   
   //clear
    $(content_area).set('html','');
    
    //mudar class
    $(content_area).set('class',currentTemplate.contentclass);
    
    //load do conteudo
    loadContentArea(feed_url,content_area);
}

/* ## Funções relativas à Grelha ## */

function initGrelha()
{
    //actualizar template actual
    currentTemplateIndex = TEMPLATE_GRELHA;
    currentTemplate = widgetTemplates[currentTemplateIndex];
    
    //mudar no nome
    $("tituloTemplate").set('html',currentTemplate.name);
    
    //criar header
    var header_grelha = initHeaderGrelha();
    //criar dias da semana
    var dias_semana = initDiasSemana();
    
    //mudar class
    $(content_area).set('class',currentTemplate.contentclass);
    
    //limpar conteudo
    $(content_area).set('html','');
    
    //load do header
    $(content_area).grab(header_grelha);
    //load dos dias da semana
    $(content_area).grab(dias_semana);
    
    var areaProgramacaoDiv = new Element('div',{id:"AreaProgramacao"});
    $(content_area).grab(areaProgramacaoDiv);
   
    loadProgram(currentChannelDayIndex);
}

function initHeaderGrelha()
{
    var headerGrelhaDiv = new Element('div', {'class': 'HeaderGrelha'});
    
    var setaLeftGrelhaDiv = new Element('div', {'class': 'SetaLeftGrelha'});
    var setaLeftGrelhaAnchor = new Element('a', {
        'href': '#',
        'html': '<img src="images/SetaLeftGrelha.gif" alt="Mudar Canal">',
        'events': {
            'click': function(){
                setPreviousChannel();
            }
        }
    });
    
    var setaRightGrelhaDiv = new Element('div', {'class': 'SetaRightGrelha'});
    var setaRightGrelhaAnchor = new Element('a', {
        'href': '#',
        'html': '<img src="images/SetaRightGrelha.gif" alt="Mudar Canal">',
        'events': {
            'click': function(){
                setNextChannel();
            }
        }
    });
    
    var logotipoDiv = new Element('div', {
        'class': 'Logotipo',
        'html': '<img src="images/sic.png" id="channelLogo">'
        }
    );

    setaLeftGrelhaDiv.grab(setaLeftGrelhaAnchor);
    setaRightGrelhaDiv.grab(setaRightGrelhaAnchor);
    headerGrelhaDiv.grab(setaLeftGrelhaDiv);
    headerGrelhaDiv.grab(setaRightGrelhaDiv);
    headerGrelhaDiv.grab(logotipoDiv);
    
    return headerGrelhaDiv;
}

function initDiasSemana()
{
    var diasSemanaDiv = new Element('div', {'class': 'DiasSemana'});
    var dayArray = new Element('div',{id:"daysOfTheWeek"});
    
    daysofweek.each(function(item, index){
       var day = new Element('a', {
            'href': '#',
            'html': item.prefix,
            'class': 'WeekDay',
            'events': {
                'click': function(){
                   loadProgram(index);
                }
            }
            
        }); 
        
        dayArray.grab(day);
    }); 
    
    diasSemanaDiv.grab(dayArray);   
    
    return diasSemanaDiv;
}

function setPreviousChannel()
{
    --currentChannelIndex;
    currentChannelIndex = (currentChannelIndex < 0) ? channels.length-1 : currentChannelIndex;
    currentChannel = channels[currentChannelIndex];
    
    //mudar imagem
    $('channelLogo').set('src',currentChannel.image);
    
    loadProgram(currentChannelDayIndex);
}

function setNextChannel()
{
    ++currentChannelIndex;
    currentChannelIndex = (currentChannelIndex > channels.length-1) ? 0 : currentChannelIndex;
    currentChannel = channels[currentChannelIndex];
    
    //mudar imagem
    $('channelLogo').set('src',currentChannel.image);
    
    loadProgram(currentChannelDayIndex);
}

function loadProgram(dayIndex)
{
    currentChannelDayIndex = dayIndex;
    currentChannelDay = daysofweek[currentChannelDayIndex];
    
    //activar link
    $$('#daysOfTheWeek a.WeekDay').each(function(item,index){
        if(index == currentChannelDayIndex)
        {
            item.addClass('Activo');
        }
        else
        {
            item.removeClass('Activo');
        }
    });
    
    var url = currentTemplate.feed + "?id_canal=" + currentChannel.id + "&dia=" + currentChannelDay.id;   
    var feed_url = proxy_url + "?url=" + escape(url) + "&template=" + currentTemplate.template + "&cache=" + cache_time;
    
    $("AreaProgramacao").set('html','');
    loadContentArea(feed_url,"AreaProgramacao");
}

/* ## //Funções relativas à Grelha ## */

/* ## Funções relativas ao Tempo ## */

function initTempo()
{
    //actualizar template actual
    currentTemplateIndex = TEMPLATE_TEMPO;
    currentTemplate = widgetTemplates[currentTemplateIndex];
    
    //mudar no nome
    $("tituloTemplate").set('html',currentTemplate.name);
    
    //limpar conteudo
    $(content_area).set('html','');
    
    //mudar class
    $(content_area).set('class',currentTemplate.contentclass);
    
    //criar header
    var header_tempo = initHeaderTempo();
    
    //load do header
    $(content_area).grab(header_tempo);
    
    var meteorologiaDiv = new Element('div',{'id':"Meteorologia",'class':'Meteorologia'});
    $(content_area).grab(meteorologiaDiv);
    
    loadTempo(TEMPO_HOJE);
    
    var linkBottomAnchor = new Element('a',{
        'class':'LinkBottom',
        'href':'http://sic.aeiou.pt/online/tempo',
        'target':'_blank',
        'html':'<span>Visite outros Locais</span>'
     });
    $(content_area).grab(linkBottomAnchor);
       
}

function initHeaderTempo()
{
    var botoesTempoDiv = new Element('div',{'class':'BotoesTempo'});
    
    var tempoHojeAnchor = new Element('a', {
        'href': '#',
        'html': '<span>Hoje</span>',
        'class': 'Hoje Activo',
        'events': {
            'click': function(){
                loadTempo(TEMPO_HOJE);
            }
        }
    });
    
    var tempoAmanhaAnchor = new Element('a', {
        'href': '#',
        'html': '<span>Amanh&#227;</span>',
        'class': 'Amanha Desactivo',
        'events': {
            'click': function(){
                loadTempo(TEMPO_AMANHA);
            }
        }
    });
    
    botoesTempoDiv.grab(tempoHojeAnchor);
    botoesTempoDiv.grab(tempoAmanhaAnchor);
    
    return botoesTempoDiv;
}

function loadTempo(dayFlag)
{
    var url;
    
    if(dayFlag == TEMPO_HOJE)
    {
        url = widgetTemplates[TEMPLATE_TEMPO].feed_today;
        $$('#ContentArea a.Hoje').removeClass('Desactivo');
        $$('#ContentArea a.Hoje').addClass('Activo');
        $$('#ContentArea a.Amanha').removeClass('Activo');
        $$('#ContentArea a.Amanha').addClass('Desactivo');
    }
    else
    {
        url = widgetTemplates[TEMPLATE_TEMPO].feed_tomorrow;
        $$('#ContentArea a.Hoje').removeClass('Activo');
        $$('#ContentArea a.Hoje').addClass('Desactivo');
        $$('#ContentArea a.Amanha').removeClass('Desactivo');
        $$('#ContentArea a.Amanha').addClass('Activo');
    }
    
    feed_url = proxy_url + "?url=" + escape(url) + "&template=" + currentTemplate.template + "&cache=" + cache_time;
    loadContentArea(feed_url,"Meteorologia");
}

/* ## //Funções relativas ao Tempo ## */

function initBolsa()
{
    //actualizar template actual
    currentTemplateIndex = TEMPLATE_BOLSA;
    currentTemplate = widgetTemplates[currentTemplateIndex];
    
    //mudar no nome
    $("tituloTemplate").set('html',currentTemplate.name);
    
    //limpar conteudo
    $(content_area).set('html','');
    
    //mudar class
    $(content_area).set('class',currentTemplate.contentclass);
    
    var bolsaDiv = new Element('div',{'id':"Bolsa",'class':'Bolsa'});
    $(content_area).grab(bolsaDiv);
    
    var psi20Div = new Element('div',{'id':'psi20Area'});
    var subidasDiv = new Element('div',{'id':'subidasArea'});
    var descidas20Div = new Element('div',{'id':'descidasArea'});
    var negociadas20Div = new Element('div',{'id':'negociadasArea'});
    
    bolsaDiv.grab(subidasDiv);
    bolsaDiv.grab(descidas20Div);
    bolsaDiv.grab(psi20Div);
    bolsaDiv.grab(negociadas20Div);

    var feed_psi20 = proxy_url + "?url=" + escape(currentTemplate.feed_psi20) + "&template=" + currentTemplate.template_psi20 + "&cache=" + cache_time;
    var feed_subidas = proxy_url + "?url=" + escape(currentTemplate.feed_subidas) + "&template=" + currentTemplate.template + "&titulo=" + escape("Subidas do PSI 20") + "&cache=" + cache_time;
    var feed_descidas = proxy_url + "?url=" + escape(currentTemplate.feed_descidas) + "&template=" + currentTemplate.template + "&titulo=" + escape("Descidas do PSI 20") + "&cache=" + cache_time;
    var feed_negociadas = proxy_url + "?url=" + escape(currentTemplate.feed_negociadas) + "&template=" + currentTemplate.template + "&titulo=" + escape("As mais negociadas") + "&cache=" + cache_time;
     
    loadContentArea(feed_psi20,"psi20Area");
    loadContentArea(feed_subidas,"subidasArea");  
    loadContentArea(feed_descidas,"descidasArea");  
    loadContentArea(feed_negociadas,"negociadasArea"); 
    
    var linkBottomAnchor = new Element('a',{
        'class':'LinkBottom',
        'href':'http://bolsa.sic.pt/home_refresh.html',
        'target':'_blank',
        'html':'<span>Visite Bolsa SIC</span>'
     });
    $(content_area).grab(linkBottomAnchor);
}

/* ## Funções relativas à Informação ## */

function initInformacao()
{
    //actualizar template actual
    currentTemplateIndex = TEMPLATE_INFORMACAO;
    currentTemplate = widgetTemplates[currentTemplateIndex];
    
    //mudar no nome
    $("tituloTemplate").set('html',currentTemplate.name);
    
    //limpar conteudo
    $(content_area).set('html','');
    
    //mudar class
    $(content_area).set('class',currentTemplate.contentclass);
    
    //criar header
    var header_informacao = initHeaderInformacao();
    
    $(content_area).grab(header_informacao);
    
    var areaInformacaoDiv = new Element('div',{'id':"AreaInformacao"});
    $(content_area).grab(areaInformacaoDiv);
    
    loadNews();
}

function initHeaderInformacao()
{
    var headerInformacaoDiv = new Element('div', {'class': 'HeaderInformacao'});
    
    var setaLeftInfoDiv = new Element('div', {'class': 'SetaLeftGrelha'});
    var setaLeftInfoAnchor = new Element('a', {
        'href': '#',
        'html': '<img src="images/SetaLeftInfo.gif" alt="Mudar Canal">',
        'events': {
            'click': function(){
                setPreviousNewsSource();
            }
        }
    });
    
    var setaRightInfoDiv = new Element('div', {'class': 'SetaRightGrelha'});
    var setaRightInfoAnchor = new Element('a', {
        'href': '#',
        'html': '<img src="images/SetaRightInfo.gif" alt="Mudar Canal">',
        'events': {
            'click': function(){
                setNextNewsSource();
            }
        }
    });
    
    var logotipoDiv = new Element('div', {
        'class': 'Logotipo',
        'html': '<img src="images/aeiou.png" id="channelLogo">'
        }
    );

    setaLeftInfoDiv.grab(setaLeftInfoAnchor);
    setaRightInfoDiv.grab(setaRightInfoAnchor);
    headerInformacaoDiv.grab(setaLeftInfoDiv);
    headerInformacaoDiv.grab(setaRightInfoDiv);
    headerInformacaoDiv.grab(logotipoDiv);
    
    return headerInformacaoDiv;
}

function setPreviousNewsSource()
{    
    --currentNewsSourceIndex;
    currentNewsSourceIndex = (currentNewsSourceIndex < 0) ? newsSources.length-1 : currentNewsSourceIndex;
    currentNewsSource = newsSources[currentNewsSourceIndex];

    //mudar imagem
    $('channelLogo').set('src',currentNewsSource.image);
    
    loadNews();
}

function setNextNewsSource()
{
    ++currentNewsSourceIndex;
    currentNewsSourceIndex = (currentNewsSourceIndex > newsSources.length-1) ? 0 : currentNewsSourceIndex;
    currentNewsSource = newsSources[currentNewsSourceIndex];

    //mudar imagem
    $('channelLogo').set('src',currentNewsSource.image);
    
    loadNews();
}

function loadNews()
{ 
    var feed_url = proxy_url + "?url=" + escape(currentNewsSource.feed) + "&template=" + currentTemplate.template + "&cache=" + cache_time;
    
    $("AreaInformacao").set('html','');
    loadContentArea(feed_url,"AreaInformacao");
}

/* ## //Funções relativas à Informação ## */

/* --- //Funções de Inicialização --- */
 
/* --- Funções Globais --- */  

Element.implement({  
    //implement show  
    show: function() {  
        this.setStyle('display','');  
    },  
    //implement hide  
    hide: function() {  
        this.setStyle('display','none');  
    }  
}); 

function registerClick(control,templateid)
{
     $(control).addEvent('click', function(event) {
        event.stop();  
        widgetTemplates[templateid].initfunction();
    });
}

function loadContentArea(feed_url, contentArea)
{
    //nota: no caso da bolsa não podemos fazer cancel porque são feitos 4 pedidos
    if($defined(currentRequest) && currentTemplateIndex != TEMPLATE_BOLSA) 
    {
        currentRequest.cancel();
    }
    
    currentRequest = new Request.HTML({  
        method: 'get',  
        url: feed_url, 
        link: 'chain',
        onRequest: function() {processRequest();}, 
        onComplete: function(responseTree, responseElements, responseHTML, responseJavaScript) {processComplete(contentArea, responseTree, responseHTML);},
        onFailure: function(instance) {},
        onCancel: function() {processFailure();}
    }).send(); 
}

function processRequest()
{
    $("LoadingError").removeClass("Display"); 
    $("Loading").addClass("Display");
}

function processComplete(contentArea,responseTree,responseHTML)
{
    if(responseHTML == 'erro')
    {
        $("Loading").removeClass("Display");
        $("LoadingError").addClass("Display");
    }
    else
    {
        //$(contentArea).set('html',response);
        $(contentArea).empty().adopt(responseTree);
      
        initDetails();  
        initRating();
        
        $("Loading").removeClass("Display");  
    }
    
    (function() {
        window.scrollTo(0,1)
    }).delay(100);
}

function processFailure()
{
    $("Loading").removeClass("Display");
    $("LoadingError").addClass("Display");
}

function initDetails()
{    
    $$('#ContentArea a.ArticleItem').each(function(item, index){
        item.addEvent('click', function(event) {
            event.stop();
            item.getNext().addClass('Display');
            (function() {
                window.scrollTo(0,1)
            }).delay(100);
        });
    });
    
    $$('#ContentArea a.BotaoClose').each(function(item, index){
        item.addEvent('click', function(event) {
            event.stop();  
            item.getParent().getParent().removeClass('Display');
        });
    });
}

function initRating()
{
    //esconder as rating bars
    $$('div.Votar').each(function(item,index){
        item.hide();
    });
    
    //mostrar a rating bar
    $$('a.Rating').addEvent('click', function(event) {
        event.stop();
        showRatingBar(this.get('rel'));
    });
    
    //seleccionar valor do rating
    $$('a.RateStar').addEvent('click', function(event) {
        event.stop();
        setRating(this.get('rel'),this.get('rev'));
    });
    
    //votar
    $$('a.BotaoOK').addEvent('click', function(event) {
        event.stop();    
        rateArticle(currentRateItemID,currentRateValue);
    }); 
    
    //cancelar voto
    $$('a.BotaoFechar').addEvent('click', function(event) {
        event.stop();    
        hideRatingBar(currentRateItemID);
    }); 
}

function rateArticle(itemid, value)
{
    var post_url = rate_url + "?itemid=" + itemid + "&value=" + value + "&placeid=iphone";

    var newRequest = new Request.HTML({  
        method: 'post',  
        url: post_url, 
        link: 'chain',
        onRequest: function(){}, 
        onComplete: function(){hideRatingBar(itemid);},
        onFailure: function(instance){},
        onCancel: function(){}
    }).send(); 
}

function setRating(itemid,value)
{
    currentRateItemID = itemid;
    currentRateValue = value;
    
    //acender estrelas e remover eventos de click das estrelas
    var selector = "'a.RateStar[rel=" + itemid + "]'";
   
    $$(selector).each(function(item,index){
        var img;
        switch (index)
        {
            case 0:
                img = 'VotarStarPrimeira';
                break;
            case 4:
                img = 'VotarStarUltima';
                break;
            default:
                img = 'VotarStar';
                break;        
        }
        var imagesrc = (index < value) ? ('images/' + img + '_hi.PNG') : 'images/' + img + '.PNG';
        item.getElement('img').set('src',imagesrc);
    });
}

function showRatingBar(itemid)
{
    currentRateItemID = itemid;
    var selector = "'div.Votar[rel=" + itemid + "]'";
    $$(selector).show();
}

function hideRatingBar(itemid)
{    
    var selector = "'div.Votar'";
    $$(selector).hide();
}

/* --- //Funções Globais --- */

/* --- Detecta a orientação do IPhone --- */

window.addEvent('load',function(){
    updateLayout.delay(0);
});

var currentWidth = 0;

function updateLayout() {
    if (window.innerWidth != currentWidth) {
        currentWidth = window.innerWidth;
        
        var orient = currentWidth == 320 ? "profile" : "landscape";
        document.body.set('orient',orient);
        (function() {
            window.scrollTo(0,1)
        }).delay(100);
    }
}

updateLayout.periodical(400);

/* --- //Detecta a orientação do IPhone --- */