﻿//_spBodyOnLoadFunctionNames.push("CustomCEWP");
$(document).ready(function() { CustomCEWP() });

function CustomCEWP(){  
    $('.customCEWP').parent().addClass('CEWPcustomStyle');
}

function expandeLinha(linha, botao, linhas, botoes, conteudo) { //expande items na area central
    var is_ativo = ($(botao)).hasClass('activo');
    $(linhas).addClass('hide');
    $(botoes).removeClass('activo');
    
    if (!is_ativo) {
        $(conteudo).removeClass('hide');
        $(linha).removeClass('hide');
        $(botao).addClass('activo');
    }
    else {
        $(conteudo).addClass('hide');
        $(linha).addClass('hide');
        $(botao).removeClass('activo');
    }
}

function expandeCollapse(area,botao,irmaos) { //expande items na area central
    $(irmaos).css({'display':'none'});
    var is_ativo = ($(botao)).hasClass('item-activo');
    $('.harmonio-definir').removeClass('item-activo');
    if (!is_ativo) {
        $(area).slideToggle(500);
        $(botao).addClass('item-activo');
    }
    else {
        $(area).slideUp(500);
        $(botao).removeClass('item-activo');
    }
}

function validateDate(errorSpanId, dateTextboxId, errorMessage) {
    var errorSpan = document.getElementById(errorSpanId);
    var dateBox = document.getElementById(dateTextboxId);

    try {
        if (dateBox.value != '') {
            var date = getDateFromString(dateBox.value);
            if (isNaN(date.getDate()))
                errorSpan.innerHTML = errorMessage;
            else
                errorSpan.innerHTML = '';
            return;
        }
    }
    catch (err) {
        errorSpan.innerHTML = errorMessage;
        return;
    }
}

function getDateFromString(str) {
    var date = new Date(reverseDate(str));
    return date;
}

function reverseDate(dateStr) {
    var first = dateStr.indexOf("-");
    var last = dateStr.indexOf("-", first + 1);
    var year = dateStr.substring(last + 1);
    var month = dateStr.substring(first + 1, last);
    var day = dateStr.substring(0, first);
    return year + "/" + month + "/" + day;
}

function setFieldEnable(fieldId, state) {
    var field = document.getElementById(fieldId);
    field.disabled = state;
}

function showHideItems(area,botao) { //expande items na area central
    var is_ativo = ($(botao)).hasClass('item-activo');
    if (!is_ativo) {
        $(area).css({'display':'block'});
        $(botao).addClass('item-activo');
    }
    else {
        $(area).css({'display':'none'});
        $(botao).removeClass('item-activo');
    }
}

/* 
functions to load the calendar by AJAX
*/
function addMonth(calendarDate)
{
    var nextMonth = calendarDate.getUTCMonth() + 1;
    if(nextMonth <= 11)
        calendarDate.setMonth(nextMonth);
    else
    {
        var nextYear = calendarDate.getUTCFullYear() + 1;
        calendarDate.setFullYear(nextYear);
        calendarDate.setMonth(0);
    }
    return calendarDate;
}   

function addThreeMonths(calendarDate)
{
	return addMonth(addMonth(addMonth(calendarDate)));
}

function subractMonth(calendarDate)
{
    var nextMonth = calendarDate.getUTCMonth() - 1;
    if(nextMonth >= 0)
        calendarDate.setMonth(nextMonth);
    else
    {
        var nextYear = calendarDate.getUTCFullYear() - 1;
        calendarDate.setFullYear(nextYear);
        calendarDate.setMonth(11);
    }
    return calendarDate;
}

function subractThreeMonths(calendarDate)
{
    return subractMonth(subractMonth(subractMonth(calendarDate)));
}

function getCalendarQueryStringParameters(calendarDate, investor)
{
    var query = "?";
    query += "year=" + calendarDate.getUTCFullYear();
    query += "&month=" + (calendarDate.getUTCMonth() + 1);
    query += "&investor=" + investor;
    query += "&calendarUrl=" + parseCalendarUrl(window.location.href);    
    return query;
}

function parseCalendarUrl(url)
{
    var parsedUrl = url.replace("http://", "");
    var start = parsedUrl.indexOf("/");
    var end = parsedUrl.indexOf("?");
    if(end < 0)
		return parsedUrl.substring(start);
	else
		return parsedUrl.substring(start, end);
}

