﻿//Framework de funciones propias
var basepath = "/";

//oculta o muestra un div segun el id
function hide(id) {
	$(id).style.display = "none";
}

function show(id) {
	$(id).style.display = "block";
}


//************************************************************************//
// FUNCIONES PARA DROP DOWNS
//************************************************************************//

//Funcion q llena las opciones de el combo de id suministrado
function loadDropDownCombo(cmbID, collection,selectone)
{
    $(cmbID).options.length = 0;
    if(selectone){
    var opcion = new Option(selectone,"");
    $(cmbID).options[$(cmbID).options.length] = opcion;
    }
    for(var i=0;i<collection.length;i++)
    {        
        var item = collection[i];
        var opc = new Option(unescape(item.detail), unescape(item.id)); 
        try
        {
            $(cmbID).options[$(cmbID).length] = opc; 
        }
        catch (e){ 
            alert("Error Interno");
        } 
    }
} 

//************************************************************************//
// FUNCIONES PARA CHECKBOXES
//************************************************************************//

function loadCheckBoxes(divContainer, collection, selectedValues, eventClick)
{
    var i;
    var chk = "";
    var values = selectedValues.split(',');

    //first remove all existing checkboxes
    while($(divContainer).hasChildNodes()){
        $(divContainer).removeChild($(divContainer).firstChild);
    }

    for(i=0;i<collection.length;i++)
    {
        var item = collection[i];
        var chk = document.createElement("input");
        chk.setAttribute("id",divContainer+item.id);
        chk.setAttribute("name",divContainer+item.id);
        chk.setAttribute("type","checkbox");
        $(divContainer).appendChild(chk);
        chk.setAttribute("onClick",eventClick);
        if(values.indexOf(item.id.toString()) != -1)
        { 
            chk.setAttribute("checked",true);
        }
        
        $(divContainer).appendChild(document.createTextNode(item.detail));
        if(((i+1)>=6) && (((i+1)%6)==0))
        { 
            $(divContainer).appendChild(document.createElement("br"));
        }  
    }
    
}

//************************************************************************//
//  FUNCIONES PARA MANEJAR LOS TABS
//************************************************************************//

//funcion utilizada para desplegar la solapa de un tabControl a traves del efecto slide down
//para q esto funcione los diferentes div de los tabs deben ir como hijos de un DIV llamado tabControl
//como parametro recibe el id del div correspondiente al tab q queremos desplegar
function SlideDownTab(tab){

    if($(tab).style.display=="none"){
        var tabs = $("tabControl").childNodes;
        for(var i=0;i<tabs.length;i++){
            if ((tabs[i].nodeName == "DIV") && (tabs[i].id != tab)){
                $(tabs[i].id.replace("tab","nav")).className = "off";
                tabs[i].style.display="none"; 
            }
        }       
        $(tab.replace("tab","nav")).className = "";
        Effect.SlideDown(tab,{duration:0.5});
    }
}

//************************************************************************//
//  FUNCIONES PARA PARSEAR EL QUERYSTRING
//************************************************************************//
function parseQS(key) {
    hu = window.location.search.substring(1);
    gy = hu.split("&");
    
    for (i=0;i<gy.length;i++) {
        
        ft = gy[i].split("=");
        
        if (ft[0] == key) return ft[1];        
    }
}

//Para parsear querystring de friendly URL's
//function parseFriendlyQS(key) {    
//    var hu = new String();
//    hu = window.location + '';
//    
//    //Obtengo cuantas secciones tengo separadas por -
//    var gy = hu.split("-");
//    secciones = gy.length;
//    
//    for (sec = secciones-1 ; sec >= 0 ; sec--) 
//    {
//        ft = gy[sec];
//        
//        if (ft.split(".").length > 1) {ft = ft.split(".")[0];}
//    
//        if(ft.charAt(0) == key) {return ft.substring(1,ft.length);}
//    }
//}

