/*
	* Autor: Ivan Jorge do Rosário Mota
	* Criado em: 2007-04-05 21:05
	* Modificado em: 2007-04-13 22:10
	* É expressamente proíbido alterar este ficheiro sem consentimento do autor
*/

function MM_CheckFlashVersion(reqVerStr,msg){
  with(navigator){
    var isIE  = (appVersion.indexOf("MSIE") != -1 && userAgent.indexOf("Opera") == -1);
    var isWin = (appVersion.toLowerCase().indexOf("win") != -1);
    if (!isIE || !isWin){  
      var flashVer = -1;
      if (plugins && plugins.length > 0){
        var desc = plugins["Shockwave Flash"] ? plugins["Shockwave Flash"].description : "";
        desc = plugins["Shockwave Flash 2.0"] ? plugins["Shockwave Flash 2.0"].description : desc;
        if (desc == "") flashVer = -1;
        else{
          var descArr = desc.split(" ");
          var tempArrMajor = descArr[2].split(".");
          var verMajor = tempArrMajor[0];
          var tempArrMinor = (descArr[3] != "") ? descArr[3].split("r") : descArr[4].split("r");
          var verMinor = (tempArrMinor[1] > 0) ? tempArrMinor[1] : 0;
          flashVer =  parseFloat(verMajor + "." + verMinor);
        }
      }
      // WebTV has Flash Player 4 or lower -- too low for video
      else if (userAgent.toLowerCase().indexOf("webtv") != -1) flashVer = 4.0;

      var verArr = reqVerStr.split(",");
      var reqVer = parseFloat(verArr[0] + "." + verArr[2]);
  
      if (flashVer < reqVer){
        if (confirm(msg))
          window.location = "http://www.macromedia.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash";
      }
    }
  } 
}
//----------------------------------------------------------------------------------
// Esta parte faz com que o menu lateral funciona
function IEHoverPseudo() {

	msg = 'Para que este site funciona correctamente é necessário que tenhas instalado o Macromedia \n';
	msg += 'Flash Player no seu computador. Desejas efectuar o seu download agora?';
	MM_CheckFlashVersion('8,0,0,0', msg);
	
	if (document.getElementById("primary-nav"))
	{
		var navItems = document.getElementById("primary-nav").getElementsByTagName("li");
		
		for (var i=0; i<navItems.length; i++) {
			if(navItems[i].className == "menuparent") {
				navItems[i].onmouseover=function() { this.className += " over"; }
				navItems[i].onmouseout=function() { this.className = "menuparent"; }
			}
		}
	}
	
	if (document.getElementById("secundary-nav"))
	{
		var navItems = document.getElementById("secundary-nav").getElementsByTagName("li");
		
		for (var i=0; i<navItems.length; i++) {
			if(navItems[i].className == "menuparent") {
				navItems[i].onmouseover=function() { this.className += " over"; }
				navItems[i].onmouseout=function() { this.className = "menuparent"; }
			}
		}
	}

}
window.onload = IEHoverPseudo;
//------------------------------------------------------------------------------------
// variavél que vai armazenar a instância do XMLHttpRequest
var xmlHttp = createXmlHttpRequestObject();

// quando esta variável estiver a true os erros serão exibidos
var showErrors = true;

// esta várial vai armazenar os id do div a serem actualizados
var cacheDivId = new Array();

var secondToNextCall = 2;

// cria uma instância do XMLHttpRequest
function createXmlHttpRequestObject() 
{
  // está variável armazenará a instancia do XMLHttpRequest
  var xmlHttp;
  // esta parate funcionará para todos os brwosers. excepto para versões do IE6 ou mais antigas
  try
  {
    // tenta criar um objecto XMLHttpRequest
    xmlHttp = new XMLHttpRequest();
  }
  catch(e)
  {
    // caso o browser for  IE6 ou mais antigos
    var XmlHttpVersions = new Array("MSXML2.XMLHTTP.6.0",
                                    "MSXML2.XMLHTTP.5.0",
                                    "MSXML2.XMLHTTP.4.0",
                                    "MSXML2.XMLHTTP.3.0",
                                    "MSXML2.XMLHTTP",
                                    "Microsoft.XMLHTTP");
    // vai experimentar todos os id até que um funciona
    for (var i=0; i<XmlHttpVersions.length && !xmlHttp; i++) 
    {
      try 
      { 
        // tenta criar um objecto XMLHttpRequest
        xmlHttp = new ActiveXObject(XmlHttpVersions[i]);
      } 
      catch (e) {} // ignora os potenciais erros
    }
  }
  // retorna o bojecto criado ou mostra o erro ocorrido
  if (!xmlHttp)
    displayError("ocorreu um erro ao criar o objecto XMLHttpRequest.");
  else 
    return xmlHttp;
}

