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 lst = new Array(), argPID, argMS, argNo;
		  lst = url.split('.');
		  if (lst.length == 3) {
		    linkWebSiteP(lst[0], lst[2], lst[1], v, true); 
		  } else if (lst.length == 2) {
		    linkWebSite(lst[1], lst[0], v, true); 
		  } else {
		    linkWebSite(url, 0, 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(nome) == 'undefined') { nome = 'mlkHwnd' + mlkSessMLKID; }
	if (typeof(targetFrame) == 'undefined') { targetFrame = self; }
	if (targetFrame.frames && targetFrame.frames[nome]) {
		return targetFrame.frames[nome];
  } else if (targetFrame.parent != null && targetFrame != targetFrame.parent) {		
		return obtemTarget(targetFrame.parent, nome);
	} else if (targetFrame.opener) { //Chega-se à conclusão que estamos numa Janela Externa ou Micro-Site.
		return obtemTarget(targetFrame.opener, nome);
	} 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();
  if (h !== null) { 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();
  if (h !== null) { h.janMicroSite(x, variaveis); }
}

function linkWebSiteP(parceiroID, codigoNo, codigoMS, variaveis, manterCodigoNoActivo) {
  linkWS(parceiroID, codigoMS, codigoNo, variaveis, manterCodigoNoActivo);
}

function linkWebSite(codigoNo, codigoMS, variaveis, manterCodigoNoActivo) {
  linkWS(0, codigoMS, codigoNo, variaveis, manterCodigoNoActivo);
}

function linkWS(parceiroID, codigoMS, codigoNo, variaveis, manterCodigoNoActivo, targetFrame, frameMain) {
  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));
  var modoSF = ((obtemTarget(self, 'menu' + mlkSessMLKID)) === null ? true : false); 
  if (typeof(frameMain) == "undefined") {
    if (typeof(targetFrame) == "undefined") {
      targetFrame = self;
    }
    try {
			if (targetFrame.name == (modoSF ? 'mlkWWW' : 'main') + mlkSessMLKID) {
        if (typeof(targetFrame.fMensagemAguardePF) == 'function') { targetFrame.fMensagemAguardePF(); }
        var mcna = (manterCodigoNoActivo) ? '1' : '0';
        var f = (variaveis.indexOf("&f=") == -1 ) ? 'f=1&' : '';
        targetFrame.location.href = mlkSessURL + '/pagina.aspx?' + f + lws + 'mcna=' + mcna 
          + '&lnc=' + (modoSF ? targetFrame.CurrentNode : obtemTarget(self, 'menu' + mlkSessMLKID).CurrentNode)
          + '&parceiroid=' + parceiroID
          + '&codigoms=' + codigoMS
          + '&codigono=' + codigoNo + variaveis;
          
      } else if (targetFrame.frameInicial && targetFrame.frameInicial == 1) { 
        //linkWS(x, codigoms, variaveis, targetFrame, (modoSF ? 'mlkWWW' : 'main') + mlkSessMLKID, manterCodigoNoActivo);
        linkWS(parceiroID, codigoMS, codigoNo, variaveis, manterCodigoNoActivo, targetFrame, (modoSF ? 'mlkWWW' : 'main') + mlkSessMLKID);
        
      } else if (targetFrame != targetFrame.parent) {
        //linkWS(x, codigoms, variaveis, targetFrame.parent, frameMain, manterCodigoNoActivo);
        linkWS(parceiroID, codigoMS, codigoNo, variaveis, manterCodigoNoActivo, targetFrame.parent, frameMain);
        
      } else if (targetFrame == targetFrame.parent) {
        if (targetFrame.opener) {
          //linkWS(x, codigoms, variaveis, targetFrame.opener, frameMain, manterCodigoNoActivo);
          linkWS(parceiroID, codigoMS, codigoNo, variaveis, manterCodigoNoActivo, targetFrame.opener, frameMain);
          
        } else {
          var wnd; 
          wnd = window.open(mlkSessURL, 'win' + codigoNo, 'left=100,top=100,menubar=yes,toolbar=yes,resizable=yes,scrollbars=yes'); 
          wnd.focus();
        }
        
      }
    } catch(e) {
      alert("Este link redireccionava-o para uma janela que já fechou ou refrescou e como tal não vai ser possível apresentar o conteúdo.\nFeche todas as janelas e tente novamente.");
    }
  } else {
    var ret = false;
    for (var i=0; i<targetFrame.frames.length; i++) {
      if (targetFrame.frames[i].name == frameMain) {
        if (typeof(targetFrame.frames[i].fMensagemAguardePF) == 'function') { targetFrame.frames[i].fMensagemAguardePF(); }
        var mcna = (manterCodigoNoActivo) ? '1' : '0';
        targetFrame.frames[i].location.href = mlkSessURL + '/pagina.aspx?f=1&' + lws + 'mcna=' + mcna 
          + '&lnc=' + (modoSF ? targetFrame.frames[i].CurrentNode : obtemTarget(self, 'menu' + mlkSessMLKID).CurrentNode) 
          + '&parceiroid=' + parceiroID
          + '&codigoms=' + codigoMS
          + '&codigono=' + codigoNo + variaveis;
        ret = true;
      } else {
		    //ret = linkWS(x, codigoms, variaveis, targetFrame.frames[i], frameMain, manterCodigoNoActivo);
		    ret = linkWS(parceiroID, codigoMS, codigoNo, variaveis, manterCodigoNoActivo, targetFrame.frames[i], frameMain);
		  }
		  if (ret == true) break;
	  }
	  return ret;
  }
}

