function getAddress(){
  var eA=[64,103,97,99,101,116,97,104,105,112,111,100,114,111,109,111,46,99,111,109];
  var encM='';
  for (var i=0; i<eA.length; i++) encM+=String.fromCharCode(eA[i])
  return encM;
}

function generateAddressLink(n,t){
  var domain = getAddress();
  return "<a href='mailto:"+n+domain+"'>"+t+" a "+n+domain+"</a>";
}

function replaceStringWithAddress(string,n){
  var c = document.getElementById('content');
  var h;
  h = c.innerHTML.replace(string,generateAddressLink(n,string));
  c.innerHTML = h;
}

function addPrintLink(id){
  document.getElementById("metadata-"+id).innerHTML+=' <a href="#" onclick="printNews('+id+');return false;" class="print-node" title="Imprimir"><img src="'+gh_themePath+'/gh_images/icons/print.gif" width="10" height="10" alt="Imprimir" /></a>';
}

function activateJSLinks(){
  var as = document.getElementsByTagName("A");
  var x = as.length; while(x--) {
    if (as[x].rel=='external') {
      as[x].target="_blank";
      if (as[x].className!='plain' && as[x].className!='feed-icon') as[x].innerHTML+="<img src='"+gh_themePath+"/gh_images/icons/external.gif' alt='Ventana nueva' width='12' height='12' class='external-icon' />";
      var t=as[x].title;
      if(t.length>0) as[x].title+=" (ventana nueva)";
      else as[x].title="Ventana nueva";
    }
  }
}

function getCellHTML(trId,pos){
  var tr=$("#"+trId);
  var val=$("td:nth-child("+pos+")",tr).html();
  return val;
}

function printNews() {
  var id="news-detail";
  var tit=document.getElementsByTagName("H1")[0].innerHTML;
  var autoprint = true;
  var a = window.open(tit);
  a.document.open("text/html");
  a.document.write('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><title>'+tit+'</title>');
  a.document.write('<link href="'+gh_themePath+'/gh_css/styles.css" rel="stylesheet" type="text/css" /><link href="'+gh_themePath+'/gh_css/print.css" rel="stylesheet" media="print" type="text/css" />');
  a.document.write('<script type="text/javascript">function changeText(){var as=document.getElementsByTagName("A");var i=as.length;while(i--){if(as[i].className=="print-node"){as[i].onclick=function(){window.print();return false;}}else{as[i].onclick=function(){return false;}}}}</script>');
  a.document.write('</head><body class="print-preview" onload="changeText()">');
  a.document.write(document.body.innerHTML);
  a.document.write('</body></html>');	
  a.document.close();
  if (autoprint) a.print();
}

function reorderPosts(){
  var n3=document.getElementById('news-3');
  var n4=document.getElementById('news-4');
  var n5=document.getElementById('news-5');
  var n6=document.getElementById('news-6');
  var hn3 = n3.innerHTML;
  var hn4 = n4.innerHTML;
  var hn5 = n5.innerHTML;
  var hn6 = n6.innerHTML;
  n3.innerHTML=hn4;
  n4.innerHTML=hn6;
  n5.innerHTML=hn3;
  n6.innerHTML=hn5;
}

function domIsLoaded(themePath){
  var navA = document.getElementById('nav').getElementsByTagName("A");
  var navUL = document.getElementById('nav').getElementsByTagName("UL");
  var i = navA.length;
  while(i--){
    if (navA[i].className.indexOf('nav-')!=-1) navA[i].onclick = function(){
      $('#nav a').removeClass('current-tab');
      $('#nav ul ul').removeClass("active").addClass("scr-av");
      document.getElementById(this.className).className='active';
      $(this).addClass("current-tab");
      return false;
    }
  }
  var i=true;
  if (window.location.href.indexOf('?destination=')!=-1) i=false;
  login.init(i);
  activateJSLinks();
  var t=document.getElementById('block-views-tweets-block');
  if(t)t.innerHTML+='<span class="follow-gh"><a href="http://twitter.com/gacetahipodromo" title="Tweets de Gaceta Hip&oacute;dromo en ventana nueva" onclick="window.open(this.href);return false">S&iacute;guenos en Twitter</a></span>';
}

var login = {
  init : function(i){
    var l = document.getElementById('login');
    login.form = document.getElementById('user-login-form');
    if (login.form && (l.className!='authenticated') ){
      var lH = l.innerHTML;
      l.innerHTML='<a href="#" onclick="login.display();return false">Entrar</a>'+" | "+lH;
    }
    if(i==false)login.display();
  },

  display : function(){
    var e = $('#login-error');
    var f = document.getElementById('user-login-form');
    if ((login.form.className=='') || (login.form.className=='hidden')) {
      login.form.className='visible';
      document.getElementById('edit-name').focus();
    } else {
      login.form.className='hidden';
      if (e.length>0) e.remove();
    }
  }
}

var helpSection = {
  init : function(){
    $("#help").overlay({
      expose: '#efefef',
      effect: 'apple',
      onBeforeLoad: function() {
        var wrap = this.getContent().find(".contentWrap");
        wrap.load(this.getTrigger().attr("href"));
      }
    });
    $("#help-b").overlay({
      expose: '#efefef',
      effect: 'apple',
      onBeforeLoad: function() {
        var wrap = this.getContent().find(".contentWrap");
        wrap.load(this.getTrigger().attr("href"));
      }
    });
  }
}

var contactForm = {
  init : function(){
    //Legal warning:
    //document.body.innerHTML+='<div class="overlay" id="overlay"><div class="contentWrap"></div></div>';
    $("#read-warning").overlay({
      expose: '#efefef',
      effect: 'apple',
      onBeforeLoad: function() {
        var wrap = this.getContent().find(".contentWrap");
        wrap.load(this.getTrigger().attr("href"));
      }
    });
    $("#read-warning-b").overlay({
      expose: '#efefef',
      effect: 'apple',
      onBeforeLoad: function() {
        var wrap = this.getContent().find(".contentWrap");
        wrap.load(this.getTrigger().attr("href"));
      }
    });

    if(document.getElementById && document.createTextNode) {
      contactForm.requiredFields=document.getElementById('required').value.split(',');
      contactForm.form=document.getElementById('contactForm');
      contactForm.form.onsubmit=function(){ return contactForm.validate(this); }
    }
  },

  validate : function(of){
    contactForm.send=true;
    for(var i=0;i<contactForm.requiredFields.length;i++) {
      var f=document.getElementById(contactForm.requiredFields[i]);
      f.onfocus = function(){ this.className=''; }
      switch(f.type.toLowerCase()) {
        case 'text':
          if(f.value=='' && f.id!='email') contactForm.showError(f);
          if(f.id=='email' && !contactForm.checkMail(f.value)) contactForm.showError(f);
          break;
        case 'textarea':
          if(f.value=='') contactForm.showError(f);
          break;
        case 'checkbox':
          if(!f.checked) contactForm.showError(f);
          break;
        case 'select-one':
          if(!f.selectedIndex && f.selectedIndex==0) contactForm.showError(f);
          break;
      }
    }
    return contactForm.send;
  },

  showError : function(o) {
    contactForm.send=false;
    o.className="error";
    if(!document.getElementById('error-message')) {
      var em=document.createElement('div');
      em.id="error-message";
      em.appendChild(document.createTextNode('Debe aceptar nuestra pol\u00EDtica de privacidad y rellenar los campos marcados*.'))
      contactForm.form.appendChild(em);
    }
  },

  checkMail : function(str){
    return str.match(/^[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-zA-Z]{2,7}$/);
  }
}

var imageGallery = {
  init : function(id){
  	if (!id || id=='') id = 'triggers';
    var overlay = $('<div class=\"simple_overlay\" id=\"gallery\" style=\"display:none\"><a class=\"prev\">Anterior</a><a class=\"next\">Siguiente</a><div class=\"info\"></div><img class=\"progress\" src=\"'+gh_themePath+'/gh_images/overlay/loading.gif\" /></div>');
    $(document.body).append(overlay);
    $("a","#"+id).click(
      function(){
        var v = document.getElementById('video');
        if (v) v.innerHTML = videoWrapper.show;
      }
    ).overlay({ 
      target: '#gallery', 
      expose: '#efefef',
      effect: 'apple'
    }).gallery({speed:100});
  }
}

var videoWrapper = {
  init : function(){
    videoWrapper.wrapper = document.getElementById('video');
    videoWrapper.oldHTML = videoWrapper.wrapper.innerHTML;
    videoWrapper.show = '<a href="#" onclick="videoWrapper.toggle(this);return false" class="video-toggler"><span>Mostrar v&iacute;deo</span></a>';
    videoWrapper.hide = '<a href="#" onclick="videoWrapper.toggle(this);return false" class="video-toggler visible-video"><span>Ocultar v&iacute;deo</span></a>';
    videoWrapper.wrapper.innerHTML = videoWrapper.show;	
  },

  toggle : function(e) {
    var v = document.getElementById('video');
    if (e.className=='video-toggler') v.innerHTML = videoWrapper.hide+videoWrapper.oldHTML;
    else v.innerHTML = videoWrapper.show;	
  },

  hide : function(){
    videoWrapper.wrapper.innerHTML = videoWrapper.show;	
  }
}

