/*
  Dreamweaver Functions
*/
function MM_swapImgRestore() {
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}
function MM_preloadImages() {
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}
function MM_findObj(n, d) {
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}
function MM_swapImage() {
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}
function MM_goToURL() {
  var i, args=MM_goToURL.arguments; document.MM_returnValue = false;
  for (i=0; i<(args.length-1); i+=2) eval(args[i]+".location='"+args[i+1]+"'");
}



/*
  Global Functions
*/
function trim(string) {
  var re = /^\s*|\s*$/g;
  return string.replace(re,"");
}
function validate_Email(e) {
  if(e != "") {
    var objRegExp = /^.+@.+\..{2,3}$/;
    return objRegExp.test(e);
  } else {
    return true;
  }
}
function back() {
  history.back();
}
/*
  Método que valida a introdução de valores numéricos.
*/
function numeric_Validate(e, obj) {
  var evt = e ? e : window.event;
  var keycode;
  if(document.all)
    keycode = evt.keyCode;
  else
    keycode = evt.which;
  if(keycode >= 48 && keycode <= 57 || (keycode == 0 || keycode == 8))
    return true;
  else
	return false;  
}
/*
  Método que formata o valor a apresentar num campo numérico.
*/
function numeric_Format(value) {       
  var comma = '.';
  var dec = '.';
  var postDecimal = '';
  var decPlaces = 3;
  
  try {
	// Obtém o valor numérico introduzido
	value = value.replace(/\./g, "")
	// Verifica se não foi introduzido num número
    if(value.length < 1) {
      return "";
    }
	// Verifica se foi introduzido o valor "0"
	if(parseInt(value) == 0) {
      return "";
    }
	// Retorna o valor introduzido caso, não ultrapasse o número de caracteres das casas decimais
    if(value.length <= decPlaces) {
      return value;
    }

    if(value.length > decPlaces) {
      postDecimal = dec + value.substring(value.length - decPlaces, value.length);
      value = value.substring(0, value.length - decPlaces);
    }
    var regex  = new RegExp('(-?[0-9]+)([0-9]{3})');
    while(regex.test(value)) {
      value = value.replace(regex, '$1' + comma + '$2');
    }
  }
  catch (exception) {}
  return value + postDecimal;
}

/*
  Método que permite inserir um objecto Embed na página.
*/
function set_embed(_object, _html)
{
  document.getElementById(_object).innerHTML = _html;
}









/*
  Método que valida os campos de preenchimento obrigatório.
*/
function obrigatorios_Validate(_name)
{
  var _fields = _name.split(",");
  // obtém o ID do controlo
  var _uc = document.getElementById("_uc").value;
  for(var _index=0; _index<_fields.length; _index++) {
    if(trim(document.getElementById(_uc+_fields[_index]).value) == 0) {
	  return false;
	  break;
	}
  }
  return true;
}