function GetXmlHttpObject()
{
    if (window.XMLHttpRequest)
    {
      // code for IE7+, Firefox, Chrome, Opera, Safari
      return new XMLHttpRequest();
    }
    if (window.ActiveXObject)
    {
      // code for IE6, IE5
      return new ActiveXObject("Microsoft.XMLHTTP");
    }
    return null;
}

function loadCalendarAjax(slideMonth, url)
{
	calendarFade("out");
    
    var xmlhttp=GetXmlHttpObject();
    if (xmlhttp==null)
    {
        alert("O seu browser não suporta esta funcionalidade!");
        return;
    }
    xmlhttp.onreadystatechange=function()
    {
        if (xmlhttp.readyState==4)
          {
              if (xmlhttp.status==200)
              {
                var xml = xmlhttp.responseText;

                //does not work in IE
                //var xmlobject = loadXMLFromString(xml);					
                //var readMonths = xmlobject.getElementsByTagName("months")[0];
                //var readEvents = xmlobject.getElementsByTagName("events")[0];
                
                //works in IE + FF
				var readMonths = loadXMLTagFromString(xml, "months");
				var readEvents = loadXMLTagFromString(xml, "events");				
                var divMonths = document.getElementById("calendario");
                var divEvents = document.getElementById("eventos");
                divMonths.innerHTML = readMonths;
                divEvents.innerHTML = readEvents;

				calendarFade("in");
				slideMonths(slideMonth);
              }
              else
              {
                alert("Ocorreu um problema ao obter os dados do calendário.");
				calendarFade("in");
              }
          }
    }
    xmlhttp.open("GET", url,true);
    xmlhttp.send(null);
}
	
function loadXMLTagFromString(xml, tagName)
{
	var startTag = "<" + tagName + ">";
	var endTag = "</" + tagName + ">";		
    var start = xml.indexOf(startTag) + startTag.length;
	var end = xml.indexOf(endTag);
	var result = xml.substring(start, end);
    return result;
}

function fechaDetalhesEventos()
{
	$(".calinfo").slideUp();
}

function slideCalendario(slideMonth, url)
{
	fechaDetalhesEventos();
	loadCalendarAjax(slideMonth, url);
}

function slideMonths(slide)
{
	if(slide == 1)
		$(".calendarSlider").animate({"left": "-=182px"}, 1500);
	else if(slide == 3)
		$(".calendarSlider").animate({"left": "-=546px"}, 1500);
	else if(slide == -1)
		$(".calendarSlider").animate({"left": "+=182px"}, 1500);
	else if(slide == -3)
		$(".calendarSlider").animate({"left": "+=546px"}, 1500);
}

function calendarFade(param)
{
	var overlay = document.getElementById("divoverlay");
	if(param == "out")
	{
		overlay.setAttribute("class", "divoverlayShow");
		overlay.setAttribute("className", "divoverlayShow"); 
	}
	else if(param == "in")
	{
		overlay.setAttribute("class", "divoverlayHide");
		overlay.setAttribute("className", "divoverlayHide"); 
	}
}

function carregarOrdemTabs()
{
    //////////////////////////////////////////////////////////////////////////////////////////////////
    // Verifica se a ordem associada a cada tab está correta. Corrige automaticamente caso não esteja.
    var check = new Array();
    var aux = new Array();
    
    var ordemTab = $('.OrdemTab');
    var qtd = ((null != ordemTab) ? parseInt(ordemTab.length) : 0);
    
    for (var i = 1; i <= qtd; i++)
    {
        check[i] = false;
        aux[i] = false;
    }
    
    for (var i = 1; i <= qtd; i++)
    {
        var e_found = $('.OrdemTab' + i); 
        
        if (null == e_found || e_found.length == 0) 
        {
            continue; 
        }
        
        if (null == e_found.val() // ordem não encontrada
            || '' == e_found.val() // ordem não encontrada
            || check[parseInt(e_found.val())] == true  // ordem duplicada
            || parseInt(e_found.val()) < 1 // ordem abaixo do minimo
            || parseInt(e_found.val()) > qtd) // ordem acima do maximo
        {
            aux[i] = true;
            continue;
        } 
        
        check[parseInt(e_found.val())] = true;
    }
    
    for (var i = 1; i <= qtd; i++)
    {
        if (aux[i]) // tab com ordem incorreta
        {
            for (var j = 1; j <= qtd; j++)
            {
                if (!check[j]) // posição não alocada
                {
                    var e_found = $('.OrdemTab' + i);
                    e_found.val(j); 
                    check[j] = true;
                    aux[i] = false;
                    break;
                }
            }
        }
    }
    
    //////////////////////////////////////////////////////////////////////////////////////////////////
    // Carrega combos com a ordem das tabs. 
    // Cria vinculo entre a mudança nas combos com a atualização das tabs.
    for (var i = 1; i <= qtd; i++)
    {
        var e_found = $('.OrdemTab' + i); 
        
        if (null == e_found || e_found.length == 0) { continue; }
        
        var combo = $('.comboOrdemTab' + i);
        combo.val(e_found.val());
        associaMudanca(e_found, combo);
    }
}