function parseFriendlyPostQS(url)
{
    url = url + '';
    url = url.split("/");
    var expression = new RegExp("([a-z0-9]+-+[0-9]+-+[a-z]+.html)", "gi");
    for(sec = 0; sec <= url.length; sec ++)
    {
        if(expression.test(url[sec]))
        {
            return url[sec];
        }
    }
}

function parseFriendlyQS(url)
{
    url = url + '';
    url = url.split("/");
    var expression = new RegExp("(-+[a-z]+.html)", "gi");
    for(sec = 0; sec <= url.length; sec ++)
    {
        if(expression.test(url[sec]))
        {
            return url[sec];
        }
    }
}

//************************************************************************//
//  FUNCIONES PARA WATERMARK
//************************************************************************//

//var watermarkObj = new Array();
//var watermarkVal = new Array();

function watermark(id, value, setStyle) {
	
	// Obtengo el objeto
	var box = $(id);
	var oldstyle = box.className;
	
	// Si se focusea limpiamos
	box.onfocus = function() {
		if (this.value == value)
		{
		this.value = "";
		this.className = oldstyle;
		}
		
	}
	
	// Autocompletar
	box.onblur = function()
	{
		if (this.value == "") 
		{
		this.value = value;
		this.className = setStyle;
		}
		
	}
	
	// Setea el valor inicial
	if (box.value == "") 
	{
		box.value = value;
		box.className = setStyle;		
	}

	// Se sgregan a arrays => no van en el submit
//	watermarkObj[watermarkObj.length] = id;
//	watermarkVal[watermarkVal.length] = value;
}

//function clearDefaults() {
	
	// funcion para limpiar los campos antes de enviar el formulario											   
//	for (var i = 0; i < watermarkObj.length; i++) {
//		var obj = get(watermarkObj[i]);
//		if (obj.value == watermarkVal[i]) obj.value = "";
//	}

//function setDefaults() {
	
	// funcion para resetear los valores de los controles si estan en blanco, a sus
	// correspondientes watermaks
//	for (var i = 0; i < watermarkObj.length; i++) {
//		var obj = get(watermarkObj[i]);
//		if (obj.value == "")
//		{
//		obj.value = watermarkVal[i];
//		}
//	}
//************************************************************************//
//  FUNCIONES PARA CHEQUEAR MAIL INGRESADO
//************************************************************************//
function checkEmail(str) {
	var at="@"
	var dot="."
	var lat=str.indexOf(at)
	var lstr=str.length
	var ldot=str.indexOf(dot)
	if (str.indexOf(at)==-1){
	   return false
	}

    if (str==""){
	    return false
    }
    
    if (str==" "){
	    return false
    }
    
    if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr){
	    return false
	}

	if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr){
	    return false
	}

	 if (str.indexOf(at,(lat+1))!=-1){
	    return false
	 }

	 if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot){
	    return false
	 }

	 if (str.indexOf(dot,(lat+2))==-1){
	    return false
	 }
	
	 if (str.indexOf(" ")!=-1){
	    return false
	 }
	 
	 return true					
}

//************************************************************************//
//  FUNCIONES PARA CHEQUEAR WEBSITE
//************************************************************************//
function checkWebSite(website)
{
    var regWEB = new RegExp("^(http|https|ftp)\://", "g");
    
    if(!regWEB.test(website))
    {
        website = "http://" + website;
    }
    //alert(website);
    var regular = new RegExp("^(http|https|ftp)\://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(:[a-zA-Z0-9]*)?/?([a-zA-Z0-9\-\._\?\,\'/\\\+&amp;%\$#\=~])*[^\.\,\)\(\s]$", "g");
    
     if (regular.test(website))
     {
        return true;
     }
     else 
     {
        return false;
     }
}


//************************************************************************//
//  FUNCIONES PARA CHEQUEAR SI UN STRING ES NUMÉRICO
//************************************************************************//
function isNumeric(sText)
{
  var ValidChars = "0123456789.";
  var IsNumber=true;
  var Char;
 
  for (i = 0; i < sText.length && IsNumber == true; i++){ 
      Char = sText.charAt(i); 
      if (ValidChars.indexOf(Char) == -1) IsNumber = false;         
  }
      
   return IsNumber;   
}


