	
	
util = {
		
    xmlTree: function(xml){
        var tree = new XML.ObjTree();
        return tree.parseXML(xml);
    },
		
    randomString: function(length) {
        var sChrs;
        var type = (arguments.length > 1) ? arguments[1] : 'alphanumeric';
        var numeric = "0123456789";
        var alpha = "abcdefghijklmnopqrstvwxyz";
        alpha += alpha + alpha.toUpperCase();
        switch(type){
            case 'alphanumeric': sChrs = numeric + alpha; break;
            case 'numeric': sChrs = numeric; break;
            case 'alpha': sChrs = alpha; break;
        }
        var sRnd = '';
        for(var x = 0; x < length; x++){
            var i = Math.floor(Math.random() * sChrs.length);
            sRnd += sChrs.charAt(i);
        }
        return sRnd;
    },
	
    getUniqueId: function(){
        var now = new Date();
        return(now.getTime());
    },
		
    thisFormTrigger: function(){
        tinyMCE.triggerSave(false, true);
    },
		
    currentPage: function(){
        var page = location.href.split("/");
        return page[page.length - 1].split("?")[0];
    },
		
    ask: function(url){
        if(!confirm("Estas seguro?")) return false;
        self.location = url;
    },
		
    accents: function(string){
        string = string.replace(/�/g, "&aacute;");
        string = string.replace(/�/g, "&eacute;");
        string = string.replace(/�/g, "&iacute;");
        string = string.replace(/�/g, "&oacute;");
        string = string.replace(/�/g, "&uacute;");
        return string;
    },
		
    mousePositionOnClick: function(fn){
        document.onclick = function(e){
            if (!e) var e = window.event;
            if (e.pageX || e.pageY){
                PosX = e.pageX;
                PosY = e.pageY;
            }else if (e.clientX || e.clientY){
                PosX = e.clientX + document.body.scrollLeft;
                PosY = e.clientY + document.body.scrollTop;
            }
            fn(PosX, PosY);
        }
    },
		
    URLEncode: function(string){
        // The Javascript escape and unescape functions do not correspond
        // with what browsers actually do...
        var SAFECHARS = "0123456789" +					// Numeric
        "ABCDEFGHIJKLMNOPQRSTUVWXYZ" +	// Alphabetic
        "abcdefghijklmnopqrstuvwxyz" +
            "-_.!~*'()";					// RFC2396 Mark characters
        var HEX = "0123456789ABCDEF";
		
        var plaintext = string;
        var encoded = "";
        for (var i = 0; i < plaintext.length; i++ ) {
            var ch = plaintext.charAt(i);
            if (ch == " ") {
                encoded += "+";				// x-www-urlencoded, rather than %20
            } else if (SAFECHARS.indexOf(ch) != -1) {
                encoded += ch;
            } else {
                var charCode = ch.charCodeAt(0);
                if (charCode > 255) {
                    alert( "Unicode Character '"
                        + ch
                        + "' cannot be encoded using standard URL encoding.\n" +
                        "(URL encoding only supports 8-bit characters.)\n" +
                        "A space (+) will be substituted." );
                    encoded += "+";
                } else {
                    encoded += "%";
                    encoded += HEX.charAt((charCode >> 4) & 0xF);
                    encoded += HEX.charAt(charCode & 0xF);
                }
            }
        } // for
		
        return encoded;
    },
		
    URLDecode: function(string){
        // Replace + with ' '
        // Replace %xx with equivalent character
        // Put [ERROR] in output if %xx is invalid.
        var HEXCHARS = "0123456789ABCDEFabcdef";
        var encoded = string;
        var plaintext = "";
        var i = 0;
        while (i < encoded.length) {
            var ch = encoded.charAt(i);
            if (ch == "+") {
                plaintext += " ";
                i++;
            } else if (ch == "%") {
                if (i < (encoded.length-2)
                    && HEXCHARS.indexOf(encoded.charAt(i+1)) != -1
                    && HEXCHARS.indexOf(encoded.charAt(i+2)) != -1 ) {
                    plaintext += unescape( encoded.substr(i,3) );
                    i += 3;
                } else {
                    alert( 'Bad escape combination near ...' + encoded.substr(i) );
                    plaintext += "%[ERROR]";
                    i++;
                }
            } else {
                plaintext += ch;
                i++;
            }
        } // while
        return plaintext;
    },
		
    checkboxTreeDependence: function(obj){
        // hijos
        $(obj).parent().parent().find("ul input[type='checkbox']").each(function(){
            $(this).get(0).checked = obj.checked;
        });
        // padre
        $($(obj).parent().parent().parent().parent().find("input[type='checkbox']")[0]).get(0).checked = true;
    },
		
    jump: function(obj){
        top.location = obj[obj.selectedIndex].value;
    },
		
    /*********************************************************************************
     * Metodos AJAX
     *
     **/
		
    handleAjaxResponse: function(msg, fn){
        var oXml = utilities.xmlTree(msg);
        message = "";
        if(oXml.error != undefined)
            alert(oXml.error);
        else if(oXml.result != undefined){
            if (oXml.result.error != undefined) {
                if (oXml.result.error.length) {
                    for (var i in oXml.result.error) {
                        message += oXml.result.error[i];
                    } alert(message);
                }
            }else{
                fn(oXml.result);
            }
        }else
            fn();
    },
		
    ajax: function(msg, fn){
        var oXml = utilities.xmlTree(msg);
        fn(oXml.error, oXml.result.error, oXml.result.ok);
    },
		
    handleAjaxResponse2: function(xmldoc, fn){
        var accio 	= $(xmldoc).find('action').text();
        var res 		= $(xmldoc).find('result').text();
        var err 		= $(xmldoc).find('errors').text();
        var msg 		= $(xmldoc).find('message').text();
        fn(res, msg, err);
    },
    
    /*new*/
    getCookie: function(c_name){
        if (document.cookie.length>0)            {
            c_start=document.cookie.indexOf(c_name + "=");
            if (c_start!=-1)                {
                c_start=c_start + c_name.length+1;
                c_end=document.cookie.indexOf(";",c_start);
                if (c_end==-1) c_end=document.cookie.length;
                return unescape(document.cookie.substring(c_start,c_end));
            }
        }
        return "";
    },
     getFileExtension: function(filename){
            if( filename.length == 0 ) return "";
            var dot = filename.lastIndexOf(".");
            if( dot == -1 ) return "";
            var extension = filename.substr(dot+1,filename.length);
            return extension;
        }

		
}