/*
  Método que valida o formulário "Anunciar Imóveis".
*/
function anunciar_Validate() {
  var _fields = "tbNome,tbEmail,tbTelefone,tbMorada,tbCPostal,tbImoveis";
  var _uc = document.getElementById("_uc").value;
  // verifica se o nome da empresa é um campo de preenchimento obrigatório
  if(document.getElementById(_uc+"chkEmpresa").checked) {
    if(trim(document.getElementById(_uc+"tbEmpresa").value).length = 0) {
      _fields += ",tbEmpresa";
	}
  }
  // valida o preenchimento dos campos obrigatórios
  if(!obrigatorios_Validate(_fields)) { 
    alert ("Não é possível enviar o formulário.\nPreencha os campos de preenchimento obrigatório.");
    return false;
  }
  // valida o endereço de e-mail
  if(!validate_Email(document.getElementById(_uc+"tbEmail").value)) {
    alert("Não é possível enviar o formulário.\nIntroduza um endereço de e-mail válido.");
    return false;
  }
  // valida se o utilizador aceitou as condições de utilização
  if(!document.getElementById(_uc+"chkCondicoes").checked) {
	alert("Não é possível enviar o formulário.\nDeve aceitar as condições de utilização.");
    return false;
  }

  return true;
}
/*
  Método que valida o formulário "Publicidade".
*/
function publicidade_Validate() {
  var _fields = "tbNome,tbEmail,tbTelefone,tbMorada,tbCPostal";
  var _uc = document.getElementById("_uc").value;
  // verifica se o nome da empresa é um campo de preenchimento obrigatório
  if(document.getElementById(_uc+"chkEmpresa").checked) {
    if(trim(document.getElementById(_uc+"tbEmpresa").value).length = 0) {
      _fields += ",tbEmpresa";
	}
  }
  // valida o preenchimento dos campos obrigatórios
  if(!obrigatorios_Validate(_fields)) { 
    alert ("Não é possível enviar o formulário.\nPreencha os campos de preenchimento obrigatório.");
    return false;
  }
  // valida o endereço de e-mail
  if(!validate_Email(document.getElementById(_uc+"tbEmail").value)) {
    alert("Não é possível enviar o formulário.\nIntroduza um endereço de e-mail válido.");
    return false;
  }
  
  return true;
}
/*
  Método que valida o formulário "Software".
*/
function software_Validate() {
  var _fields = "tbNome,tbEmail,tbTelefone,tbMorada,tbCPostal";
  var _uc = document.getElementById("_uc").value;
  // verifica se o nome da empresa é um campo de preenchimento obrigatório
  if(document.getElementById(_uc+"chkEmpresa").checked) {
    if(trim(document.getElementById(_uc+"tbEmpresa").value).length = 0) {
      _fields += ",tbEmpresa";
	}
  }
  // valida o preenchimento dos campos obrigatórios
  if(!obrigatorios_Validate(_fields)) { 
    alert ("Não é possível enviar o formulário.\nPreencha os campos de preenchimento obrigatório.");
    return false;
  }
  // valida o endereço de e-mail
  if(!validate_Email(document.getElementById(_uc+"tbEmail").value)) {
    alert("Não é possível enviar o formulário.\nIntroduza um endereço de e-mail válido.");
    return false;
  }
  
  return true;
}
/*
  Método que valida o formulário "Contactos".
*/
function contactos_Validate() {
  var _fields = "tbNome,tbEmail,tbTelefone,tbMorada,tbCPostal";
  var _uc = document.getElementById("_uc").value;
  // verifica se o nome da empresa é um campo de preenchimento obrigatório
  if(document.getElementById(_uc+"chkEmpresa").checked) {
    if(trim(document.getElementById(_uc+"tbEmpresa").value).length = 0) {
      _fields += ",tbEmpresa";
	}
  }
  // valida o preenchimento dos campos obrigatórios
  if(!obrigatorios_Validate(_fields)) { 
    alert ("Não é possível enviar o formulário.\nPreencha os campos de preenchimento obrigatório.");
    return false;
  }
  // valida o endereço de e-mail
  if(!validate_Email(document.getElementById(_uc+"tbEmail").value)) {
    alert("Não é possível enviar o formulário.\nIntroduza um endereço de e-mail válido.");
    return false;
  }
  
  return true;
}
/*
  Método que valida o formulário "Newsletter".
*/
function newsletter_Validate() {
  var _uc = document.getElementById("_master").value;
  if(trim(document.getElementById(_uc+"tbEmail").value).length == 0) {
    alert("Não é possível enviar o pedido.\nIntroduza um endereço de e-mail.");
    return false;
  } else {
    if(!validate_Email(document.getElementById(_uc+"tbEmail").value)) {
      alert("Não é possível enviar o pedido.\nIntroduza um endereço de e-mail válido.");
      return false;
	}
  }
  return true;
}
/*
  Método que valida o formulário "Pedido de Informações".
*/
function info_Validate() {
  var _fields = "tbNome,tbTelefone";
  var _uc = document.getElementById("_uc").value;
  // valida o preenchimento dos campos obrigatórios
  if(!obrigatorios_Validate(_fields)) { 
    alert ("Não é possível enviar o formulário.\nPreencha os campos de preenchimento obrigatório.");
    return false;
  }
  // valida o endereço de e-mail
  if(!validate_Email(document.getElementById(_uc+"tbEmail").value)) {
    alert("Não é possível enviar o formulário.\nIntroduza um endereço de e-mail válido.");
    return false;
  }
  
  return true;
}









/*
  Método que adiciona um valor à QueryString.
*/
function add_value(_uc, _name, _query, _replace) {
  var _value = document.getElementById(_uc+_name).value;
  if(_value.length > 0) {
    return _replace ? "&" + _query + "=" + _value.replace(/\D/, "") : "&" + _query + "=" + _value;
  }
  return "";
}
/*
  Metódo que permite adicionar um valor de uma CheckBox.
*/
function add_flag(_uc, _name, _query, _value) {
  if(document.getElementById(_uc+_name).checked) {
    return "&" + _query + "=" + _value;
  }
  return "";
}