// Esta função exibe uma mensagem de erro ocorrido
function displayError(message)
{
  	// ignora os erros se showErrors está com o valor false
  	if (showErrors)
  	{
    	// mostra a mensagem que descreve o erro
    	alert("Erro encontrado: \n" + message);
  	}
}

// esta função faz a chamada ao server
function serverCall(method, server_address, div_id, post_var)
{
	// method = "POST" ou "GET"
	// serverPage = "http://www.pmsat.com/portugal?"
	// parameters = productid=PR_0000000&authorid=1
	// div_id é o ID de um  objecto <div>
	
	// só continua se o xmlHttp não for nulo
  	if (xmlHttp)
  	{
		// tenta conectar com o server
		try
		{
			if ((xmlHttp.readyState == 4) || (xmlHttp.readyState == 0))
			{
				// faz o pedido ao server
				xmlHttp.open(method, server_address, true);
				if ((method == 'POST') && (post_var != ""))
				{
					xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
					xmlHttp.setRequestHeader("Content-length", post_var.length);
				}
				
				if (div_id != "")
				{
					cacheDivId.push(div_id);
					if ((div_id != 'menu_search') && (div_id != 'view_object_info_1') && (div_id != 'view_object_info_2'))
					{
						loadind_text='<div><img src="template/image/general/loading.gif" alt="loading" /></div>';
						document.getElementById(div_id).innerHTML = loadind_text;
					}
				}
				
				xmlHttp.onreadystatechange = updateContentBox;
				if ((method == 'POST') && (post_var != ""))
					xmlHttp.send(post_var);
				else
					xmlHttp.send(null);
			}
		}
		catch (e)
		{
		  // mostra um erro quando a conexão com o server falha
		  displayError(e.toString());
		}
	}
}
// url_encode version 1.0 
function url_encode(str) 
{ 
	var hex_chars = "0123456789ABCDEF"; 
	var noEncode = /^([a-zA-Z0-9\_\-\.])$/; 
	var n, strCode, hex1, hex2, strEncode = ""; 

	for(n = 0; n < str.length; n++) { 
		if (noEncode.test(str.charAt(n))) { 
			strEncode += str.charAt(n); 
		} else { 
			strCode = str.charCodeAt(n); 
			hex1 = hex_chars.charAt(Math.floor(strCode / 16)); 
			hex2 = hex_chars.charAt(strCode % 16); 
			strEncode += "%" + (hex1 + hex2); 
		} 
	} 
	return strEncode; 
} 

// url_decode version 1.0 
function url_decode(str) 
{ 
	var n, strCode, strDecode = ""; 

	for (n = 0; n < str.length; n++) { 
		if (str.charAt(n) == "%") { 
			strCode = str.charAt(n + 1) + str.charAt(n + 2); 
			strDecode += String.fromCharCode(parseInt(strCode, 16)); 
			n += 2; 
		} else { 
			strDecode += str.charAt(n); 
		} 
	} 

	return strDecode; 
}
// esta função faz a chamada ao server
function genericCall(method, server_address, div_id)
{
	serverCall(method, server_address, div_id, "");
}
// esta função faz a chamada ao server enviando dados no metodo GET
function genericSearchCall(server_address, div_id, post_ids)
{
	post_var = getPostVars(post_ids);
	serverCall('GET', server_address + post_var, div_id, "");
}
// esta função faz a chamada ao server enviando dados no metodo POST
// caso o parâmetro validate_function for diferente de "validate_personal_data" é necessário carregar
//   o ficheiro resgister.js antes de carregar o general.js
function genericPostCall(server_address, div_id, post_ids, validate_function)
{
	passed = true;
	
	if (validate_function == "validate_personal_data")
		passed = validatePersonalData();
		
	if (validate_function == "validate_optional_data")
		passed = validateOptionalData();
		
	if (validate_function == "validate_mail")
		passed = validateUserMail();
		
	if (passed)
	{
		post_var = getPostVars(post_ids);
		serverCall('POST', server_address, div_id, post_var);
	}
}

