/**
* Archivo js creado por EVO I.T.
* 
* Este archivo contiene funciones generales de JavaScript
*
* @package EVOIT
* @author {@link http://www.evoit.com/ EVO I.T.}
* @version 22-07-2009
* @copyright {@link http://www.evoit.com/ EVO I.T.}
*/

/**
* Función para mostrar y ocultar los items del menú en el administrador
* 
* Esta función se utiliza para mostrar u ocultar los items del menú en el administrador y setear una variable de $_SESSION
* mediante AJAX para mantener el estado del menú (abierto o cerrado)
* 
* @param object id_ob Id del objeto que se quiere ocultar o mostrar
*/
function showhide_menu(id_ob)
{
	var ob_layer = $('#menu_' + id_ob);
	var ob_btn   = $('#btn_menu_' + id_ob);
	
	if (ob_layer.is(":hidden"))
	{
		ob_layer.slideDown('normal');

		ob_btn.attr('className', 'btn_menu_open');
		
		$.ajax({
			type: 'GET', 
			url: 'btnmenu.php', 
			data: 's=' + id_ob + '&v=open'});
	}
	else
	{
		ob_layer.slideUp('normal');
		
		ob_btn.attr('className', 'btn_menu_closed');
		
		$.ajax({
			type: 'GET', 
			url: 'btnmenu.php', 
			data: 's=' + id_ob + '&v=closed'});
	}
}

/**
* Función para mostrar y ocultar el formulario de búsqueda
* 
* Esta función se utiliza para mostrar u ocultar el formulario de búsqueda y setear una variable de $_SESSION
* mediante AJAX para mantener el estado del formulario (abierto o cerrado)
* 
* @param object id_ob Id del objeto que se quiere ocultar o mostrar
*/
function showhide_search(id_ob)
{
	var ob_layer = $('#container_search_' + id_ob);
	var ob_btn   = $('#btn_search_' + id_ob);
	
	if (ob_layer.is(":hidden"))
	{
		ob_layer.slideDown('normal');

		ob_btn.attr('className', 'btn_search_open');
		
		$.ajax({
			type: 'GET', 
			url: 'btnsearch.php', 
			data: 's=' + id_ob + '&v=open'});
	}
	else
	{
		ob_layer.slideUp('normal');
		
		ob_btn.attr('className', 'btn_search_closed');
		
		$.ajax({
			type: 'GET', 
			url: 'btnsearch.php', 
			data: 's=' + id_ob + '&v=closed'});
	}
}

/**
* Función para cambiar el estilo de las filas de una consulta
* 
* Estas funciones se utilizan para cambiar el estilo (CSS) de las filas de una tabla
* que se crea llamando al método show_query()
* 
* @param object _obj objeto row (tr) de una tabla en HTML
* @param string _class clase CSS de la fila
*/
function tr_over(_obj, _class)
{
	if (_obj.className == 'query_tr_' + _class + '_click')
	{
		_obj.className = 'query_tr_' + _class + '_click';
	}
	else
	{
		_obj.className = 'query_tr_' + _class + '_hover';
	}
}

/**
* Función para cambiar el estilo de las filas de una consulta
* 
* Estas funciones se utilizan para cambiar el estilo (CSS) de las filas de una tabla
* que se crea llamando al método show_query()
* 
* @param object _obj objeto row (tr) de una tabla en HTML
* @param string _class clase CSS de la fila
*/
function tr_out(_obj, _class)
{
	if (_obj.className == 'query_tr_' + _class + '_click')
	{
		_obj.className = 'query_tr_' + _class + '_click';
	}
	else
	{
		_obj.className = 'query_tr_' + _class + '';
	}
}