/*
  Método que valida o formulário "Pesquisar Imóveis (Home)".
*/
function pesquisarH_Validate() {
  var _uc = document.getElementById("_master").value;
  // valida o formulário caso seja uma pesquisa por parâmetros
  if(trim(document.getElementById(_uc+"tbReferencia").value).length == 0) {
	// tipo de imóvel
    if(document.getElementById(_uc+"ddlTipo").value.length == 0) {
      alert("Não é possível iniciar a pesquisa.\nSeleccione o tipo de imóvel.");
      return false;
    }
	// distrito
    if(document.getElementById(_uc+"ddlDistrito").selectedIndex == 0) {
      alert("Não é possível iniciar a pesquisa.\nSeleccione o distrito.");
      return false;
    }
	// tipologia
    if(document.getElementById(_uc+"ddlTipologiaL").selectedIndex != 0 && document.getElementById(_uc+"ddlTipologiaH").selectedIndex != 0) {
      if(document.getElementById(_uc+"ddlTipologiaL").selectedIndex > document.getElementById(_uc+"ddlTipologiaH").selectedIndex) {
        alert("Não é possível iniciar a pesquisa.\nIntroduza por favor um intervalo de tipologias válido.");
	    return false;
      }
    }
	// intervalo de preços
    var _pMin, _pMax;
    if(document.getElementById(_uc+"tbPrecoL").value.length > 0) {
      if(isNaN(document.getElementById(_uc+"tbPrecoL").value * 1)) {
        alert("Não é possível iniciar a pesquisa.\nIntroduza por favor um intervalo de preços válido.");
	    return false;
  	  } else { 
	    _pMin = document.getElementById(_uc+"tbPrecoL").value * 1;
   	  }
    } else { 
      _pMin = 0;
    }
    if(document.getElementById(_uc+"tbPrecoH").value.length > 0) {
      if(isNaN(document.getElementById(_uc+"tbPrecoH").value * 1)) {
	    alert("Não é possível iniciar a pesquisa.\nIntroduza por favor um intervalo de preços válido.");
	    return false;
	  } else {
	    _pMax = document.getElementById(_uc+"tbPrecoH").value * 1;
 	  }
    } else {
      _pMax = 0;
    }
    if(_pMax > 0) {
      if(_pMin > _pMax) {
	    alert("Não é possível iniciar a pesquisa.\nIntroduza por favor um intervalo de preços válido.");
	    return false;
      }
    } 
  }

  add_layer();
  setTimeout("document.location = pesquisarH_getURL();", 2000)
  return false;
}
/*
  Método que obtém o endereço da página do resultado da pesquisa.
*/
function pesquisarH_getURL() {
  // obtém o clientID do controlo
  var _uc = document.getElementById("_master").value;
  // cria o endereço da página do Resultado da Pesquisa
  var _param = "";
  // verifica o tipo de pesquisa
  if(trim(document.getElementById(_uc+"tbReferencia").value).length == 0) {
    // Tipo Imóvel
    _param += add_value(_uc, "ddlTipo", "tImo", false);
    // Tipologia
    _param += add_value(_uc, "ddlTipologiaL", "tMin", false);
    _param += add_value(_uc, "ddlTipologiaH", "tMax", false);
    // Distrito
    _param += add_value(_uc, "ddlDistrito", "lDis", false);
    // Concelho
    _param += add_value(_uc, "ddlConcelho", "lCon", false);
    // Freguesia
    _param += add_value(_uc, "ddlFreguesia", "lFre", false);
    // Preço
    _param += add_value(_uc, "tbPrecoL", "pMin", true);
    _param += add_value(_uc, "tbPrecoH", "pMax", true);
  } else {
    _param += add_value(_uc, "tbReferencia", "iRef", false);
  }

  return "Resultado.aspx?"+_param.substring(1);  
}