// esta função actuliza o div de acordo com a resposta do server
function updateContentBox() 
{
  	// quando o readyState está com o valor 4, lemos a resposta do server
  	if (xmlHttp.readyState == 4) 
  	{
		// continua apenas se o estado do HTTP estiver OK
    	if (xmlHttp.status == 200) 
    	{
     		try
      		{
		  		if (cacheDivId.length > 0)
		  		{
        			// actuliza o div de acordo com a resposta do servidor
        			document.getElementById(cacheDivId.shift()).innerHTML = xmlHttp.responseText;
				}
      		}
      		catch(e)
      		{
        		// mostra a mensagem de erro
        		displayError(e.toString());
      		}
    	}
    	else
    	{
      		// // mostra a mensagem de erro
      		displayError(xmlHttp.statusText);
    	}
  	}
}
// Esta função permite obter os valores dos id passados e retornar o post_var
function getPostVars(post_ids)
{
	post_var = "";
	post_ids_arr = new Array();
	
	if (post_ids.length > 0)
		post_ids_arr= post_ids.split("-");
	for (i = 0; i < post_ids_arr.length; i++)
	{
		if (post_ids_arr[i].indexOf("_yn") > 0)
		{
			element_name = post_ids_arr[i].substring(0, post_ids_arr[i].indexOf("_yn"));
			post_var += element_name + "=";
			if (document.getElementsByName(element_name)[0].checked)
				post_var += "Y";
			else
				post_var += "N";
		}
		else if (post_ids_arr[i].indexOf("_chk") > 0)
		{
			// Esta opção é para as radio buttons pois há problemas no IE se for utilizado o getElementsByName
			element_name = post_ids_arr[i].substring(0, post_ids_arr[i].indexOf("_chk"));
			post_var += element_name + "=";
			if (document.getElementById(element_name).checked)
				post_var += "Y";
			else
				post_var += "N";
		}
		else
		{
			post_var += post_ids_arr[i] + "=";
			post_var += url_encode(document.getElementsByName(post_ids_arr[i])[0].value);
		}
		if ((i + 1) < post_ids_arr.length)
			post_var += "&";
	}
	return post_var;
}
// Esta função permite fazer duas chamadas GET ao server separados por um determinado segundos
function genericTwoCall(server_address_1, div_id_1, server_address_2, div_id_2)
{
	genericCall('GET', server_address_1, div_id_1);
	window.setTimeout("genericCall('GET','" + server_address_2  + "','" + div_id_2 + "')", secondToNextCall * 1000);
}
// Esta função permite fazer duas chamadas GET ao server separados por um determinado segundos
function genericTwoCallPro(server_address_1, div_id_1, server_address_2, div_id_2, input_id)
{
	input_value = encodeURIComponent(document.getElementById(input_id).value);
	genericCall('GET', server_address_1 + input_value, div_id_1);
	window.setTimeout("genericCall('GET','" + server_address_2  + "','" + div_id_2 + "')", secondToNextCall * 1000);
}
function gotoPage(pag_url)
{
    document.location.replace(pag_url);
}
function showGeneralMiniWindow(filePath, windowTitle, width, height, resizable)
{
	// Parêmtro windowTitle só deve ter uma palavra por que senão dá erro com IE
	var wparam ='width=' + width + ',height='+ height ;
	wparam += ',left=400,top=100,menubar=no,toolbar=no,status=no,location=no,scrollbars=yes,resizable=' + resizable;
	window.open(filePath,windowTitle,wparam);
}