/**
* Función para cambiar el estilo de las filas de una consulta
* 
* Estas funciones se utilizan para cambiar el estilo (CSS) de las filas de una tabla
* que se crea llamando al método show_query()
* 
* @param object _obj objeto row (tr) de una tabla en HTML
* @param string _class clase CSS de la fila
* @param boolean _click_check indica si se debe chequear el checkbox de la fila
* @param string _id id del checkbox de la fila
* @param string _table tabla (de la clase)
*/
function tr_click(_obj, _class, _click_check, _id, _table)
{
	if (_obj.className != 'query_tr_' + _class + '_click')
	{
		_obj.className = 'query_tr_' + _class + '_click';
	}
	else
	{
		_obj.className = 'query_tr_' + _class + '';
	}
	
	if (_click_check)
	{
		var ob_chkb = $('#cb_' + _table + '_' + _id);
		
		if (ob_chkb.is(':checked'))
		{
			ob_chkb.attr('checked', false);
		}
		else
		{
			ob_chkb.attr('checked', true);
		}
		
		checked_select_all('form_query_' + _table, _table + '_select_all');
	}
}

/**
* Esta función la utilizo para que el click del checkbox no interfiera con el click de la fila
*
* Esta función se utiliza en conjunto con las funciones tr_over, tr_out y tr_click
*
* @param object _obj objeto checkbox
*/
function checkbox_click(_obj)
{
	_obj.checked = ! _obj.checked;
}

/**
* Función para seleccionar o deseleccionar el checkbox de seleccion grupal
* 
* Esta función se utiliza para seleccionar o deseleccionar el checkbox de selección grupal cuando se seleccionan
* todos los checkbox de una consulta o se deselecciona al menos uno.
* 
* @param string _form id del formulario que contiene los checkbox
* @param string _checkbox id del checkbox que se utiliza para seleccionar todos los otros
*/
function checked_select_all(_form, _checkbox)
{
	var ob_form = $('#' + _form);
	var ob_chkb = $('#' + _checkbox);
	
	cantidad = ob_form.get(0).elements.length;
	checked_all = true;
	
	for (i = 0; i < cantidad; i++)
	{ 
		if (ob_form.get(0).elements[i].type == 'checkbox')
		{
			if (ob_form.get(0).elements[i].value)
			{
				if (!ob_form.get(0).elements[i].checked)
				{
					checked_all = false;
				}
			}
		}
	}
	
	ob_chkb.attr('checked', checked_all);
}

/**
* Función para seleccionar o deseleccionar todos los checkbox de un formulario
* 
* Esta función se utiliza para seleccionar o deseleccionar todos los checkbox de las filas de una tabla
* que se crea llamando al método show_query()
* 
* @param string _table tabla (de la clase)
*/
function query_select_all(_table)
{
	var ob_form = $('#form_query_' + _table);
	var ob_chkb = $('#' + _table + '_select_all');
	
	cantidad = ob_form.get(0).elements.length;
		
	for (i = 0; i < cantidad; i++)
	{ 
		if (ob_form.get(0).elements[i].type == 'checkbox')
		{
			ob_form.get(0).elements[i].checked = ob_chkb.attr('checked');
			
			if (ob_form.get(0).elements[i].value)
			{
				var ob_tr = $('#' + _table + '_tr_' + ob_form.get(0).elements[i].value);
				
				/**
				* determino si es clase 1 o clase 2 (query_tr_1, query_tr_1_click o query_tr_2, query_tr_2_click)
				*/
				aux_class = ob_tr.get(0).className.substr(9, 1);
				
				if (ob_chkb.is(':checked'))
				{
					ob_tr.attr('className', 'query_tr_' + aux_class + '_click');
				}
				else
				{
					ob_tr.attr('className', 'query_tr_' + aux_class);
				}
			}
		}
	}
}