var news = {
  init : function(){
    news.activateBlock('nacionales');
    news.activateBlock('internacionales');
  },
  activateBlock : function(id){
    var b = document.getElementById(id);
    var bL = document.getElementById("link-"+id);
    b.onclick = function(){
      window.location=bL.href;
      return false;
    }
    b.onmouseover = function(){
      this.className="block block-hover";
    }
    b.onmouseout = function(){
      this.className="block";
    }
  }
}

////////////////
// RESULTADOS //
////////////////
var gh_resultados = {

  init : function(url,section){
    document.getElementById('gh_results_res').innerHTML='<form name="listmenu0" id="gh_results_form" action="'+url+'/'+section+'" method="post" onsubmit="gh_resultados.update(this);return false"><div><select size="6" name="firstlevel" id="firstlevel" style="width:130px;"></select><select size="6" name="secondlevel" style="width:160px;"></select><select size="6" name="thirdlevel" style="width:185px;"></select><select size="6" name="raceid" style="width:85px;"></select> <input type="submit" name="submit" value="Buscar" class="form-submit" /> <a href="#" onclick="resetListGroup(\'chainedmenu\')" id="cleanForm">Limpiar formulario</a></div></form><div id="resultados" style="display:none"><table id="list" class="scroll"></table><div id="pager" class="scroll" style="text-align:center;"></div></div>';
    gh_resetFormButton = document.getElementById('cleanForm');
    gh_resultados.resultados = document.getElementById('resultados');
    gh_resultados.datagrid = $('#list');
  },


  update : function(e){
    gh_resultados.firstLevel=document.getElementById('firstlevel');
    if(gh_resultados.firstLevel.options[gh_resultados.firstLevel.selectedIndex].text!='Sel. temporada') {
      gh_resultados.datagrid.setCaption("Consultando la base de datos de Gaceta Hip&oacute;dromo...");
      gh_resultados.resultados.style.display='block';
      $.ajax({
        type: "POST",
        url: e.action,
        data: $(e).serialize(),
        success: function(res){
          new_url=$('#query-url',res).val();
          new_caption=$('#caption',res).val();
          gh_resultados.datagrid.setGridParam({
            url:new_url,
            datatype: 'json', 
            mtype: 'GET'
          }).trigger("reloadGrid").setCaption(new_caption);
        }
      });
    }
  },

  grid : function(raceid,caption){
    jQuery("#list").jqGrid({ 
      url:gh_url+"/gh_result_gen/"+raceid,
      datatype: 'json', 
      mtype: 'GET',
      colNames: ['raceid','racecourseid','Pos','Caballo','Jinete','Dist','Kg.','Cj','Gan','Comentario GH','Mis notas'], 
      colModel: [ 
        {name:'raceid',index:'raceid', hidden:true},
        {name:'racecourseid',index:'racecourseid', hidden:true},
        {name:'pos',index:'finalposition', align:'center', width:25, sorttype:'int', sortable:true}, 
        {name:'name',index:'horseid', width:200, sortable:false}, 
        {name:'jockey',index:'jockeyid', width:120, sortable:false},
        {name:'dist',index:'distancetowinner', align:'right', width:40, sortable:true},
        {name:'weight',index:'jockeyweight', width:45, align:'center', sorttype:'int', sortable:true},
        {name:'box',index:'box', width:20, align:'center', sorttype:'int', sortable:true},
        {name:'winbet',index:'winbet', width:35, align:'right', sorttype:'int', sortable:true},
        {name:'comment',index:'latercomment', width:250, sortable:false},
        {name:'note',index:'note', width:250, editable:true, sortable:false}
      ],	  
      rowNum:20,
      viewrecords: true,
      altRows: true,
      sortname: 'finalposition',
      sortorder: 'asc',
      hidegrid: false,
      height: 400,
      loadonce: true,
      loadtext: 'Cargando...',
      caption: caption,
      cellEdit: true,
      cellsubmit: 'remote',
      cellurl:gh_url+"/gh_save_note",
      beforeSubmitCell: function (id,name,v,iRow,iCol){
        //var data = jQuery("#list").getRowData(id);
        var raceId = getCellHTML(id,1);
        var raceCourseId = getCellHTML(id,2);
        return {runnerid:id,raceid:raceId,racecourseid:raceCourseId};
      }
    }).navGrid('#pager',{edit:false,add:false,del:false});
  }
}

///////////////
// PROGRAMAS //
///////////////
var gh_programas = {

  init : function(url,section){
    document.getElementById('gh_results_res').innerHTML='<form name="listmenu0" id="gh_results_form" action="'+url+'/'+section+'" method="post" onsubmit="gh_programas.update(this);return false"><div><select name="firstlevel" id="firstlevel" style="width:130px;"></select><select name="secondlevel" style="width:160px;"></select><select name="thirdlevel" style="width:185px;"></select><select name="raceid" style="width:85px;"></select> <input type="submit" name="submit" value="Buscar" class="form-submit" />  <a href="#" onclick="resetListGroup(\'chainedmenu\')" id="cleanForm">Limpiar formulario</a></div></form><div id="resultados" style="display:none"><table id="list" class="scroll"></table><div id="pager" class="scroll" style="text-align:center;"></div></div>';
    gh_resetFormButton = document.getElementById('cleanForm');
    gh_programas.resultados = document.getElementById('resultados');
    gh_programas.datagrid = $('#list');
  },

  update : function(e){
    gh_programas.firstLevel=document.getElementById('firstlevel');
    if(gh_programas.firstLevel.options[gh_programas.firstLevel.selectedIndex].text!='Sel. temporada') {
      gh_programas.datagrid.setCaption("Consultando la base de datos de Gaceta Hip&oacute;dromo...");
      gh_programas.resultados.style.display='block';
      $.ajax({
        type: "POST",
        url: e.action,
        data: $(e).serialize(),
        success: function(res){
          new_url=$('#query-url',res).val();
          new_caption=$('#caption',res).val();
          gh_programas.datagrid.setGridParam({
            url:new_url,
            datatype: 'json', 
            mtype: 'GET'
          }).trigger("reloadGrid").setCaption(new_caption);
        }
      });
    }
  },
 
  update_direct_link : function(raceid){
      gh_programas.datagrid.setCaption("Consultando la base de datos de Gaceta Hip&oacute;dromo...");
      gh_programas.resultados.style.display='block';
      $.ajax({
        type: "POST",
        url:gh_url+"/programa",
        data: "raceid="+raceid,
        success: function(res){
          new_url=$('#query-url',res).val();
          new_caption=$('#caption',res).val();
          gh_programas.datagrid.setGridParam({
            url:new_url,
            datatype: 'json',
            mtype: 'GET'
          }).trigger("reloadGrid").setCaption(new_caption);
        }
      });
  },

  grid : function(raceidd,caption){
    jQuery("#list").jqGrid({ 
      url:gh_url+"/gh_program_gen/"+raceidd,
      datatype: 'json', 
      mtype: 'GET',
      colNames: ['raceid','racecourseid','N&deg;','Caballo','Imp','Jinete','Kg','Cj','Preparador','Cuadra','Comentario GH','Val','Mis notas'], 
      colModel: [
        {name:'raceid',index:'raceid', hidden:true},
        {name:'racecourseid',index:'racecourseid', hidden:true},
        {name:'number',index:'number', align:'center', width:20, sorttype:'int', sortable:true}, 
        {name:'name',index:'horseid', width:175, sortable:true},
        {name:'impl',index:'implements', align:'center', width:25, sortable:false},
        {name:'jockey',index:'jockeyid', width:110, sortable:false},
        {name:'weight',index:'jockeyweight', width:35, align:'center', sorttype:'int', sortable:true},
        {name:'box2',index:'box2', width:20, align:'center', sorttype:'int', sortable:true},
        {name:'trainer',index:'trainer', align:'left', width:100, sortable:true},
        {name:'stud',index:'stud', width:125, align:'left', sorttype:'int', sortable:true},
        {name:'comment',index:'previouscomment', width:105, sortable:false},
        {name:'rating',index:'rating', width:25, align:'right', sortable:true},
        {name:'note',index:'note', width:220, editable:true, sortable:false}
      ], 
      rowNum:30,
      viewrecords: true,
      altRows: true,
      sortname: 'number',
      sortorder: 'asc',
      hidegrid: false,
      height: 'auto',
      loadonce: true,
      loadtext: 'Cargando...',
      caption: caption, 
      cellEdit: true,
      cellsubmit: 'remote',
      cellurl:gh_url+"/gh_save_note",
      beforeSubmitCell: function (id,name,v,iRow,iCol){
        var raceId = getCellHTML(id,2);
        var raceCourseId = getCellHTML(id,3);
        return {runnerid:id,raceid:raceId,racecourseid:raceCourseId};
      },
      subGrid: true, 
      subGridRowExpanded: function(subgrid_id, row_id) {
        var subgrid_table_id;
        subgrid_table_id = subgrid_id+"_t";
        jQuery("#"+subgrid_id).html("<table id='"+subgrid_table_id+"' class='scroll'></table>");
        jQuery("#"+subgrid_table_id).jqGrid({
          url:gh_url+"/gh_horse_races_gen_5/"+row_id,
          datatype: "json",
          colNames: ['raceid','Fecha','Hip','N&deg;','T','Dist','Cat','Cj','Pos','Dist','Impl','Jinete','Kg','Div','T&deg','T','Val','Mis notas'],
          colModel: [
            {name:'raceid',index:'raceid', hidden:true},
            {name:'date',index:'racedate', align:'center', width:30, sortable:false},
            {name:'racecourseid',index:'racecourseid', align:'center', width:15, sortable:false},
            {name:'num',index:'num', align:'center', width:19, sortable:false},
            {name:'ground',index:'ground', align:'center', width:7, sortable:false},
            {name:'rdist',index:'racedist', align:'center', width:20, sortable:false},
            {name:'category',index:'category', align:'center', width:35, sortable:false},
            {name:'box',index:'box', width:11, align:'center', sorttype:'int', sortable:false},
            {name:'pos',index:'finalposition', align:'center', width:25, sorttype:'int', sortable:false},
            {name:'dist',index:'distancetowinner', align:'right', width:28, sortable:false},
            {name:'impl',index:'implements', align:'center', width:22, sortable:false},
            {name:'jockey',index:'jockeyid', width:55, sortable:false},
            {name:'weight',index:'jockeyweight', width:17, align:'center', sorttype:'int', sortable:false},
            {name:'winbet',index:'winbet', width:25, align:'right', sorttype:'int', sortable:false},
            {name:'time',index:'racetime', width:22, align:'center', sortable:false},
            {name:'t',index:'t', width:10, align:'center', sortable:false},
            {name:'rating',index:'rating', width:17, align:'center', sortable:false},
            {name:'note',index:'note', width:160, editable:true, sortable:false}
          ],
          rowNum:4, 
          sortname: 'number', 
          sortorder: 'asc',
          hidegrid: false,
          height: 'auto',
          loadonce: true,
          loadtext: 'Cargando...',
          cellEdit: true,
          cellsubmit: 'remote',
          cellurl:gh_url+"/gh_save_note",
          beforeSubmitCell: function (id,name,v,iRow,iCol){
            var raceId = getCellHTML(id,2);
            var raceCourseId = getCellHTML(id,4);
            return {runnerid:id,raceid:raceId,racecourseid:raceCourseId};
          },
          subGrid: true,
          subGridRowExpanded: function(subgrid_id2, row_id2) {
            var data2 =  jQuery("#"+subgrid_table_id).getRowData(row_id2);
            var subgrid_table_id2;
            subgrid_table_id2 = subgrid_id2+"_t2";
            jQuery("#"+subgrid_id2).html("<table id='"+subgrid_table_id2+"' class='scroll'></table>");
            jQuery("#"+subgrid_table_id2).jqGrid({
              url:gh_url+"/gh_result_subgrid_gen/"+getCellHTML(row_id2,2)+"h"+row_id2+"r"+getCellHTML(row_id2,4),
              datatype: 'json',
              mtype: 'GET',
              colNames: ['raceid','racecourseid','Pos','Caballo','Impl','Jinete','Dist','Kg.','Cj','Gan','Comentario GH','Mis notas'],
              colModel: [
                {name:'raceid',index:'raceid', hidden:true},
                {name:'racecourseid',index:'racecourseid', align:'center', hidden:true},
                {name:'pos',index:'finalposition', align:'center', width:25, sorttype:'int', sortable:true},
                {name:'name',index:'horseid', width:200, sortable:true},
                {name:'impl',index:'implements', align:'center', width:25, sortable:false},
                {name:'jockey',index:'jockeyid', width:120, sortable:true},
                {name:'dist',index:'distancetowinner', align:'right', width:40, sortable:true},
                {name:'weight',index:'jockeyweight', width:38, align:'center', sorttype:'int', sortable:true},
                {name:'box',index:'box', width:15, align:'center', sorttype:'int', sortable:true},
                {name:'winbet',index:'winbet', width:30, align:'right', sorttype:'int', sortable:true},
                {name:'comment',index:'latercomment', width:200, sortable:false},
                {name:'note',index:'note', width:250, editable:true, sortable:false}],
              rowNum:4,
              sortname: 'finalposition',
              sortorder: 'asc',
              hidegrid: false,
              height: 'auto',
              loadonce: true,
              loadtext: 'Cargando...',
              cellEdit: true,
              cellsubmit: 'remote',
              cellurl:gh_url+"/gh_save_note",
              beforeSubmitCell: function (id,name,v,iRow,iCol){
                var raceId = getCellHTML(id,1);
                var raceCourseId = getCellHTML(id,2);
                return {runnerid:id,raceid:raceId,racecourseid:raceCourseId};
              }
            }) //subgridtableid2
          } //subGridRowExpanded2
        }) //subgridtableid
      } //subGridRowExpanded
    }).navGrid('#pager',{edit:false,add:false,del:false});
  }
}