//************************************************************************//
//  FUNCIONES PARA CALCULAR EL PROMEDIO
//************************************************************************//
function getAverage()
{
   var items = getAverage.arguments.length
   var sum = 0
   for (i = 0; i < items;i++)
   {
      sum += getAverage.arguments[i]
   }
   return Math.round(sum/items)
}

/****************************************************************************/
// Seteo eventos de la página
//if(window.attachEvent){ window.attachEvent("onload", pageLoad); }
//else if (window.addEventListener){ window.addEventListener("load", pageLoad, false); }
/**************************************************************************/

//************************************************************************//
//  FUNCIONES PARA CREAR TOOLTIPS
//************************************************************************//

//ToolTip con RollOver
function CrearTooltip(tip_id, tip_title, tip_subtitle, tip_cssclass)
{
    var tip_id, tip_title, tip_subtitle, tip_cssclass;
    if(tip_cssclass == '')
    {
        tip_cssclass = 'protoClassic';
    }
    new Tip(tip_id, tip_subtitle, {title : tip_title, className: tip_cssclass, showOn: 'mousemove', hideOn: 'mouseout'});
}

//ToolTip con Boton
function CrearTooltip_close(tip_id, tip_title, tip_subtitle, tip_cssclass)
{
    var tip_id, tip_title, tip_subtitle, tip_cssclass;
    if(tip_cssclass == '')
    {
        tip_cssclass = 'protoClassic';
    }
    
    new Tip(tip_id, tip_subtitle, {title : tip_title, className: tip_cssclass, showOn: 'click', hideOn: {element: 'closeButton', event: 'click' }});
}
/****************************** FIN TOOLTIPS ********************************/

//************************************************************************//
//  FUNCIONES PARA STRINGS                                                //
//************************************************************************//
// Voy disminuyendo la cantidad de caracteres disponibles por ingresar, 
// cuando la cantidad es mayor al max, no le deja escribir mas.

function charactersLeft(obj, id, max){
    var aux;
    
    if(escape(obj.value).length > max){
        $(id).style.color = 'red';
        //aux = obj.value;
        obj.value = obj.value.substring(0, max);
        $(id).value = 0;
    }else{
        $(id).style.color = '#086709';
    }   
            
    $(id).value = (max - escape(obj.value).length) + " characters remaining.";
}


//************************************************************************//
//  FUNCION PARA VALIDAR STRINGS                                          //
//************************************************************************//

function CheckPalabras(words)
{    
    var arrContent;
    arrContent = words.split(/[\s\n]/);
    
    //all sobre cualquier array itera sobre cada elemento probando la funcion y solo retorna true si ninguna llamada a la funcion retorna false
    //la primera llamada q retorna false corta la ejecucion y retorna false
    var result = arrContent.all(
        function(pal){
            //alert(pal);    
            if(pal.length > 50)
            {
                alert(pal+" excedes allowed length, max is 50 characters");
                return false;
            }
            else
            {
                //regular expression para validar palabras no permitidas
                var reg_exp = /(<a)|(<b>)|(<u>)|(<i>)|(<html)|(<body)|(<img)|(<div)/;
                if(reg_exp.test(pal))
                { 
                    alert("HTML tags are not allowed"); 
                    return false; 
                }
                else { return true; }
            } 
        }
    );
    return result;
}

//************************************************************************//
//  FUNCIONES PARA CHEQUEAR AÑO BISIESTO
//************************************************************************//
function checkLeapYear(date)
{
    var regular01 = new RegExp("(((0[13578]|10|12)([-./])(0[1-9]|[12][0-9]|3[01])([-./])(\d{4}))|((0[469]|11)([-./])([0][1-9]|[12][0-9]|30)([-./])(\d{4}))|((2)([-./])(0[1-9]|1[0-9]|2[0-8])([-./])(\d{4}))|((2)(\.|-|\/)(29)([-./])([02468][048]00))|((2)([-./])(29)([-./])([13579][26]00))|((2)([-./])(29)([-./])([0-9][0-9][0][48]))|((2)([-./])(29)([-./])([0-9][0-9][2468][048]))|((2)([-./])(29)([-./])([0-9][0-9][13579][26])))", "g");
    
    if (regular01.test(date))
     {
        return true;
     }
     else 
     {
        return false;
     }
    
}