function associaMudanca(campoOrdem, combo)
{
    combo.change(function ()
    {
        var antes = parseInt(campoOrdem.val());
        var depois = parseInt(combo.val());
        atualizaTodasTabs(campoOrdem, combo, antes, depois);
        atualizaTab(campoOrdem, combo, depois);
    });
}

function atualizaTodasTabs(campoAlterado, comboAlterado, antes, depois)
{
    var campos = $('.OrdemTab');
    var combox = $('.comboOrdemTab');

    var min = parseInt(parseInt(antes) < parseInt(depois) ? antes : depois);
    var max = parseInt(parseInt(antes) < parseInt(depois) ? depois : antes);

    combox.each(function(i,o)
    {        
        if (parseInt(o.value) >= min && parseInt(o.value) <= max)
        {
            var campo = $('.OrdemTab:eq(' + i + ')');
            var combo = $('.comboOrdemTab:eq(' + i + ')');
            
            if (parseInt(antes) > parseInt(depois))
            {
                var incr = parseInt(combo.val()) + 1;
                atualizaTab(campo, combo, incr);
            }
            else
            {
                var dec = parseInt(combo.val()) - 1;
                atualizaTab(campo, combo, dec);
            }
        }
    });
}

function atualizaTab(campoOrdem, combo, novo)
{
    campoOrdem.val(parseInt(novo));
    combo.val(parseInt(novo));
}

function LoadFiles()
{
    strDocuments = "";
    var elems = $(".FileDownload");
    if(elems!=null)
    {
        if(elems.length>0)
        {
            $("#areaDownloadBtn").css("display", "block");
            for(i=0;i<elems.length;i++)
            {
                if(elems[i].checked)
                {
                    strDocuments+=elems[i].value +  ";";
                }
            }
        }
        else
        {
            var item = document.getElementById('File');
            if(item!=null)
            {
                $("#areaDownloadBtn").css("display", "block");
                if(item.checked)
                {
                    strDocuments=item.value +  ";";
                }
            }
            else
            {
            }
        }
    }
    document.getElementById('documentsToDownload').value = strDocuments;
}

function ConvertStr2Array(strRet)
{
    var arrayRet = new Array();
    if(strRet!='')
    {
        var elems = strRet.split(';');
        if(elems!='')
        {
            for(i=0;i<elems.length;i++)
            {
                var elemParam = elems[i].split('|');
                if(elemParam!='')
                {
                    arrayRet[i] = new Array();
                    arrayRet[i][0] = elemParam[0];
                    arrayRet[i][1] = elemParam[1];
                }
            }
        }
    }
    return arrayRet;
}

/*
$(document).ready(function() { 
	$("#analistasTable").tablesorter();
	$("#analistasTable").bind("sortEnd",function() { 
		correctSortHiddenRows();
	}); 								
});

function correctSortHiddenRows()
{
	var table = document.getElementById("analistasTable");
	//iterate through the rows and get the one that is correct
	//var TBODY = table.getElementsByTagName("tbody");
    //var Tr = TBODY[0].getElementsByTagName("tr");
	var sorted = getSortedRows(table);
	var hidden = getHiddenRows(table);
}

function getSortedRows(table) {
	var sortedRows = new Array();
	var j=0;
	for(var i=0; i<table.rows.length-1; i++)
	{
		var className = getTrClass(table.rows[i], " botoes");
		if(className != null)
			sortedRows[j++] = className;
	}
	return sortedRows;
}

function getTrClass(tr, teste)
{
	if(tr.className != "" && tr.className.indexOf(test) >= 0)
		return tr.className.replace(test, "");
	return null;
}

function getHiddenRows(table) {
	var hiddenRows = new Array();
	var j=0;
	for(var i=0; i<table.rows.length-1; i++)
	{
		var className = getTrClass(table.rows[i]);
		if(className != null)
			hiddenRows[j++] = className;
	}
	return hiddenRows;
}

function getTr(tr, test, sortedRows)
{
	if(tr.className != "" && tr.className.indexOf(test) >= 0)
		return tr.className.replace(test, "");
	return null;
}
*/