////////////////
// HORSE_INFO //
////////////////
function hideProfile(e){
  if (e.innerHTML=='Ocultar ficha'){
    e.innerHTML='Mostrar ficha';
    e.className='show-profile';
    document.getElementById('ficha').style.display='none';
  }else{
    e.innerHTML='Ocultar ficha';
    e.className='hide-profile';
    document.getElementById('ficha').style.display='block';	
  }
}

var gh_horse_info = {

  init : function(url,section){
    gh_horse_info.resultados = document.getElementById('resultados');
    if (gh_horse_info.resultados) {
      gh_horse_info.resultados.innerHTML='<table id="list" class="scroll"></table><div id="pager" class="scroll" style="text-align:center;"></div>';
      gh_horse_info.datagrid = $('#list');
      document.getElementById('horsename-form').innerHTML+='<a href="#" onclick="hideProfile(this)" class="hide-profile">Ocultar ficha</a>';
    }
    jQuery('#edit-horse-name').autocomplete(gh_url+"/gh_autocomplete_horsename/", {
      width: 260,
      max: 15,
      selectFirst: false
    });
  },

  update : function(e){
    gh_horse_info.firstLevel=document.getElementById('firstlevel');
    if(gh_horse_info.firstLevel.options[gh_horse_info.firstLevel.selectedIndex].text!='Sel. temporada') {
      gh_horse_info.datagrid.setCaption("Consultando la base de datos de Gaceta Hip&oacute;dromo...");
      gh_horse_info.resultados.style.display='block';
      $.ajax({
        type: "POST",
        url: e.action,
        data: $(e).serialize(),
        success: function(res){
          new_url=$('#query-url',res).val();
          new_caption=$('#caption',res).val();
          gh_horse_info.datagrid.setGridParam({
            url:new_url,
            datatype: 'json', 
            mtype: 'GET'
          }).trigger("reloadGrid").setCaption(new_caption);
        }
      });
    }
  },

  grid : function(horseid,caption){
    jQuery("#list").jqGrid({
      url:gh_url+"/gh_horse_races_gen/"+horseid,
      datatype: 'json',
      mtype: 'GET',
      colNames: ['raceid','Fecha','Hip','N&deg;','T','Dist','Cat','Cj','Pos','Dist','Impl','Jinete','Kg','Div','T&deg','T','Val','Mis notas'], 
      colModel: [
        {name:'raceid',index:'raceid', hidden:true},
        {name:'date',index:'racedate', align:'center', width:35, sortable:false},
        {name:'racecourseid',index:'racecourseid', align:'center', width:20, sortable:false},
        {name:'num',index:'num', align:'center', width:20, sortable:false},
        {name:'ground',index:'ground', align:'center', width:10, sortable:false},
        {name:'rdist',index:'racedist', align:'center', width:23, sortable:false},
        {name:'category',index:'category', align:'center', width:35, sortable:false},
        {name:'box',index:'box', width:15, align:'center', sorttype:'int', sortable:false},
        {name:'pos',index:'finalposition', align:'center', width:28, sorttype:'int', sortable:false},
        {name:'dist',index:'distancetowinner', align:'right', width:40, sortable:false},
        {name:'impl',index:'implements', align:'center', width:25, sortable:false},
        {name:'jockey',index:'jockeyid', width:70, sortable:false},
        {name:'weight',index:'jockeyweight', width:25, align:'center', sorttype:'int', sortable:false},
        {name:'winbet',index:'winbet', width:30, align:'right', sorttype:'int', sortable:false},
        {name:'time',index:'racetime', width:30, align:'center', sortable:false},
        {name:'t',index:'t', width:10, align:'center', sortable:false},
        {name:'rating',index:'rating', width:18, align:'center', sortable:false},
        {name:'note',index:'note', width:238, editable:true, sortable:false}
      ],
      rowNum:20,
      viewrecords: true,
      altRows: true,
      sortname: 'number',
      sortorder: 'asc',
      hidegrid: false,
      height: 'auto',
      loadonce: true,
      loadtext: 'Cargando...',
      caption: 'Historial de carreras',
      cellEdit: true,
      cellsubmit: 'remote',
      cellurl:gh_url+"/gh_save_note",
      beforeSubmitCell: function (id,name,v,iRow,iCol){
        var raceId = getCellHTML(id,2);
        var raceCourseId = getCellHTML(id,4);
        return {runnerid:id,raceid:raceId,racecourseid:raceCourseId};
      },

      subGrid: true,
      subGridRowExpanded: function(subgrid_id, row_id) {
        var data =  jQuery("#list").getRowData(row_id);
        var subgrid_table_id = subgrid_id+"_t";
        jQuery("#"+subgrid_id).html("<table id='"+subgrid_table_id+"' class='scroll'></table>");
        jQuery("#"+subgrid_table_id).jqGrid({
          url:gh_url+"/gh_result_subgrid_gen/"+getCellHTML(row_id,2)+"h"+row_id+"r"+getCellHTML(row_id,4),
          datatype: 'json',
          mtype: 'GET',
          colNames: ['raceid','racecourseid','Pos','Caballo','Impl','Jinete','Dist','Kg.','Cj','Gan','Comentario GH','Mis notas'],
          colModel: [
            {name:'raceid',index:'raceid', hidden:true},
            {name:'racecourseid',index:'racecourseid', align:'center', hidden:true},
            {name:'pos',index:'finalposition', align:'center', width:25, sorttype:'int', sortable:true},
            {name:'name',index:'horseid', width:200, sortable:true},
            {name:'impl',index:'implements', align:'center', width:25, sortable:false},
            {name:'jockey',index:'jockeyid', width:120, sortable:true},
            {name:'dist',index:'distancetowinner', align:'right', width:40, sortable:true},
            {name:'weight',index:'jockeyweight', width:38, align:'center', sorttype:'int', sortable:true},
            {name:'box',index:'box', width:15, align:'center', sorttype:'int', sortable:true},
            {name:'winbet',index:'winbet', width:30, align:'right', sorttype:'int', sortable:true},
            {name:'comment',index:'latercomment', width:200, sortable:false},
            {name:'note',index:'note', width:250, editable:true, sortable:false}
          ],
          rowNum:4,
          sortname: 'finalposition',
          sortorder: 'asc',
          hidegrid: false,
          height: 'auto',
          loadonce: true,
          loadtext: 'Cargando...',
          cellEdit: true,
          cellsubmit: 'remote',
          cellurl:gh_url+"/gh_save_note",
          beforeSubmitCell: function (id,name,v,iRow,iCol){
            var raceId = getCellHTML(id,1);
            var raceCourseId = getCellHTML(id,2);
            return {runnerid:id,raceid:raceId,racecourseid:raceCourseId};
          }
        })
      }
    }).navGrid('#pager',{edit:false,add:false,del:false});
  }
}

