//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 number_format(number, decimals, dec_point, thousands_sep){
	var n = number, prec = decimals;
 
    var toFixedFix = function (n,prec) {
        var k = Math.pow(10,prec);
        return (Math.round(n*k)/k).toString();
    };
 
    n = !isFinite(+n) ? 0 : +n;
    prec = !isFinite(+prec) ? 0 : Math.abs(prec);
    var sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep;
    var dec = (typeof dec_point === 'undefined') ? '.' : dec_point;
 
    var s = (prec > 0) ? toFixedFix(n, prec) : toFixedFix(Math.round(n), prec); //fix for IE parseFloat(0.55).toFixed(0) = 0;
 
    var abs = toFixedFix(Math.abs(n), prec);
    var _, i;
 
    if (abs >= 1000) {
        _ = abs.split(/\D/);
        i = _[0].length % 3 || 3;
 
        _[0] = s.slice(0,i + (n < 0)) +
              _[0].slice(i).replace(/(\d{3})/g, sep+'$1');
        s = _.join(dec);
    } else {
        s = s.replace('.', dec);
    }
 
    var decPos = s.indexOf(dec);
    if (prec >= 1 && decPos !== -1 && (s.length-decPos-1) < prec) {
        s += new Array(prec-(s.length-decPos-1)).join(0)+'0';
    }
    else if (prec >= 1 && decPos === -1) {
        s += dec+new Array(prec).join(0)+'0';
    }
    return s;
};
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";
	};
};
//Ajusta los altos de un conjunto de contenedores, de manera que todos tengan el mismo alto
//Todos los contenedores deben tener la misma clase css.
function ajustarAltos(classContenedor){
	//Ajustamos los altos
	var calendar = $('.'+classContenedor);
	var mayorCal = 0;
	for (var i=0;i<calendar.length;i++){
		if (mayorCal < calendar[i].offsetHeight){
			mayorCal = calendar[i].offsetHeight;
		}
	}	
	$('.'+classContenedor).css('height', mayorCal+'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;

function fechaADiaSistema(fecha){  
	var sep = fecha.search("-") >= 0 ? '-' : '/';
	var fecha1 = diaBase.split("-");
	fecha1 = new Date(fecha1[0],fecha1[1]-1,fecha1[2]);//creamos un objeto date con la fecha actual
	var fecha2 = fecha.split(sep);
	fecha2 = new Date(fecha2[2],fecha2[1]-1,fecha2[0]);
	var resta = ((fecha2-fecha1)/1000/3600/24)+1; 
	return resta;
}

function validarFecha(CadenaFecha){  
    var Fecha= new String(CadenaFecha)   // Crea un string  
    var RealFecha= new Date()   // Para sacar la fecha de hoy  
    var sep = Fecha.search("-") >= 0 ? '-' : '/';
    var Ano= new String(Fecha.substring(Fecha.lastIndexOf(sep)+1,Fecha.length));  // Cadena Año  
    var Mes= new String(Fecha.substring(Fecha.indexOf(sep)+1,Fecha.lastIndexOf(sep))); // Cadena Mes    
    var Dia= new String(Fecha.substring(0,Fecha.indexOf(sep)));  // Cadena Día  
    if (CadenaFecha.length<1){  alert(MM['IngreseFecha']);   return false;  } // fecha vacía
	if (isNaN(Ano) || Ano.length<4 || parseFloat(Ano)<2000){   alert(MM['AnioInvalido']);  return false;   }  // Valido el año 
    if (isNaN(Mes) || parseFloat(Mes)<1 || parseFloat(Mes)>12){  alert(MM['MesInvalido']);  return false;  }  // Valido el Mes  
    if (isNaN(Dia) || parseInt(Dia, 10)<1 || parseInt(Dia, 10)>31){   alert(MM['DiaInvalido']);  return false ; }  // Valido el Dia 
    if (Mes==4 || Mes==6 || Mes==9 || Mes==11 || Mes==2) {  
        if (Mes==2 && Dia > 28 || Dia>30) {    alert(MM['DiaInvalido']);    return false;    }  
    }  
	return true;    
}  

function limpiarPAGMonto1(monto){
	//alert("monto:"+monto);
	if (monto == '---' || monto == ''){return "";}
	var txt = new String(monto); 
	var txtArray = new Array(); 
	txtArray = txt.split("- ");
	return txtArray[1].replace( "%", "");
};
function tr(a, g){
	if (undefined == g) g = gaer;
	a = g + '-' + a;
	//Eventos que ya han sido llamados
	var c = $.cookie('GAER') || '|';
	//No volver a registrar el mismo evento bajo esta visita
	if (-1 != c.indexOf('|' + a + '|')) return;
	//Guardar el evento realizado
	$.cookie('GAER', c + a + '|', {expires: 1});
	//Guardar el evento
	if (debug) alert(a);
	else pageTracker._trackEvent('SRI-1-Reservación', 'Click', a);
};