/*
  Método que valida o formulário "Pesquisar Imóveis (Menu)".
*/
function pesquisarM_Validate(_ferias) {
  var _uc = document.getElementById("_uc").value;

  if(_ferias) {
    // tipo de imóvel
    if(document.getElementById(_uc+"ddlTipo").value.length == 0) {
      alert("Não é possível iniciar a pesquisa.\nSeleccione o tipo de imóvel.");
      return false;
    }
  }
  // distrito
  if(document.getElementById(_uc+"ddlDistrito").selectedIndex == 0) {
    alert("Não é possível iniciar a pesquisa.\nSeleccione o distrito.");
    return false;
  }
  // tipologia
  if(document.getElementById(_uc+"ddlTipologiaL").selectedIndex != 0 && document.getElementById(_uc+"ddlTipologiaH").selectedIndex != 0) {
    if(document.getElementById(_uc+"ddlTipologiaL").selectedIndex > document.getElementById(_uc+"ddlTipologiaH").selectedIndex) {
      alert("Não é possível iniciar a pesquisa.\nIntroduza por favor um intervalo de tipologias válido.");
      return false;
    }
  }

  add_layer();
  setTimeout("document.location = pesquisarM_getURL("+_ferias+");", 2000)
  return false;
}
/*
  Método que obtém o endereço da página do resultado da pesquisa.
*/
function pesquisarM_getURL(_ferias) {
  var _url = "Resultado.aspx?";
  var _uc, _finalidade = "";
  var _param = "";
  // obtém o clientID do controlo e o ID da finalidade
  _uc = document.getElementById("_uc").value;
  if(_ferias) {
	_url += "tNeg=" + document.getElementById(_uc+"_finalidade").value + "&";
    // Tipo Imóvel
    _param += add_value(_uc, "ddlTipo", "tImo", false);
  } else {
	_param += add_value(_uc, "_tipo", "tImo", false);
  }
  // Distrito
  _param += add_value(_uc, "ddlDistrito", "lDis", false);
  // Concelho
  _param += add_value(_uc, "ddlConcelho", "lCon", false);
  // Tipologia
  _param += add_value(_uc, "ddlTipologiaL", "tMin", false);
  _param += add_value(_uc, "ddlTipologiaH", "tMax", false);
  // Preço
  _param += add_value(_uc, "tbRenda", "pMax", true);
  // Fotos
  _param += add_flag(_uc, "chkImagens", "bImg", "1")
  // Mobilado
  _param += add_flag(_uc, "chkMobilado", "cImo", "512")

  return _url+_param.substring(1);
}



/*
  Método que configura o texto a apresentar no filtro 'Renda até'.
*/
function tbRenda_Focus(_textbox, _event) {
  var _label = "Renda até";
  var _value, _text;
	
  switch(_event) {
    case "onFocus":
      _value = "";
      _text = _label;
      break;
    case "onBlur":
      _value = _label;
      _text = "";
      break;
  }
  // actualiza o valor da textbox
  _textbox.value = trim(_textbox.value) == _text ? _textbox.value = _value : _textbox.value = numeric_Format(_textbox.value);
}


/*
  Método que redirecciona o utilizador para a página de detalhe de um imóvel.
*/
function transfer_URL(_id) {
  document.location = "Imovel.aspx?id=" + _id;
}





/*
  Layer Functions
*/
function add_layer() {
  div_bgcolor();
  div_image();
}

function div_bgcolor() {
  // cria o objecto DIV que permite escurecer o website
  var div = document.createElement('div');
  var _width = document.body.scrollWidth;
  var _height = window_height();
  if(document.body.scrollHeight > _height) _height = document.body.scrollHeight;
  // define as propriedades do objecto
  with(div) {
    id = "divBottom";
    className = "layer-bottom";
	style.width = _width+"px";
	style.height = _height+"px";
  }

  // adiciona o objecto à página
  document.body.appendChild(div);
}

function div_image() {
  // cria o objecto DIV que permite apresentar a imagem "O seu pedido está a ser processado"
  var div = document.createElement('div');
  div.id = "divTop";
  div.className = "layer-top";
  
  // cria a estrutura HTML
  var _html = new Array();
  with(_html) {
    push("<table width='100%' height='93%' border='0' cellpadding='0' cellspacing='0' >");
	push("<tr>");
	push("<td width='100%' height='93%' align='center'>");
	push("<img src='App_Imagens/wait.png' width='288' height='156'>");
	push("</td>");
	push("</tr>");
	push("</table>");
  }
  div.innerHTML = _html.join('');

  // aodiciona o objecto à página
  document.body.appendChild(div);
}

function window_height() {
  var _height=0;
  if(typeof(window.innerWidth) == 'number') {
    _height = window.innerHeight;
  } else if(document.documentElement && (document.documentElement.clientWidth || document.documentElement.clientHeight)) {
    _height = document.documentElement.clientHeight;
  } else if(document.body && (document.body.clientWidth || document.body.clientHeight)) {
    _height = document.body.clientHeight;
  }
  return _height;
}
