ï»¿// COMMON FUNCTIONS
//...............................................

/**
 * Oculta el elemento pasado como parámetro.
 * Setea la propiedad "display" en "none";
 * 
 * @param {Object|objectId} obj
 */
function hide(obj){
	if(!isObject(obj)) obj = getObj(obj); 
	obj.style.display="none";
}
//...............................................

/**
 * Muestra el elemento pasado como parÃ¡metro.
 * Setea la propiedad "display" en "block";
 * 
 * @param {Object|objectId} obj
 */
function show(obj){
	if(!isObject(obj)) obj = getObj(obj); 
	obj.style.display="block";
}

//...............................................

function showInline(obj){
	if(!isObject(obj)) obj = getObj(obj); 
	obj.style.display="inline";
}

//...............................................

/**
 * Cambia el estado de visualización del elemento
 * pasado como parÃ¡metro.
 * Si se encuetra visible lo hace invisible,
 * si se encuentra invisible lo hace visible.
 * Se utiliza la propiedad "display" en lugar de "visible"
 * para que el elemento no ocupe espacio en pantalla.
 * 
 * @param {Object|objectId} obj
 */
function showHide(obj){
	if(!isObject(obj)) obj = getObj(obj); 
	
	if(obj.style.display=="none"){
		obj.style.display="block";
	} else {
		obj.style.display="none";	
	}
}
//...............................................

/**
 * Setea la propiedad "disabled=true" para 
 * el elemento pasado como parámetro.
 * Es decir, desactiva el elemento.
 * 
 * @param {Object|objectId} objId
 */
function disable(obj){
	if(!isObject(obj)) obj = getObj(obj);
	obj.disabled = true;
}

//...............................................

/**
 * Setea la propiedad "disabled=false" para 
 * el elemento pasado como parámetro.
 * Es decir, activa el elemento.
 * 
 * @param {Object|objectId} obj
 */
function enable(obj){
	if(!isObject(obj)) obj = getObj(obj);
	obj.disabled = false;
}

//...............................................
/**
 * Asigna el value pasado como parámetro al objeto
 * pasado como parámetro.
 * 
 * @param {Object|objectId} objId
 * @param {string} value
 */
function setValue(obj, value){
	if(!isObject(obj)) obj = getObj(obj);	
	obj.value = value;
}
//...............................................

/**
 * Asigna el content pasado como parámetro al
 * innerHTML del objeto suministrado.
 * 
 * @param {Object|objectId} obj
 * @param {string} content
 */
function assignInnerHTML(obj, content){
	if(!isObject(obj)) obj = getObj(obj);
	obj.innerHTML = content;
}
//---------------------------------------------------------------------

function clearField(obj){
	if(!isObject(obj)) obj = getObj(obj);
	obj.value = "";
}
//---------------------------------------------------------------------

//---------------------------------------------------------------------

function popup(theURL,winName,features,popwidth,popheight) { //v2.0
  window.open(theURL,winName,features + ",width=" + popwidth + ",height=" + popheight + ",left=" + (screen.width-popwidth)/2 + ",top=" + (screen.height-popheight)/2 + "'");

  /*
  	use example:
  	
  	onClick="javascript:popup('list_photo.php','asociarFoto','status=no','400','400');"
  */
}
//---------------------------------------------------------------------

function getValue(objId){
	return document.getElementById(objId).value;
}
//...............................................

function getInnerHTML(obj){
	if(!isObject(obj)) obj = getObj(obj);
	return obj.innerHTML;
}
//...............................................
	
	function getObj(objId){
		return document.getElementById(objId);	
	}
