var recordsPerPage = 15;
var encodingType   = 'UTF-8';

/****************************************************************************/

var sortEnabled      = true;
var sortColumn       = 'des';
var sortOrder        = 'ascending';
var filtresCarregats = false;

/****************************************************************************/

var maxDisplayedResults = -1;

/****************************************************************************/


Array.prototype.getIndex = function(name) {
   var idx = -1;
   for (var i=0; i<this.length; i++)
      if (this[i].name == name) {
         idx = i;
         break;
      }
   return idx;
}

// Quick & dirty workaround for Array's splice method not supported on IE 5.0x
if (!Array.prototype.splice) {
   Array.prototype.splice = function (idx, len) {
      var results = new Array();
      var deleted = new Array();
      for (var i=0; i<this.length; i++) {
         if ((i<idx) || (i>=idx+len)) results.push(this[i]);
         else deleted.push(this[i]);
      }
      this.length = 0;
      for (var j=0; j<results.length; j++) {
         this.push(results[j]);
      }
      return deleted;
   };
}

function checkForGeckoParseError(xmlDocument) {
   var errorNamespace = 'http://www.mozilla.org/newlayout/xml/parsererror.xml';
   var documentElement = xmlDocument.documentElement;
   var parseError = { errorCode : 0 };

   if (documentElement.nodeName == 'parsererror' && documentElement.namespaceURI == errorNamespace) {
      parseError.errorCode = 1;
      var sourceText = documentElement.getElementsByTagNameNS(errorNamespace, 'sourcetext')[0];
      if (sourceText != null) {
         parseError.srcText = sourceText.firstChild.data
      }
      parseError.reason = documentElement.firstChild.data;
   }
   return parseError;
}

function debugMsg(debugStatus, debugMsgDelay) {
   if (window.showDebugMsg) showDebugMsg(debugStatus, debugMsgDelay);
}


/****************************************************************************/


function ClientBrowser() {
   this.isIe = false;
   this.isGecko = false;

   if (window.ActiveXObject)
      this.isIe = true;
   
   if (document.implementation && document.implementation.createDocument)
      if (window.XSLTProcessor) this.isGecko = true;
}

ClientBrowser.prototype.supportsXslt = function() {
   return (this.isIe || this.isGecko);
}


/****************************************************************************/

var FilterSetType = {
   Undefined: -1,
   Empleo:     1,
   Formacion:  2
}

/****************************************************************************/


function FilterSet(type) {
   this.type = type || FilterSetType.Undefined;
   this._init();
}

FilterSet.prototype.rules = [];

FilterSet.prototype.activeRules = [];

FilterSet.prototype.addRule = function(rule) {
   this.rules.push(rule);
}

FilterSet.prototype.removeRule = function(name) {
   var idx = this.rules.getIndex(name);
   if (idx > -1) this.rules.splice(idx, 1);
}

FilterSet.prototype.setFilter = function(name, value) {
   var myRule = this.getRule(name);
   myRule.value = value;
   myRule.active = true;

   this.activeRules.push(myRule);
}

FilterSet.prototype.unsetFilter = function(name) {
   var myRule = this.getRule(name);
   myRule.value = -1;
   myRule.active = false;
   //myRule.useLimit = true;
   var idx = this.activeRules.getIndex(name);
   if (idx > -1) this.activeRules.splice(idx, 1);
}

FilterSet.prototype.unsetAllFilters = function() {
   for (var i=0; i<this.rules.length; i++)
      if (this.rules[i].active) this.unsetFilter(this.rules[i].name);
}

FilterSet.prototype.getRule = function(name) {
   var idx = this.rules.getIndex(name);
   var rule;
   //var rule = new Rule();
   if (idx > -1) rule = this.rules[idx];
   return rule;
}

FilterSet.prototype.getActiveRulesXsl = function() {
   var str = '';

   for (var i=0; i<this.rules.length; i++)
      if (this.rules[i].active) str += this.rules[i].getXsl();

   return str;
}

FilterSet.prototype.showWait = function() {
   var str = '';
   str += '<div id="filtros">';
   str += '   <h2>'+getLabel('ajuda')+'</h2>';
   str += '   <ul>';
   str += '      <li>' + getLabel('actualitzant') + '</li>';
   str += '   </ul>';
   str += '</div>';
   str += '<div class="footer"></div>';

   document.getElementById('ayuda').innerHTML = str;

   this.showPanel();
}

FilterSet.prototype.showError = function(err) {
   var str = '';
   str += '<div id="filtros">';
   str += '   <h2>'+getLabel('ajuda')+'</h2>';
   str += '   <ul>';
   str += '      <li>' + getLabel('error', err) + '</li>';
   str += '   </ul>';
   str += '</div>';
   str += '<div class="footer"></div>';

   document.getElementById('ayuda').innerHTML = str;
   
   this.showPanel();
}

FilterSet.prototype.showPanel = function() {
   if (document.getElementById('resultados').className != 'filtros') {
      document.getElementById('resultados').className = 'filtros';
   }
}

FilterSet.prototype._init = function() {
   if (this.type == FilterSetType.Empleo) {
      this.addRule(new Rule('exp', '@'));
      this.addRule(new Rule('ett', '@'));
      this.addRule(new Rule('iip', '@'));
      this.addRule(new Rule('jor', '@'));
      this.addRule(new Rule('discap', '@'));
      this.addRule(new Rule('favui', '@'));
      this.addRule(new Rule('ids', '', Rule.defLimit));
   }
   else if (this.type == FilterSetType.Formacion) {
      this.addRule(new Rule('mic', '@', Rule.defLimit));
      this.addRule(new Rule('pra', '@'));
      this.addRule(new Rule('estat', '@'));
      this.addRule(new Rule('cifo', '@'));
      this.addRule(new Rule('fam', '@', Rule.defLimit));
      this.addRule(new Rule('col', '@', Rule.defLimit));
      this.addRule(new Rule('pgs', '@'));
      this.addRule(new Rule('tipc', '@'));
      //this.addRule(new Rule('ambit', '@', Rule.defLimit));
      this.addRule(new Rule('modal', '@', Rule.defLimit));
   }
   if (this.type != FilterSetType.Undefined) {
      this.addRule(new Rule('pro', '@', Rule.defLimit));
      this.addRule(new Rule('com', '@', Rule.defLimit));
      this.addRule(new Rule('mun', '@', Rule.defLimit));
   }
}


/****************************************************************************/


function Rule(name, prefix, limit, value, active) {
   this.name      = name      || '';
   this.filter    = (typeof(prefix)!='undefined') ? prefix+this.name : this.name;
   this.limit     = limit     || -1;
   this.value     = value     || -1;
   this.active    = active    || false;
}

Rule.defLimit = 6;

Rule.prototype.useLimit = true;

Rule.prototype.getLimit = function() {
   return ((this.useLimit) && (this.limit > -1)) ? this.limit : 999;
}

Rule.prototype.getXsl = function() {
   return '[' + this.filter + '=\'' + this.value + '\']';
}


/****************************************************************************/


