function linksExternos(x, url, v) {
	switch(x) {
		case 1: linkExterno(true, url, v); break; //window.open(url); break;
		case 2: linkExterno(false, url, v); break; //self.location.href = url; break;
		case 3: 
		  var argMS, argNo;
		  if (/^[^\.]+\.[^\.]+$/.test(url) == true) {
        argMS = url.split('.')[0];
        argNo = url.split('.')[1];
		  } else {
		    argMS = 0;
		    argNo = url;
		  }
		  linkWebSite(argNo, argMS, v, true); 
		  break;
		case 4: janExt(url, v); break;
		case 5: janMicroSite(url, v); break;
		case 6: linkFicheiro(url); break;
	}
}

function janExtGP(x, v) { janExt(x, v); }
function janMicroSiteGP(x, v) { janMicroSite(x, v); }
function linkWebSiteGP(x, ms, v) { linkWebSite(x, ms, v); }
function linkFicheiroGP(x) { linkFicheiro(x); }
function linkExternoGP(bNovaJanela, url, v) { linkExterno(bNovaJanela, url, v); }

function obtemTarget(targetFrame, nome) {
	if (typeof(targetFrame) == 'undefined') targetFrame = self;
	if (targetFrame.frames && targetFrame.frames['mlkHwnd' + mlkSessMLKID]) {
		return targetFrame.frames['mlkHwnd' + mlkSessMLKID]
	} else if (targetFrame.parent.name != nome) {
		//Curiosamente o .parent em popups mantém-se sempre na última janela, por isso tem de ser por nome
		return obtemTarget(targetFrame.parent, targetFrame.parent.name)
	} else if (targetFrame.opener) { 
		//Chega-se ŕ conclusăo que estamos numa Janela Externa ou Micro-Site.
		return obtemTarget(targetFrame.opener);
	} else {
	 	return null;
	}
}

function janExt(x, variaveis) {
  //montar variaveis
  if (typeof(variaveis) != "string") variaveis = '';
  variaveis = fPreparaVariaveis(variaveis);
  variaveis = (variaveis == '' ? '' : '&' + variaveis);   
  //lançar janela externa
  var h = obtemTarget();
  h.janExt(x, variaveis);
}

function janMicroSite(x, variaveis) {
  //montar variaveis
  if (typeof(variaveis) != "string") variaveis = '';
  variaveis = fPreparaVariaveis(variaveis);
  variaveis = (variaveis == '' ? '' : '&' + variaveis);
  //lançar micro-site
  var h = obtemTarget();
  h.janMicroSite(x, variaveis);
}

function linkWebSite(x, codigoms, variaveis, manterCodigoNoActivo) {
  var lws = (typeof(manterCodigoNoActivo) == "undefined") ? 'lws=1&' : '';
  if (typeof(codigoms) == "undefined") codigoms = 0;
  if (typeof(variaveis) != "string") variaveis = '';
	//montar variaveis  
  variaveis = fPreparaVariaveis(variaveis);
  variaveis = (variaveis == '' ? '' : (/^\&/.test(variaveis) == true ? variaveis : '&' + variaveis));
  
  //efectuar link  
  if (typeof(codigoms) == 'undefined') {
    if (typeof(mlkCodigoMS) != 'undefined' && mlkCodigoMS != '') {
      codigoms = mlkCodigoMS;
    } else {
      alert('Link inválido. Por favor contacte o administrador do sistema. Obrigado.');
      return;
    }
  }
  var mcna = (manterCodigoNoActivo) ? '1' : '0';
  if (typeof(fMensagemAguardePF) == 'function') { fMensagemAguardePF(); }
  self.location.href = mlkSessURL + '/aaaDefault.aspx?back=1&f=1&' + lws + 'mcna=' + mcna + '&lnc=' + CurrentNode + '&codigono=' + x + variaveis;
}

function linkFicheiro(x) {
	var fr;
	if (!(fr = document.getElementById("frLinkFicheiro"))) {
	  fr = document.createElement("iframe");
	  fr.id = "frLinkFicheiro";
	  fr.width = 0;
	  fr.height = 0;
	  fr.border = 0;
	  fr.scrolling = "no";
	  fr.tabIndex = -1;
	  fr.marginHeight = 0; 
	  fr.marginWidth = 0;
	  fr.style.display = 'none'; 
	  document.body.appendChild(fr);
	} 
	fr.src = mlkSessURL + '/wwwbase/wwwinclude/ficheiro.aspx?access=1&id=' + x;
}

function linkFicheiroListagem(x, novaJanela) {
	var fr;
	if (typeof(novaJanela) != "boolean") novaJanela = false;

  if (novaJanela) {
    var wnd = 
      window.open(mlkSessURL + '/wwwbase/wwwinclude/ficheiro.aspx?tipo=1&id=' + x, 
                  'Ficheiro' + x, 
                  'height=200,width=400,location=no,menubar=no,status=no,titlebar=no,toolbar=no');
    wnd.focus();
    wnd.document.onreadystatechange = 
      function() {
        if (wnd.document.readyState == 'complete') {
          wnd.focus();
        }      
      }
  } else {
	  if (!(fr = document.getElementById("frLinkFicheiro"))) {
	    fr = document.createElement("iframe");
	    fr.id = "frLinkFicheiro";
	    fr.width = 0;
	    fr.height = 0;
	    fr.border = 0;
	    fr.scrolling = "no";
	    fr.tabIndex = -1;
	    fr.marginHeight = 0; 
	    fr.marginWidth = 0;
	    fr.style.display = 'none'; 
	    document.body.appendChild(fr);
	  } 
	  fr.src = mlkSessURL + '/wwwbase/wwwinclude/ficheiro.aspx?access=1&tipo=1&id=' + x;
	}
}

