//Creador y modificador de clases
(function(){
	var estilos = document.styleSheets;
	var bufferIndex = estilos.length;
	$('head').append(CE('style', {'media': 'screen', 'type': 'text/css'}));
	jQuery.extend({'cssBuffer':estilos[bufferIndex],'cssBufferIndex':0});
})();
//Extensión de jQuery para establecer estilos más fácilmente
$.extend($, {
	'setStyle': function(identificator, properties){
		if (this.browser.msie){
			components = identificator.split(',');
			for (i = 0; i < components.length; i ++){
				this.cssBuffer.addRule(components[i], properties);
			};
		}else{
			this.cssBuffer.insertRule(identificator + '{' + properties + '}', this.cssBufferIndex++);
		};
		return true;
	}
});
//Función especializada de ajax para hoteles
function ajaxRequest(url, param, callback, message){
	if (message){
		//En caso de ser una traducción, se obtiene
		if (MM[message]) message = MM[message];
		$('#IdAjaxMensaje').html(message + '...');
		$('#IdAjaxContainer').css('display','block');
	};
	$.ajax({
		url: url,
		data: param,
		dataType: 'json',
		type: 'post',
		error: function(xml, status, error){
			if (message) $('#IdAjaxContainer').css('display','none');
			logError({'xml':xml, 'status':status, 'error':error, 'TextoServidor':xml.responseText});
		},
		success: function(obj){
			if (message) $('#IdAjaxContainer').css('display','none');
			if (obj.error){
				logError({'error':obj.error, 'TextoServidor':obj['technicalInfo']});
			};
			if (callback) callback(obj);
		}
	});
	return true;
};
function logOutPax(){
	ajaxRequest(URLpax + '/logoutpax.php', {'se':se, 'desdeVT': window.desdeVT || 0}, loggedOut, MM['CerrandoSesion']);
};
function loggedOut(respuesta){
	if (respuesta['loggedout']){
		var l;
		if (window.redirect && window.data){
			l = URLpax + '/loginpax.php?redirect=' + redirect + '&data=' + data;
		}else{
			l = location.href;
			l += (-1 == l.indexOf('?') ? '?' : '') + '&';
			if (0 == l.indexOf('https')) l = 'http' + l.substr(5);
		};
		location.href = l;
		return true;
	}else{
		if (respuesta['error']){
			alert(respuesta['error']);
			return false;
		}else{
			alert(MM['ErrorSistema']+' #3');
			return false;
		};
	};
};
function fixedPosition(obj, minTop, minNewTop, left){
	obj = GE(obj);//Si es un string devolver el objeto
	//Averiguar el tope
	var vScrollTop = document.documentElement.scrollTop || document.body.scrollTop; // body for Safari
	var currentTop = minTop - vScrollTop;
	//Se compara el scrolling actual con la posición mínima respecto al tope para usar position:fixed
	if (currentTop < minNewTop){
		var newTop = minNewTop;
	}else{
		var newTop = currentTop;
	};
	//Establecer la posición con respecto al tope
	if (parseInt(obj.style.top) != newTop){
		obj.style.top = newTop + "px";
	};
	//A medida que se mueva la página a la derecha, mantener el objeto en la misma posición
	var vScrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft; // body for Safari
	var newLeft = left - vScrollLeft;
	//Establecer la posición con respecto a la izquierda
	if (parseInt(obj.style.left) != newLeft){
		obj.style.left = newLeft + "px";
	};
};
function scriptError(text, file, linenumber){
	//Esta función es llamada cuando algún script genera un error
	logError({'text':text, 'file':file, 'linenumber':linenumber});
};
function logError(error){
	try{
		errores ++;
		//Sea cual sea el error enviado al servidor, no queremos provocar otro registro de un bucle infinito
		if (errores > erroresMax) return;
		if (window.se){
			error['se'] = se;
		};
		if (window.HOTCode){
			error['HOTCode'] = HOTCode;
		};
		//La función es llamada a través de jquery porque puede que se genere un error antes de que el dom esté listo
		$(ajaxRequest(URLprg + '/logerror.php', error));
	}catch(e){};
	//En modo debugging permitir que el error llegue a firebug
	return !debug;
};
//El calendario (calendar.js) no llama el onchange cuando cambia el valor del input, aquí se genera ese efecto
if (typeof pickDate != 'undefined'){
	var _pickDate = pickDate;
	pickDate = function(day){
		_pickDate(day);
		$(returnDateTo).change();
	};
};
var errores = 0;
var erroresMax = 10;
//Registrar los errores ocurridos sin usar jquery porque este no pasa los parámetros correctamente
window.onerror = scriptError;