function transform(xmlFile, xslFile) {
   var domXsl = (typeof(xslFile) == 'string') ? xslFile.toDOM() : xslFile;
   var domXml = (typeof(xmlFile) == 'string') ? xmlFile.toDOM() : xmlFile;
   
   debugMsg('XML/XSL files converted to DOM');
   
   var output = '';
   var err = '';

   if (myBrowser.isGecko) {
      // Gecko
      debugMsg('Starting transform (Gecko)');
      var parseError = checkForGeckoParseError(domXml);
      if (parseError.errorCode != 0) {
         debugMsg('Error parsing XML');
         err = parseError.reason + '\r\n' + parseError.srcText;
      }
      else {
         debugMsg('Importing stylesheet');
         var xsltProc = new XSLTProcessor();
         xsltProc.importStylesheet(domXsl);
   
         debugMsg('Applying stylesheet');
         var fragment = xsltProc.transformToFragment(domXml, document);
   
         var tmpBox = document.createElement("div");
         tmpBox.appendChild(fragment);
   
         debugMsg('XML/XSL transformation completed');
         output = tmpBox.innerHTML;
      }
   }
   else if (myBrowser.isIe) {
      // IE
      debugMsg('Loading XSL');
      var xslDoc = new ActiveXObject("Msxml2.FreeThreadedDOMDocument");
      xslDoc.async = false;
      xslDoc.load(domXsl);

      debugMsg('Loading XML');
      var xmlDoc = new ActiveXObject("Msxml2.DOMDocument");
      xmlDoc.async = false;
      var loaded = xmlDoc.load(domXml);

      if (!loaded) {
         debugMsg('Error loading XML');
         err = xmlDoc.parseError.reason + '\r\n' + xmlDoc.parseError.srcText;
      }
      else {
         debugMsg('Importing stylesheet');
         var xslTemplate = new ActiveXObject("Msxml2.XSLTemplate");
         xslTemplate.stylesheet = xslDoc;
   
         debugMsg('Applying stylesheet');
         var xsltProc = xslTemplate.createProcessor();
         xsltProc.input = xmlDoc;
         xsltProc.transform();

         debugMsg('XML/XSL transformation completed');
         output = xsltProc.output;
      }
   }

   if (err != '') {
      debugMsg('Error during transformation');
      myFilterSet.showError(err);
      return '';
   }
   else {
      // execute embedded js functions
      if (output != '') output = executeEmbeddedJs(output);
      debugMsg('Returning generated XML/HTML code');
      return output;
   }
}

function process(elem, page) {
   if (typeof(page) == 'undefined') page = 0;

   var outXsl = getXslStylesheet(elem, page);
   var outHtml = '';

   try {
      debugMsg('Processing element [' + elem + '], page [' + page + ']');
      outHtml = transform(getXml(), outXsl);
   }
   catch(e) {
      debugMsg('Error processing element [' + elem + '], page [' + page + ']');
      myFilterSet.showError(e.message);
   }

   return outHtml;
}

function render(elem, page, scrollToTop) {
   if (typeof(page) == 'undefined') page = 0;
   var outHtml = process(elem, page);

   debugMsg('Pasting generated element [' + elem + '], page [' + page + '] into HTML page');

   document.getElementById(elem).innerHTML = outHtml;
//   ddequalcolumns.setHeights();
   if (typeof(scrollToTop) != 'undefined') {
      if (scrollToTop)  window.scroll(0,0);
   }
}

function embedJs(func) {
   var jsStart = "%js%";
   var jsEnd = "%/js%";
   
   return jsStart + func + jsEnd;
}

function executeEmbeddedJs(str) {
   debugMsg('Executing embedded Javascript');
   var jsRegExp = new RegExp("%js%([^<>\"]*)%\/js%");
   var jsFunc = '';
   var output = '';

   while (str.search(jsRegExp) > 0) {
      debugMsg('Executing embedded Javascript - current position: ' + str.search(jsRegExp), 10000);
      jsFunc = str.match(jsRegExp);
      str = str.replace(jsRegExp, eval(jsFunc[1]));
   }

   debugMsg('Embedded Javascript execution completed');
   return str;
}

function getSortImg(colName) {
   var str = '';
   var suffix = sortOrder.substring(0, 3);
   if (colName == sortColumn) {
      str += '<img src="' + imgPathGen + 'icon_sort_' + suffix + '.gif" alt="' + getLabel('sort_' + suffix) + '" width="7" height="14" />';
   }
   return str;
}