//************************************************************************//
//  FUNCIONES PARA CONVERTIR STRING PORTABLES COMO ISAPI
//************************************************************************//
function convertToIsapi(string)
{
    return string.replace(new RegExp("[^a-zA-Z0-9]", "g"),"-");
}

function getHotelSummaryUrl(hotel_id, city_name, country_name, hotel_name)
{
    return basepath+"Hotel-summary-"+convertToIsapi(city_name)+'-'+convertToIsapi(country_name)+'/'+convertToIsapi(hotel_name)+'-p'+hotel_id+'.html';
}

function getHotelReviewsUrl(hotel_id, city_name, country_name, hotel_name)
{
    return basepath+"Hotel-reviews-"+convertToIsapi(city_name)+'-'+convertToIsapi(country_name)+'/'+convertToIsapi(hotel_name)+'-p'+hotel_id+'.html';
}

//************************************************************************//
// Detecta Versiones del Reproductro de Flash
//************************************************************************//
var FlashDetect = new function(){
	var self = this;
	self.installed = false;
	self.major = -1;
	self.minor = -1;
	self.revision = -1;
	self.revisionStr = "";
	self.activeXVersion = "";
	var activeXDetectRules = [
		{
			"name":"ShockwaveFlash.ShockwaveFlash.7",
			"version":function(obj){
				return getActiveXVersion(obj);
			}
		},
		{
			"name":"ShockwaveFlash.ShockwaveFlash.6",
			"version":function(obj){
				var version = "6,0,21";
				try{
					obj.AllowScriptAccess = "always";
					version = getActiveXVersion(obj);
				}catch(err){}
				return version;
			}
		},
		{
			"name":"ShockwaveFlash.ShockwaveFlash",
			"version":function(obj){
				return getActiveXVersion(obj);
			}
		}
	];
	var getActiveXVersion = function(activeXObj){
		var version = -1;
		try{
			version = activeXObj.GetVariable("$version");
		}catch(err){}
		return version;
	};
	var getActiveXObject = function(name){
		var obj = -1;
		try{
			obj = new ActiveXObject(name);
		}catch(err){}
		return obj;
	};
	var parseActiveXVersion = function(str){
		var versionArray = str.split(",");//replace with regex
		return {
			"major":parseInt(versionArray[0].split(" ")[1], 10),
			"minor":parseInt(versionArray[1], 10),
			"revision":parseInt(versionArray[2], 10),
			"revisionStr":versionArray[2]
		};
	};
	var parseRevisionStrToInt = function(str){
		return parseInt(str.replace(/[a-zA-Z]/g, ""), 10) || self.revision;
	};
	self.majorAtLeast = function(version){
		return self.major >= version;
	};
	self.FlashDetect = function(){
		if(navigator.plugins && navigator.plugins.length>0){
			var type = 'application/x-shockwave-flash';
			var mimeTypes = navigator.mimeTypes;
			if(mimeTypes && mimeTypes[type] && mimeTypes[type].enabledPlugin && mimeTypes[type].enabledPlugin.description){
				var desc = mimeTypes[type].enabledPlugin.description;
				var descParts = desc.split(' ');//replace with regex
				var majorMinor = descParts[2].split('.');
				self.major = parseInt(majorMinor[0], 10);
				self.minor = parseInt(majorMinor[1], 10); 
				self.revisionStr = descParts[3];
				self.revision = parseRevisionStrToInt(self.revisionStr);
				self.installed = true;
			}
		}else if(navigator.appVersion.indexOf("Mac")==-1 && window.execScript){
			var version = -1;
			for(var i=0; i<activeXDetectRules.length && version==-1; i++){
				var obj = getActiveXObject(activeXDetectRules[i].name);
				if(typeof obj == "object"){
					self.installed = true;
					version = activeXDetectRules[i].version(obj);
					if(version!=-1){
						var versionObj = parseActiveXVersion(version);
						self.major = versionObj.major;
						self.minor = versionObj.minor; 
						self.revision = versionObj.revision;
						self.revisionStr = versionObj.revisionStr;
						self.activeXVersion = version;
					}
				}
			}
		}
	}();
};
FlashDetect.release = "1.0.2";