/**
* Función para realizar el submit del formulario de las acciones grupales
* 
* Esta función se utiliza para realizar el submit del formulario para realizar las acciones grupales
* que se crean llamando al método show_query()
* 
* @param string _form id del formulario
* @param string _action archivo al que redirecciona el formulario
* @param string _params parámetros que se envían
* @param boolean _confirm indica si la acción necesita confirmación antes de ser realizada
* @param string _msg mensaje de la confirmación
*/
function form_query_submit(_form, _action, _params, _confirm, _msg)
{
	var ob_form = $('#' + _form);

	ob_form.attr('action', _action);
	ob_form.get(0).p.value = _params;
	if (_confirm)
	{
		if (confirm(_msg))
		{
			ob_form.submit();
		}
	}
	else
	{
		ob_form.submit();
	}
}

/**
* Función para abrir un popup con la imagen seleccionada
* 
* @param string myimage URL de la imagen
*/
function display(url_img, width, height)
{
	var scrollbars = '0';
	
	if (width)
	{
		width = width + 4;
	}
	else
	{
		width = screen.width / 2;
		scrollbars = '1';
	}
	
	if (height)
	{
		height = height + 4;
	}
	else
	{
		height = screen.height / 2;
		scrollbars = '1';
	}
	
	if (width > (screen.width - 30))
	{
		width = screen.width - 30;
		scrollbars = '1';
	}	
	if (height > (screen.height - 150))
	{
		height = screen.height - 150;
		scrollbars = '1';
	}

	var left = (screen.width - width) / 2;
	var top  = (screen.height - height) / 4;

	html = '<html>';
	html+= '<head>';
	html+= '<title>Holy Cross Orthopedic Institute</title>';
	html+= '</head>';
	html+= '<body style="margin: 0;">';
	html+= '<div align="center" style="padding: 2px 0 2px 0;">';
	html+= '<a href="javascript:window.close()">';
	html+= '<img src="' + url_img + '" border="0" name="image_popup" id="image_popup" alt="" title="Close" />';
	html+= '</a>';
	html+= '<div>';
	html+= '</body></html>';
		
	popup = window.open('', 'image', 'left=' + left + ',top=' + top + ',width=' + width + ',height=' + height + ',channelmode=0,directories=0,fullscreen=0,location=0,menubar=0,resizable=0,scrollbars=' + scrollbars + ',status=0,titlebar=0,toolbar=0');
	popup.document.open();
	popup.document.write(html);
	popup.focus();
	popup.document.close();
}

/**
* Corta cadenas de caracteres y les agrega un "title"
* 
* Esta función se utiliza para cortar cadenas de caracteres muy largas.
* Es muy común usarla cuando se muestran los resultados de una consulta en forma tabulada.
* 
* @param string string cadena de caracteres que se corta
* @param string lenght largo con el que queda la cadena
* @param string last_string [opcional] caracteres que se muestran al final de la cadena si la misma es cortada
*/
function getcut_string(string, length, last_string)
{		
	length = parseInt(length);

	var aux = '';
	
	var myString = string;
	
	var myLastString = last_string;
	
	if (myString.length <= length || length == 0)
	{
		aux = myString;
	}
	else
	{
		if (myString.length < myLastString.length + length)
		{
			aux = myString;
		}
		else
		{
			aux = myString.substr(0 , length) + myLastString;
		}
	}	
	
	return '<span title="' + htmlentities(myString) + '">' + aux + '</span>';
}

/**
* Función para evitar el submit de un formulario cuando se presiona Enter en alguno de sus campos
* 
* @param event e Evento
*/
function noSubmit(e)
{
	var keynum;
	
	if(window.event) // IE
	{
		keynum = e.keyCode;
	}
	else if(e.which) // Netscape/Firefox/Opera
	{
		keynum = e.which;
	}
	
	if (keynum == 13)
	{
		return false;	
	}
}