function linkFicheiroListagem(x) {
  var h = obtemTarget();
  if (h !== null) { h.linkFicheiroListagem(x); }
}

function linkFicheiro(x, variaveis, bNovaJanela, tipo) {
  if (typeof(variaveis) != 'string') variaveis = '';
  if (typeof(bNovaJanela) != 'boolean') bNovaJanela = false;
  if (typeof(tipo) != 'number') tipo = 0;
  //montar variaveis
  variaveis = fPreparaVariaveis(variaveis);
  variaveis = (variaveis == '' ? '' : '&' + variaveis);   
  //lançar ficheiro
  var h = obtemTarget();
  if (h !== null) { h.linkFicheiro(x, variaveis, bNovaJanela, tipo); }
}

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 {
    var modoSF = ((obtemTarget(self, 'menu' + mlkSessMLKID)) === null ? true : false);
    var main = obtemTarget(self, (modoSF ? 'mlkWWW' : 'main') + mlkSessMLKID);
    if (modoSF) {
      if (typeof(main.fMensagemAguardePF) == 'function') { main.fMensagemAguardePF(); }
      main.location.href = url + variaveis;
    } else {
      if (main) {
        if (typeof(main.fMensagemAguardePF) == 'function') { main.fMensagemAguardePF(); }
        //main.location.href = mlkSessURL + '/wwwbase/raiz/mlkLinkPaginaExterna.aspx?url=' + url + '&variaveis=' + escape(variaveis);
        variaveis = decodeURI(variaveis);
        main.location.href = mlkSessURL + '/wwwbase/raiz/mlkLinkPaginaExterna.aspx?url=' + url + '&variaveis=' + escape(encodeURI(variaveis));
      } else {
        if (typeof(fMensagemAguardePF) == 'function') { fMensagemAguardePF(); }
        //self.location.href = mlkSessURL + '/wwwbase/raiz/mlkLinkPaginaExterna.aspx?url=' + url + '&variaveis=' + escape(variaveis);
        variaveis = decodeURI(variaveis);
        self.location.href = mlkSessURL + '/wwwbase/raiz/mlkLinkPaginaExterna.aspx?url=' + url + '&variaveis=' + escape(encodeURI(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]);
          lstNV[1] = encodeURI(mlkGCDOM[pos]);
        }
      } else {
        //lstNV[1] = escape(lstNV[1]);
        lstNV[1] = encodeURI(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, regTipo, regBloco;
  regNIU = mlkReqRegNIU;  regFormID = mlkReqRegFormID;  regEstagioID = mlkReqRegEstagioID; 
  regNumProcesso = mlkReqRegNumProcesso; regTipo = mlkReqRegTipo; regBloco = mlkReqRegBloco;
  var fProcessaVar = 
    function (nomeVar, valorVar) {
      var rg1 = new RegExp('^' + nomeVar + '=[^&]+&?', 'i'); 
      var rg2 = new RegExp('&' + nomeVar + '=[^&]+&?', 'i');
      var sz = '';
      if (rg1.test(retVariaveis) == true || rg2.test(retVariaveis) == true) {
        //Se já existe não pode alterar//sz = RegExp.lastMatch.replace(/&/g, '');retVariaveis = retVariaveis.replace(sz, nomeVar + '=' + valorVar);
      } else {
        retVariaveis += (retVariaveis == '' ? '' : '&') + nomeVar + '=' + valorVar;    
      }
    }
  if (regNIU != '') { fProcessaVar('regniu', regNIU); }
  if (regFormID != '') { fProcessaVar('regformid', regFormID); }
  if (regEstagioID != '') { fProcessaVar('regestagioid', regEstagioID); }  
  if (regNumProcesso != '') { fProcessaVar('regnumprocesso', regNumProcesso); } 
  if (regTipo != '') { fProcessaVar('regtipo', regTipo); } 
  if (regBloco != '') { fProcessaVar('regbloco', regBloco); } 
  return retVariaveis;
}

/* Inico - Tratamento da Informação dos objectos da página */
var lstObjCliente= new Array(); //lista com as disciplinas opcionais já feitas
var bPrimeiraVez=true;
function fRegistaEstadoCliente(tipo, id, valor){
  if (bPrimeiraVez == true) {
    bPrimeiraVez=false;
    lstObjCliente= new Array(); 
    comandosOnUnload += 'fProcessaEstadoCliente();';
  }
  
  var index=lstObjCliente.length ;
  
  lstObjCliente[index]={tipo: 0,id: 0,valor: 0};
  lstObjCliente[index].tipo=tipo;
  lstObjCliente[index].id=id;
  lstObjCliente[index].valor=valor;
}

function fProcessaEstadoCliente(){
  var nomeVariavel='', valores='', dados='' , objInfo='', url;
  for (var i=0; i<lstObjCliente.length; i++){
    nomeVariavel=lstObjCliente[i].tipo + '_' + lstObjCliente[i].id 
    //objInfo += lstObjCliente[i].tipo + '.' + lstObjCliente[i].id + '|' + lstObjCliente[i].valor + '#' 
    dados += '&' + nomeVariavel + '=' +  escape(lstObjCliente[i].valor);
  }
  var h = obtemTarget();
  url= '/wwwbase/wwwinclude/estadoCliente.aspx';
  h.fDoCallBack(url,dados,false,fRespostaServidor);
}

function fRespostaServidor(resposta) {
	return '';
}

/* Fim - Tratamento da Informação dos objectos da página */