function getXslElement(elem) {
   var str = '';
   var actFilters = (myFilterSet.activeRules.length > 0);

   switch(elem) {
      case "resultados":
         str += ' <div id="opciones">' + getXslElement('opciones') + '</div>';
         str += ' <div id="ayuda">' + getXslElement('ayuda') + '</div>';
         str += ' <div id="listado">' + getXslElement('listado') + '</div>';

         break;

      case "opciones":

         var resLabel = (myFilterSet.type == FilterSetType.Empleo) ? 'ocu_res' : 'for_res';

         str += ' <p>';
         str += '    <xsl:choose>';
         str += '       <xsl:when test="$totalRecords = 1">';
         str +=            getLabel(resLabel + '_1', '<xsl:value-of select="$totalRecords"/>', '<xsl:value-of select="@tot"/>');
         str += '       </xsl:when>';
         str += '       <xsl:otherwise>';
         str +=            getLabel(resLabel + '_x', '<xsl:value-of select="$totalRecords"/>', '<xsl:value-of select="@tot"/>');
         str += '       </xsl:otherwise>';
         str += '    </xsl:choose>';

         if (actFilters) str += '    <a href="javascript:quitarFiltros()">' + getLabel('tornar') + '</a>';
 
         str += ' </p>';

         if (actFilters) {
//            str += ' <p id="seleccion">' + getLabel('seleccionat') +'</p>';
            var currRule = '';

            for (var i=0; i<myFilterSet.activeRules.length; i++) {
               currRule = myFilterSet.activeRules[i];
//               if (i > 0) str += ", ";
//<img width="23" height="11" src="' + imgPathGen + 'icon_undofilter.gif" alt="' + getLabel('desactivar') + '">
               str += '<p><span class="filtreSeleccionat">' + getLabel(currRule.name + '_title') + '</span>: ' + getLabel(currRule.name + '_' + currRule.value) + ' <a href="javascript:quitarFiltro(\'' + currRule.name + '\')"><img width="23" height="11" src="' + imgPathGen + 'icon_undofilter.gif" alt="' + getLabel('desactivar') + '" /></a> ( <a href="javascript:quitarFiltro(\'' + currRule.name + '\')">' + getLabel('desactivar') + '</a> )</p>';
            }
//            str += ' </p>';
         }
         break;

      case "ayuda":
         str += ' <div id="filtros">';
         str += ' <h2>' + getLabel('ajuda') + '</h2>';

         var currRule = '';
         var currFilter = '';
         var currName = '';
         var currLimit = 0;

         str += ' <ul>';

         for (var i=0; i<myFilterSet.rules.length; i++) {
            currRule   = myFilterSet.rules[i];

            currFilter = currRule.filter;
            currName   = currRule.name;
            currLimit  = currRule.getLimit();

            str += '<xsl:variable name="' + currName + '_nodeset" select="of/' + currFilter + '[count(.|key(\'' + currName + '\',.)[1]) = 1]"/>';
//            str += '<xsl:variable name="' + currName + '_nodeset" select="of/' + currFilter + '[count(.|key(\'' + currName + '\',.)[1]) = 1][count(key(\'' + currName + '\',.))&lt;$totalRecords]"/>';
            str += '<xsl:variable name="' + currName + '_num" select="count($' + currName + '_nodeset)" />';

            if (currRule.active) {
               str += '<xsl:variable name="' + currName + '_vis" select="false()" />';

               str += '    <li><p>' + getLabel(currName + '_title');
               str += '    <a href="javascript:quitarFiltro(\'' + currName + '\')"><img src="' + imgPathGen + 'icon_undofilter.gif" width="23" height="11" alt="' + getLabel('desactivar_f') + '" /></a></p>';
               str += '       <ul class="selected">';
               str += '       <xsl:for-each select="$' + currName + '_nodeset[position()=1]">';
               str += '          <li><p>' + getLabel(currName + '_' + currRule.value) + '</p></li>';
               str += '       </xsl:for-each>';
               str += '       </ul>';
               str += '    </li>';

            } else {
               str += '<xsl:variable name="' + currName + '_vis" select="$' + currName + '_num &gt; 1" />';

               str += '<xsl:if test="$' + currName + '_num &gt; 1">';

               if (currFilter == '@com') str += '<xsl:if test="$pro_vis = false()">';
               if (currFilter == '@mun') str += '<xsl:if test="$pro_vis = false() and $com_vis = false()">';

               str += '    <li><p>' + getLabel(currName + '_title')+'</p>';
               str += '       <ul>';
               str += '       <xsl:for-each select="$' + currName + '_nodeset">';

               if (currLimit < 999)  // order by result count
                  str += '       <xsl:sort select="count(key(\'' + currName + '\', .))" data-type="number" order="descending" />';
               else {
                  if ((currFilter == '@ett') || (currFilter == '@pra') || (currFilter == '@estat') || (currFilter == '@cifo') || (currFilter == '@tipc') || /*(currFilter == '@ambit') ||*/ (currFilter == '@modal'))
                       str += '       <xsl:sort select="." order="descending" />'; // order by result value - descending
                  else str += '       <xsl:sort select="." order="ascending" />';  // order by result value - ascending
               }

               str += '          <xsl:call-template name="filtro">';
               str += '             <xsl:with-param name="currName" select="\''+ currName + '\'" />';
               str += '             <xsl:with-param name="currFilter" select="\''+ currFilter + '\'" />';
               str += '             <xsl:with-param name="currLimit" select="'+ currLimit + '" />';
               str += '          </xsl:call-template>';
               str += '       </xsl:for-each>';

               str += '       </ul>';
               str += '    </li>';

               if ((currFilter == '@com') || (currFilter == '@mun')) str += '</xsl:if>';

               str += '</xsl:if>';
            }
         }
         str += ' </ul>';
         str += ' </div>';
	break;

      case "listado":
         if (myFilterSet.type == FilterSetType.Empleo) str += getXslElement('output_empleo');
            else if (myFilterSet.type == FilterSetType.Formacion) str += getXslElement('output_formacion');
         str += ' </table>';
         str += ' <div id="paginas">' + getXslElement('paginas') + '</div>';
         break;

      case "output_empleo":
         str += ' <table id="output">';
	 	 str += ' <colgroup>';
	 	 str += '   <col width="8'+normalize('%')+'" />';
	 	 str += '   <col width="30'+normalize('%')+'" />';
	 	 str += '   <col width="18'+normalize('%')+'" />';
	 	 str += '   <col width="22'+normalize('%')+'" />';
	 	 str += '   <col width="22'+normalize('%')+'" />';
		 str += ' </colgroup>';
         str += ' <thead>';
         str += '    <tr>';

         if (sortEnabled) {
            str += '       <th scope="col">' + ' ' + '</th>';
	        str += '       <th scope="col"><a href="javascript:ordenar(\'des\');">' + getLabel('ocupacio') + ' ' + getSortImg('des') + '</a></th>';
            str += '       <th scope="col"><a href="javascript:ordenar(\'vac\');">' + getLabel('vacants') + ' ' + getSortImg('vac') + '</a></th>';
            str += '       <th scope="col">' + getLabel('municipi') + '</th>';
            str += '       <th scope="col">' + getLabel('data_limit') + '</th>';
         } else {
	        str += '       <th scope="col">' + ' ' + '</th>';
            str += '       <th scope="col">' + getLabel('ocupacio') + '</th>';
            str += '       <th scope="col">' + getLabel('vacants') + '</th>';
            str += '       <th scope="col">' + getLabel('municipi') + '</th>';
            str += '       <th scope="col">' + getLabel('data_limit') + '</th>';
         }

         str += '    </tr>';
         str += ' </thead>';
         str += ' <tbody>';
         str += ' <xsl:for-each select="of">';
         str += ' <xsl:sort select="@*[name()=$sortColumn]" order="{$sortOrder}" data-type="{$sortData}" />';
         str += '    <xsl:if test="position() &gt;= $firstRecord and position() &lt;= $lastRecord">';
         str += '    <tr>';
         str += '       <td> ';
    if(numMarcador>0){
	     str += ' <xsl:choose>';
         var valor='';
         for(i=0;i<numMarcador ;i++){
            valor=ofertaSel[i];
         str += '    <xsl:when test="' + valor + ' = @id">';
	     str += '       <input type="checkbox" name="{@id}" id="{@id}" title="{@des}" value="{@id}"  checked="true" onclick="marcadorOfertes(this, document.getElementById(\'idioma\').value);" />'
	     str += '    </xsl:when>';
         }
         str += '    <xsl:otherwise>';
	     str += '       <input type="checkbox" name="{@id}" id="{@id}" title="{@des}" value="{@id}" onclick="marcadorOfertes(this, document.getElementById(\'idioma\').value);" />'
         str += '    </xsl:otherwise>';     
         str += ' </xsl:choose>';
    }else{
         str += '       <input type="checkbox" name="{@id}" id="{@id}" title="{@des}" value="{@id}" onclick="marcadorOfertes(this, document.getElementById(\'idioma\').value);" />'
    }

         str += '    </td>';
         str += '    <td>';
         str += '       <a href="' + urlOferta + '{@id}" onclick="popUp(\'' + urlOferta + '{@id}\'); return false" target="_blank">';
         str += '          <xsl:value-of select="@des" />';
         str += '       </a>';
         str += '       <xsl:if test="@nfitxa &gt; -1">';
         str += '         <a href="' + urlDetallFitxa + '{@nfitxa}" onclick="popUpFitxa(\'' + urlDetallFitxa + '{@nfitxa}\'); return false" target="_blank">';
         str += '          <img src="' + imgPathGen + 'icon_fitxa.gif" alt="' + getLabel('fitxaocup') + '" width="13" height="17" />';
         str += '         </a>';
         str += '       </xsl:if>';
         str += '    </td>';
         str += '    <td><xsl:value-of select="@vac" />';
         str += '       <xsl:if test="@discap = 1">';
         str += '          <img src="' + imgPathGen + 'icon_minusvalid.gif" alt="' + getLabel('discapacitats') + '" width="12" height="16" />';
         str += '       </xsl:if>';
         str += '    </td>';
         str += '    <td>' + embedJs('nomP(\'<xsl:value-of select="@mun" />\');') + '</td>';
         str += '    <td><xsl:value-of select="@dfi" /> ';
         str += '    <xsl:choose>';
         str += '       <xsl:when test="@ifp = 0">';
         str += '          <span class="fecha_urgente"> (' + getLabel('data_avui') + '!)</span>';
         str += '       </xsl:when>';
         str += '       <xsl:when test="@ifp = 1">';
         str += '          <span class="fecha_urgente"> (' + getLabel('data_dema') + '!)</span>';
         str += '       </xsl:when>';
         str += '       <xsl:when test="@ifp &gt; 1">';
         str += '          <span class="fecha_normal"> (' + getLabel('data_x_dies', '<xsl:value-of select="@ifp" />') + ')</span>';
         str += '       </xsl:when>';
         str += '    </xsl:choose>';
         str += '    </td>';
         str += '    </tr>';
         str += '    </xsl:if>';
         str += ' </xsl:for-each>';
         str += ' </tbody>';
         break;
         

      case "output_formacion":
         str += ' <table id="outputCursos">';
	 str += ' <colgroup>';
	 str += '   <col width="30'+normalize('%')+'" />';
	 str += '   <col width="10'+normalize('%')+'" />';
	 str += '   <col width="25'+normalize('%')+'" />';
	 str += '   <col width="35'+normalize('%')+'" />';
	 str += ' </colgroup>';
         str += ' <thead>';
         str += '    <tr>';

          if (sortEnabled) {
            str += '       <th scope="col"><a href="javascript:ordenar(\'des\');"> ' + getLabel('curs') + ' ' + getSortImg('des') + '</a></th>';
            str += '       <th scope="col"><a href="javascript:ordenar(\'dur\');"> ' + getLabel('hores') + ' ' + getSortImg('dur') + '</a></th>';
            str += '       <th scope="col">' + getLabel('municipi') + '</th>';
            str += '       <th scope="col"> ' + getLabel('data_ini_datafi') + ' </th>';
         } else {
            str += '       <th scope="col"> ' + getLabel('curs') + ' </th>';
            str += '       <th scope="col"> ' + getLabel('hores') + ' </th>';
            str += '       <th scope="col"> ' + getLabel('municipi') + ' </th>';
            str += '       <th scope="col"> ' + getLabel('data_ini_datafi') + ' </th>';
         }
         str += '    </tr>';
         str += ' </thead>';
         str += ' <tbody>';
         str += ' <xsl:for-each select="of">';
         str += '    <xsl:sort select="@*[name()=$sortColumn]" order="{$sortOrder}" data-type="{$sortData}" />';
         str += '    <xsl:if test="position() &gt;= $firstRecord and position() &lt;= $lastRecord">';
         str += '    <tr>';
         str += '    <td>';
         str += '       <a href="' + urlFormacioOcup + '{@id}" onclick="popUp(\'' + urlFormacioOcup + '{@id}\'); return false" target="_blank">';
         str += '          <xsl:value-of select="@des" />';
         str += '       </a>';
         str += '    </td>';
         str += '    <td><xsl:value-of select="@dur" />';
	 str += '	<xsl:if test="@tipc = 2">';
         str += '         <img src="' + imgPathGen + 'actiuIcon.gif" alt="' + getLabel('actiuIcon') + '" width="15" height="15" />';
         str += '       </xsl:if>';
         str += '    </td>';


         str += '    <td>' + embedJs('nomP(\'<xsl:value-of select="@mun" />\');') + '</td>';
         str += '    <td><xsl:value-of select="@dfi" /> ';
         str += '    <xsl:choose>';
         str += '       <xsl:when test="@ifi = 0">';
         str += '          <span class="fecha_urgente"> (' + getLabel('data_avui') + '!)</span>';
         str += '       </xsl:when>';
         str += '       <xsl:when test="@ifi = 1">';
         str += '          <span class="fecha_urgente"> (' + getLabel('data_dema') + '!)</span>';
         str += '       </xsl:when>';
         str += '       <xsl:when test="@ifi &gt; 1">';
         str += '          <span class="fecha_normal"> (' + getLabel('data_x_dies', '<xsl:value-of select="@ifi" />') + ')</span>';
         str += '       </xsl:when>';
         str += '    </xsl:choose>';
         str += '    </td>';
         str += '    </tr>';
         str += '    </xsl:if>';
         str += ' </xsl:for-each>';
         str += ' </tbody>';
         break;
         
      case "paginas":
         str += ' <xsl:variable name="pageRecords">';
         str += '    <xsl:value-of select="$firstRecord"/>-<xsl:value-of select="$lastRecord"/>';
         str += ' </xsl:variable>';
         str +=   getLabel('pag_resultats', '<xsl:value-of select="$pageRecords"/>', '<xsl:value-of select="$totalRecords"/>') + ". ";
         str += ' <xsl:if test="$recordsPerPage &lt; $totalRecords">';
         str +=      getLabel('pagina');

         str += '    <xsl:if test="$firstPage &gt; 9">';
         str += '       <a href="javascript:cambiarPagina({number($lastPage)-10})">' + laquo + '</a>';
         str += '       <xsl:text> </xsl:text>';
         str += '    </xsl:if>';

         str += '    <xsl:call-template name="paginas">';
         str += '       <xsl:with-param name="i" select="0" />';
         str += '    </xsl:call-template>';

         str += '    <xsl:if test="$lastPage &lt; $totalPages - 1">';
         str += '       <xsl:text> </xsl:text>';
         str += '       <a href="javascript:cambiarPagina({number($firstPage)+10})">' + raquo + '</a>';
         str += '    </xsl:if>';

         str += ' </xsl:if>';
         break;

      default:
         // default actions here ...
         break;
   }


   return str;
}