/**
* Función para transformar caracteres en sus entidades HTML correspondientes
* 
* @param string str cadena de caracteres a transformar
*/
function htmlentities(str)
{
	return str.replace(/"/g, '&quot;');
}

/**
* Función para darle el foco a un elemento determinado
*
* @param string id identificador del elemento
*/
function setfocus(id)
{
	var ob_form = $('#' + id);
	ob_form.get(0).focus();
}

/**
* Función para modificar el tamaño de la fuente del contenido
* 
*/
function font_size()
{
	if ($('#btn_font_size').text() == 'Type +')
	{
		$('#btn_font_size').text('Type -');
		
		$('.content-title').css('font-size', '17px');
		
		$('.content-text').css('font-size', '15px');
		
		$('.content-text-small').css('font-size', '13px');
		
		$('.content-link').css('font-size', '15px');
		
		$('#columns h1').css('font-size', '20px');
		
		$('#column-3 .text-1').css('font-size', '14px');
		
		$('#column-3 .text-2').css('font-size', '14px');
		
		$('#column-1 .link').css('font-size', '15px');
		
		$('#column-1 .link-over').css('font-size', '15px');
		
		$('#sitemap .link-1').css('font-size', '20px');
		
		$('#sitemap .link-2').css('font-size', '15px');
		
		$('#search .text').css('font-size', '12px');
		
		$('#search .title').css('font-size', '15px');
		
		$('#search .link').css('font-size', '17px');
		
		$('#search .url').css('font-size', '14px');
		
		$('.totop-link').css('font-size', '14px');
				
		$('#news .buttons .link').css('font-size', '13px');
		
		$('#news .buttons').css('width', '245px');
		
		$('#news .title-link').css('font-size', '14px');
		
		$('#news .date').css('font-size', '14px');
		
		$('#news .title').css('font-size', '15px');
		
		$('#news .description').css('font-size', '15px');
		
		$('#news .toheadlines-link').css('font-size', '14px');
	}
	else
	{
		$('#btn_font_size').text('Type +');
		
		$('.content-title').css('font-size', '15px');
		
		$('.content-text').css('font-size', '13px');
		
		$('.content-text-small').css('font-size', '11px');
		
		$('.content-link').css('font-size', '13px');
		
		$('#columns h1').css('font-size', '18px');
		
		$('#column-3 .text-1').css('font-size', '12px');
		
		$('#column-3 .text-2').css('font-size', '12px');
		
		$('#column-1 .link').css('font-size', '13px');
		
		$('#column-1 .link-over').css('font-size', '13px');
		
		$('#sitemap .link-1').css('font-size', '18px');
		
		$('#sitemap .link-2').css('font-size', '13px');
		
		$('#search .text').css('font-size', '10px');
		
		$('#search .title').css('font-size', '13px');
		
		$('#search .link').css('font-size', '15px');
		
		$('#search .url').css('font-size', '12px');
		
		$('.totop-link').css('font-size', '12px');
				
		$('#news .buttons .link').css('font-size', '11px');
		
		$('#news .buttons').css('width', '219px');
		
		$('#news .title-link').css('font-size', '12px');
		
		$('#news .date').css('font-size', '12px');
		
		$('#news .title').css('font-size', '13px');
		
		$('#news .description').css('font-size', '13px');
		
		$('#news .toheadlines-link').css('font-size', '12px');
	}
}

/**
* Función para abrir el popup para enviar el email con la url de la page
* 
* @param string section sección
* @param string page id de la pagina
* @param string id id de la noticia (news)
* @param search condicion de busqueda de la página search.php
*/
function email_page(section, page, id, search)
{
	var width  = 450;
	var height = 390;
	
	var left = (screen.width - width) / 2;
	var top  = (screen.height - height) / 4;
		
	popup = window.open('email-page.php?s=' + section + '&p=' + page + '&id=' + id + '&search=' + search, 'email', 'left=' + left + ',top=' + top + ',width=' + width + ',height=' + height + ',channelmode=0,directories=0,fullscreen=0,location=0,menubar=0,resizable=0,scrollbars=0,status=0,titlebar=0,toolbar=0');
}

/**
*
*/
function print_version()
{
	window.print();
}