//---------------------------------------------------------------------------//

//Funcion para limpiar todos los espacios
function trim(str)
{
    s = str.replace(/^(\s)*/, '');
    s = s.replace(/(\s)*$/, '');
    return s;
}

//Función para eliminar tags HTML, http://, www y etc.
//var re = new RegExp("<[^>]+>", "g");

function deleteInvalidTags(str)
{   
    var strReg = new RegExp("[@]|(http://)|(https://)|(ftp://)|(www.)", "gi"); //--> Detecta dir URL  
    str = str.stripTags();//--> Devuelve texto sin tags html
    str = str.replace(strReg, '');
    return str;
}


//---------------------------------------------------------------------------//

function checkForLength(currID, displayID, max_caracters) 
{
    var max = max_caracters;
    var txt;
    txt = $(currID);
    var n = txt.value.length;
    var charsDisp = (max)-n;
    $(displayID).innerHTML = charsDisp + " characters remaining";
    $(displayID).style.color = "#086709";
    if (charsDisp<=0) 
    {
        txt.value = txt.value.substring(0, max);
        $(displayID).innerHTML = "0 characters remaining";
        $(displayID).style.color = "#C50000";
        return false;
    }
}

//---------------------------------------------------------------------------//

function goToProfile(user, this_href){
    if(user != 'anonymouse' || user != 'Anonymouse'){ window.location = this_href; }
    else{return false;}
}

//---------------------------------------------------------------------------//