//////////////////
// TRAINER_INFO //
//////////////////
var gh_trainer_info = {

  init : function(){
    gh_trainer_info.resultados = document.getElementById('resultados');
    if (gh_trainer_info.resultados) {
      gh_trainer_info.resultados.innerHTML='<table id="list" class="scroll"></table><div id="pager" class="scroll" style="text-align:center;"></div>';
      gh_trainer_info.datagrid = $('#list');	
      document.getElementById('trainer-form').innerHTML+='<a href="#" onclick="hideProfile(this)" class="hide-profile">Ocultar ficha</a>';
    }
    jQuery('#edit-trainer-name').autocomplete(gh_url+"/gh_autocomplete_trainer/", {
      width: 260,
      max: 15,
      selectFirst: false
    });
  },

  update : function(e){
  gh_trainer_info.firstLevel=document.getElementById('firstlevel');
    if(gh_trainer_info.firstLevel.options[gh_trainer_info.firstLevel.selectedIndex].text!='Sel. temporada') {
      gh_trainer_info.datagrid.setCaption("Consultando la base de datos de Gaceta Hip&oacute;dromo...");
      gh_trainer_info.resultados.style.display='block';
      $.ajax({
        type: "POST",
        url: e.action,
        data: $(e).serialize(),
        success: function(res){
          new_url=$('#query-url',res).val();
          new_caption=$('#caption',res).val();
          gh_trainer_info.datagrid.setGridParam({
            url:new_url,
            datatype: 'json', 
            mtype: 'GET'
          }).trigger("reloadGrid").setCaption(new_caption);
        }
      });
    }
  },

  grid : function(trainerid,caption){
    jQuery("#list").jqGrid({
      url:gh_url+"/gh_trainer_horses_gen/"+trainerid,
      datatype: 'json',
      mtype: 'GET',
      colNames: ['Nombre','Genealog&iacute;a','Cuadra','Val.','Premios','Inicio entrenamiento'], 
      colModel: [
        {name:'name',index:'name', width:160, sortable:true},
        {name:'genealogy',index:'genealogy', width:300, sortable:false},
        {name:'stud',index:'stud', width:130, align:'left', sortable:false},
        {name:'rating',index:'rating', width:155, align:'right', sortable:false},
        {name:'earned',index:'earned', width:60, align:'right', sortable:false},
        {name:'initdate',index:'initdate', width:120, align:'center', sortable:true}],
      rowNum:20,
      viewrecords: true,
      altRows: true,
      sortname: 'name',
      sortorder: 'asc',
      hidegrid: false,
      height: 'auto',
      loadonce: true,
      loadtext: 'Cargando...',
      caption: caption,
      cellEdit: true,

      subGrid: true,
      subGridRowExpanded: function(subgrid_id, row_id) {
        var data =  jQuery("#list").getRowData(row_id);
        var subgrid_table_id;
        subgrid_table_id = subgrid_id+"_t";
        jQuery("#"+subgrid_id).html("<table id='"+subgrid_table_id+"' class='scroll'></table>");
        jQuery("#"+subgrid_table_id).jqGrid({
          url:gh_url+"/gh_horse_races_gen/"+row_id,
          datatype: 'json',
          mtype: 'GET',
          colNames: ['raceid','Fecha','Hip','N&deg;','T','Dist','Cat','Cj','Pos','Dist','Impl','Jinete','Kg','Div','T&deg','T','Val','Mis notas'], 
          colModel: [
            {name:'raceid',index:'raceid', hidden:true},
            {name:'date',index:'racedate', align:'center', width:35, sortable:false},
            {name:'racecourseid',index:'racecourseid', align:'center', width:20, sortable:false},
            {name:'num',index:'num', align:'center', width:20, sortable:false},
            {name:'ground',index:'ground', align:'center', width:10, sortable:false},
            {name:'rdist',index:'racedist', align:'center', width:23, sortable:false},
            {name:'category',index:'category', align:'center', width:35, sortable:false},
            {name:'box',index:'box', width:15, align:'center', sorttype:'int', sortable:false},
            {name:'pos',index:'finalposition', align:'center', width:28, sorttype:'int', sortable:false},
            {name:'dist',index:'distancetowinner', align:'right', width:40, sortable:false},
            {name:'impl',index:'implements', align:'center', width:25, sortable:false},
            {name:'jockey',index:'jockeyid', width:70, sortable:false},
            {name:'weight',index:'jockeyweight', width:25, align:'center', sorttype:'int', sortable:false},
            {name:'winbet',index:'winbet', width:30, align:'right', sorttype:'int', sortable:false},
            {name:'time',index:'racetime', width:30, align:'center', sortable:false},
            {name:'t',index:'t', width:10, align:'center', sortable:false},
            {name:'rating',index:'rating', width:17, align:'center', sortable:false},
            {name:'note',index:'note', width:250, editable:true, sortable:false}
          ],
          rowNum:4,
          sortname: 'finalposition',
          sortorder: 'asc',
          hidegrid: false,
          height: 'auto',
          loadonce: true,
          loadtext: 'Cargando...',
          cellEdit: true,
          cellsubmit: 'remote',
          cellurl:gh_url+"/gh_save_note",
          beforeSubmitCell: function (id,name,v,iRow,iCol){
            var raceId = getCellHTML(id,2);
            var raceCourseId = getCellHTML(id,4);
            return {runnerid:id,raceid:raceId,racecourseid:raceCourseId};
          },

        subGrid: true,
        subGridRowExpanded: function(subgrid_id2, row_id2) {
          var data2 =  jQuery("#"+subgrid_table_id).getRowData(row_id2);
          var subgrid_table_id2;
          subgrid_table_id2 = subgrid_id2+"_t2";
          jQuery("#"+subgrid_id2).html("<table id='"+subgrid_table_id2+"' class='scroll'></table>");
          jQuery("#"+subgrid_table_id2).jqGrid({
            url:gh_url+"/gh_result_subgrid_gen/"+getCellHTML(row_id2,2)+"h"+row_id2+"r"+getCellHTML(row_id2,4),
            datatype: 'json',
            mtype: 'GET',
            colNames: ['raceid','racecourseid','Pos','Caballo','Impl','Jinete','Dist','Kg.','Cj','Gan','Comentario GH','Mis notas'],
            colModel: [
              {name:'raceid',index:'raceid', hidden:true},
              {name:'racecourseid',index:'racecourseid', align:'center', hidden:true},
              {name:'pos',index:'finalposition', align:'center', width:25, sorttype:'int', sortable:true},
              {name:'name',index:'horseid', width:200, sortable:true},
              {name:'impl',index:'implements', align:'center', width:25, sortable:false},
              {name:'jockey',index:'jockeyid', width:120, sortable:true},
              {name:'dist',index:'distancetowinner', align:'right', width:40, sortable:true},
              {name:'weight',index:'jockeyweight', width:38, align:'center', sorttype:'int', sortable:true},
              {name:'box',index:'box', width:15, align:'center', sorttype:'int', sortable:true},
              {name:'winbet',index:'winbet', width:30, align:'right', sorttype:'int', sortable:true},
              {name:'comment',index:'latercomment', width:200, sortable:false},
              {name:'note',index:'note', width:250, editable:true, sortable:false}],
            rowNum:4,
            sortname: 'finalposition',
            sortorder: 'asc',
            hidegrid: false,
            height: 'auto',
            loadonce: true,
            loadtext: 'Cargando...',
            cellEdit: true,
            cellsubmit: 'remote',
            cellurl:gh_url+"/gh_save_note",
            beforeSubmitCell: function (id,name,v,iRow,iCol){
              var raceId = getCellHTML(id,1);
              var raceCourseId = getCellHTML(id,2);
              return {runnerid:id,raceid:raceId,racecourseid:raceCourseId};
            }
          }) //subgridtableid2
        }
          
        })
      }
    }).navGrid('#pager',{edit:false,add:false,del:false});
  }
}