function linkExterno(bNovaJanela, url, variaveis) {
  //montar variaveis
  var lst;
  if (typeof(variaveis) != "string") variaveis = '';
  variaveis = fPreparaVariaveis(variaveis);
  lst = url.split('?', 2);
  if (lst.length == 2) {
    url = lst[0];
    variaveis = lst[1] + ( variaveis == '' ? '' : '&' + variaveis);
  }
  variaveis = (variaveis == '' ? '' : '?' + variaveis);
  //Efectuar o link
  if (bNovaJanela == true) {
    window.open(url + variaveis);
  } else {
    if (typeof(fMensagemAguardePF) == 'function') { fMensagemAguardePF(); }
    self.location.href = mlkSessURL + "/wwwbase/raiz/mlkLinkPaginaExterna.aspx?url=" + url + '&variaveis=' + escape(variaveis);
  }
}

function fPreparaVariaveis(variaveis) {
  var retVariaveis;
  if (variaveis == '') {
    retVariaveis = '';
  } else if (/^(«mlkvi»)/.test(variaveis) == true) {
    var lstP, lstNV, szNovaLista = '', rgValor = /^\[[0-9]+\]$/, pos; 
    variaveis = variaveis.replace(/^(«mlkvi»)/, '');
    lstP = variaveis.split('«mlk»');
    for (var p = 0; p < lstP.length; p++) {
      lstNV = lstP[p].split('=', 2);
      if (rgValor.test(lstNV[1]) == true) {
        pos = parseInt(lstNV[1].substr(1, lstNV[1].length - 1), 10);
        if (typeof(mlkGCDOM[pos]) == 'undefined') {
          lstNV[1] = '';
        } else {
          lstNV[1] = escape(mlkGCDOM[pos]);
        }
      } else {
        lstNV[1] = escape(lstNV[1]);
      }
      szNovaLista +=  (szNovaLista == ''? lstNV.join('=') : '&' + lstNV.join('='));
    }
    retVariaveis = szNovaLista;
  } else if (/^(«mlkvi»)/.test(variaveis) == false) {
    retVariaveis = variaveis;
  }
  //verificar existęncia: regniu, regformid, regestagioid, regnumprocesso no request para adicionar ŕ lista de variáveis a passar
  var regNIU, regFormID, regEstagioID, regNumProcesso;
  regNIU = mlkReqRegNIU;
  regFormID = mlkReqRegFormID;
  regEstagioID = mlkReqRegEstagioID;
  regNumProcesso = mlkReqRegNumProcesso;
  if (regNIU != '') {
    var rg1 = /^regniu=[^&]+&?/i, rg2 = /&regniu=[^&]+&?/i, sz = '';
    if (rg1.test(retVariaveis) == true || rg2.test(retVariaveis) == true) {
      sz = RegExp.lastMatch.replace(/&/g, '');
      retVariaveis = retVariaveis.replace(sz, 'regniu=' + regNIU);
    } else {
      retVariaveis += (retVariaveis == '' ? '' : '&') + 'regniu=' + regNIU;    
    }
  }
  if (regFormID != '') {
    var rg1 = /^regformid=[^&]+&?/i, rg2 = /&regformid=[^&]+&?/i, sz = '';
    if (rg1.test(retVariaveis) == true || rg2.test(retVariaveis) == true) {
      sz = RegExp.lastMatch.replace(/&/g, '');
      retVariaveis = retVariaveis.replace(sz, 'regformid=' + regFormID);
    } else {
      retVariaveis += (retVariaveis == '' ? '' : '&') + 'regformid=' + regFormID;    
    }
  }
  if (regEstagioID != '') {
    var rg1 = /^regestagioid=[^&]+&?/i, rg2 = /&regestagioid=[^&]+&?/i, sz = '';
    if (rg1.test(retVariaveis) == true || rg2.test(retVariaveis) == true) {
      sz = RegExp.lastMatch.replace(/&/g, '');
      retVariaveis = retVariaveis.replace(sz, 'regestagioid=' + regEstagioID);
    } else {
      retVariaveis += (retVariaveis == '' ? '' : '&') + 'regestagioid=' + regEstagioID;    
    }
  }  
  if (regNumProcesso != '') {
    var rg1 = /^regnumprocesso=[^&]+&?/i, rg2 = /&regnumprocesso=[^&]+&?/i, sz = '';
    if (rg1.test(retVariaveis) == true || rg2.test(retVariaveis) == true) {
      sz = RegExp.lastMatch.replace(/&/g, '');
      retVariaveis = retVariaveis.replace(sz, 'regnumprocesso=' + regNumProcesso);
    } else {
      retVariaveis += (retVariaveis == '' ? '' : '&') + 'regnumprocesso=' + regNumProcesso;    
    }
  }  
  return retVariaveis;
}