function DetectIfFlashInstalled()
{    
    var isIE  = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false;
    var isWin = (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false;
    var isOpera = (navigator.userAgent.indexOf("Opera") != -1) ? true : false;

        function ControlVersion()
        {
	        var version;
	        var axo;
	        var e;

	        // NOTE : new ActiveXObject(strFoo) throws an exception if strFoo isn't in the registry

	        try {
		        // version will be set for 7.X or greater players
		        axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
		        version = axo.GetVariable("$version");
	        } catch (e) {
	        }

	        if (!version)
	        {
		        try {
			        // version will be set for 6.X players only
			        axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
        			
			        // installed player is some revision of 6.0
			        // GetVariable("$version") crashes for versions 6.0.22 through 6.0.29,
			        // so we have to be careful. 
        			
			        // default to the first public version
			        version = "WIN 6,0,21,0";

			        // throws if AllowScripAccess does not exist (introduced in 6.0r47)		
			        axo.AllowScriptAccess = "always";

			        // safe to call for 6.0r47 or greater
			        version = axo.GetVariable("$version");

		        } catch (e) {
		        }
	        }

	        if (!version)
	        {
		        try {
			        // version will be set for 4.X or 5.X player
			        axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
			        version = axo.GetVariable("$version");
		        } catch (e) {
		        }
	        }

	        if (!version)
	        {
		        try {
			        // version will be set for 3.X player
			        axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
			        version = "WIN 3,0,18,0";
		        } catch (e) {
		        }
	        }

	        if (!version)
	        {
		        try {
			        // version will be set for 2.X player
			        axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
			        version = "WIN 2,0,0,11";
		        } catch (e) {
			        version = -1;
		        }
	        }
        	
	        return version;
        }

        // JavaScript helper required to detect Flash Player PlugIn version information
        function GetSwfVer(){
	        // NS/Opera version >= 3 check for Flash plugin in plugin array
	        var flashVer = -1;
        	
	        if (navigator.plugins != null && navigator.plugins.length > 0) {
		        if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) {
			        var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "";
			        var flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description;
			        var descArray = flashDescription.split(" ");
			        var tempArrayMajor = descArray[2].split(".");			
			        var versionMajor = tempArrayMajor[0];
			        var versionMinor = tempArrayMajor[1];
			        var versionRevision = descArray[3];
			        if (versionRevision == "") {
				        versionRevision = descArray[4];
			        }
			        if (versionRevision[0] == "d") {
				        versionRevision = versionRevision.substring(1);
			        } else if (versionRevision[0] == "r") {
				        versionRevision = versionRevision.substring(1);
				        if (versionRevision.indexOf("d") > 0) {
					        versionRevision = versionRevision.substring(0, versionRevision.indexOf("d"));
				        }
			        }
			        var flashVer = versionMajor + "." + versionMinor + "." + versionRevision;
			        //alert("flashVer="+flashVer);
		        }
	        }
	        // MSN/WebTV 2.6 supports Flash 4
	        else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") != -1) flashVer = 4;
	        // WebTV 2.5 supports Flash 3
	        else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") != -1) flashVer = 3;
	        // older WebTV supports Flash 2
	        else if (navigator.userAgent.toLowerCase().indexOf("webtv") != -1) flashVer = 2;
	        else if ( isIE && isWin && !isOpera ) {
		        flashVer = ControlVersion();
	        }	
	        return flashVer;
        }

        // When called with reqMajorVer, reqMinorVer, reqRevision returns true if that version or greater is available
        function DetectFlashVer(reqMajorVer, reqMinorVer, reqRevision)
        {
	        versionStr = GetSwfVer();
	        if (versionStr == -1 ) {
		        return false;
	        } else if (versionStr != 0) {
		        if(isIE && isWin && !isOpera) {
			        // Given "WIN 2,0,0,11"
			        tempArray         = versionStr.split(" "); 	// ["WIN", "2,0,0,11"]
			        tempString        = tempArray[1];			// "2,0,0,11"
			        versionArray      = tempString.split(",");	// ['2', '0', '0', '11']
		        } else {
			        versionArray      = versionStr.split(".");
		        }
		        var versionMajor      = versionArray[0];
		        var versionMinor      = versionArray[1];
		        var versionRevision   = versionArray[2];

        	        // is the major.revision >= requested major.revision AND the minor version >= requested minor
		        if (versionMajor > parseFloat(reqMajorVer)) {
			        return true;
		        } else if (versionMajor == parseFloat(reqMajorVer)) {
			        if (versionMinor > parseFloat(reqMinorVer))
				        return true;
			        else if (versionMinor == parseFloat(reqMinorVer)) {
				        if (versionRevision >= parseFloat(reqRevision))
					        return true;
			        }
		        }
		        return false;
	        }
        }
        
    
    // Major version of Flash required
    var requiredMajorVersion = 8;
    // Minor version of Flash required
    var requiredMinorVersion = 0;
    // Minor version of Flash required
    var requiredRevision = 0; 

    var hasReqestedVersion = DetectFlashVer(requiredMajorVersion, requiredMinorVersion, requiredRevision);
    
    if(hasReqestedVersion)
    {
        return true;
    }
    else
    {
        return false;
    }

}

//Parsea url de los videos de Youtube
//y devuelve el id del video
function parseU2Burl(url, key)
{
    var regUrl = new RegExp("([a-z0-9]+\.youtube\.)", "gi");
    
    if(regUrl.test(url))
    {
        var hu = new String();
        var url_hlp = url.split("?");
        hu = url_hlp[1];
        //alert(hu);
        gy = hu.split("&");
        
        for (i=0;i<gy.length;i++) {
            
            ft = gy[i].split("=");
            
            if (ft[0] == key) return ft[1];        
        }
    }
    else
    {
        return url;
    }
}