function getXslTemplate(tmpl) {
   var str = '';
   
   switch(tmpl) {
      case "paginas":
         str += ' <xsl:param name="i" />';
         str += ' <xsl:if test="$totalPages &gt; $i">';
         str += '    <xsl:if test="($i &gt;= $firstPage) and ($i &lt;= $lastPage)">';
         str += '       <xsl:choose>';
         str += '       <xsl:when test="$pageNumber = $i">';
         str += '          [<xsl:value-of select="$i+1"/>]<xsl:text> </xsl:text>';
         str += '       </xsl:when>';
         str += '       <xsl:otherwise>';
         str += '          <a href="javascript:cambiarPagina({$i})"><xsl:value-of select="$i+1"/></a><xsl:text> </xsl:text>';
         str += '       </xsl:otherwise>';
         str += '       </xsl:choose>';
         str += '    </xsl:if>';

         str += '    <xsl:call-template name="paginas">';
         str += '       <xsl:with-param name="i" select="$i+1" />';
         str += '    </xsl:call-template>';
         str += ' </xsl:if>';
         break;

      case "filtro":
         str += ' <xsl:param name="currName" />';
         str += ' <xsl:param name="currFilter" />';
         str += ' <xsl:param name="currLimit" />';
         str += ' <xsl:choose>';
         str += '    <xsl:when test="position() &lt; $currLimit">';
         str += '    <li>';
         str += '       <p><a href="javascript:aplicarFiltro(\'{$currName}\', \'{.}\');">';
         str +=            embedJs('getLabel(\'<xsl:value-of select="$currName" />_<xsl:value-of select="." />\')') + '</a>';
         str += '          <xsl:call-template name="ofertas">';
         str += '             <xsl:with-param name="numOfertas" select="count(key($currName, .))" />';
         str += '          </xsl:call-template>';
         str += '    </p></li>';
         str += '    </xsl:when>';
         str += '    <xsl:when test="position() = $currLimit">';
         str += '    <li class="more">';
         str += '       <p><a href="javascript:quitarLimite(\'{$currName}\', \'{$pageNumber}\')">';
         str +=            getLabel('veure_totes');
         str += '       </a></p>';
         str += '    </li>';
         str += '    </xsl:when>';
         str += ' </xsl:choose>';
         break;

      case "ofertas":
         if (myFilterSet.type == FilterSetType.Formacion) {
            str += ' <xsl:param name="numOfertas" />';
            str += '    <span class="fl_res"> ';
            str += '    <xsl:choose>';
            str += '       <xsl:when test="$numOfertas = 1">';
            str += '          (<xsl:value-of select="$numOfertas" /> ' + getLabel('uncurs') + ')';
            str += '       </xsl:when>';
            str += '       <xsl:otherwise>';
            str += '          (<xsl:value-of select="$numOfertas" /> ' + getLabel('cursos') + ')';
            str += '       </xsl:otherwise>';
            str += '    </xsl:choose>';
            str += '    </span>';
        }else{ 
            str += ' <xsl:param name="numOfertas" />';
            str += '    <span class="fl_res"> ';
            str += '    <xsl:choose>';
            str += '       <xsl:when test="$numOfertas = 1">';
            str += '          (<xsl:value-of select="$numOfertas" /> ' + getLabel('oferta') + ')';
            str += '       </xsl:when>';
            str += '       <xsl:otherwise>';
            str += '          (<xsl:value-of select="$numOfertas" /> ' + getLabel('ofertes') + ')';
            str += '       </xsl:otherwise>';
            str += '    </xsl:choose>';
            str += '    </span>';
        }

      default:
         break;
   }

   return str;
}

