// *****************************************************************************
// funciones de inicio
// *****************************************************************************
// -----------------------------------------------------------------------------
// cuando se acabe de cargar el arbol de DOM, se ejecutan estas dos funciones
window.addEvent( 'domready', function() {
  hmenu();
  makehint();
});

// -----------------------------------------------------------------------------
// anyade los eventos de mouseover y mouseout al menu horizontal
function hmenu () {
  /* Horizontal CSS Menu */
	if(!document.body.currentStyle) return;
	var subs = document.getElementsByName('submenu');
	for(var i=0; i<subs.length; i++) {
		var li = subs[i].parentNode;
		if(li && li.lastChild.style) {
			li.onmouseover = function() {
				this.lastChild.style.visibility = 'visible';
			}
			li.onmouseout = function() {
				this.lastChild.style.visibility = 'hidden';
			}
		}
	}
}

// -----------------------------------------------------------------------------
// anyade el evento de makehint (cuadrado amarillo de infromacion)
function makehint() {
  /* Tip campos de formularios */
  if ($('makehint')) { $('makehint').remove(); }
	$$('.makehint').each(function(el){
    var span = new Element('span').addClass('hint').setStyles({'display':'none','opacity':'0'}).setProperty('id','makehint');
    span.setHTML(el.getProperty('alt'));
    var span2 = new Element('span').addClass('hint-pointer').injectInside(span);
		
    if( el.getTag() == "td" || el.getTag() == "tr" ) {
      span.injectInside(el);
    }
    else {
      span.injectAfter(el);
    }
    
		var ef = new Fx.Style(span, 'opacity', {
			duration: 500,
	  	transition: Fx.Transitions.quartInOut
	  });
		el.addEvent('focus', function(event) {
        span.setStyle('display','inline');
  			ef.start(0,1);
		})
		el.addEvent('mouseover', function(event) {
        span.setStyle('display','inline');
  			ef.start(0,1);
		})
		el.addEvent('mouseout', function(event) {
        span.setStyle('display','none');
  			ef.start(0,1);
		})
		el.addEvent('blur', function(event) {
		    ef.start(1,0);
		});
  });
}

// *****************************************************************************
// funciones de imagen mientras carga
// *****************************************************************************
// -----------------------------------------------------------------------------
// muestra una imagen especifica en una capa
function onLoading(div) {

  if ($('ajax_loading')) { $('ajax_loading').remove(); }

  $(div).innerHTML = ' ';

  var el = new Element('div');
  el.setProperty('id','ajax_loading');
  el.addClass('ajax_loading');
  el.setHTML('<div id="ajax_loading"><img src="/thm/img/animgifs/loading.gif" /> Por favor, espere...</div>');
  el.injectInside(div);

}

// -----------------------------------------------------------------------------
// muestra un mensaje y una imagen en la capa dada 
function onWaiting(capa, mensaje, imagen) {
  //if ($('ajax_waiting')) { $('ajax_waiting').remove(); }
  $(capa).innerHTML = ' ';
  var el = new Element('div');
  el.setProperty('id','ajax_waiting');
  el.addClass('ajax_waiting');
  el.setHTML('<div id="ajax_waiting"><img src="'+imagen+'" /><br>'+mensaje+'</div>');
  el.injectInside(capa);
}

// -----------------------------------------------------------------------------
// oculta una capa, y en la capa destino se le envian un mensaje y una imagen
function on_loading( capa_porocultar, capa_destino, mensaje, imagen ) {
  $(capa_destino).innerHTML = ' ';

  var altura = $(capa_porocultar).clientHeight > 0 ? $(capa_porocultar).clientHeight : $(capa_porocultar).offsetHeight ;
  $(capa_porocultar).setStyle('display','none');


  var el = new Element('div');
  el.setProperty('id','ajax_newloading');
  el.addClass('ajax_newloading');
  el.setStyle('height',altura+'px');
  el.setHTML( "<table width='100%' style='height:100%;'><tr><td align='center' valign='middle'><img src='"+imagen+"' /><br>"+mensaje+"</td></tr></table>" );

  el.injectInside( capa_destino );
}

// -----------------------------------------------------------------------------
function ocultaLoading(loading) {
	if ($(loading)) {
      // si es una imagen
      if ($(loading).src) {
        $(loading).setProperties({'src':'/thm/img/admin/mi.gif','alt':'loaded'})
      } 
	}
}


// *****************************************************************************
// funciones de validacion
// *****************************************************************************
// -----------------------------------------------------------------------------
// Formulario a validar, Funcion a ejecutar
function ValidateAndSubmit (form_id, function_submit) { 
  var validar = new Validation($(form_id), { onFormValidate: function_submit, useTitles: true });
}

// -----------------------------------------------------------------------------
// función que obtiene los elementos por su nombre de clase
document.getElementsByClassName = function(cl, sTagName) {  
  var retnode = [];  
  var myclass = new RegExp('\\b'+cl+'\\b');  
  var elem = this.getElementsByTagName((sTagName===""||sTagName===null)?"*":sTagName);  
  for (var i = 0; i < elem.length; i++) {  
    var classes = elem[i].className;  
    if (myclass.test(classes)) retnode.push(elem[i]);  
  }  
  return retnode;  
};  

