/**
 * default.js
 * C�digo JavaScript espec�fico del sitio.
 *
 * @version 0.1
 * @author David Ca�adas Mazo
 * @package WebConcursal
 * @subpackage SitioWeb
 */

// Hack para que FontSizer funcione correctamente en Explorer
var links = document.getElementsByTagName('link'), i, a;
for(i = 0; i < links.length; i++) {
  a = links[i];
  if(a.getAttribute('rel').indexOf('style')!= -1 && a.getAttribute('title') && a.getAttribute('rel').indexOf('alternate') != -1) {
    a.disabled = true;
  }
}

String.prototype.lpad = function(len, ch) {
  var str = this; while(str.length < len) str = ch + str; return str;
}

document.getElementsByClass = function(cssClass, node, tagName) {
  var foundElements =  new Array(), node = node? node : document;
  if(tagName  == null) tagName  = '*';
  var tags = node.getElementsByTagName(tagName);
  var pattern  = new RegExp("(^|\\s)" + cssClass + "(\\s|$)");
  for(var i = 0; i < tags.length; i++)
    if(pattern.test(tags[i].className)) foundElements.push(tags[i]);
  return foundElements;
};

Element.getPosition = function(node) {
  var curleft = curtop = 0;
  if(node && node.offsetParent) {
    do { curleft += node.offsetLeft; curtop  += node.offsetTop ;
    } while(node = node.offsetParent);
    return {top: curtop, left: curleft};
  } else return {top: 0, left: 0};
};

/**
 * Manejador de tama�os de fuente.
 * @class FontSizer
 */
var FontSizer = {
  
  /* Propiedades **************************************************************/
  
  /**
   * Opciones por defecto.
   * @var array _
   */
  _: {
    altSheets: ['small', 'medium', 'large']
  },
  
  /**
   * Nombre de la cookie que guardar� el nombre del tama�o en uso.
   * @var cookieName
   */
  cookieName: 'font-size',
  
  /* Ejecutiva ****************************************************************/

  /**
   * Determina las opciones por defecto para el manejador de tama�os de fuente.
   * @param array opts - Opciones por defecto para el manejador.
   * @return void
   */
  setOptions: function(opts) {
    FontSizer._ = FontSizer._.merge(opts);
  },
  
  /**
   * Cambia al estilo de tama�o inmediatamente anterior.
   * @return void
   * @internal {El estilo anterior se refiere al estilo inmediatamente anterior
   *   que dispone del atributo "title".}
   * @internal {Se asigna la cookie "font-size" con el valor del atributo
   *   "title" de la hoja de estilos activa, pero la asignaci�n efectiva en
   *   carga debe efectuarla el layout de PHP.}
   */
  dec: function() {
    var curr = FontSizer.getCurrentSheet();
    for(var i = 0; i < FontSizer._.altSheets.length; i++) {
      if(FontSizer._.altSheets[i] == curr && i > 0) {
        var sizeName = FontSizer._.altSheets[i - 1];
        FontSizer.enableSheet(sizeName);
        document.cookie = FontSizer.cookieName + '=' + sizeName;
        break;
      }
    }
  },
  
  /**
   * Cambia al estilo de tama�o inmediatamente siguiente.
   * @return void
   * @internal {El estilo siguiente se refiere al estilo inmediatamente 
   *   posterioridad que dispone del atributo "title".}
   * @internal {Se asigna la cookie "font-size" con el valor del atributo
   *   "title" de la hoja de estilos activa, pero la asignaci�n efectiva en
   *   carga debe efectuarla el layout de PHP.}
   */
  inc: function() {
    var curr = FontSizer.getCurrentSheet();
    for(var i = 0; i < FontSizer._.altSheets.length; i++) {
      if(FontSizer._.altSheets[i] == curr && i < FontSizer._.altSheets.length - 1) {
        var sizeName = FontSizer._.altSheets[i + 1];
        FontSizer.enableSheet(sizeName);
        document.cookie = FontSizer.cookieName + '=' + sizeName;
        break;
      }
    }
  },
  
  /**
   * Recupera el t�tulo de la hoja de estilos actualmente en uso.
   * @return string - Valor del atributo "title" para la hoja de estilos en uso.
   */
  getCurrentSheet: function() {
    
    var i, a, links = document.getElementsByTagName('link');
    for(i = 0; a = links[i]; i++)
      if(a.getAttribute('rel').indexOf('style')!= -1 && a.getAttribute('title')
        && !a.disabled) return a.getAttribute('title');
    return null;
  },
  
  /**
   * Determina la hoja de estilos a utilizar.
   * @param string title - T�tulo de la hoja de estilos a utilizar.
   * @return void
   * @internal {El resto de hojas de estilo en el layout que disponen del
   *   atributo "title" se desactivan autom�ticamente.}
   */
  enableSheet: function(title) {
    var i, a, links = document.getElementsByTagName('link');
    for(i = 0; a = links[i]; i++)
      if(a.getAttribute('rel').indexOf('style')!= -1 && a.getAttribute('title'))
        a.disabled = a.getAttribute('title') == title? false : true;
  }
}

//
var changeFor = {
  visu: function(anchorElem){
    var liElem = anchorElem.parentNode, ulElem = liElem.parentNode;
    var lis = ulElem.getElementsByTagName('LI');
    for(var i = 0; i < lis.length; i++) {
    	var enable = liElem == lis[i];
    	if(lis[i].id!='corporate' + i){
        document.getElementById(lis[i].id + 's').style.visibility = enable? 'visible' : 'hidden';
        document.getElementById(lis[i].id + 's').style.display = enable? 'block' : 'none';
        document.getElementById(lis[i].id + 's').style.height = enable? '' : '0px';      
    	} else {
        document.getElementById('corporates' + i).style.visibility = enable? 'visible' : 'hidden';
        document.getElementById('corporates' + i).style.display = enable? 'block' : 'none';
    	}
      lis[i].className = enable? 'selected' : '';      
    }
	}
}

/**
 * Metodo para visualizar un div o otro elemento que lleva el mismo id si se tira ejemplo en la vista whereis
 */
var showHideDiv = {
  show: function(currentElem){
    var divElem = currentElem.id;
    //Para google se necesita hacer lo con "_" delante para directions porque sino el API lo vea 
    var str = '_';
    //Elemento a hacer aparecer
    divElem = divElem.replace(str,'');

    var elems = document.getElementsByTagName('DD');
    for(var i=0; i < elems.length; i++){
      if(elems[i].className == 'balloon'){
    	if(elems[i].id==divElem){
    	  elems[i].style.display = 'block';
    	  elems[i].style.visibility = 'visible';    	  
    	} else {
    	  elems[i].style.display = 'none';
    	  elems[i].style.visibility = 'hidden';    	  
    	  currentElem.id=elems[i].id;
    	}
      }
    }
  }
}

function getScreen( url, size ) {
  if(url === null){
  	return ""; 
  } 
  size = (size === null) ? "big" : size; 
  var vid; var results;

  results = url.match("[\\?&]v=([^&#]*)");

  vid = ( results === null ) ? url : results[1];

  if(size == "small"){
    return "http://img.youtube.com/vi/" + vid + "/2.jpg"; 
  } else {
    return "http://img.youtube.com/vi/" + vid + "/0.jpg"; 
  }
}  