function getXslStylesheet(style, page) {
   debugMsg('Generating XSL stylesheet [' + style + '], page [' + page + ']');

   var str = '<?xml version="1.0" encoding="' + encodingType + '"?>';

   if ((style == 'inputXmlPatch') || (style == 'inputXmlFilter')) {
      var maxResults = (maxDisplayedResults > 0) ? '[position()&lt;=' + maxDisplayedResults + ']' : '';
      var selFilters = myFilterSet.getActiveRulesXsl() + maxResults;

      str += '<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">';
      str += '<xsl:output method="xml" encoding="' + encodingType + '"/>';
      str += ' <xsl:template match="/feines">';
      str += '    <feines>';
      str += '       <ofertes>';
      str += '          <xsl:attribute name="tot"><xsl:value-of select="ofertes/@tot"/></xsl:attribute>';
      str += '          <xsl:for-each select="ofertes/of' + selFilters + '">';
      str += '             <xsl:call-template name="oferta" />';
      str += '          </xsl:for-each>';
      str += '       </ofertes>';
      str += '    </feines>';
      str += ' </xsl:template>';
      str += ' <xsl:template match="/formacio">';
      str += '    <feines>';
      str += '       <ofertes>';
      str += '          <xsl:attribute name="tot"><xsl:value-of select="cursos/@tot"/></xsl:attribute>';
      str += '          <xsl:for-each select="cursos/curs' + selFilters + '">';
      str += '             <xsl:call-template name="oferta" />';
      str += '          </xsl:for-each>';
      str += '       </ofertes>';
      str += '    </feines>';
      str += ' </xsl:template>';
      str += ' <xsl:template name="oferta">';
      str += '    <of>';
      str += '       <xsl:attribute name="id"><xsl:value-of select="@id"/></xsl:attribute>';
      str += '       <xsl:attribute name="des"><xsl:value-of select="@des"/></xsl:attribute>';

      if (style == 'inputXmlPatch') {
         str += '       <xsl:if test="@exp &gt; -1"><xsl:attribute name="exp">';
         str += '          <xsl:choose>';
         str += '             <xsl:when test="@exp &lt;= 12">0</xsl:when>';
         str += '             <xsl:when test="@exp &gt;= 13 and @exp &lt;= 24">1</xsl:when>';
         str += '             <xsl:when test="@exp &gt;= 25 and @exp &lt;= 36">2</xsl:when>';
         str += '             <xsl:when test="@exp &gt;= 37">3</xsl:when>';
         str += '          </xsl:choose>';
         str += '       </xsl:attribute></xsl:if>';
         str += '       <xsl:if test="@iip &gt; -1"><xsl:attribute name="iip">';
         str += '          <xsl:choose>';
         str += '             <xsl:when test="@iip = 0 or @iip = 1"><xsl:value-of select="@iip"/></xsl:when>';
         str += '             <xsl:otherwise>2</xsl:otherwise>';
         str += '          </xsl:choose>';
         str += '       </xsl:attribute></xsl:if>';
      } else {
         str += '       <xsl:if test="@exp &gt; -1"><xsl:attribute name="exp"><xsl:value-of select="@exp"/></xsl:attribute></xsl:if>';
         str += '       <xsl:if test="@iip &gt; -1"><xsl:attribute name="iip"><xsl:value-of select="@iip"/></xsl:attribute></xsl:if>';
      }

      str += '       <xsl:if test="@ett &gt; -1"><xsl:attribute name="ett"><xsl:value-of select="@ett"/></xsl:attribute></xsl:if>';
      str += '       <xsl:if test="@jor &gt; -1"><xsl:attribute name="jor"><xsl:value-of select="@jor"/></xsl:attribute></xsl:if>';
      str += '       <xsl:if test="@dfi != -1"><xsl:attribute name="dfi"><xsl:value-of select="@dfi"/></xsl:attribute></xsl:if>';
      str += '       <xsl:attribute name="ifp"><xsl:value-of select="@ifp"/></xsl:attribute>';
      str += '       <xsl:if test="@vac &gt; -1"><xsl:attribute name="vac"><xsl:value-of select="@vac"/></xsl:attribute></xsl:if>';
      str += '       <xsl:if test="@discap &gt; -1"><xsl:attribute name="discap"><xsl:value-of select="@discap"/></xsl:attribute></xsl:if>';
      str += '       <xsl:if test="@nfitxa &gt; -1"><xsl:attribute name="nfitxa"><xsl:value-of select="@nfitxa"/></xsl:attribute></xsl:if>';
      str += '       <xsl:if test="@favui &gt; -1"><xsl:attribute name="favui"><xsl:value-of select="@favui"/></xsl:attribute></xsl:if>';
      str += '       <xsl:if test="@pro &gt; -1"><xsl:attribute name="pro"><xsl:value-of select="@pro"/></xsl:attribute></xsl:if>';
      str += '       <xsl:if test="@com &gt; -1"><xsl:attribute name="com"><xsl:value-of select="@com"/></xsl:attribute></xsl:if>';
      str += '       <xsl:if test="@mun &gt; -1"><xsl:attribute name="mun"><xsl:value-of select="@mun"/></xsl:attribute></xsl:if>';
      str += '       <xsl:for-each select="ids"><ids><xsl:value-of select="."/></ids></xsl:for-each>';
      str += '       <xsl:if test="@mic &gt; -1"><xsl:attribute name="mic"><xsl:value-of select="@mic"/></xsl:attribute></xsl:if>';
      str += '       <xsl:if test="@pra &gt; -1"><xsl:attribute name="pra"><xsl:value-of select="@pra"/></xsl:attribute></xsl:if>';
      str += '       <xsl:if test="@estat &gt; -1"><xsl:attribute name="estat"><xsl:value-of select="@estat"/></xsl:attribute></xsl:if>';
      str += '       <xsl:if test="@cifo &gt; -1"><xsl:attribute name="cifo"><xsl:value-of select="@cifo"/></xsl:attribute></xsl:if>';
      str += '       <xsl:if test="@fam != -1"><xsl:attribute name="fam"><xsl:value-of select="@fam"/></xsl:attribute></xsl:if>';
      str += '       <xsl:if test="@col != -1"><xsl:attribute name="col"><xsl:value-of select="@col"/></xsl:attribute></xsl:if>';
      str += '       <xsl:if test="@pgs &gt; -1"><xsl:attribute name="pgs"><xsl:value-of select="@pgs"/></xsl:attribute></xsl:if>';
      str += '       <xsl:if test="@dur &gt; -1"><xsl:attribute name="dur"><xsl:value-of select="@dur"/></xsl:attribute></xsl:if>';
      str += '       <xsl:if test="@tipc &gt; -1"><xsl:attribute name="tipc"><xsl:value-of select="@tipc"/></xsl:attribute></xsl:if>';
      /*str += '       <xsl:if test="@ambit &gt; -1"><xsl:attribute name="ambit"><xsl:value-of select="@ambit"/></xsl:attribute></xsl:if>';*/
      str += '       <xsl:if test="@modal &gt; -1"><xsl:attribute name="modal"><xsl:value-of select="@modal"/></xsl:attribute></xsl:if>';
      str += '       <xsl:attribute name="ifi"><xsl:value-of select="@ifi"/></xsl:attribute>';
      str += '    </of>';
      str += ' </xsl:template>';
      str += '</xsl:stylesheet>';
   }
   else {
      var pagina = getPageNum(page);

      var sortData = 'text';
      if (sortColumn == 'des') {
        sortData = 'text';
      } else if (sortColumn == 'vac' || sortColumn == 'dur' || sortColumn == 'dfi'){
        sortData = 'number';
      }
      var comparaYes = 'S';

      str += '<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">';
      str += '<xsl:output method="html" omit-xml-declaration="yes" encoding="' + encodingType + '"/>';
      if (myFilterSet.type == FilterSetType.Empleo) {
         str += '   <xsl:key name="exp" match="of/@exp" use="." />';
         str += '   <xsl:key name="ett" match="of/@ett" use="." />';
         str += '   <xsl:key name="iip" match="of/@iip" use="." />';
         str += '   <xsl:key name="jor" match="of/@jor" use="." />';
         str += '   <xsl:key name="ids" match="of/ids" use="." />';
         str += '   <xsl:key name="discap" match="of/@discap" use="." />';
         str += '   <xsl:key name="favui" match="of/@favui" use="." />';
         str += '   <xsl:key name="nfitxa" match="of/@nfitxa" use="." />';
      } else if (myFilterSet.type == FilterSetType.Formacion) {
         str += '   <xsl:key name="mic" match="of/@mic" use="." />';
         str += '   <xsl:key name="pra" match="of/@pra" use="." />';
         str += '   <xsl:key name="estat" match="of/@estat" use="." />';
         str += '   <xsl:key name="cifo" match="of/@cifo" use="." />';
	 			 str += '   <xsl:key name="tipc" match="of/@tipc" use="." />';
	 			 /*str += '   <xsl:key name="ambit" match="of/@ambit" use="." />';*/
	 			 str += '   <xsl:key name="modal" match="of/@modal" use="." />';
         str += '   <xsl:key name="fam" match="of/@fam" use="." />';
	 str += '   <xsl:key name="col" match="of/@col" use="." />';
         str += '   <xsl:key name="pgs" match="of/@pgs" use="." />';
      }
      str += '   <xsl:key name="pro" match="of/@pro" use="." />';
      str += '   <xsl:key name="com" match="of/@com" use="." />';
      str += '   <xsl:key name="mun" match="of/@mun" use="." />';
      str += '   <xsl:param name="sortColumn" select="\'' + sortColumn + '\'" />';
      str += '   <xsl:param name="sortOrder" select="\'' + sortOrder + '\'" />';
      str += '   <xsl:param name="sortData" select="\'' + sortData + '\'" />';
      str += '   <xsl:param name="filteredRecords" select="/feines/ofertes/of" />';
      str += '   <xsl:param name="totalRecords" select="count($filteredRecords)" />';
      str += '   <xsl:param name="recordsPerPage" select="' + recordsPerPage + '"/>';
      str += '   <xsl:param name="totalPages" select="ceiling($totalRecords div $recordsPerPage)"/>';
      str += '   <xsl:param name="pageNumber">';
      str += '      <xsl:choose>';
      str += '         <xsl:when test="' + pagina + ' &lt; $totalPages"><xsl:value-of select="' + pagina + '" /></xsl:when>';
      str += '         <xsl:otherwise><xsl:value-of select="number($totalPages)-1"/></xsl:otherwise>';
      str += '      </xsl:choose>';
      str += '   </xsl:param>';
      str += '   <xsl:param name="firstPage" select="((floor($pageNumber div 10)) * 10)"/>';
      str += '   <xsl:param name="lastPage" select="$firstPage + 9"/>';
      str += '   <xsl:param name="firstRecord" select="($pageNumber * $recordsPerPage) + 1" />';
      str += '   <xsl:param name="lastRecord">';
      str += '      <xsl:choose>';
      str += '         <xsl:when test="$pageNumber+1 = $totalPages"><xsl:value-of select="$totalRecords" /></xsl:when>';
      str += '         <xsl:otherwise><xsl:value-of select="(($pageNumber) * $recordsPerPage) + $recordsPerPage" /></xsl:otherwise>';
      str += '      </xsl:choose>';
      str += '   </xsl:param>';
      str += '   <xsl:param name="comparaYes" select="\'' + comparaYes + '\'" />';

   
      switch(style) {
         case 'resultados':
            str += '<xsl:template match="/feines/ofertes">' + getXslElement('resultados') + '</xsl:template>';
            str += '<xsl:template name="paginas">' + getXslTemplate('paginas') + '</xsl:template>';
            str += '<xsl:template name="filtro">' + getXslTemplate('filtro') + '</xsl:template>';
            str += '<xsl:template name="ofertas">' + getXslTemplate('ofertas') + '</xsl:template>';
            break;
   
         case 'opciones':
            str += '<xsl:template match="/feines/ofertes">' + getXslElement('opciones') + '</xsl:template>';
            break;

         case 'ayuda':
            str += '<xsl:template match="/feines/ofertes">' + getXslElement('ayuda') + '</xsl:template>';
            str += '<xsl:template name="filtro">' + getXslTemplate('filtro') + '</xsl:template>';
            str += '<xsl:template name="ofertas">' + getXslTemplate('ofertas') + '</xsl:template>';
            break;
   
         case 'listado':
            str += '<xsl:template match="/feines/ofertes">' + getXslElement('listado') + '</xsl:template>';
            str += '<xsl:template name="paginas">' + getXslTemplate('paginas') + '</xsl:template>';
            break;

         case 'paginas':
            str += '<xsl:template match="/feines/ofertes">' + getXslElement('paginas') + '</xsl:template>';
            str += '<xsl:template name="paginas">' + getXslTemplate('paginas') + '</xsl:template>';
            break;
   
         default:
            break;
      }
   
   	str += '</xsl:stylesheet>';
   }

   debugMsg('Returning XSL stylesheet [' + style + '], page [' + page + ']');
	return str;
}


