/* miniweb.js */
// *****************
// **** Variables **
// *****************
var isIE = (navigator.appName == "Microsoft Internet Explorer");
var isFirefox = (navigator.appName == "Netscape");

// ***************
// **** Cookies **
// ***************
function createCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}
function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}
function eraseCookie(name) {
	createCookie(name,"",-1);
}


// ***************
// **** menus ****
// ***************
var idMenuTimer;
var idsMenuItemsShowed = "";
function onMouseEnterMenuItem(sender) {
    var id_menuitem = sender.id.replace("idMenuItem", "");
    var target = sender;
    var ids = "";
    var classType = "menu";
    while (target.className!="frameSuperior" && target.className!="frameSuperior2" && target.className!="frameSuperior3" && target.className!="frameEsquerra" && target.className!="frameEsquerra2" && target.className!="frameDret" && target.className!="frameInferior" && target.className!="frameInferior2" && target.className!="frameCentral") {
        if (target.id && target.id.indexOf("idMenuItem")==0) {
            ids = target.id.replace("idMenuItem","").replace("Childs","") + (ids!="" ? "," : "") + ids;
        }
        if (target.className == "menuAccordion") classType = "menuAccordion";
        target = target.parentNode;
    }
    ids = target.className + "," + ids;
    clearTimeout(idMenuTimer);
    if (classType == "menu") {
        showMenuItems(ids);
    } else if (classType == "menuAccordion") {
        if (true || sender.getAttribute("level") == "0" || sender.getAttribute("level") == "1" || sender.getAttribute("defecteMostrarSubItems") == "true") {
            sender.onclick = onMouseAccordionClickMenuItem;
            sender.onmouseover = null;
            sender.onmouseout = null;
        } else {
            sender.onclick = function() { alert(1); return (this.href == document.location ? false : true) };
            sender.onmouseover = null;
            sender.onmouseout = null;
        }
    }
}
function onMouseAccordionInitialize(id, tagToExpand1, tagToExpand2, tagToExpand3) {
    var div = document.getElementById(id);
    for (var i=0;i<div.childNodes.length;i++){
        if (div.childNodes[i].nodeName == "A") {
            var a = div.childNodes[i];
            var aChilds = document.getElementById(a.id + "Childs");
            if (tagToExpand1 == '*' || tagToExpand1 == a.getAttribute('tag')) {
                aChilds.style.display = 'block';
                for (var j = 0; j < aChilds.childNodes.length; j++) {
                    if (aChilds.childNodes[j].nodeName == "A") {
                        var suba = aChilds.childNodes[j];
                        if (suba.getAttribute("tag") == tagToExpand2) {
                            var subdiv = document.getElementById(suba.id + "Childs");
                            subdiv.style.display = "block";
                            suba.className = "menuItemOpen";
                            aChilds.setAttribute("menuitemAccordionOpenedId", suba.id);
                            suba.setAttribute("defecteMostrarSubItems", "true");
                            if (tagToExpand3) {
                                for (var k = 0; k < subdiv.childNodes.length; k++) {
                                    if (subdiv.childNodes[k].nodeName == "A" && subdiv.childNodes[k].getAttribute("tag") == tagToExpand3) {
                                        var subsuba = subdiv.childNodes[k];
                                        var subsubdiv = document.getElementById(subsuba.id + "Childs");
                                        subsubdiv.style.display = "block";
                                        subdiv.setAttribute("menuitemAccordionOpenedId", subsuba.id);
                                        subsuba.className = "menuItemOpen";
                                        subsuba.setAttribute("defecteMostrarSubItems", "true");
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    var aArrSrc = div.getElementsByTagName("A");
    var aArr = new Array();
    for (var i = 0; i < aArrSrc.length; i++) aArr.push(aArrSrc[i]);
    for (var i = 0; i < aArr.length; i++) {
        var a = aArr[i];
        if (a.href == "" + document.location.href || a.href == "" + document.location.href + "#") {
        } else {
            var a = aArr[i];
            var divChilds = document.getElementById(a.id + "Childs");
            if (!divChilds) {
                a.className += " menuItemLink"
            } else {                
                var objButton = document.createElement("div");
                objButton.setAttribute("hreff", a.href);
                objButton.innerHTML = "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
                //img.src = "images/ico_homeArrowLink2.gif"
                objButton.className = "homeArrowLink2"
                objButton.onclick = function(evt) {
                    if (!evt) evt = window.event;
                    if (evt.stopPropagation) evt.stopPropagation();
                    evt.cancelBubble = true;
                    //document.location = this.getAttribute("hreff");
			    	if (MM_openBrWindow(this.getAttribute("hreff"),"blank","width=900,height=800,scrollbars=yes,resizable=yes")) return false;
                    return false;
                }
                a.appendChild(objButton);
                objButton.title = getLocalizedString("Més informació","Más información","More information");
                //a.innerHTML = "<table cellspacing='0' cellpadding='0' style='border:1px red solid;width:100%;'><tr><td>" + a.innerHTML + "</td><td>A</td></tr></table>";
            }
        }
    }
}
function onMouseAccordionClickMenuItem(event) {
    var a = this;
    var inc = (isIE ? 20 : 10);
    var divChilds = document.getElementById(this.id + "Childs");
    if (!divChilds) return true;
    if (divChilds.style.display == "block") {
        a.className = "menuItem"
        idMenuItemAccordionShowed = "";
        expandCollapseElementVertically(null, divChilds.id, inc);
    } else {
        if (a.getAttribute('defecteMostrarSubItems') != "true" && a.getAttribute("level")!="0") {
            var childDivs = divChilds.getElementsByTagName("div");
            for (var i = 0; i < childDivs.length; i++) {
                childDivs[i].style.display = "block";
            }
        }        
        divChilds.style.display = "block";
        divChilds.setAttribute("desiredHeight", divChilds.scrollHeight);
        divChilds.style.display = "none";
        var openedSiblingChildsId = null;
        if (this.parentNode.getAttribute("menuitemAccordionOpenedId")) {
            var openedSibling = document.getElementById(this.parentNode.getAttribute("menuitemAccordionOpenedId"));
            var openedSiblingChilds = document.getElementById(openedSibling.id + "Childs");
            if (openedSibling) {
                openedSibling.className = "menuItem"
                openedSiblingChildsId = openedSiblingChilds.id;
            }
        }
        expandCollapseElementVertically(divChilds.id, openedSiblingChildsId, inc);
        a.className = "menuItemOpen";
        this.parentNode.setAttribute("menuitemAccordionOpenedId", this.id);
    }
    return false;
}

function onMouseOutMenuItem(sender) {
    idMenuTimer = setTimeout(function(){showMenuItems("")},500);    
    var id = sender.id.replace("idMenuItem","");
    var divChilds = document.getElementById(sender.id + "Childs");
    if (divChilds!=null && divChilds.style.display=="block") {
        sender.className = "menuItemSelected";
    }
}
function showMenuItems(ids) {
    var idsArray = idsMenuItemsShowed.split(",");
    for (var i=idsArray.length; i>=0 ; i--) {
        var id = idsArray[i];
        if (id!="" && (ids.indexOf(id)==-1)) {
            var objMenuItem = document.getElementById("idMenuItem" + id);
            var objMenuItemChilds = document.getElementById("idMenuItem" + id + "Childs");
            if (objMenuItemChilds!=null) {
                objMenuItemChilds.style.display = "none";
                if (objMenuItem.getAttribute("selected")!="true") objMenuItem.className = "menuItem";
            }
        }            
    }
    var idsArray = ids.split(",");
    var frame = idsArray[0];
    var startIndex = 1;
    var endIndex = idsArray.length;
    if (idsArray[0] == "frameEsquerra" || idsArray[0] == "frameDret") {
        startIndex=2;
        if (document.location.href.toLowerCase().indexOf("infodt")!=-1) startIndex=1;
        if (document.location.href.toLowerCase().indexOf("infogt") != -1) startIndex = 1;
        if (document.location.href.toLowerCase().indexOf("infopostgrau") != -1) startIndex = 1;
        if (document.location.href.toLowerCase().indexOf("century") != -1) startIndex = 1;
        if (document.location.href.toLowerCase().indexOf("test2") != -1) startIndex = 1;
    }
    if (idsArray[0] == "frameInferior" || idsArray[0] == "frameInferior2") {
        startIndex = 10;
    }
    if (idsArray[0] == "frameSuperior3" && miniwebUri == "home") {
        frame = "frameInferior";
    }
    idsMenuItemsShowed = "";
    for (var i=startIndex; i<endIndex; i++) {
        var id = idsArray[i];
        if (id!="") {
            var objMenuItem = document.getElementById("idMenuItem" + id);
            var desplegarFills = (objMenuItem.getAttribute("desplegarFills")=="true");
            if (desplegarFills) {
                var level = i-1;
                var objMenuItemChilds = document.getElementById("idMenuItem" + id + "Childs");
                if (objMenuItemChilds!=null) {
                    objMenuItemChilds.style.position = "absolute";                    
                    if ((frame=="frameSuperior" || frame=="frameSuperior2" || frame=="frameSuperior3" || frame=="frameCentral") ) {
                        if (level==0) {
                            objMenuItemChilds.style.top = (getAbsoluteTop(objMenuItem) + getAbsoluteHeight(objMenuItem) + 1) + "px";
                            objMenuItemChilds.style.left = getAbsoluteLeft(objMenuItem) + "px"                    
                        } else {
                            objMenuItemChilds.style.top = (getAbsoluteTop(objMenuItem) + 2 ) + "px";
                            objMenuItemChilds.style.left = (getAbsoluteLeft(objMenuItem) + getAbsoluteWidth(objMenuItem) - 8 ) + "px"
                        }
                        objMenuItemChilds.style.display = "block";
                    } else if (frame=="frameDret") {
                        objMenuItemChilds.style.display = "block";
                        objMenuItemChilds.style.top = (getAbsoluteTop(objMenuItem) - 1 ) + "px";
                        objMenuItemChilds.style.left = (getAbsoluteLeft(objMenuItem) - getAbsoluteWidth(objMenuItemChilds) - 4) + "px";                    
                    } else if (frame=="frameInferior") {
                        objMenuItemChilds.style.display = "block";
                        if (level==0) {
                            objMenuItemChilds.style.top = (getAbsoluteTop(objMenuItem) - getAbsoluteHeight(objMenuItemChilds) - 3) + "px";
                            objMenuItemChilds.style.left = (getAbsoluteLeft(objMenuItem)-1) + "px";
                        } else {
                            objMenuItemChilds.style.top = (getAbsoluteTop(objMenuItem) + getAbsoluteHeight(objMenuItem) - getAbsoluteHeight(objMenuItemChilds) - 5) + "px";
                            objMenuItemChilds.style.left = (getAbsoluteLeft(objMenuItem) + getAbsoluteWidth(objMenuItem) - 8) + "px";
                        }
                        objMenuItemChilds.style.display = "block";                    
                    } else if (level==0) {
                        objMenuItemChilds.style.top = (getAbsoluteTop(objMenuItem) - 1 ) + "px";
                        objMenuItemChilds.style.left = (getAbsoluteLeft(objMenuItem) + getAbsoluteWidth(objMenuItem) + 2) + "px";
                        objMenuItemChilds.style.display = "block";
                    } else {
                        objMenuItemChilds.style.top = (getAbsoluteTop(objMenuItem) + 2 ) + "px";
                        objMenuItemChilds.style.left = (getAbsoluteLeft(objMenuItem) + getAbsoluteWidth(objMenuItem) - 8 ) + "px";
                        objMenuItemChilds.style.display = "block";
                    }
                }                
            }
            idsMenuItemsShowed += (idsMenuItemsShowed!="" ? "," : "") + id;
        }        
    }
}

// ******************
// **** font size ***
// ******************
function initializeFontSize() {
    var storedSizeInCookie = readCookie("miniwebFontSize");
    if (storedSizeInCookie && storedSizeInCookie!="") {
        setFontSize(storedSizeInCookie);
    }    
}
function incrementFontSize(inc) {
    if (isIE && false) {
        var zoom = parseFloat(document.body.style.zoom);
        if (!zoom) zoom = 1;
        document.body.style.zoom = zoom + (inc / 10);
    } else {
        var currentSize = "" + document.body.style.fontSize;
        if (currentSize=="0px" || currentSize == "") currentSize = "11";
        currentSize = currentSize.replace("px", "");
        currentSize = parseInt(currentSize) + inc;
        setFontSize(currentSize);
    }
}
function setFontSize(value) {
    if (isIE && false) {
        document.body.style.zoom = value;
    } else {
        document.body.style.fontSize = (value==1 ? "" : value + "px");
        var tds = document.getElementsByTagName("TD");
        for (var i = 0; i < tds.length; i++) {
            tds[i].style.fontSize = (value == 1 ? "" : value + "px");
        }
        createCookie("miniwebFontSize", (value == 1 ? "" : value), 1);
    }
}



// *********************
// **** definitions ****
// *********************
function initializeDefinitions() {
    var aArray = getElementsByClassName("definition", document.body);
}


// ******************
// **** marquees ****
// ******************
function initialitzarMarquees() {
    var divs = document.getElementsByTagName("div");    
    for (var i=0; i<divs.length; i++) {
        var div = divs[i];
        if (div.className=="marquee") {
            if (div.id!="" && div.childNodes.length>1) {
                var marquee = div;
                var marqueeId = "" + marquee.id;
                var horizontal = (marquee.getAttribute("direction") == "horitzontal");
                var fade = (marquee.getAttribute("direction") == "fade");
                var marqueeTimeout = parseInt("0" + marquee.getAttribute("marqueeTimeout"), 10);
                if (marqueeTimeout!=0) {
                    initialitzarMarquee(marquee, marqueeTimeout, horizontal, fade);
                }
            }
        }
    }    
}
function initialitzarMarquee(marquee, marqueeTimeout, horizontal, fade) {
    var timeoutId;
    var marqueeTimeout = parseInt("0" + marquee.getAttribute("marqueeTimeout"), 10);
    if (horizontal) {
        setTimeout(function() { mouMarqueeHoritzontal(marquee.id); }, marqueeTimeout);
    } else if (fade) {
        var first = true;
        var h = getAbsoluteHeight(marquee);
        for (var i = 0; i < marquee.childNodes.length; i++) {
            if (marquee.childNodes[i].style) {
                marquee.childNodes[i].style.display = (first ? "block" : "none");
                marquee.childNodes[i].style.width = getAbsoluteWidth(marquee) + "px";
                marquee.childNodes[i].style.height = (h - 32) + "px";
                first = false;
            }
        }
        var html = new Array();
        var div = document.createElement("DIV")
        div.className = "fade";
        html.push("<a href='" + marquee.getAttribute("urlAll") + "' class='playicons5' title='" + getLocalizedString("Veure totes les noticies","Ver todas las noticias")  + "'></a>");
        html.push("<a href='#' class='playicons4' title='" + getLocalizedString("Següent","Siguiente") + "' onclick=\"mouMarqueeFade('" + marquee.id + "',true);return false;\"></a>");
        html.push("<a href='#' class='playicons3' title='" + getLocalizedString("Anterior", "Anterior") + "' onclick=\"mouMarqueeFade('" + marquee.id + "',true,true);return false;\"></a>");
        html.push("<a href='#' class='playicons2' title='" + getLocalizedString("Parar o arrancar animació", "Parar o arrancar animación") + "' onclick=\"if (this.className=='playicons2') {paraMarquee(event,true);this.className='playicons1';} else {arrancaMarquee(event,true);this.className='playicons2';}; return false;\"></a>");
        div.innerHTML = html.join("");
        marquee.appendChild(div);
        setTimeout(function() { mouMarqueeFade(marquee.id); }, marqueeTimeout);   
    } else {
        setTimeout(function () {mouMarqueeVertical(marquee.id);}, marqueeTimeout);
    }
    if (document.all) {
        marquee.attachEvent("onmouseenter", paraMarquee, false);
        marquee.attachEvent("onmouseleave", arrancaMarquee, false);
    } else {
        marquee.addEventListener("mouseover", paraMarquee, false);
        marquee.addEventListener("mouseout", arrancaMarquee, false);
    }
    marquee.setAttribute("timeoutId", 0);                
}
function arrancaMarquee(e, forced) {    
    var marquee = (e.target ? e.target : event.srcElement);   
    while (marquee.className!="marquee") {
        marquee = marquee.parentNode;
    };
    marquee.setAttribute("paused", false);
    if (marquee.getAttribute("pausedforced") == "true") {
        if (forced) {
            marquee.setAttribute("pausedforced", "false");
        } else {
            return;
        }    
    };
    var horizontal = (marquee.getAttribute("direction") == "horitzontal");
    var fade = (marquee.getAttribute("direction") == "fade");
    var marqueeTimeout = parseInt("0" + marquee.getAttribute("marqueeTimeout"), 10);
    var timeoutId = 0;
    if (horizontal) {
        timeoutId = setTimeout(function () {mouMarqueeHoritzontal(marquee.id);}, marqueeTimeout);
    } else if (fade) {
        if (forced) {
            mouMarqueeFade(marquee.id);
            timeoutId = 0;
        } else {
            timeoutId = setTimeout(function() { mouMarqueeFade(marquee.id); }, marqueeTimeout);
        }
    } else {
        timeoutId = setTimeout(function () {mouMarqueeVertical(marquee.id);}, marqueeTimeout);
    }
    marquee.setAttribute("timeoutId", timeoutId);
}
function paraMarquee(e, forced) {
    var marquee = (e.target ? e.target : event.srcElement);   
    while (marquee.className!="marquee") {
        marquee = marquee.parentNode;
    };
    marquee.setAttribute("paused", "true");
    if (forced) {
        marquee.setAttribute("pausedforced", "true");
    }
    var timeoutId = parseInt(marquee.getAttribute("timeoutId"),10);
    clearTimeout(timeoutId);    
}
function mouMarqueeVertical(marqueeId) {
    var marquee = document.getElementById(marqueeId);
    var childs = marquee.getElementsByTagName("div");        
    if (marquee.getAttribute("paused")=="true") return;
    var h = getAbsoluteHeight(childs[0]);
    var desp = 1; //(h / 20);
    var marginTop = parseInt((childs[0].style.marginTop=="" ? "0px" : childs[0].style.marginTop).replace("px",""));            
    var percentatge = parseInt(-100*marginTop/h,10);
    if ( (-1*marginTop) < h) {
        setTimeout(function(){mouMarqueeVertical(marqueeId);}, 50);
        if ((-1)*marginTop + desp > h) {
            desp = h+marginTop;
        }
        childs[0].style.marginTop = (marginTop - desp) + "px";        
    } else {
        var marqueeTimeout = parseInt("0" + marquee.getAttribute("marqueeTimeout"), 10);
        var objFirstNodeCloned = childs[0].cloneNode(true);         
        objFirstNodeCloned.style.marginTop = "0px";
        marquee.appendChild(objFirstNodeCloned);
        marquee.removeChild(childs[0]);
        setTimeout(function () {mouMarqueeVertical(marqueeId);}, marqueeTimeout);        
    }
}
function mouMarqueeHoritzontal(marqueeId) {
    var marquee = document.getElementById(marqueeId);
    var childs = marquee.getElementsByTagName("div");
    if (marquee.getAttribute("paused") == "true") return;
    var w = getAbsoluteWidth(childs[0]);
    var desp = 1; //(h / 20);
    var marginLeft = parseInt((childs[0].style.marginLeft=="" ? "0px" : childs[0].style.marginLeft).replace("px",""));            
    var percentatge = parseInt(-100*marginLeft/w,10);
    if ( (-1*marginLeft) < w) {
        setTimeout(function(){mouMarqueeHoritzontal(marqueeId);}, 50);
        if ((-1)*marginLeft + desp > w) {
            desp = w+marginLeft;
        }
        childs[0].style.marginLeft = (marginLeft - desp) + "px";        
    } else {
        var marqueeTimeout = parseInt("0" + marquee.getAttribute("marqueeTimeout"), 10);
        var objFirstNodeCloned = childs[0].cloneNode(true);         
        objFirstNodeCloned.style.marginLeft = "0px";
        marquee.appendChild(objFirstNodeCloned);
        marquee.removeChild(childs[0]);
        setTimeout(function () {mouMarqueeHoritzontal(marqueeId);}, marqueeTimeout);        
    }
}
function mouMarqueeFade(marqueeId, force, previous) {
    var marquee = document.getElementById(marqueeId);
    //alert(marquee.getAttribute("processing"))
    if (marquee.getAttribute("processing") == "true") return;
    var timeoutId = marquee.getAttribute("timeoutId");
    clearTimeout(timeoutId)
    if (marquee.getAttribute("paused") == "true" && !force) return;
    if (marquee.getAttribute("pausedforced") == "true" && !force) return;
    marquee.setAttribute("processing", "true");
    var childs = getChildElementsByClassName("noticia", marquee);
    if (childs.length <= 1) return;
    var selectedIndex = parseInt("0" + marquee.getAttribute("selectedIndex"), 10);
    var child = childs[selectedIndex]
    ensureElementHasId(child);
    selectedIndex += (previous ? -1 : +1);
    if (selectedIndex == childs.length) selectedIndex = 0;
    if (selectedIndex == -1) selectedIndex = childs.length-1;
    marquee.setAttribute("selectedIndex", selectedIndex);
    fadeTo(child.id, 0, -10, function(divId) {
        document.getElementById(divId).style.display = "none";
        var marqueeId = document.getElementById(divId).parentNode.id;
        var marquee = document.getElementById(marqueeId);
        var childs = getChildElementsByClassName("noticia", marquee);
        var selectedIndex = parseInt("0" + marquee.getAttribute("selectedIndex"), 10);
        var nextChild = childs[selectedIndex];
        ensureElementHasId(nextChild);
        setOpacity(nextChild, 0)
        nextChild.style.display = "block";
        fadeTo(nextChild.id, 100, 5, function(divId) {
            var marqueeId = document.getElementById(divId).parentNode.id;
            var marquee = document.getElementById(marqueeId);
            var marqueeTimeout = parseInt("0" + marquee.getAttribute("marqueeTimeout"), 10);
            marquee.setAttribute("processing", "false");
            var timeoutId = setTimeout(function() { mouMarqueeFade(marqueeId) }, marqueeTimeout);
            marquee.setAttribute("timeoutId", timeoutId);
        });
    });
}


// ***************
// **** page ****
// ***************
function inicialitzaPagina() {
    initialitzarMarquees();
    initialitzarBlocs();
    initializeTabBoxes();
    initializeSliderBoxes();
    initializeForms();
    initializeDefinitions();
    initializeDateTimePickers();
    try {
        if (customOnLoad) customOnLoad();
    } catch (e) {} 
}
var elementIdCounter = 0;
function ensureElementHasId(target){
    if (target.id=="") {
        target.id = "elementIdCounter" + (elementIdCounter++);
    }
}


// ******************
// **** imprimir ****
// ******************
function doPrint() {
    if (window.imprimirMaster) {
        if (window.imprimirMaster()){
        } else {
            window.print();
        }
    } else {
        window.print();
    }
}


// ***************
// **** utils ****
// ***************
Array.prototype.remove = function(from, to) {
    var rest = this.slice((to || from) + 1 || this.length);
    this.length = from < 0 ? this.length + from : from;
    return this.push.apply(this, rest);
};
Array.prototype.removeAt = function(index) {
    this.remove(index, index)
}
String.prototype.cut = function(maxlength) {
    if (this.length < maxlength) return this;
    return this.substr(0, maxlength) + "...";
}
function print_r(arr, level) {
    var dumped_text = "";
    if (!level) level = 0;

    //The padding given at the beginning of the line.
    var level_padding = "";
    for (var j = 0; j < level + 1; j++) level_padding += "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";

    if (typeof (arr) == 'object') { //Array/Hashes/Objects 
        for (var item in arr) {
            var value = arr[item];
            if (typeof (value) == 'object') { //If it is an array,
                dumped_text += level_padding + "'" + item + "' ...<br/>";
                dumped_text += print_r(value, level + 1);
            } else {
                dumped_text += level_padding + "'" + item + "' => \"" + value + "\"<br/>";
            }
        }
    } else { //Stings/Chars/Numbers etc.
        dumped_text = "===>" + arr + "<===(" + typeof (arr) + ")";
    }
    return dumped_text;
}


function getLocalizedString(stringCA, stringES, stringEN) {
    if (idioma=="ca") return stringCA;
    if (idioma=="es") return stringES;
    if (idioma=="en") return stringEN;
    return stringES;
}
function getAbsoluteLeft(refObj){
    if (refObj==null) return 0;
	xPos = refObj.offsetLeft;
    try {
    	parentObj = refObj.offsetParent;
	    while(parentObj != null) {
	        if (parentObj.style.position=="absolute") {
	            xPos += 0;
	        } else {
	            xPos += parentObj.offsetLeft;
	        }	        
	        parentObj=parentObj.offsetParent;
        }
	} catch(E) {;}
	return xPos;
}
function getRelativeLeft(refObj) {
	return refObj.offsetLeft + refObj.offsetParent.offsetLeft + refObj.offsetParent.offsetParent.offsetLeft;
}
function getAbsoluteTop(refObj){
    if (refObj==null) return 0;
    yPos = refObj.offsetTop;
    try {	    
	    parentObj=refObj.offsetParent;
	    while(parentObj != null) {
	    	if (parentObj.style.position=="absolute") {
	            yPos += 0;
	        } else {
	            yPos += parentObj.offsetTop;
	        }	        
	        parentObj=parentObj.offsetParent
        }
	} catch(E) {;}
	return yPos;
}   
function getAbsoluteHeight(refObj) {
    if (refObj==null) return 0;
    if (refObj.clientHeight != 0) return refObj.clientHeight;
    return refObj.offsetHeight;
}
function getAbsoluteWidth(refObj) {
    if (refObj==null) return 0;
    if (refObj.clientWidth != 0) return refObj.clientWidth;
    return refObj.offsetWidth;
}
function MM_openBrWindow(theURL,winName,features) {
    try {
        if (features.indexOf(",width=")) {
            var aWidth = parseInt(features.substr(features.indexOf(",width=")+7));
            if (aWidth>2) features += ",left=" + parseInt((window.screen.availWidth/2)-(aWidth/2));
        }
        if (features.indexOf(",height=")) {
            var aHeight = parseInt(features.substr(features.indexOf(",height=")+8));
            if (aHeight>2) features += ",top=" + parseInt((window.screen.availHeight/2)-(aHeight/2));
        }
    } catch (E) {
    }
    return window.open(theURL,winName,features);
}
function isEmail(value){	
    //var result = (value.search(/^[^@]+@[^@]+.[a-z]{2,}$/i)!=-1);
    var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
    result = (reg.test(value));
    if (value.indexOf(",")!=-1) result = false;
    if (value.indexOf(";")!=-1) result = false;
    if (value.indexOf("[")!=-1) result = false;
    if (value.indexOf("]")!=-1) result = false;
    if (value.indexOf("{")!=-1) result = false;
    if (value.indexOf("}")!=-1) result = false;
    if (value.indexOf("?")!=-1) result = false;
    if (value.indexOf("¿")!=-1) result = false;
    if (value.indexOf("¡")!=-1) result = false;
    if (value.indexOf("!")!=-1) result = false;
    if (value.indexOf("'")!=-1) result = false;
    if (value.indexOf("\"")!=-1) result = false;
    if (value.indexOf("|")!=-1) result = false;
    if (value.indexOf("#")!=-1) result = false;
    if (value.indexOf("$")!=-1) result = false;
    if (value.indexOf("&")!=-1) result = false;
    if (value.indexOf("/")!=-1) result = false;
    if (value.indexOf("(")!=-1) result = false;
    if (value.indexOf(")")!=-1) result = false;
    if (value.indexOf("=")!=-1) result = false;
    return result;
}
function isPhone(value) {
    var result = true;
    var stripped = value.replace(/[\(\)\.\-\ ]/g, '');    
    if (trim(value).length < 9) {
        result = false;
    } else if (isNaN(parseInt(stripped))) {
        result = false;
    }
    return result;
}
function isDate(dateStr) {
    //var datePat = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/;
    var datePat = /^(\d{1,2})(\/)(\d{1,2})(\/)(\d{4})$/;
  var matchArray = dateStr.match(datePat); // is format OK?
  if (matchArray == null) {
    //alert("Please enter date as either mm/dd/yyyy or mm-dd-yyyy.");
    return false;
  }
  // parse date into variables
  day = matchArray[1];
  month = matchArray[3];
  year = matchArray[5];
  if (month < 1 || month > 12) { // check month range
    //alert("El mes debe estar entre 1 y 12.");
    return false;
  }
  if (day < 1 || day > 31) {
    //alert("El día debe estar entres 1 and 31.");
    return false;
  }
  if ((month==4 || month==6 || month==9 || month==11) && day==31) {
    //alert("El mes " + month + " no tiene 31 dias.")
    return false;
  }
  if (month == 2) { // check for february 29th
    var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
    if (day > 29 || (day==29 && !isleap)) {
      //alert("February " + year + " doesn't have " + day + " days!");
      return false;
    }
    }
    year = parseInt(year);
    if (year < 1900 || year > 2050) {
        return false;
    }

  return true;  // date is valid
}
function validateCCC(id) {
    var banco = document.getElementById(id + "1");
    var sucursal = document.getElementById(id + "2");
    var dc = document.getElementById(id + "3");
    var cuenta = document.getElementById(id + "4");
    var result = "";
    var obtenerDigito = function (valor) {
        valores = new Array(1, 2, 4, 8, 5, 10, 9, 7, 3, 6);
        control = 0;
        for (i = 0; i <= 9; i++) {
            control += parseInt(valor.charAt(i)) * valores[i];
        }
        control = 11 - (control % 11);
        if (control == 11) control = 0;
        else if (control == 10) control = 1;
        return control;
    }
    var numerico = function(valor) {
        cad = valor.toString();
        for (var i = 0; i < cad.length; i++) {
            var caracter = cad.charAt(i);
            if (caracter < "0" || caracter > "9") return false;
        }
        return true;
    }
    if (banco.value == "" || sucursal.value == "" || dc.value == "" || cuenta.value == "") {
        result = "Número de cuenta inválido";
    } else {
        if (banco.value.length != 4 || sucursal.value.length != 4 || dc.value.length != 2 || cuenta.value.length != 10) {
            result = "Por favor, introduzca correctamente los datos de su cuenta, no están completos";
        } else {
            if (!numerico(banco.value) || !numerico(sucursal.value) || !numerico(dc.value) || !numerico(cuenta.value)) {
                result = "Por favor, introduzca correctamente los datos de su cuenta, no son numericos";
            } else {
                if (!(obtenerDigito("00" + banco.value + sucursal.value) == parseInt(dc.value.charAt(0))) || !(obtenerDigito(cuenta.value) == parseInt(dc.value.charAt(1)))) {
                    result = "Los dígitos de control no se corresponden con los demás números de la cuenta";
                } else {
                    result = "";
                }
            }
        }
    }
    return result;
}
this.getDateFromString = function(dateStr) {
    var dateArr = dateStr.split("/");
    if (dateArr.length != 3) return null;
    day = parseInt(dateArr[0], 10);
    month = parseInt(dateArr[1], 10);
    year = parseInt(dateArr[2], 10);
    return new Date(year, month - 1, day);
}
function trim(value) {
    return value.replace( /^\s*/, "" ).replace( /\s*$/, "" );
};		            
function replace(texto,s1,s2){
	return texto.split(s1).join(s2);
}
function replaceLatinChars(value){	
    var res = ""
    for(var i=0; i<value.length; i++) {
        var c = "" + value.charAt(i);
        if (c=="?" || c.charCodeAt(0)==63 || c.charCodeAt(0)==65533) {
        } else if(c.charCodeAt(0) > 30 && c.charCodeAt(0) < 196) {
            res += c;
        } else if (c.charCodeAt(0)==224 || c.charCodeAt(0)==225) { //a
            res += "a";
        } else if (c.charCodeAt(0)==232 || c.charCodeAt(0)==233) { //e
            res += "e";
        } else if (c.charCodeAt(0)==236 || c.charCodeAt(0)==237) { //i
            res += "i";
        } else if (c.charCodeAt(0)==242 || c.charCodeAt(0)==243) { //o
            res += "o";
        } else if (c.charCodeAt(0)==249 || c.charCodeAt(0)==250) { //u
            res += "u";
        } else {
            alert("c=" + c + ", " +c.charCodeAt(0));
        }
    }
    return res;
}

function getOpacity(obj) {
    if (document.all) {
        if (obj.filters.length>0) {
            for (var i=0; i<obj.filters.length; i++) {
                if (obj.filters[i].opacity!="undefined") return obj.filters[i].opacity;
            }
        }
        return 100;
    } else  {
        return (obj.style.opacity=="" ? 100 : obj.style.opacity * 100);
    }
}
function setOpacity(obj, opacity) {
    //opacity = (opacity == 100) ? 99.999 : opacity;            
    if (document.all) {
        obj.style.filter = "alpha(opacity:"+opacity+")";                      // IE/Win      
    } else {
        obj.style.KHTMLOpacity = opacity/100;                                 // Safari<1.2, Konqueror      
        obj.style.MozOpacity = opacity/100;                                   // Older Mozilla and Firefox      
        obj.style.opacity = opacity/100;                                      // Safari 1.2, newer Firefox and Mozilla, CSS3
    }
}
function fadeTo(objId, opacity, increment, onOpacityChangedEnd) {
    var obj = document.getElementById(objId);
    var currentOpacity = getOpacity(obj);
    if (increment>0) {
        currentOpacity += increment;
        if (currentOpacity >= opacity) {
            obj.setAttribute("fadeInProgress", "false");
            setOpacity(obj, opacity);
            if (onOpacityChangedEnd) onOpacityChangedEnd(objId);
        } else {
            obj.setAttribute("fadeInProgress", "true");
            setOpacity(obj, currentOpacity);
            window.setTimeout("fadeTo('"+objId+"',"+opacity+","+increment+", " + onOpacityChangedEnd + ")", 25);
        }        
    } else {
        currentOpacity += increment;
        if (currentOpacity <= opacity) {
            obj.setAttribute("fadeInProgress", "false");
            setOpacity(obj, opacity);
            if (onOpacityChangedEnd) onOpacityChangedEnd(objId);
        } else {
            obj.setAttribute("fadeInProgress", "true");
            setOpacity(obj, currentOpacity);
            window.setTimeout("fadeTo('"+objId+"',"+opacity+","+increment+"," + onOpacityChangedEnd + ")", 25);
        }        
    }
}
function slideHTMLElementLeft(elementID, value, inc, timeout) {
    var element = document.getElementById(elementID);    
    inc = (inc ? inc : 32);
    timeout = (timeout ? timeout : 10);
    var marginLeft = (element.style.marginLeft ? parseInt(element.style.marginLeft.replace("px","")) : 0) - inc;
    if (value < 0) return;
    if (marginLeft < -value) {
        element.style.marginLeft = -value + "px";
    } else {
        element.style.marginLeft = marginLeft + "px";
        setTimeout("slideHTMLElementLeft('" + elementID + "', " + value + ", " + inc + ", " + timeout + ");", timeout);
    }
}
function slideHTMLElementRight(elementID, value, inc, timeout) {
    var element = document.getElementById(elementID);
    inc = (inc ? inc : 32);
    timeout = (timeout ? timeout : 10);
    var marginLeft = (element.style.marginLeft ? parseInt(element.style.marginLeft.replace("px", "")) : 0) + inc;
    if (value < 0) return;
    if (marginLeft > -value) {
        element.style.marginLeft = -value + "px";
    } else {
        element.style.marginLeft = marginLeft + "px";
        setTimeout("slideHTMLElementRight('" + elementID + "', " + value + ", " + inc + ", " + timeout + ");", timeout);
    } 
}
function resizeTo(objId, left, top, width, height, onResizeEnd, interval) {
    var obj = document.getElementById(objId);    
    var currentLeft = parseInt(getAbsoluteLeft(obj));
    var currentTop = parseInt(getAbsoluteTop(obj));
    var currentWidth = parseInt(getAbsoluteWidth(obj));
    var currentHeight = parseInt(getAbsoluteHeight(obj));
    if (top<10) top = 10;
    if (left<10) left = 10;
    var scale = width / height;
    var incrementX = 20;
    var incrementY = 20;
    var continuar = false;       
    //update position
    if (currentLeft>left) {
        if (currentLeft-incrementX < left) {
            obj.style.left = left + "px";
        } else {
            obj.style.left = (currentLeft-incrementX) + "px";
            continuar = true;
        }
    }
    if (currentTop>top) {
        if (currentTop-incrementY < top) {
            obj.style.top = top + "px";
        } else {
            obj.style.top = (currentTop-incrementY) + "px";
            continuar = true;
        }
    }
    if (currentWidth<width) {
        if ((currentWidth+incrementX*2) > width) {
            obj.style.width = width + "px";
        } else {
            obj.style.width = (currentWidth+incrementX*2) + "px";
            continuar = true;
        }
    }
    if (currentHeight<height) {
        if ((currentHeight+incrementY*2) > height) {
            obj.style.height = height + "px";
        } else {
            obj.style.height = (currentHeight+incrementY*2) + "px";
            continuar = true;
        }
    }
    if (getAbsoluteLeft(obj)+getAbsoluteWidth(obj) > left + width) obj.style.left = (left + width -getAbsoluteWidth(obj)) + "px";
    if (getAbsoluteTop(obj)+getAbsoluteHeight(obj) > top + height) obj.style.top = (top + height -getAbsoluteHeight(obj)) + "px";
    if (continuar) {
        window.setTimeout("resizeTo('"+objId+"',"+left+","+top+","+width+","+height+",'" + onResizeEnd + "'," + interval + ")", (interval ? interval : 5));
    } else {
        if (onResizeEnd!="") eval(onResizeEnd);
    }
}
function expandCollapseElement(elementId, inc) {
    var element = document.getElementById(elementId);
    if (element.style.display=="none") {
        expandElement(elementId, inc);
    } else {
        collapseElement(elementId, inc);
    }
}
function expandElement(elementId, inc) {
    var element = document.getElementById(elementId);
    var h = 0;
    if (element.style.display=="" || element.style.display=="none") {
        h = 0;      
        element.style.height = "1px";
        element.style.display = "block";           
    } else {
        h = parseInt(element.style.height.replace("px",""));
    }          
    h += inc;
    if (h>element.scrollHeight) {
        element.style.height = element.scrollHeight + "px";
    } else {
        element.style.display = "block";            
        element.style.height = h + "px";                
        setTimeout("expandElement('" + elementId + "'," + inc + ")", 25);
    }
}
function collapseElement(elementId, inc) {
    var element = document.getElementById(elementId);
    var h = (element.style.height ? parseInt(element.style.height.replace("px","")) : element.scrollHeight);
    h -= inc;
    if (h<=0) {
        element.style.height = "0px";
        element.style.display = "none";
    } else {
        element.style.height = h + "px";                
        setTimeout("collapseElement('" + elementId + "'," + inc + ")", 25);
    }
}
function expandCollapseElementVertically(id1, id2, inc) {
    var e1 = document.getElementById(id1);
    var e2 = document.getElementById(id2);
    if (e1) {
        var desiredHeight = e1.getAttribute("desiredHeight");
        var h = 0;
        if (e1.style.display == "" || e1.style.display == "none") {
            h = 0;
            e1.style.height = "1px";
            e1.style.display = "block";
        } else {
            h = parseInt(e1.style.height.replace("px", ""));
        }
        h += inc;
        if (h > desiredHeight) {
            e1.style.height = "";
            id1 = null;            
        } else {
            e1.style.display = "block";
            e1.style.height = h + "px";
        }
    }
    if (e2) {
        var h = 0;
        if (e2.style.display == "none") {
            h = inc;
        } else {
            if (e2.style.height == "") {
                h = e2.scrollHeight;
            } else {
                h = parseInt(e2.style.height.replace("px", ""));
            }
        }
        h -= inc;
        if (h <= 0) {
            e2.style.display = "none";
            id2 = null;
        } else {
            e2.style.display = "block";
            e2.style.height = h + "px";
        } 
    }
    if (id1 || id2) {
        setTimeout("expandCollapseElementVertically(" + (id1 ? "'" + id1 + "'" : "null") + "," + (id2 ? "'" + id2 + "'" : "null") + "," + inc + ")", 5);
    }
}
function createMethodReference(object, method) {
    if (!(method instanceof Function)) method = object[method];
    return function() { method.apply(object, arguments); };
};   

       
// *************
// *** AJAX ****
// *************
function createXmlHttpRequest() {
    var request = null;
    try {
        request = new XMLHttpRequest();
    } catch (trymicrosoft) {
        try {
            request = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (othermicrosoft) {
            try {
                request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (failed) {
                request = false;
            }
        }
    }
    return request;
}
function loadXMLDoc(url, callback, callbackErr) {
	var req = false;
    // branch for native XMLHttpRequest object
    if(window.XMLHttpRequest && !(window.ActiveXObject)) {
    	try {
			req = new XMLHttpRequest();
        } catch(e) {
			req = false;
        }
    // branch for IE/Windows ActiveX version
    } else if(window.ActiveXObject) {
       	try {
        	req = new ActiveXObject("Msxml2.XMLHTTP");
      	} catch(e) {
        	try {
          		req = new ActiveXObject("Microsoft.XMLHTTP");
        	} catch(e) {
          		req = false;
        	}
		}
    }
	if(req) {
		req.onreadystatechange = function () {
		    if (req.readyState == 4) {
		        if (req.status == 200) {
		            if (callback) callback(req.responseXML);
		        } else {
		            if (callbackErr) callbackErr(req.status, req.responseText);
		        }
		    }
		};
		req.open("GET", url, true);
		req.send("");
	}
}
function loadTextDoc(url, callback) {
    var req = false;
    // branch for native XMLHttpRequest object
    if (window.XMLHttpRequest && !(window.ActiveXObject)) {
        try {
            req = new XMLHttpRequest();
        } catch (e) {
            req = false;
        }
        // branch for IE/Windows ActiveX version
    } else if (window.ActiveXObject) {
        try {
            req = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
                req = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {
                req = false;
            }
        }
    }
    if (req) {
        req.onreadystatechange = function() {
            if (req.readyState == 4) {
                if (req.status == 200) {
                    if (callback) callback(req.responseText);
                } else {
                }
            }
        };
        req.open("GET", url, true);
        req.send("");
    }
}
function rpc(method, arguments, handler) {
    var url = miniwebUrl + "/miniwebrpc.ashx";
    var jsonRequest = new Object();
    jsonRequest.id = 1;
    if (method.indexOf("~") == 0) {
        method = "/default.aspx/" + method.substr(1);
    } else if (method.indexOf("/") == -1) {
        method = miniwebCurrentUrl.substr(miniwebUrl.length) + "/" + method;
    }
    jsonRequest.method = method;
    jsonRequest.params = arguments;
    jsonRequest.jsonrpc = "2.0";
    var objRequest = createXmlHttpRequest();
    var objJSONParser = new JSON();
    objRequest.open("POST", url, true);
    objRequest.setRequestHeader("content-type", "application/json")
    objRequest.onreadystatechange = function() {
        if (objRequest.readyState == 4 && handler) {
            if (objRequest.status == 403) {
                var err = new Object();
                err.isError = true;
                err.message = "403 " + objRequest.responseText;
                err.stacktrace = "";
                handler(err);
            } else {
                var json = objRequest.responseText;
                var jsonObj = objJSONParser.parse(json);
                if (jsonObj.error != null) {
                    alert("ERROR en Server.rpc(...): " + jsonObj.error.message + "\n" + jsonObj.error.stacktrace);
                    jsonObj.error.isError = true;
                    handler(jsonObj.error);
                } else {
                    handler(jsonObj.result);
                }
            }
        }
    }
    objRequest.send(objJSONParser.stringify(jsonRequest));
}
function getElementTextNS(prefix, local, parentElem, index) {
    var result = "";
    if (prefix && isIE) {
        // IE/Windows way of handling namespaces
        result = parentElem.getElementsByTagName(prefix + ":" + local)[index];
    } else {
        // the namespace versions of this method 
        // (getElementsByTagNameNS()) operate
        // differently in Safari and Mozilla, but both
        // return value with just local name, provided 
        // there aren't conflicts with non-namespace element
        // names
        result = parentElem.getElementsByTagName(local)[index];
    }
    if (result) {
        // get text, accounting for possible
        // whitespace (carriage return) text nodes 
        if (result.childNodes.length > 1) {
            return result.childNodes[1].nodeValue;
        } else {
            if (result.firstChild==null) return "";
            return result.firstChild.nodeValue;    		
        }
    } else {
        return "n/a";
    }
}

// **************************
// **** Galery SlideShow ****
// **************************
function showSlideShowNextImage(slideShowId) {
    var slideShow = document.getElementById(slideShowId);
    var slideShowIndex = parseInt(slideShow.getAttribute("slideShowIndex"), 10);
    var isFirstImage = (slideShowIndex == -1);
    var slideShowTimeout = parseInt("0" + slideShow.getAttribute("slideShowTimeout"), 10);
    var urls = slideShow.getAttribute("srcs").split(",");
    if (urls.length==0) return
    slideShowIndex += 1; 
    if (slideShowIndex==urls.length) slideShowIndex = 0;
    slideShow.setAttribute("slideShowIndex", slideShowIndex);
    var url = urls[slideShowIndex];
    if (document.all && !isFirstImage) {
        slideShow.style.filter="blendTrans(duration=1)";
        slideShow.filters.blendTrans.Apply();
    }
    slideShow.src = url;
    if (document.all && !isFirstImage) {
        slideShow.filters.blendTrans.Play();
    }    
    setTimeout("showSlideShowNextImage('" + slideShowId + "')", slideShowTimeout);
}


// ***************
// **** BLOCS ****
// ***************
var divCurs = null;
var divButtons = null;
var divMore = null;
function initialitzarBlocs() {    
    var divs = document.getElementsByTagName("div");    
    for (var i=0; i<divs.length; i++) {
        if (divs[i].className=="curs") {
            divCurs = divs[i];
            break;
        }
    }
    if (divCurs != null) {
        //reemplaza ells textes de SPANS
        for (var i=divCurs.childNodes.length-1; i>=0; i--) {
            var child = divCurs.childNodes[i];
            if (child.nodeName.indexOf("#")==0) {
                var span = document.createElement("SPAN");
                span.innerHTML = child.nodeValue;
                divCurs.insertBefore(span, child);
            }
        }
        //create el submenu
        var h1s = divCurs.getElementsByTagName("h1");
        if (h1s.length>0) {
            var h1 = h1s[0];
            var counter= 0
            divButtons = document.createElement("DIV");
            divButtons.className = "blocButtons"
            divButtons.selectedIndex = 0;
            var objDivTitle = document.createElement("DIV");
            objDivTitle.className = "tit";
            objDivTitle.innerHTML = document.title;
            divButtons.appendChild(objDivTitle);
            for (var i=0; i<divCurs.childNodes.length; i++) {
                if (divCurs.childNodes[i].nodeName=="H2") {
                    var anchor = document.createElement("a");
                    anchor.innerHTML = divCurs.childNodes[i].innerHTML;
                    anchor.href="javascript:mostrarBloc(" + counter + ")";
                    divButtons.appendChild(anchor);
                    counter++;
                }
            }
            if (("" + document.location).indexOf("estudisdegrau") != -1) {
                //divCurs.parentNode.insertBefore(divButtons, divCurs);
                h1.parentNode.insertBefore(divButtons, h1.nextSibling);
                //h1.style.display = "none";
                objDivTitle.style.display = "none";
                //alert(divButtons.outerHTML)
            } else {
                var tables = document.getElementsByTagName("TABLE");
                for (var i = 0; i < tables.length; i++) {
                    if (tables[i].className == 'frameEsquerra') {
                        var divs = tables[i].getElementsByTagName("div");
                        for (var j = 0; j < divs.length; j++) {
                            if (divs[j].className == "menu") {
                                var d = divs[j];
                                if (d.nextSibling) {
                                    d.parentNode.insertBefore(divButtons, d.nextSibling);
                                } else {
                                    d.parentNode.appendChild(divButtons);
                                }
                                break;
                            }
                        }
                    }
                }
            }               
        }
        //mostra el deseo saber mas
        divMore = document.createElement("DIV");
        divMore.className = "blocMore";
        divCurs.appendChild(divMore);
        
        //selecciona el indice
        if (divButtons!=null) {            
            var indexToSelect = 0;
            var url = "" + document.location;
            if (url.indexOf("#")!=-1) {
                var anchorName = url.substr(url.indexOf("#")+1).toLowerCase();
                for (var i=0; i<divButtons.childNodes.length; i++) {
                    var aux = divButtons.childNodes[i].innerHTML.toLowerCase();            
                    if (aux.indexOf(anchorName)!=-1) {
                        indexToSelect = i;
                    }
                }
            }          
            mostrarBloc(indexToSelect);
        }
        //inicializa los enlaces con # a esta misma pagina
        var aArray = document.getElementsByTagName("A");
        for (var i=aArray.length-1; i>=0; i--) {
            var aItem = aArray[i];        
            if (aItem.name!="") {
                aItem.parentNode.removeChild(aItem);
            } else  if (aItem.href.indexOf("#")!=-1) {
                var url = "" + aItem.href;
                if (url.indexOf("#")!=-1) url = url.substr(0,url.indexOf("#"));
                if ((""+document.location).indexOf(url)==0) {
                    if (document.all) {
                        aItem.attachEvent("onclick", mostrarBlocDesdeAnchor, false);
                    } else {
                        aItem.addEventListener("click", mostrarBlocDesdeAnchor, false);
                    }
                }
            }
        }        
    }
}
function mostrarBloc(index) {
    if (index>=divButtons.childNodes.length-1) index=0;
    var currentIndex = 0;      
    var counter = 0;  
    for (var i=0; i<divCurs.childNodes.length; i++) {
        var child = divCurs.childNodes[i];
        if (child.nodeName.indexOf("#")!=0) {
            if (child.nodeName!="H1" && child.className!="blocButtons" && child.className!="blocMore") {
                if (index==-1) {
                    child.style.display = "block";
                } else {
                    if (child.nodeName=="H2") {
                        counter++;
                        if (currentIndex==index) {
                            child.style.display = "block";
                        } else {
                            child.style.display = "none";
                        }
                        currentIndex++;
                    } else {
                        if (currentIndex==(index+1)) {
                            child.style.display = "block";
                        } else {
                            child.style.display = "none";
                        }
                    }
                }
            }
        }
    }
    if (divButtons!=null) {
        for (var i=0; i<divButtons.childNodes.length; i++) {
            divButtons.childNodes[i].className = (index==i-1 ? "seleccionat" : "");
        }
        if (index==-1) {
            divMore.innerHTML = "";
        } else if (index==(counter-1)) {
            divMore.innerHTML = "<a href='javascript:mostrarBloc(-1)'>" + getLocalizedString("Mostrar tot","Mostrar todo","Show all") + "</a>"
        } else {
            divMore.innerHTML = "<a href='javascript:mostrarBloc(-1)'>" + getLocalizedString("Mostrar tot","Mostrar todo","Show all") + "</a>"
            divMore.innerHTML += "<span >&nbsp;|&nbsp;</span>";
            divMore.innerHTML += "<a href='javascript:mostrarBloc(" + (index + 1) + ")'>" + getLocalizedString("Desitjo saber m&eacute;s", "Deseo saber m&aacute;s","More") +  "&gt;&gt;</a>";    
        }
    }
}
function mostrarBlocDesdeAnchor(e) {
    var currentURL = document.location.href;
    var newURL = (e.target ? e.target.href : event.srcElement.href);
    if (newURL.indexOf("#")!=-1) {
        var anchorName = newURL.substr(newURL.indexOf("#")+1).toLowerCase();
        for (var i=0; i<divButtons.childNodes.length; i++) {
            var aux = divButtons.childNodes[i].innerHTML.toLowerCase();            
            aux = replaceLatinChars(aux);
            if (aux.indexOf(anchorName)!=-1) {            
                mostrarBloc(i);
                return;
            }
        }
    }
}


/**/
var popupObject;
var popupSender;
var popupShadow;
function showPopup(sender, divPopup, width, height, atBottom) {
    if (popupObject == divPopup) {
        showPopupEnd();
        return;
    } else {
        showPopupEnd();
    }
    if (divPopup.firstChild.className != "titol") {
        var divPopupTitle = document.createElement("DIV");
        var title = (sender ? sender.getAttribute("title") : "");
        if (title == null || title=="") title = "&nbsp;";
        var html = "<table cellpadding='0' cellspacing='0'><tr><td>" + title + "</td>";
        //html += "<td style='text-align:right;padding-right:2px;'><a href='#' onclick='showPopupEnd();'>X</a></td>";
        html += "</tr></table>";
        divPopupTitle.innerHTML = html;
        divPopupTitle.className = "titol";
        divPopup.insertBefore(divPopupTitle, divPopup.firstChild);
    }
    divPopup.style.position = "absolute";
    divPopup.style.height = height + "px";
    divPopup.style.width = width + "px";
    if (sender == null) {
        //divPopup.style.position = "fixed";
        divPopup.style.left = parseInt(getAbsoluteWidth(document.body) / 2 - (width / 2)) + "px";
        divPopup.style.top = Math.max(5, parseInt((document.documentElement.clientHeight / 2) - (height / 2))) + "px";
    } else if (getAbsoluteLeft(sender) > document.body.offsetWidth / 3) {
        divPopup.style.left = getAbsoluteLeft(sender) + getAbsoluteWidth(sender) - width - 2 + "px";
        divPopup.style.top = getAbsoluteTop(sender) + getAbsoluteHeight(sender) + 1 + "px";
    } else {
        divPopup.style.left = getAbsoluteLeft(sender) + getAbsoluteWidth(sender) + "px";
        divPopup.style.top = getAbsoluteTop(sender) + "px";
    }
    if (atBottom && sender) {
        divPopup.style.top = getAbsoluteTop(sender) + getAbsoluteHeight(sender) + "px";
        divPopup.style.left = getAbsoluteLeft(sender) + getAbsoluteWidth(sender) - width - 2 + "px";
    }
    divPopup.style.display = "block";
    popupObject = divPopup;
    popupSender = sender;
    if (popupSender) popupSender.className = popupSender.className.replace("Pressed", "") + "Pressed";

    var objIMGShadow = document.createElement("IMG");
    objIMGShadow.style.position = "absolute";
    objIMGShadow.src = "http://localhost/cett/alimara/images/shadow.png"
    objIMGShadow.style.left = getAbsoluteLeft(divPopup) + 8 + "px";
    objIMGShadow.style.top = getAbsoluteTop(divPopup) + 10 + "px";
    objIMGShadow.style.zIndex = 5;
    objIMGShadow.style.width = width +  "px";
    objIMGShadow.style.height = height + "px";
    document.body.appendChild(objIMGShadow);
    popupShadow = objIMGShadow;
}
function showPopupEnd() {
    if (popupObject) {
        popupObject.style.display = "none";
        //popup.parentNode.removeChild(popup);
        if (popupSender) popupSender.className = popupSender.className.replace("Pressed","");
        popupObject = null;
        popupSender = null;
    }
    if (popupShadow) {
        popupShadow.parentNode.removeChild(popupShadow);
        popupShadow = null;
    }
}

/* show hide working panel */
function showWorkingPanel(target, message) {
    var objDIV = target.previousSibling;
    var divCreated = false;
    if (objDIV && objDIV.className == "loading") {
        setOpacity(objDIV, 0);
        objDIV.style.display = "block";
        divCreated = false;
    } else {
        objDIV = document.createElement("DIV");
        ensureElementHasId(objDIV);
        setOpacity(objDIV, 0);
        divCreated = true;
    }    
    objDIV.innerHTML = "<div>" + message + " ...</div>";
    objDIV.className = "loading";
    objDIV.style.height = getAbsoluteHeight(target) + "px";
    objDIV.style.width = getAbsoluteWidth(target) + "px";    
    if (divCreated) target.parentNode.insertBefore(objDIV, target);
    setOpacity(objDIV, 0);
    fadeTo(objDIV.id, 100, 10);
}
function hideWorkingPanel(target) {
    var objDIV = target.previousSibling;
    if (objDIV && objDIV.className == "loading") {
        objDIV.style.display = "none";
    }
}

/* enviar a un amic */
function doFrmModulEnviarAUnAmicFormSubmit() {
    var divModulEnviarAUnAmicForm = document.getElementById('divModulEnviarAUnAmicForm');
    var frm = document.getElementById('frmModulEnviarAUnAmicForm');
    if (trim(frm.txtEnviarAUnAmicFormNom.value)=='') {alert('Campo \'nombre\' obligatorio.');return;};
    if (!isEmail(frm.txtEnviarAUnAmicFormEmail.value)) {alert('Campo \'email\' obligatorio.');return;};
    if (!isEmail(frm.txtEnviarAUnAmicFormEmailDest.value)) { alert('Campo \'email de su amigo\' obligatorio.'); return; };
    showWorkingPanel(frm, getLocalizedString("Enviant correu", "Enviando correo"));
    frm.submit();
}
function doFrmModulEnviarAUnAmicFormEnd(result) {
    var divModulEnviarAUnAmicForm = document.getElementById('divModulEnviarAUnAmicForm');
    var frm = document.getElementById('frmModulEnviarAUnAmicForm');
    hideWorkingPanel(frm);
    var txtEnviarAUnAmicFormEmailDest = document.getElementById('txtEnviarAUnAmicFormEmailDest');
    for (var i=0; i<frm.length; i++) frm[i].disabled = false;
    if (result.indexOf('Error:')!=-1) {
        alert(result);
    } else {
        alert('El email ha sido enviado correctamente a su amigo.')
        txtEnviarAUnAmicFormEmailDest.value = '';
        divModulEnviarAUnAmicForm.style.display = 'none';
        showPopupEnd()
    }
}


/* formulari */ 
function initializeForms() {
    var frms = document.getElementsByTagName("FORM");
    for (var i=0; i<frms.length; i++) {
        if (frms[i].id && frms[i].className == "form") {
            var readonly = (frms[i].getAttribute("readonly") == "true");
            var inputs = getFormInputElements(frms[i].id);
            for (var j = 0; j < inputs.length; j++) {
                if (readonly) {
                    if (inputs[j].type.toLowerCase() == "radio" || inputs[j].type.toLowerCase() == "checkbox") {
                        inputs[j].onclick = function() { return false;};
                    } else {
                        inputs[j].readOnly = true;
                    }                    
                } else {
                    if (inputs[j].type.toLowerCase() == "radio" || inputs[j].type.toLowerCase() == "checkbox") {
                        myAttachEvent(inputs[j], "click", validateFormInput);
                    } else {
                        myAttachEvent(inputs[j], "change", validateFormInput);
                        var validationRule = inputs[j].getAttribute("validationRule");
                        if (validationRule && validationRule.indexOf("uppercase:true")!=-1) {
                            inputs[j].style.textTransform = "uppercase";
                        }
                    }
                    validateFormInput(inputs[j], frms[i]);
                }
            }
        }
    }
}
function myAttachEvent(element, eventName, func) {
    if (document.all) {
        element.attachEvent("on" + eventName,func);
    } else {
        element.addEventListener(eventName,func,false);
    }    
}

function getFormInputElements(frmId) {
    var frm = document.getElementById(frmId);    
    var result = new Array();
    var inputs = frm.getElementsByTagName("INPUT");
    for (var i=0;i<inputs.length;i++) result.push(inputs[i]);
    var textareas = frm.getElementsByTagName("TEXTAREA");
    for (var i=0;i<textareas.length;i++) result.push(textareas[i]);
    var selects = frm.getElementsByTagName("SELECT");
    for (var i=0;i<selects.length;i++) result.push(selects[i]);
    return result;
}
function getFormInputElementTitle(input) {
    var inputId = input.id;
    var labels = document.getElementsByTagName("LABEL");
    for (var i=0;i<labels.length;i++){
        if (labels[i].htmlFor == inputId) {
            return labels[i].innerHTML.replace(":","");
        }
    }
    return input.id.replace("_"," ");
}
function validateForm(frmId) {
    var errors = "";    
    var frm = document.getElementById(frmId);    
    var inputs = getFormInputElements(frmId);
    for (var i=0;i<inputs.length;i++) {
        var input = inputs[i];
        var error = "";
        error = validateFormInput(input, frm);
        if (error!="") errors += "  - " + inputs[i].getAttribute("labelTitle") + ": " + error + "\n";
    }
    if (errors!="") errors = getLocalizedString("S'han detectat els següents errors al intentar validar el formulari:","Se han detectado los siguientes errores al intentar validar el formulario:","There are errors in form:") + "\n\n" + errors;
    return errors;
}
function validateFormInput(e, frm) {
    var error = "";
    var input = (e && (e.nodeName=="INPUT" || e.nodeName=="TEXTAREA" || e.nodeName=="SELECT") ? e : (window.event ? window.event.srcElement : e.target));
    var radioError = false;
    if (!frm) {
        frm = input;
        while (frm.nodeName!="FORM") frm = frm.parentNode;
    }
    if (input.getAttribute("labelTitle")==null) {
        input.setAttribute("labelTitle", getFormInputElementTitle(input));
    }
    var validationRule = input.getAttribute("validationRule");
    if (validationRule) {
        var validationRuleArray = validationRule.split(";");
        for (var j=0;j<validationRuleArray.length; j++){
            if (validationRuleArray[j].indexOf(":")!=-1) {
                var variable = validationRuleArray[j].split(":")[0];
                var value = validationRuleArray[j].split(":")[1];                
                if (variable=="type"){ 
                    if (value=="email") {  
                        if (input.value!="" && !isEmail(input.value)) error = getLocalizedString("email invàlid","email inválido","invalid email");
                    } else if (value=="phone") { 
                        if (input.value!="" && !isPhone(input.value)) error = getLocalizedString("telèfon invàlid","teléfono inválido","invalid phone");
                    } else if (value=="date") {
                        if (input.value != "" && !isDate(input.value)) error = getLocalizedString("valor incorrecte (Ex: día/mes/any)", "fecha incorrecta (Ej: día/mes/año)", "invalid date");
                    } else if (value == "datepicker") {
                        if (input.nextSibling == null) {
                            var objDiv = document.createElement("DIV");
                            objDiv.className = "dateTimePicker";
                            objDiv.setAttribute("hideOldDates", "false");
                            objDiv.innerHTML = "&nbsp;";
                            input.parentNode.appendChild(objDiv, input);
                        }
                    }
                } else if (variable=="required" && value=="true") {
                    if (input.type.toLowerCase()=="radio") {
                        var siblingRadios = frm[input.name];
                        var someSelected = false;
                        for (var k=0; k<siblingRadios.length; k++) {
                            if (siblingRadios[k].checked) someSelected = true;
                        }
                        if (!someSelected) radioError = true;
                        if (!someSelected && siblingRadios[0]==input) error = getLocalizedString("obligatori","obligatorio","required.");
                        for (var k=0; k<siblingRadios.length; k++) {
                            var input = siblingRadios[k];
                            input.className = input.className.replace("error","") + (error!="" ? " error" : "");
                        }
                    } else if (input.nodeName == "SELECT") {
                        if (input.value == "") error = getLocalizedString("obligatori", "obligatorio", "required");
                    } else if (input.type.toLowerCase()=="checkbox") {
                        error = (!input.checked ? getLocalizedString("obligatori","obligatorio","required") : "");
                    } else if (trim(input.value)=="") {
                        error = getLocalizedString("obligatori","obligatorio","required");
                    }
                } else if (variable == "readonly") {
                    if (input.type.toLowerCase() == "radio") {
                        var aaaa = frm[input.name];
                        for (var k = 0; k < aaaa.length; k++) {
                            aaaa[k].setAttribute("disabled", value);
                            if (isIE) aaaa[k].style.background = "#CCCCCC";
                        }
                    } else {
                        input.setAttribute("readOnly", value);
                        if (isIE) input.style.background = "#CCCCCC";
                    }
                    
                } else if (variable == "maxlength") {
                    input.setAttribute("maxLength", parseInt(value));
                    input.maxLength = parseInt(value);
                    if (trim(input.value).length>parseInt(value)) {
                        error = getLocalizedString("valor especificat massa llarg (màxim " + parseInt(value) + " caracters)","valor especificado demasiado largo (máximo " + parseInt(value) + " caracteres)","value too long (max. " + parseInt(value) +  " characters)");
                    }
                } else if (variable=="minlength") {
                    if (trim(input.value).length<parseInt(value)) {
                        error = getLocalizedString("valor especificat massa curt (mínim " + parseInt(value) + " caracters)","valor especificado demasiado corto (mínimo " + parseInt(value) + " caracteres)","value too small (" + parseInt(value) +  ")");
                    }
                } else if (variable=="defaultValue") {
                    if (input.getAttribute("defaultValueSetted")!="true"){
                        if (input.type.toLowerCase()=="radio") {
                            input.checked = (value=="checked" ? true : false);
                        } else {
                            input.value = value;
                        }
                        input.setAttribute("defaultValueSetted","true");                    
                    }
                }                
            }
        }
    }
    if (input.type.toLowerCase()!="button") {        
        input.className = input.className.replace("error","") + (error!="" || radioError ? " error" : "");
        if (error) {
            input.title = error.replace(" - ","");
        } else {
            input.title = "";
        }
    }
    return error;
}
getElementsByClassName = function(clsName, baseElement){
    if (!baseElement) baseElement = document;
    var retVal = new Array();
    var elements = baseElement.getElementsByTagName("*");
    for(var i = 0;i < elements.length;i++){
        if(elements[i].className.indexOf(" ") >= 0){
            var classes = elements[i].className.split(" ");
            for(var j = 0;j < classes.length;j++){
                if(classes[j] == clsName)
                    retVal.push(elements[i]);
            }
        }
        else if(elements[i].className == clsName)
            retVal.push(elements[i]);
    }
    return retVal;
}
getElementByClassName = function(clsName, baseElement){
    if (!baseElement) baseElement = document;
    var elements = baseElement.getElementsByTagName("*");
    for(var i = 0;i < elements.length;i++){
        if(elements[i].className.indexOf(" ") >= 0){
            var classes = elements[i].className.split(" ");
            for(var j = 0;j < classes.length;j++){
                if(classes[j] == clsName)
                    return elements[i];
            }
        }
        else if(elements[i].className == clsName)
            return elements[i];
    }
    return null;
}
getChildElementsByClassName = function(clsName, baseElement){
    if (!baseElement) baseElement = document;
    var retVal = new Array();
    var elements = baseElement.childNodes;
    for(var i = 0;i < elements.length;i++){
        if (elements[i].className) {
            if(elements[i].className.indexOf(" ") >= 0){
                var classes = elements[i].className.split(" ");
                for(var j = 0;j < classes.length;j++){
                    if(classes[j] == clsName)
                        retVal.push(elements[i]);
                }
            } else if(elements[i].className == clsName) {
                retVal.push(elements[i]);
            }
        }
    }
    return retVal;
}
getChildElementByClassName = function(clsName, baseElement){
    if (!baseElement) baseElement = document;
    var elements = baseElement.childNodes;
    for(var i = 0;i < elements.length;i++){
        if (elements[i].className) {
            if(elements[i].className.indexOf(" ") >= 0){
                var classes = elements[i].className.split(" ");
                for(var j = 0;j < classes.length;j++){
                    if(classes[j] == clsName)
                        return elements[i];
                }
            } else if(elements[i].className == clsName) {
                return elements[i];
            }
        }
    }
    return null;
}
getChildElementsByNodeName = function(nodeName, baseElement){
    if (!baseElement) baseElement = document;
    var retVal = new Array();
    var elements = baseElement.childNodes;    
    for(var i=0; i<elements.length; i++){
        if (elements[i].nodeName==nodeName) {
            retVal.push(elements[i]);
        }
    }
    return retVal;
}
getChildElementByNodeName = function(nodeName, baseElement){
    if (!baseElement) baseElement = document;
    var retVal = new Array();
    var elements = baseElement.childNodes;    
    for(var i=0; i<elements.length; i++){
        if (elements[i].nodeName==nodeName) {
            return elements[i];
        }
    }
    return null;
}

/* Agenda */
function Agenda(idCalendari, url, xml, showDayClickHandler, year, month, day, showWeekSelector, weekSelected, hideMonthSelector, hideOldDates) {
    this.url = url;
    this.urlList = (url ? url.substr(0,url.lastIndexOf("/")) + "/llistat.aspx" : null);
    this.xml = xml;
    this.idCalendari = idCalendari
    this.year = (year ? year : new Date().getYear());
    this.month = (month ? month : new Date().getMonth());
    this.day = (day ? day : new Date().getDate());
    this.showDayClickHandler = showDayClickHandler;
    this.showWeekSelector = showWeekSelector;
    this.weekSelected = weekSelected;
    this.hideOldDates = (hideOldDates ? true : false);
    this.hideMonthSelector = hideMonthSelector;
    this.today = new Date();
    this.yesterday = new Date();
    this.yesterday.setDate(this.today.getDate() - 1);
    this.getHtml = function() {
        var week = (idioma == "ca" ? new Array("dl", "dm", "dm", "dj", "dv", "ds", "dg") : new Array("lu", "ma", "mi", "ju", "vi", "sá", "do"));
        var monthdays = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
        var monthnames = (idioma == "ca" ? new Array("Gener", "Febrer", "Març", "Abril", "Maig", "Juny", "Juliol", "Agost", "Setembre", "Octubre", "Novembre", "Desembre") : new Array("Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"));
        if (this.year < 200) this.year += 1900;
        var selectedDate = new Date(this.year, this.month, this.day);
        var dayN = selectedDate.getDate();
        var days = monthdays[this.month];
        var daysWithEvents = "," + (this.xml ? this.xml.documentElement.getAttribute("daysWithEvents") + "," : "");
        var monthsWithEvents = "," + (this.xml ? this.xml.documentElement.getAttribute("monthsWithEvents") + "," : "");
        var code = "";
        var today = new Date();
        var todayDay = (this.year == (today.getYear() < 1900 ? today.getYear() + 1900 : today.getYear()) && this.month == today.getMonth() ? today.getDate() : -121);
        if (this.month == 1 && (this.year % 4) == 0) days = 29;
        if (!this.hideMonthSelector) {
            code += ("<table cellspacing='0' cellpadding='0' class='header0'>");
            code += ("<tr>");
            for (var i = 0; i < monthnames.length; i++) {
                var hasEvents = (monthsWithEvents.indexOf("," + (i + 1) + ",") != -1);
                var className = "";
                if (i == this.month) className += " selected";
                if (hasEvents) className += " event";
                code += ("<td class='" + trim(className) + "' onclick='" + idCalendari + "Object.render(" + this.year + "," + i + "," + 1 + ");return false;' title='" + monthnames[i] + "'>" + monthnames[i].substr(0, 1) + "</td>");
            }
            code += ("</tr>");
            code += ("</table>");
        }
        code += ("<table cellspacing='0' cellpadding='0' class='header1'>");
        code += ("<tr>");
        code += ("<td class='link' onclick='" + idCalendari + "Object.render(" + this.year + "," + (this.month - 1) + "," + 1 + ");return false;'>&lt;</td>");
        code += ("<td colspan='5'>" + monthnames[this.month] + "&nbsp;" + this.year + "</td>");
        code += ("<td class='link' onclick='" + idCalendari + "Object.render(" + this.year + "," + (this.month + 1) + "," + 1 + ");return false;'>&gt;</td>");
        code += ("</tr>");
        code += ("</table>");
        code += ("<table cellspacing='0' cellpadding='0' class='header2'><tr>");
        for (var i = 0; i < 7; i++) {
            code += ("<td>" + week[i] + "</td>");
        }
        if (this.showWeekSelector) code += ("<td class='weekselectorName'>&nbsp;</td>");
        code += ("</tr>");
        code += ("</table>");
        code += ("<table cellspacing='0' cellpadding='0' class='body'>");
        var jumped = 0;
        var inserted = 1;
        var start = selectedDate.getDay() - dayN % 7 + 0;
        if (start < 0) start += 7;
        var weeks = parseInt((start + days) / 7);
        if ((start + days) % 7 != 0) weeks++;
        var targetDate = new Date(this.year, this.month, 1);
        var firstWeekDay = 1;
        var monthEvents = (this.xml ? this.xml.documentElement.getElementsByTagName("event") : null);
        for (var i = weeks; i > 0; i--) {
            code += ("<tr>");
            for (var j = 7; j > 0; j--) {
                if (jumped < start || inserted > days) {
                    code += ("<td>&nbsp;</td>");
                    jumped++;
                } else {
                    if (targetDate.getDay() == 1) {
                        firstWeekDay = inserted;
                    }
                    if (this.hideOldDates && targetDate < this.yesterday) {
                        code += "<td class='disabled'>" + inserted + "</td>";
                    } else if (inserted == this.day || (this.weekSelected && ((this.day == 1 && i == weeks) || (this.day != 1 && this.day <= inserted && inserted <= this.day + 6)))) {
                        if (daysWithEvents.indexOf("," + inserted + ",") != -1) {
                            code += ("<td class='event selected" + (todayDay == inserted ? " today" : "") + "' onMouseOver='" + idCalendari + "Object.showDayDetail(this," + inserted + ")'>" + inserted + "</td>");
                        } else {
                        code += ("<td class='selected" + (todayDay == inserted ? " today" : "") + "' onclick='" + idCalendari + "Object.showDayClick(this," + inserted + ");return false;'>" + inserted + "</td>");
                        }
                    } else if (daysWithEvents.indexOf("," + inserted + ",") != -1) {
                        code += ("<td class='event" + (todayDay == inserted ? " today" : "") + "'><a href='#' onClick='return " + idCalendari + "Object.showDayClick(this," + inserted + ");' onMouseOver='" + idCalendari + "Object.showDayDetail(this," + inserted + ")' >" + inserted + "</a></td>");
                    } else {
                        code += ("<td class='day" + (todayDay == inserted ? " today" : "") + "' onclick='" + idCalendari + "Object.showDayClick(this," + inserted + ");return false;'>" + inserted + "</td>");
                    }
                    inserted++;
                    targetDate.setDate(targetDate.getDate() + 1);
                }
            }
            if (this.showWeekSelector) code += ("<td class='" + (firstWeekDay == this.day ? "weekselectorSelected" : "weekselector") + "' onclick='return " + idCalendari + "Object.showWeekClick(this," + firstWeekDay + ");' title='" + getLocalizedString("Sel.leccionar tota la setmana", "Seleccionar toda la semana", "Select week") + "'>&nbsp;&nbsp;</td>");
            code += ("</tr>");
        }
        code += "</table>";
        code += "<table class='footer'>";
        code += "<tr><td>" + getLocalizedString("Avui:", "Hoy:", "Today:") + " <a href='#' onclick='" + idCalendari + "Object.render(" + today.getYear() + "," + today.getMonth() + "," + today.getDate() + ");" + idCalendari + "Object.showDayClick(this," + today.getDate() + ")'>" + today.getDate() + "/" + (today.getMonth() + 1) + "/" + (today.getYear() < 200 ? today.getYear() + 1900 : today.getYear()) + "</a></td></table>";
        code += "</table>";
        return code;
    }
    this.render = function(year, month, day) {
        if (year < 200) year += 1900;
        if (month == -1) {
            month = 11;
            year--;
        } else if (month == 12) {
            month = 0;
            year++;
        }
        this.year = year;
        this.month = month;
        this.day = day;
        var url = this.url;
        if (url) {
            var objThis = this;
            url += (url.indexOf("?") == -1 ? "?" : "&");
            url += "year=" + this.year;
            url += "&month=" + (this.month + 1);
            document.getElementById(objThis.idCalendari).innerHTML = "<div class='loading'>&nbsp;</div>";
            loadXMLDoc(url, function(result) {
                objThis.xml = result;
                document.getElementById(objThis.idCalendari).innerHTML = objThis.getHtml();
            }, function(result) {
            })
        } else {
            document.getElementById(this.idCalendari).innerHTML = this.getHtml();
        }
    }
    this.showDayDetail = function(sender, day) {
        var html = "";
        var events = this.xml.documentElement.getElementsByTagName("event");
        var dateNow = "";
        dateNow += this.year
        dateNow += "-";
        dateNow += (this.month + 1 < 10 ? "0" : "") + (this.month + 1);
        dateNow += "-";
        dateNow += (day < 10 ? "0" : "") + day;
        for (var i = 0; i < events.length; i++) {
            var xmlElement = events[i];
            var dateFrom = getElementTextNS("", "dateFrom", xmlElement, 0).substr(0, 10);
            var dateTo = getElementTextNS("", "dateTo", xmlElement, 0).substr(0, 10);
            if (dateTo == "") dateTo = dateFrom;
            if (dateFrom <= dateNow && dateNow <= dateTo) {
                html += "<div>";
                html += "<h1>" + getElementTextNS("", "title", xmlElement, 0) + "</h1>";
                html += "<p>" + getElementTextNS("", "description", xmlElement, 0); +"</p>";
                html += "</div>";
            }
        }
        ensureElementHasId(sender)
        showTooltip(sender.id, html, 0);
    }
    this.showDayClick = function(sender, day) {
        if (this.showDayClickHandler) {
            this.showDayClickHandler(this.year, this.month, day);
        } else {
            var url = this.urlList + "?";
            url += "day=" + day + "&month=" + (this.month + 1) + "&year=" + this.year;
            document.location = url;
        }
        return false;
    }
    this.showWeekClick = function(sender, day) {
        var url = this.urlList + "?";
        if (day < 1) day = 1;
        url += "day=" + day + "&month=" + (this.month + 1) + "&year=" + this.year + "&week=true";
        document.location = url;
        return false;
    }
    
}

/* tooltip */
function showTooltip(senderId, html, timeout) {
    //alert("." + html + ".");
    //if (html=="") return;
    var divToolTip = document.getElementById("divToolTip");
    var sender = document.getElementById(senderId);
    if (!divToolTip) {
        divToolTip = document.createElement("DIV");
        divToolTip.className = "tooltip";
        divToolTip.id = "divToolTip";
        divToolTip.onclick = hideTooltip;
        document.body.appendChild(divToolTip);
    }
    if (html!="") divToolTip.innerHTML = html;
    if (timeout) {
        setTimeout("showTooltip('" + senderId + "','')", timeout)
        return;
    }    
    divToolTip.style.display = "block";        
    divToolTip.style.left = getAbsoluteLeft(sender) + getAbsoluteWidth(sender) + 5 + "px";
    divToolTip.style.top = getAbsoluteTop(sender) + 5 - getAbsoluteHeight(divToolTip) + "px";
    sender.onmouseout = hideTooltip;
}
function hideTooltip() {
    var divToolTip = document.getElementById("divToolTip")
    divToolTip.style.display = "none";
}



/* datetime picker */
function initializeDateTimePickers() {
    var divs = document.getElementsByTagName("div");
    for (var i = 0; i < divs.length; i++) {
        var div = divs[i];
        if (div.className == "dateTimePicker") {
            div.title = getLocalizedString("Escolleixi una data", "Escoja una fecha", "Select Date");
            ensureElementHasId(div);
            if (div.className == "dateTimePicker") {
                div.onclick = function(e) {
                    var target = (window.event ? window.event.srcElement : e.target)
                    var input = target.previousSibling;
                    var div = document.getElementById(target.id + "_popup");
                    if (div == null) {
                        div = document.createElement("DIV");
                        div.id = target.id + "_popup";
                        div.className = "modulPopup"
                        document.body.appendChild(div);
                    }
                    var hideOldDates = (this.getAttribute("hideOldDates") == "true");
                    var objAgenda = new Agenda(div.id + "Container", null, null, function(year, month, day) {
                        input.value = day + "/" + (month + 1) + "/" + year;
                        if (input.onchange) {
                            input.onchange();
                        }
                        validateFormInput(input);
                        showPopupEnd();
                    }, null, null, null, false, null, true, hideOldDates);
                    eval("window." + div.id + "ContainerObject=objAgenda;");
                    div.innerHTML = "<div class='modulAgenda' id='" + div.id + "Container'>" + objAgenda.getHtml() + "</div>";
                    var width = getAbsoluteWidth(input) + getAbsoluteWidth(target) + 2;
                    var height = 205;
                    if (!width || width < 200) width = 200;
                    showPopup(target, div, width, height, true);
                }
            }
        }
    }
}


/* tabbox */
function initializeTabBoxes() {
    var divs = document.getElementsByTagName("div");
    for (var i = 0; i < divs.length; i++) {
        var div = divs[i];
        if (div.className == "tabbox") {
            initializeTabBox(div);
        }
    }
}
function initializeTabBox(div) {
    var tabboxpages = div.childNodes;
    var htmlHead = "";
    var htmlHeadEmpty = true;
    var iCounter = 0;
    for (var j = 0; j < tabboxpages.length; j++) {
        if (tabboxpages[j].tagName == "DIV") {
            var tabboxpage = tabboxpages[j];
            tabboxpage.className = trim(tabboxpage.className + " page");
            tabboxpage.style.display = "none";
            htmlHead += "<a href='#' onclick='return tabboxChangePage(this);'>" + tabboxpage.title + "</a>"
            if (tabboxpage.title) htmlHeadEmpty = false;
            iCounter += 1;
        }
    }
    var tabboxhead = document.createElement("DIV");
    tabboxhead.className = "head"
    tabboxhead.innerHTML = htmlHead;
    if (htmlHeadEmpty) tabboxhead.style.display = "none";
    div.insertBefore(tabboxhead, div.childNodes[0]);
    div.style.display = "block";
    var selectedIndex = div.getAttribute("selectedIndex")
    if (selectedIndex == null) selectedIndex = 0;
    tabboxChangeIndex(div, selectedIndex);
}
function tabboxChangePage(anchor) {
    var tabbox = anchor.parentNode.parentNode;
    var index = -1;
    for (var i = 0; i < anchor.parentNode.childNodes.length; i++) {
        if (anchor.parentNode.childNodes[i] == anchor) index = i;
    }
    return tabboxChangeIndex(tabbox, index);
}
function tabboxChangeIndex(tabbox, index) {
    tabbox.setAttribute("selectedIndex", index);
    var head = tabbox.childNodes[0];
    var iCounter = 0;
    for (var i = 0; i < head.childNodes.length; i++) {
        if (head.childNodes[i].nodeName == "A") {
            head.childNodes[i].className = (iCounter == index ? "selected" : "");
            iCounter++;
        }
    }
    iCounter = 0;
    for (var i = 0; i < tabbox.childNodes.length; i++) {
        var page = tabbox.childNodes[i];
        if (page.nodeName.toUpperCase()=="DIV" && page.className.indexOf("page") != -1) {
            if (iCounter == index) {
                page.style.display = "block";
            } else {
                page.style.display = "none";
            }
            iCounter += 1;
        }
    }
    var divTabBoxForId = tabbox.getAttribute("for");
    if (divTabBoxForId) {
        var divTabBoxFor = document.getElementById(divTabBoxForId);
        if (divTabBoxFor) tabboxChangeIndex(divTabBoxFor, index);
    }
    return false;
}


/* sliderbox */
function initializeSliderBoxes() {
    var divs = document.getElementsByTagName("div");
    for (var i = 0; i < divs.length; i++) {
        var div = divs[i];
        if (div.className == "sliderbox") {
            initializeSliderBox(div);
        }
    }
}
function initializeSliderBox(div) {
    div.style.display = "block";
    var w = div.clientWidth;
    var h = div.clientHeight;
    var sliderboxpages = div.childNodes;
    var sliderboxpagefirst = null;
    var index = 0;
    if (h > 1000) h = 300;
    //crea la table horizontal
    var objTable = document.createElement("TABLE");
    div.appendChild(objTable);
    objTable.border = "0";
    objTable.cellPadding = "0";
    objTable.cellSpacing = "0";
    objTable.id = div.id + "_element";
    var objRow = objTable.insertRow(-1);
    //crea los botones
    var objButtons = document.createElement("DIV");
    objButtons.className = "sliderboxbuttons";
    objButtons.innerHTML = "" +
        "<a id='" + div.id + "_back' href='#' onclick=\"return sliderBoxMove('" + div.id + "',-1)\">&lt;&lt; " + getLocalizedString("anterior", "anterior", "back") + "</a>" +
        "<label id='" + div.id + "_current' > - 1/5 - </label>" +
        "<a id='" + div.id + "_forward' href='#' onclick=\"return sliderBoxMove('" + div.id + "',+1)\">" + getLocalizedString("següent", "siguiente", "next") + " &gt;&gt;</a>" +
        "";
    div.appendChild(objButtons);
    objTable.style.height = h - objButtons.offsetHeight + "px";
    //canvia las paginas de sitio
    var pages = new Array();
    for (var i = 0; i < sliderboxpages.length; i++) {
        if (sliderboxpages[i].tagName == "DIV" && sliderboxpages[i] != objButtons) pages.push(sliderboxpages[i]);
    }
    for (var i = 0; i < pages.length; i++) {
        var page = pages[i];
        page.className = trim(page.className + " page");
        var objCell = objRow.insertCell(-1);
        objCell.appendChild(page);
        page.style.height = h - objButtons.offsetHeight + "px";
        page.style.width = w + "px";
    }
    div.setAttribute("pageCount", pages.length);
    //selecciona el indice que toque
    var selectedIndex = div.getAttribute("selectedIndex");
    if (selectedIndex == null) {
        selectedIndex = 0;
        div.setAttribute("selectedIndex", 0);
    }
    sliderBoxMove(div.id, 0);
}
function sliderBoxMove(id, inc) {
    var div = document.getElementById(id);
    var table = document.getElementById(id + "_element");
    var selectedIndex = parseInt(div.getAttribute("selectedIndex"));
    var pageCount = parseInt(div.getAttribute("pageCount"));
    var newSelectedIndex = selectedIndex + inc;
    if (newSelectedIndex < 0) return false;
    if (newSelectedIndex > pageCount - 1) return false;
    var w = div.clientWidth;
    var velocityInc = 25;
    var velocityMs = 10;
    if (inc < 0) {
        slideHTMLElementRight(table.id, newSelectedIndex * w, velocityInc, velocityMs);
    } else if (inc > 0) {
        slideHTMLElementLeft(table.id, newSelectedIndex * w, velocityInc, velocityMs);
    }
    div.setAttribute("selectedIndex", newSelectedIndex);
    document.getElementById(div.id + "_current").innerHTML = "&nbsp;&nbsp;" + (newSelectedIndex + 1) + "/" + (pageCount) + "&nbsp;&nbsp;";
    return false;
}

 /* links */
function doReload(variable, value) {
    var currentUrl = "" + document.location.href;
    var newUrl;
    if (currentUrl.indexOf("?") == -1) {
        newUrl = currentUrl + "?" + variable + "=" + value;        
    } else {
        var queryString = currentUrl.substring(currentUrl.indexOf("?") + 1);
        currentUrl = currentUrl.substring(0, currentUrl.indexOf("?"));
        var queryStringArray = queryString.split("&");
        queryString = "";
        for (var i = 0; i < queryStringArray.length; i++) {
            if (queryStringArray[i].indexOf(variable + "=") == -1) {
                if (queryString != "") queryString += "&";
                queryString += queryStringArray[i];
            }
        }
        if (queryString != "") queryString += "&";
        queryString += variable + "=" + value;
        newUrl = currentUrl + "?" + queryString;
    }
    document.location = newUrl;
}


/* querystring */
function Querystring(qs) { 
    this.params = {};
    if (qs == null) qs = location.search.substring(1, location.search.length);
    if (qs.length == 0) return;
    qs = qs.replace(/\+/g, ' ');
    var args = qs.split('&'); // parse out name/value pairs separated via &
    for (var i = 0; i < args.length; i++) {
        var pair = args[i].split('=');
        var name = decodeURIComponent(pair[0]);
        var value = (pair.length == 2) ? decodeURIComponent(pair[1]) : name;
        this.params[name] = value;
    }
}
Querystring.prototype.get = function(key, default_) {
    if (!this.params) return default_;
    var value = this.params[key];
    return (value != null) ? value : default_;
}
Querystring.prototype.contains = function(key) {
    if (!this.params) return false;
    var value = this.params[key];
    return (value != null);
}




/* jquery.js.js */
/* end of jquery.js.js */