//...............................................
	
	//---------------------------------------------------------------------
	/**
	 * Evalúa si el objeto cuyo id se pasa como parámetro es visible o no.
	 * Lo determina considerando si su propiedad "display" es "none" o 
	 * distinto de "none".
	 
	 * @param {String} objId
	 * @return {boolean} [true: visible | false: hidden]
	 */
	function isVisible(obj){
		if(!isObject(obj)) obj = getObj(obj);
		if(obj.style.display!="none") return true;
		return false;		
	}	
	//---------------------------------------------------------------------
	
	//---------------------------------------------------------------------
	/**
	 * Setea el foco en el objeto cuyo id se pasa como parámetro.
	 * Si el parámetro "selected" es true también se selecciona el content.
	 * 
	 * @param {String} objId
	 * @param {Boolean} selected
	 */
	function setFocus(obj, selected){
		if(!isObject(obj)) obj = getObj(obj);
		if(selected==undefined) selected = false;				
		obj.focus(); //focus		
		if(selected) obj.select(); //select
	}	
	//---------------------------------------------------------------------
	
	//---------------------------------------------------------------------
	/**
	 * Agrega la propiedad "isFocused" al objeto pasado como parámetro.
	 * Agrega métodos a los eventos "onfocus" y "onblur" para actualizar
	 * el estado de la propiedad. 
	 * 
	 * @param {object|String objectId} obj	 
	 */	
	function setFocusedProperty(obj){
		if(!isObject(obj)) obj = getObj(obj);		
		obj.isFocused = false;
		obj.onfocus = function(){ this.isFocused=true; }
		obj.onblur = function(){ this.isFocused=false; }
	}
	//---------------------------------------------------------------------
	
	//---------------------------------------------------------------------
	/**
	 * Determina si el objeto pasado como param tiene el foco.
	 * Para ello lee una var global que debe haberse seteado previamente. 
	 * Dicha var se setea desde el evento "onfocus" del elemento cuyo foco
	 * se desea trackear y se libera desde el evento "onblur". 
	 * 
	 * @param {object|String objectId} obj	 
	 */
	function isFocused(obj){
		if(!isObject(obj)) obj = getObj(obj);
		if(focused == obj) return true;
		return false;
	}	
	//---------------------------------------------------------------------
		
	//---------------------------------------------------------------------
	function exists(obj){
		if(!isObject(obj)) obj = getObj(obj);
		if(obj!=undefined) return true;
		return false;
	}
	//---------------------------------------------------------------------
		
	//---------------------------------------------------------------------	
	/**
	 * Determina si el parámetro pasado es un objeto.
	 * 
	 * @param {anything} anything
	 * @return {boolean}
	 */
	function isObject(anything){
		if(typeof(anything)=="object") return true;
		return false;
	}	
	//---------------------------------------------------------------------
		
	//---------------------------------------------------------------------	
	/**
	 * Descripción:
	 * Devuelve la fecha actual en formato UNIX timestamp.
	 * 
	 * @param  
	 * @return {Date} timestamp
	 */	
	function getTimestamp(){
		d = new Date();
		timestamp = d.getTime();
		return timestamp;
	}
	//---------------------------------------------------------------------
		
	//---------------------------------------------------------------------
	function getAjaxObj(){
		var http_request = false;
		
		if (window.XMLHttpRequest) { // Mozilla, Safari,...
		   http_request = new XMLHttpRequest();
		   if (http_request.overrideMimeType) {
		       http_request.overrideMimeType('text/xml');
		   }
		} else if (window.ActiveXObject) { // IE
		   try {
		       http_request = new ActiveXObject("Msxml2.XMLHTTP");
		   } catch (e) {
		       try {
		           http_request = new ActiveXObject("Microsoft.XMLHTTP");
		       } catch (e) {}
		   }
		}
		
		return http_request;
	}
	//---------------------------------------------------------------------
	
	//---------------------------------------------------------------------	
	function makeHTTPRequest(url, callback_function, callback_errorHandler, return_xml){		
		if(return_xml==undefined) return_xml = false;		
		http_request = getAjaxObj();
	
		if (!http_request) {
		   alert('Unfortunatelly you browser doesn\'t support this feature.');
		   return false;
		}
				
		http_request.open("GET", url, true);
		
		//---------------------------------------------------------------	
		http_request.onreadystatechange = function() {
			try{
				if (http_request.readyState == 4) {
				   if (http_request.status == 200) {
				       if (return_xml) {
				           eval(callback_function + '(http_request.responseXML)');
				       } else {
				           eval(callback_function + '(http_request.responseText)');
				       }
				   } else {
				       alert('Se produjo un error en el servidor.\nIntente de nuevo más tarde. \n(Code: ' + http_request.status + ')');
				       eval(callback_errorHandler);
				   }
				}
			} catch(error){ 
				alert('Caught Exception: ' + error.description);
			}
		}
		//---------------------------------------------------------------
		
		http_request.setRequestHeader("Connection", "close");
		http_request.send(null);		
	}
	//---------------------------------------------------------------------	
		
	//---------------------------------------------------------------------
	/**
	 * Remueve el espacio en blanco a la izquierda de la cadena de texto
	 * pasada como parámetro.
	 * 
	 * @param {string} s
	 */
	function ltrim(s) {
	   return s.replace(/^\s+/, "");
	}
	//---------------------------------------------------------------------

	//---------------------------------------------------------------------
	/**
	 * Remueve el espacio en blanco a la derecha de la cadena de texto
	 * pasada como parámetro.
	 * 
	 * @param {string} s
	 */
	function rtrim(s) {
	   return s.replace(/\s+$/, "");
	}
	//---------------------------------------------------------------------
	
	//---------------------------------------------------------------------
	/**
	 * Remueve el espacio en blanco a izquierda y derecha de la cadena 
	 * de texto pasada como parámetro.
	 * 
	 * @param {string} s
	 */
	function trim(s) {
	   return rtrim(ltrim(s));
	}
	//---------------------------------------------------------------------
	
	//---------------------------------------------------------------------
	/**
	 * Descripción:
	 *	Setead el innerHTML del objeto pasado como parámetro.
	 *	También acepta el id del objeto como parámetro.
	 *	Si "append" es true agrega el contenido pasado como parámetro
	 *	al final del contenido que ya posea el objeto.
	 *	
	 *	@param {obj} obj
	 *  @param {string} text
	 *	@param {boolean} append
	 *	@return void
	 */	
	function setInnerHTML(obj, text, append) {				
		if(!isObject(obj)) obj = getObj(obj);
		if(append==undefined) append = false;
		if(append){
			obj.innerHTML += text;
		} else {
			obj.innerHTML = text;
		}
	}
	//---------------------------------------------------------------------
	
	//---------------------------------------------------------------------
	
	/**
	 * Valido la sintáxis de la URL pasada como parámetro.
	 * Si es válida devuelve true, sino false.
	 * 
	 * @author Alberto Miranda
	 * @param {String} URL
	 * @return {boolean}
	 */
	function isUrl(URL)
    {
        validURL_regex = /(ftp|http|https):\/\/((\w+:{0,1}\w*@)?([^ \*\/\\]))(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;
        if(validURL_regex.test(URL)) return true;
		return false;	        
    }
	
	//---------------------------------------------------------------------
	
	/**
	 * Dirije el foco de la página hacia el anchor
	 * pasado como parámetro.
	 * 
	 * @author Alberto Miranda
	 * @param {string} anchorName
	 */
	function gotoAnchor(anchorName){
		location.href="#" + anchorName;
	}
	//---------------------------------------------------------------------
	
	//---------------------------------------------------------------------
	
	String.prototype.htmlEntities = function(){
		return this.replace(/[^\x09\x0A\x0D\x20-\x7F]|[\x21-\x2F]|[\x3A-\x40]|[\x5B-\x60]/g,function(e){return '&#'+e.charCodeAt(0)+';'});
	};
	//---------------------------------------------------------------------

	String.prototype.URLencode= function () {
		return escape(this);
	}
	//---------------------------------------------------------------------
	
	//---------------------------------------------------------------------
	
	/**
	 * It works on both browsers, but IE complains...
	 * Tira un error y ofrece depurarlo al cargar la página.
	 * FIE.
	 */
	Object.prototype.addEvtListener=function(eventName, listenerFunction){
		//IE
		try{
			this.attachEvent("on" + eventName, listenerFunction);
		} catch(e){}
		
		//GECKO
		try{
			this.addEventListener(eventName, listenerFunction, false);
		} catch(e){}
	}
	//---------------------------------------------------------------------
	
	/**
	 * Asocia una función que se llama al dispararse el evento
	 * indicado en el objeto pasado como parámetro.
	 * 
	 * @author Alberto Miranda	 
	 * @param {obj|objId} obj
	 * @param {string} eventName
	 * @param {string} listenerFunction
	 * @return {void}
	 */
	function addEvtListener(obj, eventName, listenerFunction){
		if(!isObject(obj)) obj = getObj(obj);
		
		//IE
		try{
			obj.attachEvent("on" + eventName, listenerFunction);
		} catch(e){}
		
		//GECKO
		try{
			obj.addEventListener(eventName, listenerFunction, false);
		} catch(e){}
	}
	//---------------------------------------------------------------------
	
	//---------------------------------------------------------------------

   /**
    * Agrego la clase css pasada como parámetro al objeto suministrado.
    *
    * @author Alberto Miranda
    * @param {obj} obj
    */
   function addCSSClass(obj, cssClassName){
           if(!isObject(obj)) obj = getObj(obj);
           if (!hasSubstring(obj.className, cssClassName)) {
                   obj.className += ' ' + cssClassName;
           }
   }
   //---------------------------------------------------------------------
   
   /**
    * Quito la clase css pasada como parámetro al objeto suministrado.
    *
    * @author Alberto Miranda
    * @param {obj} obj
    */
   function removeCSSClass(obj, cssClassName){
           if(!isObject(obj)) obj = getObj(obj);
           if (hasSubstring(obj.className, cssClassName)) {
                   obj.className = obj.className.replace(cssClassName, '');                        
           }
   }
   //---------------------------------------------------------------------
   
   /**
     * Averiguo si el string pasado como parámetro posee
     * el substring suministrado.
     * 
     * @author Alberto Miranda
     * @param {string} anchorName
     */
    function hasSubstring(string, substring){
            if(string.indexOf(substring)!=-1) return true;
            return false;
    }
    //---------------------------------------------------------------------
    
    //---------------------------------------------------------------------
    /**
     * Determina si el valor pasado como parámetro es numérico.
     * @param {string} value
     * @return {boolean}
     */
    function isNumeric(value){
    	var numeric = /^[0-9.,-]*$/;
    	if(value=="") return false;
    	if(numeric.test(value)) return true;
    	return false;    	
    }
   	//---------------------------------------------------------------------
   	/**
     * Determina si el valor pasado como parámetro es un nro. entero.
     * @param {string} value
     * @return {boolean}
     */
    function isInteger(value){
    	var numeric = /^[0-9]*$/;
    	if(value=="") return false;
    	if(numeric.test(value)) return true;
    	return false;    	
    }
   	//---------------------------------------------------------------------
	