/////////////////
// JOCKEY_INFO //
/////////////////
var gh_jockey_info = {

  init : function(){
    gh_jockey_info.resultados = document.getElementById('resultados');
    if (gh_jockey_info.resultados) {
      gh_jockey_info.resultados.innerHTML='<table id="list" class="scroll"></table><div id="pager" class="scroll" style="text-align:center;"></div>';
      gh_jockey_info.datagrid = $('#list');	
      document.getElementById('jockey-form').innerHTML+='<a href="#" onclick="hideProfile(this)" class="hide-profile">Ocultar ficha</a>';
    }
    jQuery('#edit-jockey-name').autocomplete(gh_url+"/gh_autocomplete_jockey/", {
      width: 260,
      max: 15,
      selectFirst: false
    });
  },

  update : function(e){
    gh_jockey_info.firstLevel=document.getElementById('firstlevel');
    if(gh_jockey_info.firstLevel.options[gh_trainer_info.firstLevel.selectedIndex].text!='Sel. temporada') {
      gh_jockey_info.datagrid.setCaption("Consultando la base de datos de Gaceta Hip&oacute;dromo...");
      gh_jockey_info.resultados.style.display='block';
      $.ajax({
        type: "POST",
        url: e.action,
        data: $(e).serialize(),
        success: function(res){
          new_url=$('#query-url',res).val();
          new_caption=$('#caption',res).val();
          gh_jockey_info.datagrid.setGridParam({
            url:new_url,
            datatype: 'json',
            mtype: 'GET'
          }).trigger("reloadGrid").setCaption(new_caption);
        }
      });
    }
  },

  grid : function(jockeyid,caption){
    jQuery("#list").jqGrid({
      url:gh_url+"/gh_jockey_races_gen/"+jockeyid,
      datatype: 'json',
      mtype: 'GET',
      colNames: ['raceid','Fecha','Hip','N&deg;','T','Dist','Cat','Cj','Caballo','Pos','Dist','Kg.','Gan','Comentario GH','Mis notas'], 
      colModel: [ 
        {name:'raceid',index:'raceid', width:15},
        {name:'date',index:'racedate', align:'center', width:55, sortable:false},
        {name:'racecourseid',index:'racecourseid', align:'center', width:20, sortable:false},
        {name:'num',index:'num', align:'center', width:20, sortable:false},
        {name:'ground',index:'ground', align:'center', width:10, sortable:false},
        {name:'rdist',index:'racedist', align:'center', width:30, sortable:false},
        {name:'category',index:'category', align:'center', width:60, sortable:false},
        {name:'box',index:'box', width:18, align:'center', sorttype:'int', sortable:false},
        {name:'name',index:'horseid', width:200, sortable:true},
        {name:'pos',index:'finalposition', align:'center', width:40, sorttype:'int', sortable:false},
        {name:'dist',index:'distancetowinner', align:'right', width:45, sortable:true},
        {name:'weight',index:'jockeyweight', width:45, align:'center', sorttype:'int', sortable:true},
        {name:'winbet',index:'winbet', width:35, align:'right', sorttype:'int', sortable:true},
        {name:'comment',index:'latercomment', width:200, sortable:false},
        {name:'note',index:'note', width:250, editable:true, sortable:false}],
      rowNum:20,
      viewrecords: true,
      altRows: true,
      sortname: 'number',
      sortorder: 'asc',
      hidegrid: false,
      height: 'auto',
      loadonce: true,
      loadtext: 'Cargando...',
      caption: caption,
      cellEdit: true,
      cellsubmit: 'remote',
      cellurl:gh_url+"/gh_save_note",
      beforeSubmitCell: function (id,name,v,iRow,iCol){
        var raceId = getCellHTML(id,2);
        var raceCourseId = getCellHTML(id,4);
        return {runnerid:id,raceid:raceId,racecourseid:raceCourseId};
      },

      subGrid: true,
      subGridRowExpanded: function(subgrid_id, row_id) {
        var data =  jQuery("#list").getRowData(row_id);
        var subgrid_table_id;
        subgrid_table_id = subgrid_id+"_t";
        jQuery("#"+subgrid_id).html("<table id='"+subgrid_table_id+"' class='scroll'></table>");
        jQuery("#"+subgrid_table_id).jqGrid({
          url:gh_url+"/gh_result_subgrid_gen/"+getCellHTML(row_id,2)+"h"+row_id+"r"+getCellHTML(row_id,4),
          datatype: 'json',
          mtype: 'GET',
          colNames: ['raceid','racecourseid','Pos','Caballo','Impl','Jinete','Dist','Kg.','Cj','Gan','Comentario GH','Mis notas'],
          colModel: [
            {name:'raceid',index:'raceid', width:15},
            {name:'racecourseid',index:'racecourseid', align:'center', width:20, sortable:false},
            {name:'pos',index:'finalposition', align:'center', width:25, sorttype:'int', sortable:true},
            {name:'name',index:'horseid', width:200, sortable:true},
            {name:'impl',index:'implements', align:'center', width:25, sortable:false},
            {name:'jockey',index:'jockeyid', width:120, sortable:true},
            {name:'dist',index:'distancetowinner', align:'right', width:40, sortable:true},
            {name:'weight',index:'jockeyweight', width:38, align:'center', sorttype:'int', sortable:true},
            {name:'box',index:'box', width:15, align:'center', sorttype:'int', sortable:true},
            {name:'winbet',index:'winbet', width:40, align:'right', sorttype:'int', sortable:true},
            {name:'comment',index:'lattercomment', width:200, sortable:false},
            {name:'note',index:'note', width:250, editable:true, sortable:false}],
          rowNum:4,
          sortname: 'finalposition',
          sortorder: 'asc',
          hidegrid: false,
          height: 'auto',
          loadonce: true,
          loadtext: 'Cargando...',
          cellEdit: true,
          cellsubmit: 'remote',
          cellurl:gh_url+"/gh_save_note",
          beforeSubmitCell: function (id,name,v,iRow,iCol){
            var raceId = getCellHTML(id,1);
            var raceCourseId = getCellHTML(id,2);
            return {runnerid:id,raceid:raceId,racecourseid:raceCourseId};
           }
        })
        jQuery("#"+subgrid_table_id).hideCol(["raceid"]);jQuery("#"+subgrid_table_id).hideCol(['racecourseid']);
      }
    }).navGrid('#pager',{edit:false,add:false,del:false});
    jQuery('#list').hideCol(['raceid']);
  }
}

