/**
 * @author rnogueira
 * @projectDescription scripts para o placar de apuração de eleições 2008
 */

/**
 * FirebugX
 */
(function(){
  if (!window.console || !console.firebug)
  {
      var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml",
      "group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"];
  
      window.console = {};
      for (var i = 0; i < names.length; ++i)
          window.console[names[i]] = function() {}
  }
})();

apuracao = {
  
  layout : null,
  turno : null,
  turnos : 2 , //define a quantidade de turnos disponiveis para visualização
  ano : 2008,
  estados : [['Acre','AC'],['Alagoas','AL'],['Amapá','AP'],['Amazonas','AM'],['Bahia','BA'],['Ceará','CE'],['Goiás','GO'],['Espírito Santo','ES'],['Maranhão','MA'],['Mato Grosso','MT'],['Mato Grosso do Sul','MS'],['Minas Gerais','MG'],['Pará','PA'],['Paraíba','PB'],['Paraná','PR'],['Pernambuco','PE'],['Piauí','PI'],['Rio de Janeiro','RJ'],['Rio Grande do Norte','RN'],['Rio Grande do Sul','RS'],['Rondônia','RO'],['Roraima','RR'],['São Paulo','SP'],['Santa Catarina','SC'],['Sergipe','SE'],['Tocantins','TO']],
  principaisCidades : ['24570','01392','27855','06050','02550','35157','38490','13897','92215','92274','93734','56251','56995','57037','57053','09210','90670','90514','41238','41335','43710','47333','48658','54011','54038','04154','04278','19810','20516','75353','76678','76910','77771','24910','25313','12190','58041','58190','58335','58653','58696','58777','60011','58971','59013','59250','17612','85898','85995','88013','00035','03018','62197','62910','63134','63770','64254','64750','64777','66192','66893','67130','67890','68756','69698','70572','70718','70750','70971','70998','71072','71218','71455','80470','81051','81795','31054','73440','87912'],
  estado : '',
  cidade : '',
  estadoCidadesLetra : '',
  elemBarraNavegacao : document.createElement('div'),
  callbacksExecutados : 0,
  reloadTimer : 30,
  host : '',
  
  init : function(args){
    if(!args)
      var args={};
    barraUol.getParseJSURL(location.href.replace(location.hash,''),"_HREF",this);
    this.turno = location.href.match(/.*?(.)turno.*?$/) ? location.href.replace(/.*?(.)turno.*?$/g,'$1') : 1;
    this.estado = location.href.match(/.*?turno\/(..)\/.*?$/) ? location.href.replace(/.*?turno\/(..)\/.*?$/g,'$1') : '';
    this.cidade = this._REQUEST_HREF['cidade'] || '';
    this.estadoCidadesLetra = this._REQUEST_HREF['letra'] || '';
    this.layout = args['layout'] || null;
    this.host = args['host'] || this.host;

    if (this.layout == null) {
      if (this.estado == '' && this.cidade == '')
        this.layout = 'home'
      else if (this.estado != '' && this.cidade == '' && this.estadoCidadesLetra == '')
        this.layout = 'estado'
      else if (this.estado != '' && this.cidade == '' && this.estadoCidadesLetra != '')
        this.layout = 'estadoCidadesLetra'
      else if (this.estado != '' && this.cidade != '')
        this.layout = 'cidade'
    }
    
    this.Template = new UOLLib.ajax();
    this.Template.open({
      'url': '/2008/templates.xml?ts='+(new Date()).getTime(),
      'async': false
    });
    
    document.getElementsByTagName('body')[0].className+='apuracao turno'+this.turno+' '+this.layout;
    
    apuracao.templateCallback();
    
    this.events.add(document,'keydown',function(e){
      if (e.keyCode == 116) {
        if(navigator.userAgent.indexOf("MSIE")>=0)
          e.keyCode = 0;
        else
          e.preventDefault();  
        return false;
      }
    });
    
  },
  
  templateCallback : function(){
    document.getElementById('centraliza').innerHTML=this.Template.request.responseXML.getElementsByTagName('centraliza')[0].firstChild.nodeValue;
    document.getElementById('barraUOL1Wrapper').innerHTML=barraUol.write({'auto': false });
    document.getElementById('barraUOL2Wrapper').innerHTML=barraUol.write({'auto': false });
    document.getElementById('CopyWriteWrapper').innerHTML=barraUol.copyright();
    apuracao.carregarObjetos();
  },
  
  banners : {

    init : function(){

      this.bFs = (document.getElementById('barrauol')) ? document.getElementById('barrauol').offsetWidth/98.8 : 0;
      
      // config banners
      this.DEpopcfg ="POPeleicoes";
      this.DEsite="uolbr";
      this.DEchan="eleicoes";
      this.DEsubc="capa";
      this.Expble=0;
      this.DEconn=document.body;
      this.DEconn.style.behavior='url(#default#clientCaps)';
      this.DEconn=(this.DEconn.connectionType=='lan')?1:0;
      this.DEban = [];
      
      // mostra banners //
      this.DEt=new Date(); this.DEt=this.DEt.getTime(); this.DErand=Math.floor(this.DEt*1000*Math.random());
      this.scw=0;
      this.sch=0;
      if(screen.height){this.scw=screen.width;this.sch=screen.height;}

      this.show('728x90',1,10);
      this.show('125x125',7,12);
      this.show('125x125',9,12,2);

    },
    
    show : function(ad,pos,sum,num){
      if (document.getElementById('banner-' + ad + '-area') && ((ad == '218x174' && screen.width > 1000) || ad != '218x174'))
        document.getElementById('banner-' + ad + (num ? '-' + num : '') + '-area').innerHTML = '<iframe src="/2008/banners.html?ad=' + ad + '&pos=' + pos + '" name="banner-' + ad + (num ? '-' + num : '') + '" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" height="' + (ad.split("x"))[1] + '" width="' + (ad.split("x"))[0] + '"></iframe>';
    }
    
  },

  loadScript : function(url){
  	var HTML_SCRIPT = document.createElement("script");
    var subdomain='';
    if (!url.match(/.*?http:\/\/.*?/) && url.match(/.*?turno\/js.*?\//)) {
      if (this.cidade=='' || ("'"+this.principaisCidades.join('\'')+"'").match("'"+this.cidade+"'"))
        subdomain = 'http://placar.eleicoes.uol.com.br';
      else 
        subdomain = 'http://js.placar.eleicoes.uol.com.br';
      url = subdomain+url;
    }else if(!url.match(/.*?http:\/\/.*?/)){
      url = this.host + url;
    }
  	HTML_SCRIPT.src=url;
    HTML_SCRIPT.language="JavaScript";
    HTML_SCRIPT.type="text/javascript";
  	document.getElementsByTagName("head")[0].appendChild(HTML_SCRIPT);
    return HTML_SCRIPT;
  },
  
  carregarObjetos : function(){
    if (this.layout == 'home')
      this.loadScript('/' + this.ano + '/scripts_home.js');
    else if (this.layout == 'estado')
      this.loadScript('/' + this.ano + '/scripts_estado.js');
    else if (this.layout == 'estadoCidadesLetra')
      this.loadScript('/' + this.ano + '/scripts_estado_cidades_letras.js');
    else if (this.layout == 'cidade')
      this.loadScript('/' + this.ano + '/scrtips_cidade.js');
  },
  
  ucwords : function(str){
    return str.toLowerCase()
      .replace(/(^|\s)(.)/g,function(){
      return arguments[0].toUpperCase();
      })
      .replace(/\s(D.|D..)/g,function(){
      return arguments[0].toLowerCase();
      });
  },
  
  addDot : function(str){
    var str = str.toString();
    var r = Math.floor(str.length/3)-(str.length%3==0?1:0)
    for(var i=0; i<r; i++){
      str = str.replace(/(.{3})($|\.)/g,'.$1')
    }
    return str;
  },

  events : {

    /**
     * Retorna false para os eventos padroes
     * @param {Object} e Evento
     */
    preventDefault : function(e){
      if(e.preventDefault) e.preventDefault();
      else e.returnValue = false; 
    }, 
    
    /**
     * Adicionar eventos
     * @param {Object} elem Elemento HTML
     * @param {String} event Evento (click, mouseover, mouseout, ...)
     * @param {Function} fun Função adicionada ao evento
     */
    add : function(elem,event,fun){
      if(document.attachEvent)
        elem.attachEvent('on'+event,fun);
      else if(document.addEventListener)
        elem.addEventListener(event,fun,true);
    }
  
  },
  
 /**
   * Callback para os jsons carregados de eleições
   * @param {Object} data Objeto json carregado
   */
  callback : function(data){
    if (data.objectCode == 1)
      this.home.showHomeCapitais(data);
    else if (data.objectCode == 2)
      this.home.showHomeResumo(data);
    else if (data.objectCode == 3)
      this.homeEstado.showResumo(data);
    else if (data.objectCode == 4)
      this.homeEstado.showCidades(data);
    else if (data.objectCode == 5)
      this.homeCidade.showPrefeitos(data);
    else if (data.objectCode == 6 || data.objectCode == 7 || data.objectCode == 8 || data.objectCode == 9)
      this.homeCidade.showVereadores(data);
    else if (data.objectCode == 10)
      this.homeEstado.showOutrasCidades(data);
    else if (data.objectCode == 11)
      this.cidadesLetra.showOutrasCidades(data);

    if(!isNaN(data.objectCode))
      this.contarCallbacks(data.objectCode);
  },
  
  contarCallbacks : function(){
    this.callbacksExecutados++;
    if (this.layout == 'home' && this.callbacksExecutados == 2) {
      apuracao.banners.init();
      apuracao.reload();
    } else if (this.layout == 'estado' && (this.turno == 1 && this.callbacksExecutados == 3 || this.turno == 2 && this.callbacksExecutados == 2)) {
      apuracao.banners.init();
      apuracao.reload();
    }
    if(this.layout=='estadoCidadesLetra' && this.callbacksExecutados==1)
      apuracao.banners.init();
    if(this.layout=='cidade' && this.callbacksExecutados==2){
      apuracao.banners.init();
      apuracao.reload();
    }
  },
  
  showBarraNavegacao : function(){

    this.elemBarraNavegacao.innerHTML = "<div class='turno'><div class='icone iconeTurno'></div><div class='txt'>Turno</div></div><div class='txt2'>Para consultar a apuração na sua cidade, selecione o Estado:</div>" + (function(){
      var tmp = "<form><select><option value=''>Todos os Estados</option>";
        for(var i=0;i<apuracao.estados.length;i++){
          tmp+="<option value='"+apuracao.estados[i][1]+"'"+(apuracao.layout == 'estado' && apuracao.estado.toLowerCase()==apuracao.estados[i][1].toLowerCase()?" selected='selected' ":"")+">"+apuracao.estados[i][0]+"</option>";
        }
        return tmp+"</select></form>";
    })();
    
    apuracao.events.add(this.elemBarraNavegacao.getElementsByTagName('select')[0],'change',function(){
      var elem=apuracao.elemBarraNavegacao.getElementsByTagName('select')[0];
      if (apuracao.turno == 2 &&
        // Estados que não tem segundo turno tem esse if() especial
        (
        elem.value.toLowerCase() == 'ac' ||
        elem.value.toLowerCase() == 'al' ||
        elem.value.toLowerCase() == 'ce' ||
        elem.value.toLowerCase() == 'ms' ||
        elem.value.toLowerCase() == 'pe' ||
        elem.value.toLowerCase() == 'pi' ||
        elem.value.toLowerCase() == 'rn' ||
        elem.value.toLowerCase() == 'ro' ||
        elem.value.toLowerCase() == 'se' ||
        elem.value.toLowerCase() == 'to' ||
        elem.value.toLowerCase() == 'rr' 
        )
        && typeof FullOpacity != "undefined") {
        apuracao.showRedirEstado1turno();
      } else {
        document.location = '/' + apuracao.ano + '/' + apuracao.turno + 'turno/' + elem.value.toLowerCase() + (elem.value.toLowerCase()==''?'':'/');
      }
    });
    
    document.getElementById('barraNavegacaoWrapper').appendChild(this.elemBarraNavegacao);
  },
  
  getBarraPorcentagem : function(p){
    var p = Math.floor(parseFloat(p));
    return "<div class='barraPorcentagem'><div "+(p==100?'class=\'completo\'':'')+"><div class='barra' style='width:"+p+"%'></div><div class='valor'>"+p+"%</div></div></div>";
  },
  
  showCarregando : function(id,fun){
	    if(document.getElementById('carregando'))
        document.getElementById('carregando').parentNode.removeChild(document.getElementById('carregando'));
      var carregando = document.createElement('div');
      carregando.id='carregando';
      document.getElementById(id).appendChild(carregando);
      if(typeof fun == 'function')
        setTimeout(fun,500)
  },
  
  reload : function(){
    if (this.turno == 3) {
      setTimeout(function tryReload(){
        var queryString = '';
        for(var i in apuracao._REQUEST_HREF){
          if(apuracao._REQUEST_HREF[i] != false)
            queryString+='&'+i+'='+escape(apuracao._REQUEST_HREF[i]);
        }
        if(queryString!='')
          queryString=queryString.replace(/\&/,'?');
        if(apuracao.isFullOpacityOpen) {
          setTimeout(tryReload, apuracao.reloadTimer * 1000);
        } else {
          document.location.replace(document.location.href.replace(document.location.search,'')+queryString);
        }
      }, apuracao.reloadTimer * 1000);
    }
  },
  
  showRedirEstado1turno : function(){
    if(document.getElementById('redir1turno'))
      var elemRedir1turno = document.getElementById('redir1turno')
    else
      var elemRedir1turno = document.createElement("div");
    elemRedir1turno.id = 'redir1turno';
    elemRedir1turno.innerHTML = '<p class="top"><a href="javascript:void(0);" onclick="apuracao.isFullOpacityOpen=false;FullOpacity.hide()">Fechar</a></p>\
    <div class="txt">\
      <p>Caro usuário, <br /><br />Não houve segundo turno no Estado de <strong><span class="estado">'+apuracao.estados[apuracao.elemBarraNavegacao.getElementsByTagName('select')[0].selectedIndex-1][0]+'</span></strong>.</p>\
      <p>Para continuar vendo os resultados do 2º turno, <a href="javascript:void(0);" onclick="apuracao.isFullOpacityOpen=false;FullOpacity.hide()">clique aqui</a>.</p>\
      <p>Para ver os resultados das cidades de <span class="estado">'+apuracao.estados[apuracao.elemBarraNavegacao.getElementsByTagName('select')[0].selectedIndex-1][0]+'</span>, <a href="/' + apuracao.ano + '/1turno/' + apuracao.elemBarraNavegacao.getElementsByTagName('select')[0].value.toLowerCase() + '/">clique aqui</a>.</p>\
      <p>Obrigado, <br /><br />Equipe UOL</p>\
    </div>';
    if(!document.getElementById('redir1turno'))
      document.getElementsByTagName('body')[0].appendChild(elemRedir1turno)
    apuracao.isFullOpacityOpen = true;
    FullOpacity.show('redir1turno');
  }
  
};


