//Héctor Regalado, hert abril 2007

/* fecha en que se publicó el diario por primera vez; YYYY-MM-DD */
var first_year = 1996;
var first_month = 2;
var first_day = 21;

/* días feriados; DD-MM */
var holidays = new Array('01-01','01-05','16-09','20-11','25-12');

/* feriados en que sí se publicó la edición; DD-MM-YYYY */
var holidays_worked = new Array('16-09-2006','20-11-2006','16-09-2007','20-11-2007');

var meses = new Array("Enero","Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre");
var text;

//funcion utilizada para la obtencion del parámetro js
function GetUrlParameter( name )
{
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var tmpURL = window.location.href;
  var results = regex.exec( tmpURL );
  if( results == null )
    return "";
  else
    return results[1];
}

//se agrega el parametro js a la URL
if(GetUrlParameter("js") != "yes")
	window.location = window.location.href + "?js=yes";

//valida fecha
function validateDate(fld) {
    var RegExPattern = /^((((0?[1-9]|[12]\d|3[01])[\.\-\/](0?[13578]|1[02])[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|((0?[1-9]|[12]\d|30)[\.\-\/](0?[13456789]|1[012])[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|((0?[1-9]|1\d|2[0-8])[\.\-\/]0?2[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|(29[\.\-\/]0?2[\.\-\/]((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)|00)))|(((0[1-9]|[12]\d|3[01])(0[13578]|1[02])((1[6-9]|[2-9]\d)?\d{2}))|((0[1-9]|[12]\d|30)(0[13456789]|1[012])((1[6-9]|[2-9]\d)?\d{2}))|((0[1-9]|1\d|2[0-8])02((1[6-9]|[2-9]\d)?\d{2}))|(2902((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)|00))))$/;
    if ((fld.match(RegExPattern)) && (fld!='')) 
      return true;
    else
      return false;
}

Array.prototype.indexOf = function(s) {
	for (var x=0;x<this.length;x++) if(this[x] == s) return x+1;
	return false;
}

function getElementsByClass(searchClass,node,tag) {
var classElements = new Array();
if ( node == null )
  node = document;
if ( tag == null )
  tag = '*';
var els = node.getElementsByTagName(tag);
var elsLen = els.length;
var pattern;
  
  for (i = 0, j = 0; i < elsLen; i++) {
    for(k=0; k<searchClass.length;k++){
      pattern = new RegExp('(^|s)'+searchClass[k]+'(s|$)');
      if ( pattern.test(els[i].className) ) {
          classElements[j] = els[i];
        j++;
      }
    }
  }
  if (classElements.length!=0)
    return classElements;
  else
    return false;
}

function indiceDia(fecha)
{
  var index;
  index = fecha.getDay();
  if(index==0)
    return 6;
  else
    return index - 1;
}

function ant_pos(mes,ano,accion)//regresa mes y año anteriores o posteriores del calendario
  {
    antpos = new Array();
    antpos[0] = new Array(mes-1,ano);//un mes atras
    antpos[1] = new Array(mes,ano-1);//un año atras
    if(mes == 1){
      antpos[0][0] = 12;
      antpos[0][1] = ano - 1;
    }
    
    if(accion==1){
      antpos[0] = new Array(mes+1,ano);//un mes adelante
      antpos[1] = new Array(mes,ano+1);//un año adelante
      if(mes == 12){
        antpos[0][0] = 1;
        antpos[0][1] = ano + 1;
      }
    }
    return antpos;
  }

function atrasBar(mes,ano)
{
  if (ano == first_year && mes <= first_month)
    text = '&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;';
  else{ 
      if((ano == first_year && mes > first_month) || ((ano - 1) == first_year && mes < first_month))
        text = '&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<a href=\"javascript:action(\'back\',0,0);">&lt;</a>';
      else
        text = '<a href="javascript:action(\'back\',1,0);">&lt;&lt;</a>&nbsp; &nbsp;<a href="javascript:action(\'back\',0,0);">&lt;</a>';
  }
  document.getElementById('back').innerHTML = text;
}

function adelanteBar(mes,ano)
{
  var fHoy = new Date();
  if (ano == fHoy.getFullYear() && mes >= fHoy.getMonth()+1)
    text = '&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;';
  else{ 
      if((ano == fHoy.getFullYear() && mes < fHoy.getMonth()+1) || (ano == fHoy.getFullYear()-1 && mes > fHoy.getMonth()+1))
        text = '<a href="javascript:action(\'forward\',0,1);">&gt;</a>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;';
      else
        text = '<a href="javascript:action(\'forward\',0,1);">&gt;</a>&nbsp; &nbsp;<a href="javascript:action(\'forward\',1,1);">&gt;&gt;</a>';
  }
  document.getElementById('forward').innerHTML = text;
}

function zero(valor)
{
   return valor = (valor < 10) ? '0' + valor : valor;
}

function isholliday(dia,mes,ano)
{  
  var fecha = zero(dia) + '-' + zero(mes);
  return (holidays.indexOf(fecha)  && !holidays_worked.indexOf(fecha+'-'+ano));
}

function state(dia,mes,ano)
{
  var fecha = new Date(ano,mes-1,dia);
  var fechaFirst =  new Date(first_year,first_month-1,first_day);
  var fHoy = new Date();
  
  if(fecha>fHoy)//fecha futura
    return 0;
  else{
    if(fecha.getDate() == fHoy.getDate() && fecha.getMonth() == fHoy.getMonth() && fecha.getFullYear() == fHoy.getFullYear())
      return 1;//fecha de hoy
    else{
      if(fecha>=fechaFirst)//fecha pasada
        return 2;
      else//fecha no subida
        return 3;
    }   
  }
}

function action(id,opc,accion)//si accion es 0 se atrasa, si 1 se adelanta el calendario y 2 si se selecciona un dia
{                             
  var current = document.getElementById ('current');
  var sAux = current.innerHTML.split(" ");
  var sMes = sAux[0];
  var mes = meses.indexOf(sMes);
  var ano= parseInt(sAux[1]);
  var antpos = ant_pos(mes,ano,accion);
  if(accion!=2)
  {
  if(opc==0){//un mes atras o adelante
  mes = antpos[0][0];
  ano = antpos[0][1];
  current.innerHTML = meses[antpos[0][0]-1] + ' ' + antpos[0][1] ;
  }
  else{//un año atras o adelante
    ano = antpos[1][1];
    current.innerHTML = sMes + ' ' + antpos[1][1] ;
  }  
  if(getElementsByClass(new Array('actualday'))){
    if(!isFinite(parseInt(getElementsByClass(new Array('actualday'))[0].innerHTML)))
      id = parseInt(getElementsByClass(new Array('actualday'))[0].innerHTML.substring(27,29));
    else
      id = parseInt(getElementsByClass(new Array('actualday'))[0].innerHTML);
  }
  else
      id = ultimoDia(mes,ano);
  }
  atrasBar(mes,ano);
  adelanteBar(mes,ano);
  calendario('dias',mes,ano,opc,accion,id);
}

function ultimoDia(mes,ano)
{
  for(var dia=1;validateDate(dia+'/'+mes+'/'+ano);dia++);
  return dia-1;
}

function calendario(id,mes,ano,opc,accion,diaSelect)//crea el calendario
{
  var i;
  var j;
  var k=0;
  var dia=1;
  var aux;
  var primerDia = indiceDia(new Date(ano,mes-1,dia));
  var fecha = dia+'/'+mes+'/'+ano;
  var classes = new Array('actualday','weekday','weekdaylinked','weekend','weekendlinked','noday')
  var dias = getElementsByClass(classes);
  
  for(j=0;j<=5;j++) {
    aux=0;
    for(i=0;i<=6;i++){
      if((i==primerDia || dia>1) && validateDate(fecha)){
        aux=1;
        if((state(dia,mes,ano)==2 || state(dia,mes,ano)==1) && !isholliday(dia,mes,ano) && i<5){
            definir(dias[k],'weekdaylinked'); 
            dias[k].innerHTML = '<a href="javascript:action(' + dia + '%20,0,2);">'+ dia +'</a>';
          }
        else{
            if(i<5){
              definir(dias[k],'weekday');
              dias[k].innerHTML = dia;
            }
            else{
                if((state(dia,mes,ano)==2 || state(dia,mes,ano)==1)  && !isholliday(dia,mes,ano)  && i>4){
                    definir(dias[k],'weekendlinked'); 
                    dias[k].innerHTML = '<a href="javascript:action(' + dia + '%20,0,2);">'+ dia +'</a>';
                }
                else{
                  definir(dias[k],'weekend');
                  dias[k].innerHTML = dia;
                }
            }
        }
        dias[k].id = 'dia'+dia;
        dia++;
        fecha = dia+'/'+mes+'/'+ano;
      }
      else{
        dias[k].id = '';
        dias[k].innerHTML = '';
        if(aux==1 || dia==1)
          definir(dias[k],'weekday'); 
        else
          definir(dias[k],'noday'); 
      }
      k++;
    }
  }
  hidediv('titulares');
  hidediv('portada');
  if(isFinite(diaSelect)){
    if(!validateDate(diaSelect+'/'+mes+'/'+ano))
      diaSelect = ultimoDia(mes,ano);
    if(state(diaSelect,mes,ano)==0 && mes == new Date().getMonth()+1 && ano==new Date().getFullYear()){
      diaSelect=new Date().getDate();
      definir(document.getElementById('dia' + diaSelect),'actualday');
      document.getElementById('link').href='/'+ano+'/'+zero(mes)+'/'+zero(diaSelect)+'/';
      document.getElementById('link2').href='/'+ano+'/'+zero(mes)+'/'+zero(diaSelect)+'/';
    }
    else{
      if(state(diaSelect,mes,ano)==3)
        diaSelect=first_day;
      else
        if(isholliday(diaSelect,mes,ano))
          for(;isholliday(diaSelect,mes,ano);diaSelect++);
    }
    if(state(diaSelect,mes,ano)!=0)
      day(diaSelect,mes,ano);
  }
}

function day(dia,mes,ano)
{
  var fecha=new Date(ano,mes-1,dia);
  var url= '/'+ano+'/'+zero(mes)+'/'+zero(dia)+'/';
  
  definir(document.getElementById('dia' + dia),'actualday');
  document.getElementById('link').href=url;
  document.getElementById('link2').href=url;
  if(fecha>=new Date(2006,10,6)){
    showdiv('titulares');
    showdiv('portada'); 
    document.getElementById('portadita').src = '/'+ano+'/'+zero(mes)+'/'+zero(dia)+ '/planitas/portadita.jpg';
    titulares (url, 'titulares');
  }
  else{
    if(fecha>=new Date(2005,1,1)){
      hidediv('titulares');
      showdiv('portada'); 
      document.getElementById('portadita').src = '/'+ano+'/'+zero(mes)+'/'+zero(dia)+ '/planitas/portadita.jpg';
    }
    else{
      hidediv('titulares');
      hidediv('portada');
    }
  }
}

function definir(element,value)
{
  var browserName=navigator.appName; 

  if (browserName=="Microsoft Internet Explorer")
    element.setAttribute('className',value);
  else
    element.setAttribute('class',value);
}

// Esta función cargará los titulares del archivo portada.htm
function titulares (url, id_contenedor)
{
    var pagina_requerida = false;
    if (window.XMLHttpRequest){// Si es Mozilla, Safari, etc
        pagina_requerida = new XMLHttpRequest ();
        if (pagina_requerida.overrideMimeType) {//Evita problemas con Firefox 1.5b
                pagina_requerida.overrideMimeType('text/xml');
            }
    } 
    else if (window.ActiveXObject){// Si es IE
        try {
            pagina_requerida = new ActiveXObject ("Msxml2.XMLHTTP");
        }
        catch (e){// en caso que sea una versión antigua
            try{
                pagina_requerida = new ActiveXObject ("Microsoft.XMLHTTP");
            }
            catch (e)
            {
            }
        }
    } 
    else
    return false;
    pagina_requerida.onreadystatechange = function ()
    {
        cargarpagina (pagina_requerida, id_contenedor,url);
    }
    pagina_requerida.open ('GET', url+'portada.htm', true); // asignamos los métodos open y send
    pagina_requerida.send (null);
}

// función de respuesta
function cargarpagina (pagina_requerida, id_contenedor,url)
{
    if (pagina_requerida.readyState == 4 && (pagina_requerida.status == 200 || window.location.href.indexOf ("http") == - 1))
      document.getElementById (id_contenedor).innerHTML = getTitles(pagina_requerida.responseText,url);
}

function getTitles (texto,url)
{
  var aux=0;
  var cadena='';
  var temp='';
  var i;
  var inicio=0;
  var fin;
  var base="http://www.jornada.unam.mx";
  
  for(i=2;i<texto.length;i++){
    if (texto.charAt(i) == '<' && texto.charAt(i+1) == 'h' && !isNaN(new Number(texto.charAt(i+2)))  && aux==0){
      aux=1;
      temp+= texto.charAt(i);
    }
    else{
        if (texto.charAt(i)=='/'  && texto.charAt(i+1) == 'h' && !isNaN(new Number(texto.charAt(i+2))) && aux>=1){
          if(aux>=2){
            temp += '/h'+ texto.charAt(i+2) +'>';
            cadena+=temp;
          }
          i=i+3;
          temp='';
          aux=0;
        }
        else{
            if (texto.charAt(i)=='<'  && texto.charAt(i+1) == 'a' && aux==1){
                temp += texto.charAt(i);
                aux=2;
            }
            else
                if(aux>=1)
                    temp += texto.charAt(i);
        }
    }
  }
  for(i=0;i<cadena.length;i++){
    if (cadena.charAt(i) == 'e' && cadena.charAt(i+1) == 'f' && cadena.charAt(i+2)=='='){
        fin=i+3;
        cadena = cadena.substring(inicio,fin) + '"' + base + url + cadena.substring(fin+1,cadena.length);
    }
  }
  return cadena;
}

function hidediv(id) {//funcion que esconde un elemento mediante su id
  if (document.getElementById) { // DOM3 = IE5, NS6
    document.getElementById(id).style.display = 'none';
  }
  else {
    if (document.layers) { // Netscape 4
      document.id.display = 'none';
    }
    else { // IE 4
      document.all.id.style.display = 'none';
    }
  }
}

function showdiv(id) {//funcion que muestra un elemento mediante su id
  if (document.getElementById) { // DOM3 = IE5, NS6
    document.getElementById(id).style.display = 'block';
  }
  else {
    if (document.layers) { // Netscape 4
      document.id.display = 'block';
    }
    else { // IE 4
      document.all.id.style.display = 'block';
    }
  }
}