/////////////////
//  STUD_INFO  //
/////////////////
var gh_stud_info = {

  init : function(){
    gh_stud_info.resultados = document.getElementById('resultados');
    if (gh_stud_info.resultados) {
      gh_stud_info.resultados.innerHTML='<table id="list" class="scroll"></table><div id="pager" class="scroll" style="text-align:center;"></div>';
      gh_stud_info.datagrid = $('#list');	
      document.getElementById('stud-form').innerHTML+='<a href="#" onclick="hideProfile(this)" class="hide-profile">Ocultar ficha</a>';
    }
    jQuery('#edit-stud-name').autocomplete(gh_url+"/gh_autocomplete_stud/", {
      width: 260,
      max: 15,
      selectFirst: false
    });
  },

  update : function(e){
    gh_stud_info.firstLevel=document.getElementById('firstlevel');
    if(gh_stud_info.firstLevel.options[gh_stud_info.firstLevel.selectedIndex].text!='Sel. temporada') {
      gh_stud_info.datagrid.setCaption("Consultando la base de datos de Gaceta Hip&oacute;dromo...");
      gh_stud_info.resultados.style.display='block';
      $.ajax({
        type: "POST",
        url: e.action,
        data: $(e).serialize(),
        success: function(res){
          new_url=$('#query-url',res).val();
          new_caption=$('#caption',res).val();
          gh_stud_info.datagrid.setGridParam({
            url:new_url,
            datatype: 'json', 
            mtype: 'GET'
          }).trigger("reloadGrid").setCaption(new_caption);
        }
      });
    }
  },

  grid : function(studid,caption){
    jQuery("#list").jqGrid({
      url:gh_url+"/gh_stud_horses_gen/"+studid,
      datatype: 'json',
      mtype: 'GET',
      colNames: ['Nombre','Genealog&iacute;a','Prep.','Val.','Premios','Fecha incorporaci&oacute;n'], 
      colModel: [
        {name:'name',index:'name', width:155, sortable:true},
        {name:'genealogy',index:'genealogy', width:260, sortable:false},
        {name:'trainer',index:'trainer', width:100, align:'left', sortable:false},
        {name:'rating',index:'rating', width:145, align:'right', sortable:false},
        {name:'earned',index:'earned', width:60, align:'right', sortable:false},
        {name:'initdate',index:'initdate', width:134, align:'center', sortable:true}],
      rowNum:20,
      viewrecords: true,
      altRows: true,
      sortname: 'number',
      sortorder: 'asc',
      hidegrid: false,
      height: 'auto',
      loadonce: true,
      loadtext: 'Cargando...',
      caption: caption,
      cellEdit: true,

      subGrid: true,
      subGridRowExpanded: function(subgrid_id, row_id) {
        var data =  jQuery("#list").getRowData(row_id);
        var subgrid_table_id;
        subgrid_table_id = subgrid_id+"_t";
        jQuery("#"+subgrid_id).html("<table id='"+subgrid_table_id+"' class='scroll'></table>");
        jQuery("#"+subgrid_table_id).jqGrid({
          url:gh_url+"/gh_horse_races_gen/"+row_id,
          datatype: 'json',
          mtype: 'GET',
          colNames: ['raceid','Fecha','Hip','N&deg;','T','Dist','Cat','Cj','Pos','Dist','Impl','Jinete','Kg','Div','T&deg','T','Val','Mis notas'], 
          colModel: [
            {name:'raceid',index:'raceid', hidden:true},
            {name:'date',index:'racedate', align:'center', width:35, sortable:false},
            {name:'racecourseid',index:'racecourseid', align:'center', width:20, sortable:false},
            {name:'num',index:'num', align:'center', width:20, sortable:false},
            {name:'ground',index:'ground', align:'center', width:10, sortable:false},
            {name:'rdist',index:'racedist', align:'center', width:23, sortable:false},
            {name:'category',index:'category', align:'center', width:35, sortable:false},
            {name:'box',index:'box', width:15, align:'center', sorttype:'int', sortable:false},
            {name:'pos',index:'finalposition', align:'center', width:28, sorttype:'int', sortable:false},
            {name:'dist',index:'distancetowinner', align:'right', width:40, sortable:false},
            {name:'impl',index:'implements', align:'center', width:25, sortable:false},
            {name:'jockey',index:'jockeyid', width:70, sortable:false},
            {name:'weight',index:'jockeyweight', width:25, align:'center', sorttype:'int', sortable:false},
            {name:'winbet',index:'winbet', width:30, align:'right', sorttype:'int', sortable:false},
            {name:'time',index:'racetime', width:30, align:'center', sortable:false},
            {name:'t',index:'t', width:10, align:'center', sortable:false},
            {name:'rating',index:'rating', width:17, align:'center', sortable:false},
            {name:'note',index:'note', width:250, editable:true, sortable:false}
          ],
          rowNum:4,
          sortname: 'finalposition',
          sortorder: 'asc',
          hidegrid: false,
          height: 'auto',
          loadonce: true,
          loadtext: 'Cargando...',
          cellEdit: true,
          cellsubmit: 'remote',
          cellurl:gh_url+"/gh_save_note",
          beforeSubmitCell: function (id,name,v,iRow,iCol){
            var raceId = getCellHTML(id,2);
            var raceCourseId = getCellHTML(id,4);
            return {runnerid:id,raceid:raceId,racecourseid:raceCourseId};
          },
 
          subGrid: true,
          subGridRowExpanded: function(subgrid_id2, row_id2) {
            var subgrid_table_id2;
            subgrid_table_id2 = subgrid_id2+"_t2";
            jQuery("#"+subgrid_id2).html("<table id='"+subgrid_table_id2+"' class='scroll'></table>");
            jQuery("#"+subgrid_table_id2).jqGrid({
              url:gh_url+"/gh_result_subgrid_gen/"+getCellHTML(row_id2,2)+"h"+row_id2+"r"+getCellHTML(row_id2,4),
              datatype: 'json',
              mtype: 'GET',
              colNames: ['raceid','racecourseid','Pos','Caballo','Impl','Jinete','Dist','Kg.','Cj','Gan','Comentario GH','Mis notas'],
              colModel: [
                {name:'raceid',index:'raceid', hidden:true},
                {name:'racecourseid',index:'racecourseid', align:'center', hidden:true},
                {name:'pos',index:'finalposition', align:'center', width:25, sorttype:'int', sortable:true},
                {name:'name',index:'horseid', width:200, sortable:true},
                {name:'impl',index:'implements', align:'center', width:25, sortable:false},
                {name:'jockey',index:'jockeyid', width:120, sortable:true},
                {name:'dist',index:'distancetowinner', align:'right', width:40, sortable:true},
                {name:'weight',index:'jockeyweight', width:38, align:'center', sorttype:'int', sortable:true},
                {name:'box',index:'box', width:15, align:'center', sorttype:'int', sortable:true},
                {name:'winbet',index:'winbet', width:30, align:'right', sorttype:'int', sortable:true},
                {name:'comment',index:'latercomment', width:200, sortable:false},
                {name:'note',index:'note', width:250, editable:true, sortable:false}],
              rowNum:4,
              sortname: 'finalposition',
              sortorder: 'asc',
              hidegrid: false,
              height: 'auto',
              loadonce: true,
              loadtext: 'Cargando...',
              cellEdit: true,
              cellsubmit: 'remote',
              cellurl:gh_url+"/gh_save_note",
              beforeSubmitCell: function (id,name,v,iRow,iCol){
                var raceId = getCellHTML(id,1);
                var raceCourseId = getCellHTML(id,2);
                return {runnerid:id,raceid:raceId,racecourseid:raceCourseId};
              }
            }) //subgridtableid2
          }
        })
      }
    }).navGrid('#pager',{edit:false,add:false,del:false});
  }
}