// *****************************************************************************
// funciones de mensajeria
// *****************************************************************************
// -----------------------------------------------------------------------------
function kenda_msg (msg, tipo) {
	// tipo: ok, error
 var kenda = (function(){
	 	var kenda = new Element('div');
	  kenda.injectBefore('content');
	  kenda.setStyles({'display':'none','opacity':'0'});
	  kenda.setHTML(msg);
	  kenda.setProperty('id','kenda_msg');
	  kenda.addClass('kenda_msg_'+tipo);
	  show_fade('kenda_msg','show');
	}).delay(200);

	var fade = (function() {
    show_fade('kenda_msg','fade');
    $('kenda_msg').remove();
	}).delay('4000');

}

// *****************************************************************************
// funciones de carga
// *****************************************************************************
// -----------------------------------------------------------------------------
function ajax(mod,exec,div,id,get,loading) {

  if ($(loading)) {
      // si es una imagen
      if ($(loading).src) {
        $(loading).setProperties({'src':'thm/img/animgifs/indicator_arrows.gif','alt':'loading'})
      } else {
				$(loading).innerHTML = '<div style="padding:5em;"><img src="thm/img/animgifs/indicator_arrows.gif" /> Cargando ...</div>';
			}
	}

	var url = '/' + mod +'/'+ exec +'&id='+id + '&' + get + '&ajax=1';
	
	var Options = {
    update: div,
		method: 'GET',
		onComplete: function (e) { ocultaLoading(loading) },
		evalScripts:true,
		asynchronous: true
	};

  new Ajax(url, Options).request();

}

// -----------------------------------------------------------------------------
// para TISCMS - viaja al modulo especificado de TISCMS
function modulo(mod,exec){

	if ($('content')) onLoading($('content'));
	// hack tiny
	if ($('html')) tinyMCE.execCommand('mceRemoveControl', false, 'html');
	var url = '/'+ mod +'/'+exec+'&ajax=1';
	var Options = {
    update: 'content',
		method: 'GET',
		evalScripts:true,
		asynchronous: true
	};

  new Ajax(url, Options).request();
  /* hack firefox para actualizar content tamaño height*/
  height = $('content').getProperty('height');
  $('content').setStyle('height',height);
  
}

// -----------------------------------------------------------------------------
function include(file_path){
	var j = document.createElement("script");
	j.type = "text/javascript";
	j.src = file_path;
	document.body.appendChild(j);
}

// -----------------------------------------------------------------------------
// Paginador AJAX
function paginateList(params, id_output){ // Parametros GET, ID de capa a actualizar
  if ($(id_output)) onLoading($(id_output));
  var url = params;
  var Options = {
    update: id_output,
    method: 'GET',
    evalScripts: true,
    asynchronous: true,
    onComplete:function(){
      /* Scroll para la lista, si encuentra un limit */
      if (params.test('limit')) {
        if ($$('.scrollList')) $$('.scrollList').setStyles('overflow: auto; height: 320px');
      }
    }
  };
  new Ajax(url, Options).request();
}

// -----------------------------------------------------------------------------
// abre la direccion especificada en una nueva ventana/pestanya
function nuevaVentana( direccion, titulo ) {
  window.open( direccion, titulo );
}


// *****************************************************************************
// funciones de efectos
// *****************************************************************************
// -----------------------------------------------------------------------------
// muestra u oculta una capa dada: ej: show_fade( 'capa', 'fade' );
function show_fade(div,tipo,auto) {
  if (auto) {
	  if ($(div)) {
		  if ($(div).getStyle('display') == 'block') {
		    if (tipo == 'show') {
		      tipo = 'fade';
		    }
		  }
    }
  }

  var ef = new Fx.Style(div, 'opacity', {
		duration: 500,
	  transition: Fx.Transitions.quartInOut
	})
	
  if (tipo == 'show') {
	  if ($(div).getStyle('display') == 'none') $(div).setStyle('display','block');
	   	ef.start(0,1);
	} 
  else {
	  ef.start(1,0);
	  if ($(div).getStyle('display') == 'block') $(div).setStyle('display','none');
	}
}

// -----------------------------------------------------------------------------
// muestra un elemento oculto, y oculta un elemento que se muestra 
function switch_showfade( elm ) {
  if( $(elm).getStyle('display')=='none' ){
    show_fade( elm, 'show' );
  }
  else {
    show_fade( elm, 'fade' );
  }
}


// *****************************************************************************
// funciones de formato
// *****************************************************************************
// -----------------------------------------------------------------------------
function js_trim( texto ) {
	return texto.replace(/^\s+|\s+$/g, '');
}

// -----------------------------------------------------------------------------
function del_html(html) {
  	html = html.replace(/<[^>]*>/gi, "");
		html = html.replace(/<[^>]*\/gi>/, "");
		html = html.trim();
		return html;
}

// -----------------------------------------------------------------------------
function alert(string) {
	kenda_msg(string,'ok');
}

// -----------------------------------------------------------------------------
// añade un parametro a una URL especificada
function addParamToURL(url, param, value, replace) {
	if (replace == true) url=removeParamFromURL(url,param);
	return url + ((url.indexOf("?") == -1) ? "?" : "&") + param + "=" + value;
}

// -----------------------------------------------------------------------------
// quita un parametro de una url especificada
function removeParamFromURL(url, param) {
	var sep = "&";
	var startIndex = url.indexOf("&"+param+"=");

	if (startIndex == -1) {
		startIndex = url.indexOf("?"+param+"=");
		sep = "?";
	}

	if (startIndex != -1) {
		var endIndex = url.indexOf("&",startIndex+1);
		return url.substring(0,startIndex)+ (endIndex > 0 ? (sep == "?" ? "?"+url.substr(endIndex+1) : url.substr(endIndex)) : "");
	}

	return url;
}