/*
functions to load the Analists table by AJAX
*/
function loadAnalistsTableAjax(url)
{
	analistsFade("out");

    var xmlhttp=GetXmlHttpObject();
    if (xmlhttp==null)
    {
        alert ("O seu browser não suporta esta funcionalidade!");
        return;
    }
    xmlhttp.onreadystatechange=function()
    {
        if (xmlhttp.readyState==4)
          {
              if (xmlhttp.status==200)
              {
                var xml = xmlhttp.responseText;

                //works in IE + FF
				var readTabela = loadXMLTagFromString(xml, "tabela");
                var divTabela = document.getElementById("analistasTable");
				divTabela.innerHTML = readTabela;
				analistsFade("in");
              }
              else
              {
                alert("Ocorreu um problema ao obter a tabela.");
                analistsFade("in");
              }
          }
    }
    xmlhttp.open("GET", url,true);
    xmlhttp.send(null);
}

function getAnalistsQueryStringParameters(column, sortAscending)
{
    var query = "?";
    query += "column=" + column;
    query += "&sortAscending=" + sortAscending;
    return query;
}

function analistsFade(param)
{
	var tableHeight = document.getElementById("analistasTable").offsetHeight;
	var overlay = document.getElementById("divoverlay");
	overlay.style.height = tableHeight + "px";
	if(param == "out")
	{
		overlay.setAttribute("class", "divoverlayShow");
		overlay.setAttribute("className", "divoverlayShow"); 
	}
	else if(param == "in")
	{
		overlay.setAttribute("class", "divoverlayHide");
		overlay.setAttribute("className", "divoverlayHide"); 
	}
}

/*
functions to load the Cotacao webpart data by AJAX
*/
function loadCotacaoData(dataUrl)
{
	cotacaoFade("out");
    $.ajax({    
        url: dataUrl,
        success: writeCotacaoSucess,
        error: writeCotacaoError
    });
}

function writeCotacaoSucess(data, textStatus) {
    $('data', data).each(function(i) {
        //studentName = $(this).find("name").text();
        $('#cotacaoValor').html('€ ' + $(this).find("Quote").text().replace('.',','));
        var dateStr = $(this).find("TradeTimeExt").text();        
        
        //convert this string to a number (to use in the array)
		var monthNumber = (dateStr.substring(5,7) * 1) - 1;
        $('#cotacaoData').html(dateStr.substring(8,10) + ' ' + months[monthNumber] + ' ' + dateStr.substring(0,4) + ', ' + dateStr.substring(11,16) + ' GMT');

        //Euroinvestor: 2.220
        //pretendido: (2,20%)
        var percentagem = $(this).find("PctChange").text().replace('.',',');
        var percentagemNumber = ($(this).find("PctChange").text()) * 1;
        $('#cotacaoPercentagem').html('(' + percentagem.substring(0, percentagem.indexOf(',')+3) + '%)');
        if(percentagemNumber >= 0) {
            $('#cotacaoImg').attr("src", "/resources/img/icon-subiu.gif");
            $('#cotacaoImg').attr("alt", accaoSubiu);
        }
        else {
            $('#cotacaoImg').attr("src", "/resources/img/icon-desceu.gif");
            $('#cotacaoImg').attr("alt", accaoDesceu);
        }
    });
	cotacaoFade("in");
}

function writeCotacaoError(XMLHttpRequest, textStatus, errorThrown)
{
	$('#lblDadosAcao').attr("class", "hide");
    $('#lblErroAcessoDadosXML').html(errorCotacao);
	$('#lblErroAcessoDadosXML').attr("class", "");
	cotacaoFade("in");
}

function cotacaoFade(param)
{
	var overlay = document.getElementById("divoverlay");
	if(param == "out")
	{
		overlay.setAttribute("class", "divoverlayShow");
		overlay.setAttribute("className", "divoverlayShow"); 
	}
	else if(param == "in")
	{
		overlay.setAttribute("class", "divoverlayHide");
		overlay.setAttribute("className", "divoverlayHide"); 
	}
}

function clearErrorFields(fields)
{
	for(i=0; i<fields.length; i++)
	{
		var div = document.getElementById(fields[i]);		
		removeCssClass(div, "withError");
	}
}