function getPageNum(i) {
   return (typeof(i) != 'number') ? 0 : parseInt(i);
}

function getXml() {
   var outXml;

   if (patchedXml == '') {
      debugMsg('Patching input XML');
      patchedXml = transform(inputXml, getXslStylesheet('inputXmlPatch'));
   }

   if (myFilterSet.activeRules.length > 0) {
      debugMsg('Filtering input XML');
      outXml = transform(patchedXml, getXslStylesheet('inputXmlFilter'));
   }
   else {
      outXml = patchedXml;
   }

   debugMsg('Returning output XML');

   return outXml;
}

function initXml(response) {
   debugMsg('XML loaded');

   inputXml = response.responseXML;
   var alcadaMaximaAbansFiltres=0;
   var alcadaDespresAyuda=0;
   var alcadaDespresListado=0;
   var alcadaInicialOpciones=0;
   var alcadaFinalOpciones=0;
   var desOpciones=0;
   var desContingutMenu=0;

   if (document.getElementById("ayuda").offsetHeight > document.getElementById("listado").offsetHeight) alcadaMaximaAbansFiltres=document.getElementById("ayuda").offsetHeight;
   else alcadaMaximaAbansFiltres=document.getElementById("listado").offsetHeight;
   alcadaInicialOpciones=document.getElementById("opciones").offsetHeight;

/******************* Renderitzo els filtres de la opciones ****************************************************/
   render('opciones', 0);
/******************* Renderitzo els filtres de la opciones ****************************************************/

   alcadaFinalOpciones=document.getElementById("opciones").offsetHeight;
   desOpciones=alcadaFinalOpciones-alcadaInicialOpciones;

/******************* Renderitzo els filtres de la ayuda *******************************************************/
   render('ayuda', 0);
/******************* Renderitzo els filtres de la ayuda *******************************************************/

   alcadaDespresAyuda=document.getElementById("ayuda").offsetHeight;

/******************* Renderitzo els filtres de la listado *****************************************************/
   render('listado', 0);
/******************* Renderitzo els filtres de la listado *****************************************************/

   alcadaDespresListado=document.getElementById("listado").offsetHeight;
   if (alcadaDespresAyuda>alcadaDespresListado){
	desContingutMenu=alcadaDespresAyuda-alcadaMaximaAbansFiltres;
	}
   else{
	desContingutMenu=alcadaDespresListado-alcadaMaximaAbansFiltres;
   	}
   document.getElementById("contingut").style.height=parseInt(document.getElementById("contingut").style.height)+desContingutMenu+desOpciones+'px';
   document.getElementById("menu").style.height=parseInt(document.getElementById("menu").style.height)+desContingutMenu+desOpciones+'px';

}