////////////////////
//  BREEDER_INFO  //
////////////////////
var gh_breeder_info = {

  init : function(){

    gh_breeder_info.resultados = document.getElementById('resultados');
    if (gh_breeder_info.resultados) {
      gh_breeder_info.resultados.innerHTML='<table id="list" class="scroll"></table><div id="pager" class="scroll" style="text-align:center;"></div>';
      gh_breeder_info.datagrid = $('#list');	
      document.getElementById('breeder-form').innerHTML+='<a href="#" onclick="hideProfile(this)" class="hide-profile">Ocultar ficha</a>';
    }
    jQuery('#edit-breeder-name').autocomplete(gh_url+"/gh_autocomplete_breeder/", {
      width: 260,
      max: 15,
      selectFirst: false
    });
  },

  update : function(e){
    gh_breeder_info.firstLevel=document.getElementById('firstlevel');
    if(gh_breeder_info.firstLevel.options[gh_breeder_info.firstLevel.selectedIndex].text!='Sel. temporada') {
      gh_breeder_info.datagrid.setCaption("Consultando la base de datos de Gaceta Hip&oacute;dromo...");
      gh_breeder_info.resultados.style.display='block';
      $.ajax({
        type: "POST",
        url: e.action,
        data: $(e).serialize(),
        success: function(res){
          new_url=$('#query-url',res).val();
          new_caption=$('#caption',res).val();
          gh_breeder_info.datagrid.setGridParam({
            url:new_url,
            datatype: 'json', 
            mtype: 'GET'
          }).trigger("reloadGrid").setCaption(new_caption);
        }
      });
    }
  },

  grid : function(breederid,caption){
    jQuery("#list").jqGrid({
      url:gh_url+"/gh_breeder_horses_gen/"+breederid,
      datatype: 'json',
      mtype: 'GET',
      colNames: ['Nombre','F. Nac','Genealog&iacute;a','Prep.','Val.','Premios'], 
      colModel: [
        {name:'name',index:'name', width:120, sortable:true},
        {name:'birthdate',index:'birthdate', width:60, align:'center', sortable:true},
        {name:'genealogy',index:'genealogy', width:250, align:'left', sortable:true},
        {name:'trainer',index:'trainer', width:90, align:'left', sortable:true},
        {name:'rating',index:'rating', width:125, align:'right', sorttype:'int', sortable:true},
        {name:'earned',index:'earned', width:50, align:'center', sorttype:'int', sortable:true}],
      rowNum:20,
      viewrecords: true,
      altRows: true,
      hidegrid: false,
      height: 'auto',
      loadonce: true,
      loadtext: 'Cargando...',
      caption: caption,
      cellEdit: true,

      subGrid: true,
      subGridRowExpanded: function(subgrid_id, row_id) {
        var data =  jQuery("#list").getRowData(row_id);
        var subgrid_table_id;
        subgrid_table_id = subgrid_id+"_t";
        jQuery("#"+subgrid_id).html("<table id='"+subgrid_table_id+"' class='scroll'></table>");
        jQuery("#"+subgrid_table_id).jqGrid({
          url:gh_url+"/gh_horse_races_gen/"+row_id,
          datatype: 'json',
          mtype: 'GET',
          colNames: ['raceid','Fecha','Hip','N&deg;','T','Dist','Cat','Cj','Pos','Dist','Impl','Jinete','Kg','Div','T&deg','T','Val','Mis notas'], 
          colModel: [
            {name:'raceid',index:'raceid', hidden:true},
            {name:'date',index:'racedate', align:'center', width:35, sortable:false},
            {name:'racecourseid',index:'racecourseid', align:'center', width:20, sortable:false},
            {name:'num',index:'num', align:'center', width:20, sortable:false},
            {name:'ground',index:'ground', align:'center', width:10, sortable:false},
            {name:'rdist',index:'racedist', align:'center', width:23, sortable:false},
            {name:'category',index:'category', align:'center', width:35, sortable:false},
            {name:'box',index:'box', width:15, align:'center', sorttype:'int', sortable:false},
            {name:'pos',index:'finalposition', align:'center', width:28, sorttype:'int', sortable:false},
            {name:'dist',index:'distancetowinner', align:'right', width:40, sortable:false},
            {name:'impl',index:'implements', align:'center', width:25, sortable:false},
            {name:'jockey',index:'jockeyid', width:70, sortable:false},
            {name:'weight',index:'jockeyweight', width:25, align:'center', sorttype:'int', sortable:false},
            {name:'winbet',index:'winbet', width:30, align:'right', sorttype:'int', sortable:false},
            {name:'time',index:'racetime', width:30, align:'center', sortable:false},
            {name:'t',index:'t', width:10, align:'center', sortable:false},
            {name:'rating',index:'rating', width:17, align:'center', sortable:false},
            {name:'note',index:'note', width:250, editable:true, sortable:false}
          ],
          rowNum:4,
          sortname: 'finalposition',
          sortorder: 'asc',
          hidegrid: false,
          height: 'auto',
          loadonce: true,
          loadtext: 'Cargando...',
          cellEdit: true,
          cellsubmit: 'remote',
          cellurl:gh_url+"/gh_save_note",
          beforeSubmitCell: function (id,name,v,iRow,iCol){
            var raceId = getCellHTML(id,2);
            var raceCourseId = getCellHTML(id,4);
            return {runnerid:id,raceid:raceId,racecourseid:raceCourseId};
          },

          subGrid: true,
          subGridRowExpanded: function(subgrid_id2, row_id2) {
            var subgrid_table_id2;
            subgrid_table_id2 = subgrid_id2+"_t2";
            jQuery("#"+subgrid_id2).html("<table id='"+subgrid_table_id2+"' class='scroll'></table>");
            jQuery("#"+subgrid_table_id2).jqGrid({
              url:gh_url+"/gh_result_subgrid_gen/"+getCellHTML(row_id2,2)+"h"+row_id2+"r"+getCellHTML(row_id2,4),
              datatype: 'json',
              mtype: 'GET',
              colNames: ['raceid','racecourseid','Pos','Caballo','Impl','Jinete','Dist','Kg.','Cj','Gan','Comentario GH','Mis notas'],
              colModel: [
                {name:'raceid',index:'raceid', hidden:true},
                {name:'racecourseid',index:'racecourseid', align:'center', hidden:true},
                {name:'pos',index:'finalposition', align:'center', width:25, sorttype:'int', sortable:true},
                {name:'name',index:'horseid', width:200, sortable:true},
                {name:'impl',index:'implements', align:'center', width:25, sortable:false},
                {name:'jockey',index:'jockeyid', width:120, sortable:true},
                {name:'dist',index:'distancetowinner', align:'right', width:40, sortable:true},
                {name:'weight',index:'jockeyweight', width:38, align:'center', sorttype:'int', sortable:true},
                {name:'box',index:'box', width:15, align:'center', sorttype:'int', sortable:true},
                {name:'winbet',index:'winbet', width:30, align:'right', sorttype:'int', sortable:true},
                {name:'comment',index:'latercomment', width:200, sortable:false},
                {name:'note',index:'note', width:250, editable:true, sortable:false}],
              rowNum:4,
              sortname: 'finalposition',
              sortorder: 'asc',
              hidegrid: false,
              height: 'auto',
              loadonce: true,
              loadtext: 'Cargando...',
              cellEdit: true,
              cellsubmit: 'remote',
              cellurl:gh_url+"/gh_save_note",
              beforeSubmitCell: function (id,name,v,iRow,iCol){
                var raceId = getCellHTML(id,1);
                var raceCourseId = getCellHTML(id,2);
                return {runnerid:id,raceid:raceId,racecourseid:raceCourseId};
              }
            }) //subgridtableid2
          }
        })
      }
    }).navGrid('#pager',{edit:false,add:false,del:false});
  }
}