function validateFormRequiredArrayInput(fieldIds, container, withError, error)
{
	var field = false;
	
	for(i=0; i<fieldIds.length; i++)
		field = field || document.getElementById(fieldIds[i]).checked;

	if(field)
		return true;
	else
	{
		if(withError)
		{
			var div = document.getElementById(container);
			addCssClass(div, "withError");
		}
		alert(error)
		return false;
	}
}

function validateFormRequiredTextInput(fieldId, container, withError, error)
{
	var field = document.getElementById(fieldId);
	if(field.value != '')
		return true;
	else
	{
		if(withError)
		{
			var div = document.getElementById(container);
			addCssClass(div, "withError");
			field.focus();
		}
		alert(error);
		return false;
	}
}

function validateFormRequiredBoolInput(fieldId, container, withError, error)
{
	var field = document.getElementById(fieldId);
	if(field.checked)
		return true;
	else
	{
		if(withError)
		{
			var div = document.getElementById(container);
			addCssClass(div, "withError");
			field.focus();
		}
		alert(error);
		return false;
	}
}


function validateFormEmailInput(fieldId, container, withError, error)
{
	var field = document.getElementById(fieldId);
	if(isValidEmail(field.value))
		return true;
	else
	{
		if(withError)
		{
			var div = document.getElementById(container);
			addCssClass(div, "withError");
			field.focus();
		}
		alert(error);
		return false;
	}		
}

function isValidEmail(email)
{
	if (email.length == 0)
		return true;

	var oRe = new RegExp( /^(([^<>;()[\]\\.,;:@"]+(\.[^<>()[\]\\.,;:@"]+)*)|(".+"))@((([a-z]([-a-z0-9]*[a-z0-9])?)|(#[0-9]+)|(\[((([01]?[0-9]{0,2})|(2(([0-4][0-9])|(5[0-5]))))\.){3}(([01]?[0-9]{0,2})|(2(([0-4][0-9])|(5[0-5]))))\]))\.)*(([a-z]([-a-z0-9]*[a-z0-9])?)|(#[0-9]+)|(\[((([01]?[0-9]{0,2})|(2(([0-4][0-9])|(5[0-5]))))\.){3}(([01]?[0-9]{0,2})|(2(([0-4][0-9])|(5[0-5]))))\]))$/ );
	return oRe.test(email);
}

function addCssClass(element, newCss)
{
	var css = element.className + " " + newCss;
	element.className = css;
}

function removeCssClass(element, oldCss)
{
	var css = element.className;
	if( css!=null && css.indexOf(oldCss) >= 0 )
	{
		css = css.replace(oldCss, "");
		element.className = css; 
	}
}

function hideGasBottleSellerDescription()
{
    var tabs = document.getElementsByTagName("div");
    for(i=0; i<tabs.length; i++)
	{
		if(tabs[i].className.indexOf("-content tab-content") >= 0 && tabs[i].className.indexOf("hide") < 0)
		{
			var content = tabs[i].getElementsByTagName("div");
			for(j=0; j<content.length; j++)
			{
				if(content[j].className.indexOf("conteudo-tab") >= 0)
					content[j].className = "conteudo-tab hide";
			}
		}	
	}
}

function hideTabContentOnPostback(tabId)
{
    var tabs = document.getElementsByTagName("div");
    for(i=0; i<tabs.length; i++)
	{
		if(tabs[i].className.indexOf(tabId + "-content tab-content") >= 0)
		{
			var content = tabs[i].getElementsByTagName("div");
			for(j=0; j<content.length; j++)
			{
				if(content[j].className.indexOf("conteudo-tab") >= 0) {
					content[j].className = "conteudo-tab hide";
				}
			}
		}	
	}
}

//correct error: 'WPSC is undefined'
if(typeof(WPSC) == "undefined"){
    WPSC = new Object(); 
    WPSC.Init = function(){
        //do nothing
    }
    WPSC.WebPartPage = new Object();
    WPSC.WebPartPage.Parts = new Object();
    WPSC.WebPartPage.Parts.Register = function()
    {
        //do nothing
    }
} 

function checkEnter(e, btnId) 
{  
	var characterCode;  
	if (e && e.which) { // NN4 specific code  
		characterCode = e.which;  
	}  
	else {  
		e = event;  
		characterCode = e.keyCode;  // IE specific code  
	}  
	if (characterCode == 13) { // Enter key is 13  
		var btn = document.getElementById(btnId);
		e.cancelBubble = true;  
		e.returnValue = false;  
		btn.click();  
	}  
}