function parseInputXml() {
   var objHttp = getXmlHttpObject();
   var outXml;

   debugMsg('Loading XML');

   objHttp.open("GET", inputXmlFile, true);
   objHttp.onreadystatechange=function() {
      if (objHttp.readyState==4) initXml(objHttp);
   }
   objHttp.send(null);
}

function getXmlHttpObject() {
   var xmlHttp=false;

   /*@cc_on @*/
   /*@if (@_jscript_version >= 5)
      try {
         xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
      } catch (e) {
         try {
            xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
         } catch (E) {
            xmlHttp = false;
         }
      }
   @end @*/

   if (!xmlHttp && typeof XMLHttpRequest!='undefined') {
      xmlHttp = new XMLHttpRequest();
   }
   
   return xmlHttp;
}


/****************************************************************************/

function getLabel(str, arg1, arg2) {
   var outStr = Label[str];

   if (typeof(outStr) == 'undefined') {
      if (str.indexOf('pro_') == 0) outStr = nomV(str.replace('pro_',''));
      else if (str.indexOf('com_') == 0) outStr = nomC(str.replace('com_',''));
      else if (str.indexOf('mun_') == 0) outStr = nomP(str.replace('mun_',''));
   }
   else {
      if (typeof(arg1) != 'undefined') outStr = outStr.replace(new RegExp('%1'), arg1);
      if (typeof(arg2) != 'undefined') outStr = outStr.replace(new RegExp('%2'), arg2);
   }
   
   if (typeof(outStr) == 'undefined') outStr = str;

   return normalize(outStr);
}

function normalize(str) {
   for (var i=0; i<entities.length; i++) {
      while (str.indexOf(entities[i].chr) >= 0) {
         str = str.replace(entities[i].chr, entities[i].dec);
      }
   }
   return str;
}

/****************************************************************************/


function switchStatus(m) {
    m = (m) ? m : '';
    document.body.style.cursor = m;
    var a = document.getElementsByTagName('A');
    for (var i = 0; i < a.length; i++)
        a[i].style.cursor = m;
}

function aplicarFiltro(fName, fValue) {
   switchStatus('wait');
   setTimeout('_aplicarFiltro(\'' + fName + '\', \'' + fValue + '\')', 0);
}

function quitarLimite(fName, p) {
   switchStatus('wait');
   setTimeout('_quitarLimite(\'' + fName + '\', ' + p + ')', 0);
}

function quitarFiltro(fName) {
   switchStatus('wait');
   setTimeout('_quitarFiltro(\'' + fName + '\')', 0);
}

function quitarFiltros() {
   switchStatus('wait');
   setTimeout('_quitarFiltros()', 0);
}

function ordenar(colName) {
   switchStatus('wait');
   setTimeout('_ordenar(\'' + colName + '\')', 0);
}

function cambiarPagina(p) {
   switchStatus('wait');
   setTimeout('_cambiarPagina(' + p + ')', 0);
}


/****************************************************************************/


function _quitarLimite(fName, p) {
   myFilterSet.getRule(fName).useLimit = false;

   var alcadaMaximaAbansFiltres=0;
   var alcadaDespresAyuda=0;
   var desContingutMenu=0;

   if (document.getElementById("ayuda").offsetHeight > document.getElementById("listado").offsetHeight) alcadaMaximaAbansFiltres=document.getElementById("ayuda").offsetHeight;
   else alcadaMaximaAbansFiltres=document.getElementById("listado").offsetHeight;

/******************* Renderitzo els filtres de la ayuda *******************************************************/
   render('ayuda');
/******************* Renderitzo els filtres de la ayuda *******************************************************/

   alcadaDespresAyuda=document.getElementById("ayuda").offsetHeight;

   if (alcadaDespresAyuda>alcadaMaximaAbansFiltres){
	desContingutMenu=alcadaDespresAyuda-alcadaMaximaAbansFiltres;
	document.getElementById("contingut").style.height=parseInt(document.getElementById("contingut").style.height)+desContingutMenu+'px';
	document.getElementById("menu").style.height=parseInt(document.getElementById("menu").style.height)+desContingutMenu+'px';
	}

   switchStatus();
}

function _aplicarFiltro(fName, fValue) {
   myFilterSet.setFilter(fName, fValue);

   var alcadaMaximaAbansFiltres=0;
   var alcadaDespresAyuda=0;
   var alcadaDespresListado=0;
   var alcadaInicialOpciones=0;
   var alcadaFinalOpciones=0;
   var desOpciones=0;
   var desContingutMenu=0;

   if (document.getElementById("ayuda").offsetHeight > document.getElementById("listado").offsetHeight) alcadaMaximaAbansFiltres=document.getElementById("ayuda").offsetHeight;
   else alcadaMaximaAbansFiltres=document.getElementById("listado").offsetHeight;

/******************* Renderitzo els filtres de la ayuda *******************************************************/
   render('ayuda');
/******************* Renderitzo els filtres de la ayuda *******************************************************/

   alcadaDespresAyuda=document.getElementById("ayuda").offsetHeight;
   alcadaInicialOpciones=document.getElementById("opciones").offsetHeight;

/******************* Renderitzo els filtres de la opciones ****************************************************/
   render('opciones');
/******************* Renderitzo els filtres de la opciones ****************************************************/

   alcadaFinalOpciones=document.getElementById("opciones").offsetHeight;
   desOpciones=alcadaFinalOpciones-alcadaInicialOpciones;

/******************* Renderitzo els filtres de la listado *****************************************************/
   render('listado');
/******************* Renderitzo els filtres de la listado *****************************************************/

   alcadaDespresListado=document.getElementById("listado").offsetHeight;
   if (alcadaDespresAyuda>alcadaDespresListado){
	desContingutMenu=alcadaDespresAyuda-alcadaMaximaAbansFiltres;
	}
   else{
	desContingutMenu=alcadaDespresListado-alcadaMaximaAbansFiltres;
   	}
   document.getElementById("contingut").style.height=parseInt(document.getElementById("contingut").style.height)+desContingutMenu+desOpciones+'px';
   document.getElementById("menu").style.height=parseInt(document.getElementById("menu").style.height)+desContingutMenu+desOpciones+'px';

   switchStatus();
}