//jQuery Autocomplete plugin 1.1 Copyright (c) 2009 Jörn Zaefferer Dual licensed under the MIT and GPL licenses
;(function($){$.fn.extend({autocomplete:function(urlOrData,options){var isUrl=typeof urlOrData=="string";options=$.extend({},$.Autocompleter.defaults,{url:isUrl?urlOrData:null,data:isUrl?null:urlOrData,delay:isUrl?$.Autocompleter.defaults.delay:10,max:options&&!options.scroll?10:150},options);options.highlight=options.highlight||function(value){return value};options.formatMatch=options.formatMatch||options.formatItem;return this.each(function(){new $.Autocompleter(this,options)})},result:function(handler){return this.bind("result",handler)},search:function(handler){return this.trigger("search",[handler])},flushCache:function(){return this.trigger("flushCache")},setOptions:function(options){return this.trigger("setOptions",[options])},unautocomplete:function(){return this.trigger("unautocomplete")}});$.Autocompleter=function(input,options){var KEY={UP:38,DOWN:40,DEL:46,TAB:9,RETURN:13,ESC:27,COMMA:188,PAGEUP:33,PAGEDOWN:34,BACKSPACE:8};var $input=$(input).attr("autocomplete","off").addClass(options.inputClass);var timeout;var previousValue="";var cache=$.Autocompleter.Cache(options);var hasFocus=0;var lastKeyPressCode;var config={mouseDownOnSelect:false};var select=$.Autocompleter.Select(options,input,selectCurrent,config);var blockSubmit;$.browser.opera&&$(input.form).bind("submit.autocomplete",function(){if(blockSubmit){blockSubmit=false;return false}});$input.bind(($.browser.opera?"keypress":"keydown")+".autocomplete",function(event){hasFocus=1;lastKeyPressCode=event.keyCode;switch(event.keyCode){case KEY.UP:event.preventDefault();if(select.visible()){select.prev()}else{onChange(0,true)}break;case KEY.DOWN:event.preventDefault();if(select.visible()){select.next()}else{onChange(0,true)}break;case KEY.PAGEUP:event.preventDefault();if(select.visible()){select.pageUp()}else{onChange(0,true)}break;case KEY.PAGEDOWN:event.preventDefault();if(select.visible()){select.pageDown()}else{onChange(0,true)}break;case options.multiple&&$.trim(options.multipleSeparator)==","&&KEY.COMMA:case KEY.TAB:case KEY.RETURN:if(selectCurrent()){event.preventDefault();blockSubmit=true;return false}break;case KEY.ESC:select.hide();break;default:clearTimeout(timeout);timeout=setTimeout(onChange,options.delay);break}}).focus(function(){hasFocus++}).blur(function(){hasFocus=0;if(!config.mouseDownOnSelect){hideResults()}}).click(function(){if(hasFocus++>1&&!select.visible()){onChange(0,true)}}).bind("search",function(){var fn=(arguments.length>1)?arguments[1]:null;function findValueCallback(q,data){var result;if(data&&data.length){for(var i=0;i<data.length;i++){if(data[i].result.toLowerCase()==q.toLowerCase()){result=data[i];break}}}if(typeof fn=="function")fn(result);else $input.trigger("result",result&&[result.data,result.value])}$.each(trimWords($input.val()),function(i,value){request(value,findValueCallback,findValueCallback)})}).bind("flushCache",function(){cache.flush()}).bind("setOptions",function(){$.extend(options,arguments[1]);if("data"in arguments[1])cache.populate()}).bind("unautocomplete",function(){select.unbind();$input.unbind();$(input.form).unbind(".autocomplete")});function selectCurrent(){var selected=select.selected();if(!selected)return false;var v=selected.result;previousValue=v;if(options.multiple){var words=trimWords($input.val());if(words.length>1){var seperator=options.multipleSeparator.length;var cursorAt=$(input).selection().start;var wordAt,progress=0;$.each(words,function(i,word){progress+=word.length;if(cursorAt<=progress){wordAt=i;return false}progress+=seperator});words[wordAt]=v;v=words.join(options.multipleSeparator)}v+=options.multipleSeparator}$input.val(v);hideResultsNow();$input.trigger("result",[selected.data,selected.value]);return true}function onChange(crap,skipPrevCheck){if(lastKeyPressCode==KEY.DEL){select.hide();return}var currentValue=$input.val();if(!skipPrevCheck&&currentValue==previousValue)return;previousValue=currentValue;currentValue=lastWord(currentValue);if(currentValue.length>=options.minChars){$input.addClass(options.loadingClass);if(!options.matchCase)currentValue=currentValue.toLowerCase();request(currentValue,receiveData,hideResultsNow)}else{stopLoading();select.hide()}};function trimWords(value){if(!value)return[""];if(!options.multiple)return[$.trim(value)];return $.map(value.split(options.multipleSeparator),function(word){return $.trim(value).length?$.trim(word):null})}function lastWord(value){if(!options.multiple)return value;var words=trimWords(value);if(words.length==1)return words[0];var cursorAt=$(input).selection().start;if(cursorAt==value.length){words=trimWords(value)}else{words=trimWords(value.replace(value.substring(cursorAt),""))}return words[words.length-1]}function autoFill(q,sValue){if(options.autoFill&&(lastWord($input.val()).toLowerCase()==q.toLowerCase())&&lastKeyPressCode!=KEY.BACKSPACE){$input.val($input.val()+sValue.substring(lastWord(previousValue).length));$(input).selection(previousValue.length,previousValue.length+sValue.length)}};function hideResults(){clearTimeout(timeout);timeout=setTimeout(hideResultsNow,200)};function hideResultsNow(){var wasVisible=select.visible();select.hide();clearTimeout(timeout);stopLoading();if(options.mustMatch){$input.search(function(result){if(!result){if(options.multiple){var words=trimWords($input.val()).slice(0,-1);$input.val(words.join(options.multipleSeparator)+(words.length?options.multipleSeparator:""))}else{$input.val("");$input.trigger("result",null)}}})}};function receiveData(q,data){if(data&&data.length&&hasFocus){stopLoading();select.display(data,q);autoFill(q,data[0].value);select.show()}else{hideResultsNow()}};function request(term,success,failure){if(!options.matchCase)term=term.toLowerCase();var data=cache.load(term);if(data&&data.length){success(term,data)}else if((typeof options.url=="string")&&(options.url.length>0)){var extraParams={timestamp:+new Date()};$.each(options.extraParams,function(key,param){extraParams[key]=typeof param=="function"?param():param});$.ajax({type:"GET",url:options.url+lastWord(term),success:function(data){var data=data.replace("&#039;","'");var parsed=options.parse&&options.parse(data)||parse(data);cache.add(term,parsed);success(term,parsed)}})}else{select.emptyList();failure(term)}};function parse(data){var parsed=[];var rows=data.split("\n");for(var i=0;i<rows.length;i++){var row=$.trim(rows[i]);if(row){row=row.split("|");parsed[parsed.length]={data:row,value:row[0],result:options.formatResult&&options.formatResult(row,row[0])||row[0]}}}return parsed};function stopLoading(){$input.removeClass(options.loadingClass)}};$.Autocompleter.defaults={inputClass:"ac_input",resultsClass:"ac_results",loadingClass:"ac_loading",minChars:1,delay:400,matchCase:false,matchSubset:true,matchContains:false,cacheLength:10,max:100,mustMatch:false,extraParams:{},selectFirst:true,formatItem:function(row){return row[0]},formatMatch:null,autoFill:false,width:0,multiple:false,multipleSeparator:", ",highlight:function(value,term){return value.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)("+term.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi,"\\$1")+")(?![^<>]*>)(?![^&;]+;)","gi"),"<strong>$1</strong>")},scroll:true,scrollHeight:180};$.Autocompleter.Cache=function(options){var data={};var length=0;function matchSubset(s,sub){if(!options.matchCase)s=s.toLowerCase();var i=s.indexOf(sub);if(options.matchContains=="word"){i=s.toLowerCase().search("\\b"+sub.toLowerCase())}if(i==-1)return false;return i==0||options.matchContains};function add(q,value){if(length>options.cacheLength){flush()}if(!data[q]){length++}data[q]=value}function populate(){if(!options.data)return false;var stMatchSets={},nullData=0;if(!options.url)options.cacheLength=1;stMatchSets[""]=[];for(var i=0,ol=options.data.length;i<ol;i++){var rawValue=options.data[i];rawValue=(typeof rawValue=="string")?[rawValue]:rawValue;var value=options.formatMatch(rawValue,i+1,options.data.length);if(value===false)continue;var firstChar=value.charAt(0).toLowerCase();if(!stMatchSets[firstChar])stMatchSets[firstChar]=[];var row={value:value,data:rawValue,result:options.formatResult&&options.formatResult(rawValue)||value};stMatchSets[firstChar].push(row);if(nullData++<options.max){stMatchSets[""].push(row)}};$.each(stMatchSets,function(i,value){options.cacheLength++;add(i,value)})}setTimeout(populate,25);function flush(){data={};length=0}return{flush:flush,add:add,populate:populate,load:function(q){if(!options.cacheLength||!length)return null;if(!options.url&&options.matchContains){var csub=[];for(var k in data){if(k.length>0){var c=data[k];$.each(c,function(i,x){if(matchSubset(x.value,q)){csub.push(x)}})}}return csub}else if(data[q]){return data[q]}else if(options.matchSubset){for(var i=q.length-1;i>=options.minChars;i--){var c=data[q.substr(0,i)];if(c){var csub=[];$.each(c,function(i,x){if(matchSubset(x.value,q)){csub[csub.length]=x}});return csub}}}return null}}};$.Autocompleter.Select=function(options,input,select,config){var CLASSES={ACTIVE:"ac_over"};var listItems,active=-1,data,term="",needsInit=true,element,list;function init(){if(!needsInit)return;element=$("<div/>").hide().addClass(options.resultsClass).css("position","absolute").appendTo(document.body);list=$("<ul/>").appendTo(element).mouseover(function(event){if(target(event).nodeName&&target(event).nodeName.toUpperCase()=='LI'){active=$("li",list).removeClass(CLASSES.ACTIVE).index(target(event));$(target(event)).addClass(CLASSES.ACTIVE)}}).click(function(event){$(target(event)).addClass(CLASSES.ACTIVE);select();input.focus();return false}).mousedown(function(){config.mouseDownOnSelect=true}).mouseup(function(){config.mouseDownOnSelect=false});if(options.width>0)element.css("width",options.width);needsInit=false}function target(event){var element=event.target;while(element&&element.tagName!="LI")element=element.parentNode;if(!element)return[];return element}function moveSelect(step){listItems.slice(active,active+1).removeClass(CLASSES.ACTIVE);movePosition(step);var activeItem=listItems.slice(active,active+1).addClass(CLASSES.ACTIVE);if(options.scroll){var offset=0;listItems.slice(0,active).each(function(){offset+=this.offsetHeight});if((offset+activeItem[0].offsetHeight-list.scrollTop())>list[0].clientHeight){list.scrollTop(offset+activeItem[0].offsetHeight-list.innerHeight())}else if(offset<list.scrollTop()){list.scrollTop(offset)}}};function movePosition(step){active+=step;if(active<0){active=listItems.size()-1}else if(active>=listItems.size()){active=0}}function limitNumberOfItems(available){return options.max&&options.max<available?options.max:available}function fillList(){list.empty();var max=limitNumberOfItems(data.length);for(var i=0;i<max;i++){if(!data[i])continue;var formatted=options.formatItem(data[i].data,i+1,max,data[i].value,term);if(formatted===false)continue;var li=$("<li/>").html(options.highlight(formatted,term)).addClass(i%2==0?"ac_even":"ac_odd").appendTo(list)[0];$.data(li,"ac_data",data[i])}listItems=list.find("li");if(options.selectFirst){listItems.slice(0,1).addClass(CLASSES.ACTIVE);active=0}if($.fn.bgiframe)list.bgiframe()}return{display:function(d,q){init();data=d;term=q;fillList()},next:function(){moveSelect(1)},prev:function(){moveSelect(-1)},pageUp:function(){if(active!=0&&active-8<0){moveSelect(-active)}else{moveSelect(-8)}},pageDown:function(){if(active!=listItems.size()-1&&active+8>listItems.size()){moveSelect(listItems.size()-1-active)}else{moveSelect(8)}},hide:function(){element&&element.hide();listItems&&listItems.removeClass(CLASSES.ACTIVE);active=-1},visible:function(){return element&&element.is(":visible")},current:function(){return this.visible()&&(listItems.filter("."+CLASSES.ACTIVE)[0]||options.selectFirst&&listItems[0])},show:function(){var offset=$(input).offset();element.css({width:typeof options.width=="string"||options.width>0?options.width:$(input).width(),top:offset.top+input.offsetHeight,left:offset.left}).show();if(options.scroll){list.scrollTop(0);list.css({maxHeight:options.scrollHeight,overflow:'auto'});if($.browser.msie&&typeof document.body.style.maxHeight==="undefined"){var listHeight=0;listItems.each(function(){listHeight+=this.offsetHeight});var scrollbarsVisible=listHeight>options.scrollHeight;list.css('height',scrollbarsVisible?options.scrollHeight:listHeight);if(!scrollbarsVisible){listItems.width(list.width()-parseInt(listItems.css("padding-left"))-parseInt(listItems.css("padding-right")))}}}},selected:function(){var selected=listItems&&listItems.filter("."+CLASSES.ACTIVE).removeClass(CLASSES.ACTIVE);return selected&&selected.length&&$.data(selected[0],"ac_data")},emptyList:function(){list&&list.empty()},unbind:function(){element&&element.remove()}}};$.fn.selection=function(start,end){if(start!==undefined){return this.each(function(){if(this.createTextRange){var selRange=this.createTextRange();if(end===undefined||start==end){selRange.move("character",start);selRange.select()}else{selRange.collapse(true);selRange.moveStart("character",start);selRange.moveEnd("character",end);selRange.select()}}else if(this.setSelectionRange){this.setSelectionRange(start,end)}else if(this.selectionStart){this.selectionStart=start;this.selectionEnd=end}})}var field=this[0];if(field.createTextRange){var range=document.selection.createRange(),orig=field.value,teststring="<->",textLength=range.text.length;range.text=teststring;var caretAt=field.value.indexOf(teststring);field.value=orig;this.selection(caretAt,caretAt+textLength);return{start:caretAt,end:caretAt+textLength}}else if(field.selectionStart!==undefined){return{start:field.selectionStart,end:field.selectionEnd}}}})(jQuery);