function _quitarFiltro(fName) {
   myFilterSet.unsetFilter(fName);

   if (fName == 'pro') myFilterSet.unsetFilter('com');
   if ((fName == 'pro') || (fName == 'com')) myFilterSet.unsetFilter('mun');
   
   var alcadaMaximaAbansFiltres=0;
   var alcadaDespresAyuda=0;
   var alcadaDespresListado=0;
   var alcadaInicialOpciones=0;
   var alcadaFinalOpciones=0;
   var desOpciones=0;
   var desContingutMenu=0;
   var ayudaMesGranListado=false; 
   if (document.getElementById("ayuda").offsetHeight > document.getElementById("listado").offsetHeight) alcadaMaximaAbansFiltres=document.getElementById("ayuda").offsetHeight;
   else alcadaMaximaAbansFiltres=document.getElementById("listado").offsetHeight;

/******************* Renderitzo els filtres de la ayuda *******************************************************/
   render('ayuda');
/******************* Renderitzo els filtres de la ayuda *******************************************************/

   alcadaDespresAyuda=document.getElementById("ayuda").offsetHeight;
   alcadaInicialOpciones=document.getElementById("opciones").offsetHeight;

/******************* Renderitzo els filtres de la opciones ****************************************************/
   render('opciones');
/******************* Renderitzo els filtres de la opciones ****************************************************/

   alcadaFinalOpciones=document.getElementById("opciones").offsetHeight;
   desOpciones=alcadaFinalOpciones-alcadaInicialOpciones;

/******************* Renderitzo els filtres de la listado *****************************************************/
   render('listado');
/******************* Renderitzo els filtres de la listado *****************************************************/

   alcadaDespresListado=document.getElementById("listado").offsetHeight;
   if (alcadaDespresAyuda>alcadaDespresListado){
	desContingutMenu=alcadaDespresAyuda-alcadaMaximaAbansFiltres;
	}
   else{
	desContingutMenu=alcadaDespresListado-alcadaMaximaAbansFiltres;
   	}
   document.getElementById("contingut").style.height=parseInt(document.getElementById("contingut").style.height)+desContingutMenu+desOpciones+'px';
   document.getElementById("menu").style.height=parseInt(document.getElementById("menu").style.height)+desContingutMenu+desOpciones+'px';
   
   switchStatus();
}

function _quitarFiltros() {
   myFilterSet.unsetAllFilters();

   var alcadaMaximaAbansFiltres=0;
   var alcadaDespresAyuda=0;
   var alcadaDespresListado=0;
   var alcadaInicialOpciones=0;
   var alcadaFinalOpciones=0;
   var desOpciones=0;
   var desContingutMenu=0;

   if (document.getElementById("ayuda").offsetHeight > document.getElementById("listado").offsetHeight) alcadaMaximaAbansFiltres=document.getElementById("ayuda").offsetHeight;
   else alcadaMaximaAbansFiltres=document.getElementById("listado").offsetHeight;

/******************* Renderitzo els filtres de la ayuda *******************************************************/
   render('ayuda');
/******************* Renderitzo els filtres de la ayuda *******************************************************/

   alcadaDespresAyuda=document.getElementById("ayuda").offsetHeight;
   alcadaInicialOpciones=document.getElementById("opciones").offsetHeight;

/******************* Renderitzo els filtres de la opciones ****************************************************/
   render('opciones');
/******************* Renderitzo els filtres de la opciones ****************************************************/

   alcadaFinalOpciones=document.getElementById("opciones").offsetHeight;
   desOpciones=alcadaFinalOpciones-alcadaInicialOpciones;

/******************* Renderitzo els filtres de la listado *****************************************************/
   render('listado');
/******************* Renderitzo els filtres de la listado *****************************************************/

   alcadaDespresListado=document.getElementById("listado").offsetHeight;
   if (alcadaDespresAyuda>alcadaDespresListado){
	desContingutMenu=alcadaDespresAyuda-alcadaMaximaAbansFiltres;
	}
   else{
	desContingutMenu=alcadaDespresListado-alcadaMaximaAbansFiltres;
   	}
   document.getElementById("contingut").style.height=parseInt(document.getElementById("contingut").style.height)+desContingutMenu+desOpciones+'px';
   document.getElementById("menu").style.height=parseInt(document.getElementById("menu").style.height)+desContingutMenu+desOpciones+'px';

   switchStatus();
}

function _ordenar(colName) {
   if (colName == sortColumn) {
      sortOrder = (sortOrder == 'ascending') ? 'descending' : 'ascending';
   }
   else {
      sortColumn = colName;
      sortOrder = 'ascending';
   }

   render('listado');

   switchStatus();
}

function _cambiarPagina(p) {

   var alcadaMaximaAbansFiltres=0;
   var alcadaDespresListado=0;
   var desContingutMenu=0;
   var alcadaAyuda=document.getElementById("ayuda").offsetHeight;

   if (document.getElementById("ayuda").offsetHeight > document.getElementById("listado").offsetHeight) alcadaMaximaAbansFiltres=document.getElementById("ayuda").offsetHeight;
   else alcadaMaximaAbansFiltres=document.getElementById("listado").offsetHeight;

/******************* Renderitzo els filtres de la listado *******************************************************/
   render('listado', getPageNum(p));
/******************* Renderitzo els filtres de la listado *******************************************************/

   alcadaDespresListado=document.getElementById("listado").offsetHeight;
   if (alcadaMaximaAbansFiltres > alcadaDespresListado){
	if (alcadaAyuda > alcadaDespresListado){
		desContingutMenu=alcadaAyuda-alcadaMaximaAbansFiltres;
		document.getElementById("contingut").style.height=parseInt(document.getElementById("contingut").style.height)+desContingutMenu+'px';
		document.getElementById("menu").style.height=parseInt(document.getElementById("menu").style.height)+desContingutMenu+'px';
		}
	else	{
		desContingutMenu=alcadaDespresListado-alcadaMaximaAbansFiltres;
		document.getElementById("contingut").style.height=parseInt(document.getElementById("contingut").style.height)+desContingutMenu+'px';
		document.getElementById("menu").style.height=parseInt(document.getElementById("menu").style.height)+desContingutMenu+'px';
		}
	}
   else{
	if (alcadaAyuda > alcadaDespresListado){
		desContingutMenu=alcadaAyuda-alcadaMaximaAbansFiltres;
		document.getElementById("contingut").style.height=parseInt(document.getElementById("contingut").style.height)+desContingutMenu+'px';
		document.getElementById("menu").style.height=parseInt(document.getElementById("menu").style.height)+desContingutMenu+'px';
		}
	else	{
		desContingutMenu=alcadaDespresListado-alcadaMaximaAbansFiltres;
		document.getElementById("contingut").style.height=parseInt(document.getElementById("contingut").style.height)+desContingutMenu+'px';
		document.getElementById("menu").style.height=parseInt(document.getElementById("menu").style.height)+desContingutMenu+'px';
		}
	}

   switchStatus();
}


/****************************************************************************/


var inputXml    = '';
var patchedXml  = '';

var myBrowser = new ClientBrowser();
var myFilterSet = new FilterSet(inputXmlType);


/****************************************************************************/


function initFiltering() {
   if (cargarXml && myBrowser.supportsXslt()) {
      myFilterSet.showWait();
      parseInputXml();
      filtresCarregats=true;
   }
   else {
   	filtresCarregats=true;
   }
}

/*****************************************************************************/

// devuelve nombre de provincia a partir de su id
function nomV (idV) { 
	var nom;
	for (var v=0;v<myV.length;v++) {
		if (myV[v].id==idV){ nom=myV[v].nom; break }
	}
	return nom;
}
// devuelve nombre de comarca a partir de su id
function nomC (idC) { 
	var nom;
	for (var c=0;c<myC.length;c++) {
		if (myC[c].id==idC){ nom=myC[c].nom; break }
	}
	return nom;
}
// devuelve nombre de poblacion a partir de su id
function nomP (idP) { 
	var nom;
	for (var p=0;p<myP.length;p++) {
		if (myP[p].id==idP){ nom=myP[p].nom; break }
	}
	return nom;
}
