﻿// optionDiv - div onde foi feito o click.
// optionId - ID (da BD) da opção clicada.
// optionTypeId - ID (da BD) da opção seleccionada.
function selectOption(optionDivId, optionId, optionTypeId, optionName, optionPrice)
{


    var optionDiv = document.getElementById(optionDivId);
    
    
    
    //CJD 2008_11_05: Se não encontrámos a optionDiv na página, é porque o objecto não foi carregado.
    //Trata-se de um canal Premium que faz parte do Pack mas não é carregado na página.
    //No entanto, vamos querer colocá-lo no carrinho e numa Variável - ADITIONAL_PRODUCT_ID -
    //para ser contemplado na selecção do Pack
    if (optionDiv == null)
    {
        ADITIONAL_PRODUCT_ID = optionId;
        ADITIONAL_PRODUCT_NAME = optionName;
        ADITIONAL_PRODUCT_PRICE = optionPrice;
        
//testes abrir ligtbox no simulador nos packs widband       
//        if (optionName=="100Mb" ||optionName=="200Mb" ||optionName=="50Mb")
//        { 
//        lb = new lightbox(optionDiv);
//        optionDiv.href="../Services/Form.aspx?packID=22&type=Simulator"
//     
//       
//       }
        
        var continueParams = [null, optionId, optionTypeId, optionName, optionPrice];
        continueSelectOption(continueParams);
    
        return;
    }
    //CJD 2008_11_05
    
    // verificar se era um producto seleccionável!
    if (!verifySelectionStatus(optionDiv)) return;

    // verificar se opção já estava seleccionada...
    for (var i = 0; i < selectedOptions.length; ++i)
    {
        // Se sim, é porque é para tirar o select ... ou pelo menos tentar...
        if (selectedOptions[i].prodId == optionId) 
        {
            DeleteOption(optionDiv, optionId, optionTypeId, optionPrice);
            
            {
////testes abrir ligtbox no simulador nos packs widband -    
//            if (optionName=="100Mb")
//            {
//            
//            //des-selecciona e 
//            // volta a colocar classe=lb1n  
//            optionDiv.className=(optionDiv.className=='lb0n')?'lb1n':'lb0n';
//            }
            }
            return;
            
        }
    }

    var continueParams = [optionDiv, optionId, optionTypeId, optionName, optionPrice];

    // Renincia o estado do carrinho.
    // Colocado a true em server-side (quando é gerado o JS) e é true quando o utilizador chega
    // à pagina de packs um pack escolhido (voltou à página).
    if (needsRestart) 
    {
        showAlert("Ao escolher um item vai reninciar todo o processo de compra. Deseja continuar?", restartCallback, null, continueParams, null);
        return;
    }
    
    continueSelectOption(continueParams);
}

function restartCallback(param)
{
    restartShopCart();
    needsRestart = false;
    continueSelectOption(param);
}

function continueSelectOption(param)
{
    needsRestart = false;
    var optionDiv = param[0];
    var optionId = param[1];
    var optionTypeId = param[2];
    var optionName = param[3];
    var optionPrice = param[4];

    // Verificar se produtos escolhidos anteriormente em conjunto com
    // o actual fazem parte de um pack.
    // Para cada pack que contém TODOS os produtos seleccionados, coloca-se
    // os restantes produtos (de tipos que ainda não têm nenhum producto seleccionado)
    // como seleccionavel.
    // ---------------------------------------------------------------
    
    // Lista de produtos que vão ser pesquisados.
    //CJD 2008_11_05: Aqui devem ser adicionados todos os produtos do pacote, para que este seja seleccionado nos Radio Buttons.
    var newProds = new Array();
    var newProdsCount = 0;
    //CJD 2008_11_05: Se existirem Produtos na variável de produtos adicionais, adicionar ao Array newProds
    //(Produtos que fazem parte do pacote, mas não estão visíveis e disponíveis na página)
    if (ADITIONAL_PRODUCT_ID != '')
        newProds[newProdsCount++] = ADITIONAL_PRODUCT_ID;
    for (var i = 0; i < selectedOptions.length; ++i)
    {
        
        // Se o tipo do produto for igual ao currente, queremos usar o currente.
        if (selectedOptions[i].typeId == optionTypeId)
        {
            newProds[newProdsCount++] = optionId;
        }
        else 
        {
            if (selectedOptions[i].prodId != null)
            {
                newProds[newProdsCount++] = selectedOptions[i].prodId;
            }
        }
    }
    
    // Para os tipos que ainda não têm nenhum produto escolhido
    // vamos colocar todos os produtos como não seleccionáveis,
    // porque no for seguinte vamos colocar como seleccionáveis os possíveis.
    for (var i = 0; i < selectedOptions.length; ++i)
    {
        if (selectedOptions[i].prodId == null) 
            setAllTypeProductsToNoClickProduct(selectedOptions[i].typeId);
    }

    // verificar se existe pack com os produtos anteriores.
    //var existsAtLeastOnePack = false;
    var packContainsAllProds;
    var completeCachePackId = null;
    var notContainsOne = false;
    for (var i = 0; i < packsCache.length; ++i)
    {
        // Para o caso de existir um pack sem produtos na BD...
        if (packsCache[i].products.length == 0) continue;
        
        packContainsAllProds = true;
        for (var j = 0; j < newProds.length; ++j)
        {
            // Verifica se o array de produtos "packsCache[i].products" contém um produto com o id "newProds[j]".
            if (!productsContainsId(packsCache[i].products, newProds[j]))
            {
                packContainsAllProds = false;
                break;
            }
        }

        if (!packContainsAllProds) continue;
        
        // Ok, neste ponto sabemos que o pack currente contém todos os produtos seleccionados.
        //existsAtLeastOnePack = true;
        
        // Para cada produto no pack...
        notContainsOne = false;
        for (var j = 0; j < packsCache[i].products.length; ++j)
        {
            // Se o produto não fizer parte dos seleccionados...
            if (!contains(newProds, packsCache[i].products[j].id))
            {
                try
                {
                    // Colocar o produto como seleccionável!
                    //CJD 2008_11_05: Vamos tentar colocar o produto seleccionável, mas o produto pode nem estar nesta página da loja.
                    if (document.getElementById(PRODUCT_PREFIX + packsCache[i].products[j].id) != null)
                    {
                        productToSelect(document.getElementById(PRODUCT_PREFIX + packsCache[i].products[j].id));
                    }
                }
                catch(err)
                {
                    //alert(err.description);
                }
                
                // Ainda não temos todos os produtos deste pack.
                notContainsOne = true;
            }
        }
        if (!notContainsOne)
            completeCachePackId = i;
    }
    // ---------------------------------------------------------------
    
    // Se não encontrou pelo - um pack ... possivelmente este produto não era clicável...
    // retorna-se.
    //if (!existsAtLeastOnePack) return;
    
    // se sim, deixar apenas o produto actual como seleccionável para o seu tipo e actualizar caches.
    // ---------------------------------------------------------------
    setAllTypeProductsToNoClickProduct(optionTypeId);
    
    if (optionDiv != null)
    {
        // Para marcar um produto como seleccionado temos que saber a linha em que se encontra (por causa do degrade).
        // Uma vez que os produtos encontram-se ordenados por type e do type menor para o maior, a linha do
        // produto corresponde ao indice do seu type no array.
        selectProduct(optionDiv, getTypeLine(optionTypeId));
        for (var i = 0; i < selectedOptions.length; ++i)
        {
            if (selectedOptions[i].typeId == optionTypeId)
            {
                selectedOptions[i].prodId = optionId;
                break;
            }
        }
    }
    // ---------------------------------------------------------------
    // Por fim ... actualizar carrinho.
    // ---------------------------------------------------------------
    // Adicionar produto ao carrinho.
    addProduct(optionId, optionTypeId, optionName, optionPrice);
    
////testes abrir ligtbox no simulador nos packs widband -      
//            if (optionName=="100Mb")
//            {
//           

//          
//            //optionDiv.setAttribute("class", "lb0n");

//            // já seleccionou/adicionou ao carrinho... 
//            // coloca classe=lb0n 
//            optionDiv.className='lb0n';  
//            
//            // Botao continuar saltar para a página packs
//            var botao = document.getElementById('btnNext');
//            botao.className=("lbAction");
//            botao.setAttribute("rel", "deactivate");
//            botao.setAttribute("href", "#");
//            botao.onclick = function(){return false;};
////              document.getElementById("bbb").style.cssText = "visibility: none";
////    

//            }
//    
    // É necessário verificar se ficou escolhido um pack "por inteiro", 
    // para em caso afirmativo actualizar desconto e preço final.
    cleanDiscount();
    if (completeCachePackId != null)
    {
        setFirstMonthDiscount(packsCache[completeCachePackId].firstMonthDiscount, packsCache[completeCachePackId].firstDiscountEnds);
        setPackMonthlyForFirstYear(packsCache[completeCachePackId].priceFirstYear);
        setPackMonthlyForNextYears(packsCache[completeCachePackId].priceNextYears);
        setSelectedPack(completeCachePackId);
        
        // Vamos la ver se é predefined...
        if(packsCache[completeCachePackId].isPredefined)
        {
            resetPredefinedPacks();
            setPredefinedPackState(packsCache[completeCachePackId].id, true);
        }
    }
    else
    {
        clearSelectedPack();
    }
    
    // ---------------------------------------------------------------
}


// Invocada quando se clica num produto que já se encontrava escolhido.
function DeleteOption(optionDiv, optionId, optionTypeId, optionPrice)
{    
    clearSelectedPack();
    removeProduct(optionId, optionPrice);
    if (ADITIONAL_PRODUCT_ID != '')
    {
        removeHIDDENProduct(ADITIONAL_PRODUCT_ID, ADITIONAL_PRODUCT_NAME, ADITIONAL_PRODUCT_PRICE);
        ADITIONAL_PRODUCT_ID = '';
        ADITIONAL_PRODUCT_NAME = '';
        ADITIONAL_PRODUCT_PRICE = '';
    }
    cleanDiscount();
    resetPredefinedPacks();

    // Se só estiver uma opção seleccionada, ficam todos como seleccionáveis.
    var count = 0;
    for (var i = 0; i < selectedOptions.length; ++i)
    {
        if (selectedOptions[i].prodId != null) ++count;
    }
    
    if (count == 1)
    {
        // Ok só exista uma opção... fica tudo seleccionável.
        for (var i = 0; i < selectedOptions.length; ++i)
        {
            setAllTypeProductsToProductToSelect(selectedOptions[i].typeId);
            
            if (selectedOptions[i].prodId == optionId)
            {
                // Actualizar cache do produto actual...
                selectedOptions[i].prodId = null;
            }
        }
        
        return;
    }
    
    // Lista de produtos que vão ser pesquisados.
    // Neste caso como é para tentar remover, não é adicionado à lista o produto actual.
    var newProds = new Array();
    var newProdsCount = 0;
    for (var i = 0; i < selectedOptions.length; ++i)
    {
        if (selectedOptions[i].prodId != null && selectedOptions[i].prodId != optionId)
        {
            newProds[newProdsCount++] = selectedOptions[i].prodId;
        }
    }

    // Procurar por packs que contenham todos os produtos de newProds.
    var packContainsAllProds;
    var completeCachePackId = -1;
    for (var i = 0; i < packsCache.length; ++i)
    {
        // Para o caso de existir um pack sem produtos na BD...
        if (packsCache[i].products.length == 0) continue;
        
        packContainsAllProds = true;
        for (var j = 0; j < newProds.length; ++j)
        {
            if (!productsContainsId(packsCache[i].products, newProds[j]))
            {
                packContainsAllProds = false;
                break;
            }
        }
        
        if (!packContainsAllProds) continue;
        
        // Ok, neste ponto sabemos que o pack currente contém todos os produtos seleccionados (- o corrente).
        //completeCachePackId = i;
        // Para cada produto no pack...
        for (var j = 0; j < packsCache[i].products.length; ++j)
        {
            // Se o produto não fizer parte dos seleccionados...
            if (!contains(newProds, packsCache[i].products[j].id))
            {
                // Colocar o produto como seleccionável!
                //CJD 2008_11_05: Vamos tentar colocar o produto seleccionável, mas o produto pode nem estar nesta página da loja.
                if (document.getElementById(PRODUCT_PREFIX + packsCache[i].products[j].id) != null)
                {
                    productToSelect(document.getElementById(PRODUCT_PREFIX + packsCache[i].products[j].id));
                    packContainsAllProds = false;
                }
            }
        }
        
        // Se ele já encontrou 1 pack completo, não vale a pena procurar por mais...
        if (packContainsAllProds) completeCachePackId = i;
    }

    // Actualizar cache, para guardar produto como não seleccionado.
    for (var i = 0; i < selectedOptions.length; ++i)
    {   
        if (selectedOptions[i].prodId == optionId)
        {
            selectedOptions[i].prodId = null;
        }
    }
    
    if (completeCachePackId != -1)
    {
        // Se foi encontrado um pack... actualizar desconto.
        setFirstMonthDiscount(packsCache[completeCachePackId].firstMonthDiscount, packsCache[completeCachePackId].firstDiscountEnds);
        setPackMonthlyForFirstYear(packsCache[completeCachePackId].priceFirstYear);
        setPackMonthlyForNextYears(packsCache[completeCachePackId].priceNextYears);
        setSelectedPack(completeCachePackId);
        
        // Vamos la ver se é predefined...
        if(packsCache[completeCachePackId].isPredefined)
        {
            resetPredefinedPacks();
            setPredefinedPackState(packsCache[completeCachePackId].id, true);
        }
    }
}

// Seleciona automática um pack, ou seja, coloca os seus produtos como seleccionados
// e actualiza o carrinho (html).
function automaticPackSelection(packId)
{
    // Verifica-se logo se é necessário reninciar o carrinho, para caso o utilizador
    // não deseje não existam alterações.
    if (needsRestart) 
    {
        showAlert("Ao escolher um item vai reninciar todo o processo de compra. Deseja continuar?", automaticPackSelectionCallback, null, packId, null);
        
        return;
    }
    
    automaticPackSelectionCallback(packId);
}

function automaticPackSelectionCallback(packId)
{
    needsRestart = false;
    // Procurar pelo idx de packsCache para o packId escolhido.
    var packCacheIdx = getPacksCacheIdx(packId);
    if (packCacheIdx == null) return;
    
    // Remover a selecção anterior!
    restartShopCart();
    clearSelectedPack();
    resetPredefinedPacks();
    
    for (var i = 0; i < selectedOptions.length; ++i)
        selectedOptions[i].prodId = null;

    for (var i = 0; i < shopTypes.length; ++i)
        setAllTypeProductsToProductToSelect(shopTypes[i].id);

    // Seleccionar os produtos.
    for (var i = 0; i < packsCache[packCacheIdx].products.length; ++i)
    {
        // Alterar CSS.
        //selectProduct(document.getElementById(PRODUCT_PREFIX + packsCache[packCacheIdx].products[i].id));
        
        // Adicionar ao carrinho.
        //addProduct(packsCache[packCacheIdx].products[i].id, packsCache[packCacheIdx].products[i].type, packsCache[packCacheIdx].products[i].name, packsCache[packCacheIdx].products[i].price);
        selectOption(PRODUCT_PREFIX + packsCache[packCacheIdx].products[i].id, packsCache[packCacheIdx].products[i].id, packsCache[packCacheIdx].products[i].type, packsCache[packCacheIdx].products[i].name, packsCache[packCacheIdx].products[i].price);
    }
}

function dontRestart(packId)
{
    setPredefinedPackState(packId, false);
}

// Apaga a selecção corrente.
function cleanSelection()
{
    // Se voltou à página de packs...
    if (needsRestart) 
    {
        var answer = confirm("Atenção vai reninciar todo o processo de compra. Deseja continuar?")
        if (answer) needsRestart = false;
        else return;
    }
    
    else
    {
        // Se já tinha algum produto escolhido...
        for (var i = 0; i < selectedOptions.length; ++i)
        {
            if(selectedOptions[i].prodId != null)
            {
                var answer = confirm("Atenção vai reninciar todo o processo de compra. Deseja continuar?")
                if (!answer) return;
                break;
            }
        }
    }

    restartShopCart();
    clearSelectedPack();
    for (var i = 0; i < selectedOptions.length; ++i)
        selectedOptions[i].prodId = null;

    for (var i = 0; i < shopTypes.length; ++i)
        setAllTypeProductsToProductToSelect(shopTypes[i].id);
}

// Função invocada quando é escolhido um pack default (para mostrar a informação adicional).
//function setPackInfo(packId, abrvClientId, nameClientId, btSelectPackClientId, packName)
//{
//    var packsCacheIdx = getPacksCacheIdx(packId);
//    var packAbv = "";
//    var packProdsName = "";
//    
//    for (var i = 0; i < packsCache[packsCacheIdx].products.length; ++i)
//    {
//        if (i != 0)
//        {
//            packAbv += ' + ';
//            packProdsName += ' + ';
//        }
//        packAbv += getTypeAbv(packsCache[packsCacheIdx].products[i].type);
//        packProdsName += packsCache[packsCacheIdx].products[i].name;
//    }
//    
//    document.getElementById(abrvClientId).innerHTML = packAbv;
//    document.getElementById(nameClientId).innerHTML = packProdsName;
//    document.getElementById(btSelectPackClientId).onclick = function(){automaticPackSelection(packId);}
//}

// Função invocada quando existe um click numa tab dos packs predefinidos.
function showTabDescription(tabsContainerId, descriptionsContainerId, tabDescriptionId, selectedTabId)
{
    var tab = document.getElementById(tabsContainerId).firstChild;
    // Colocar todas as tabs como não seleccionadas...
    while(tab != undefined)
    {
        if(tab.nodeType == 3) 
        {
            tab = tab.nextSibling
            continue;
        }
        tab.className = 'packsUnselectedTab';
        tab = tab.nextSibling;
    }
    // Seleccionar tab corrente.
    document.getElementById(selectedTabId).className = 'packsSelectedTab';
    
    var tabDesc = document.getElementById(descriptionsContainerId).firstChild;
    
    while(tabDesc != undefined)
    {
        if(tabDesc.nodeType == 3) 
        {
            tabDesc = tabDesc.nextSibling
            continue;
        }       
        tabDesc.style.display = 'none';
        tabDesc = tabDesc.nextSibling;
    }
    
    document.getElementById(tabDescriptionId).style.display = 'block';
}

// Verifica se o array de produtos prodsArray contém um produto com o id prodId.
function productsContainsId(prodsArray, prodId)
{
    for (var i = 0; i < prodsArray.length; ++i)
    {
        if (prodsArray[i].id == prodId) return true;
    }
    
    return false;
}

// Verifica se o array contém um elemento igual a prod.
function contains(array, prod)
{
    for (var i = 0; i < array.length; ++i)
    {
        if (array[i] == prod) return true;
    }
    
    return false;
}

function getPacksCacheIdx(packId)
{
    for (var i = 0; i < packsCache.length; ++i)
    {
        if (packsCache[i].id == packId) return i;
    }
    
    return null;
}

// Altera o CSS do elemento recebido para o de um produto seleccionado.
// No caso do select, nunca pode vir de um noClickProduct, logo, não é 
// necessário ver as classNames dos divs.
function selectProduct(product, line)
{
//    // Para começar em 1.
//    ++ line;
//    var infoStyleOffset = 2;

//    product.className = 'div_box_border' + line;
//    setInnerBoxClass(product.firstChild, 'div_box_contiudo' + line);
//    (product.getElementsByTagName('img'))[0].src = '../img/styles_1/checkbox_02.gif';
//    setInfoClassTo(product, 'div_info' + (infoStyleOffset + line));
//    
//    var divs = product.getElementsByTagName('div');
//    for (var i = 0; i < divs.length; ++i)
//    {
//        if (divs[i].className == 'div_box_texto4')
//        {
//            divs[i].className = 'div_box_texto1';
//        }else if (divs[i].className == 'div_box_texto5')
//        {
//            divs[i].className = 'div_box_texto2';
//        }else if (divs[i].className == 'div_box_texto6')
//        {
//            divs[i].className = 'div_box_texto3';
//        }
//    }
    
//    var table = product.firstChild;
//    while (table.nodeName != 'TABLE')
//    {
//        table = table.nextSibling;
//    }
//    
//    var tbody = table.firstChild;
//    while (tbody.nodeName != 'TBODY')
//    {
//        tbody = tbody.nextSibling;
//    }
    
    var trs = product.getElementsByTagName('tr');
    for (var i = 0; i < trs.length; ++i)
    {
        var tds = trs[i].getElementsByTagName('td');
        for (var j = 0; j < tds.length; ++j)
        {
            if (tds[j].className == 'canto_greyLight_l' || tds[j].className == 'canto_grey_l')
            {
                tds[j].className = 'canto_l';
            }
            else if (tds[j].className == 'canto_greyLight_t' || tds[j].className == 'canto_grey_t')
            {
                tds[j].className = 'canto_t';
            }
            else if (tds[j].className == 'canto_greyLight_r' || tds[j].className == 'canto_grey_r')
            {
                tds[j].className = 'canto_r';
            }
            else if (tds[j].className == 'canto_greyLight_c' || tds[j].className == 'canto_grey_c')
            {
                tds[j].className = 'canto_c';
            }
            else if (tds[j].className == 'canto_greyLight_b' || tds[j].className == 'canto_grey_b')
            {
                tds[j].className = 'canto_b';
            }
            
            var innerTds = tds[j].getElementsByTagName('td');
            for (var k = 0; k < innerTds.length; ++k)
            {
                if (innerTds[k].className == 'div_box_texto7' || innerTds[k].className == 'div_box_texto4')
                {
                    innerTds[k].className = 'div_box_texto1';
                }
                
                else if (innerTds[k].className == 'div_box_texto5' || innerTds[k].className == 'div_box_texto8')
                {
                    innerTds[k].className = 'div_box_texto2';
                    innerTds[k].getElementsByTagName('span')[0].className = 'div_box_texto3';
                }
            }
        }
    }
    setInfoClassTo(product, 'div_box_info1');
    setReadioButton(product, true);
}

// Idêntico ao anterior, mas recebe um array com os id's dos produtos a seleccionar.
function selectProductsFormIds(products)
{
    for (var i = 0; i < products.length; ++i)
    {
        try
        {
            selectProduct(document.getElementById(PRODUCT_PREFIX + products[i].id), getTypeLine(products[i].typeId));
        }
        catch (e) {}
    }
}

// Altera o CSS do elemento recebido para o de um produto seleccionavel.
function productToSelect(product)
{
//    product.className = 'div_box_border_select';
//    (product.getElementsByTagName('img'))[0].src = '../img/styles_1/checkbox_01.gif';
//    setInnerBoxClass(product.firstChild, 'div_box_contiudo');
//    setInfoClassTo(product, 'div_info2');
//    
//    var divs = product.getElementsByTagName('div');
//    for (var i = 0; i < divs.length; ++i)
//    {
//        if (divs[i].className == 'div_box_texto4')
//        {
//            divs[i].className = 'div_box_texto1';
//        }else if (divs[i].className == 'div_box_texto5')
//        {
//            divs[i].className = 'div_box_texto2';
//        }else if (divs[i].className == 'div_box_texto6')
//        {
//            divs[i].className = 'div_box_texto3';
//        }
//    }

//    var table = product.firstChild;
//    while (table.nodeName != 'TABLE')
//    {
//        table = table.nextSibling;
//    }
//    
//    var tbody = table.firstChild;
//    while (tbody.nodeName != 'TBODY')
//    {
//        tbody = tbody.nextSibling;
//    }
//    
    var trs = product.getElementsByTagName('tr');
    for (var i = 0; i < trs.length; ++i)
    {
        var tds = trs[i].getElementsByTagName('td');
        for (var j = 0; j < tds.length; ++j)
        {
            if (tds[j].className == 'canto_greyLight_l' || tds[j].className == 'canto_l')
            {
                tds[j].className = 'canto_grey_l';
            }
            else if (tds[j].className == 'canto_greyLight_t' || tds[j].className == 'canto_t')
            {
                tds[j].className = 'canto_grey_t';
            }
            else if (tds[j].className == 'canto_greyLight_r' || tds[j].className == 'canto_r')
            {
                tds[j].className = 'canto_grey_r';
            }
            else if (tds[j].className == 'canto_greyLight_c' || tds[j].className == 'canto_c')
            {
                tds[j].className = 'canto_grey_c';
            }
            else if (tds[j].className == 'canto_greyLight_b' || tds[j].className == 'canto_b')
            {
                tds[j].className = 'canto_grey_b';
            }
            
            var innerTds = tds[j].getElementsByTagName('td');
            for (var k = 0; k < innerTds.length; ++k)
            {
                if (innerTds[k].className == 'div_box_texto1' || innerTds[k].className == 'div_box_texto7')
                {
                    innerTds[k].className = 'div_box_texto4';
                }
                
                else if (innerTds[k].className == 'div_box_texto8' || innerTds[k].className == 'div_box_texto2')
                {
                    innerTds[k].className = 'div_box_texto5';
                    innerTds[k].getElementsByTagName('span')[0].className = 'div_box_texto6';
                }
            }
        }
    } 
    setInfoClassTo(product, 'div_box_info1');
    setReadioButton(product, false);
}

// Altera o CSS do elemento recebido para o de um produto não seleccionavel.
function noClickProduct(product)
{
//    product.className = 'div_box_border_null';    
//    (product.getElementsByTagName('img'))[0].src = '../img/styles_1/checkbox_04.gif';
//    setInnerBoxClass(product.firstChild, 'div_box_contiudo');
//    setInfoClassTo(product, 'div_info');
//    
//    var divs = product.getElementsByTagName('div');
//    for (var i = 0; i < divs.length; ++i)
//    {
//        if (divs[i].className == 'div_box_texto1')
//        {
//            divs[i].className = 'div_box_texto4';
//        }else if (divs[i].className == 'div_box_texto2')
//        {
//            divs[i].className = 'div_box_texto5';
//        }else if (divs[i].className == 'div_box_texto3')
//        {
//            divs[i].className = 'div_box_texto6';
//        }
//    }

//    var table = product.firstChild;
//    while (table.nodeName != 'TABLE')
//    {
//        table = table.nextSibling;
//    }
//    
//    var tbody = table.firstChild;
//    while (tbody.nodeName != 'TBODY')
//    {
//        tbody = tbody.nextSibling;
//    }
    
    var trs = product.getElementsByTagName('tr');
    for (var i = 0; i < trs.length; ++i)
    {
        var tds = trs[i].getElementsByTagName('td');
        for (var j = 0; j < tds.length; ++j)
        {
            if (tds[j].className == 'canto_grey_l' || tds[j].className == 'canto_l')
            {
                tds[j].className = 'canto_greyLight_l';
            }
            else if (tds[j].className == 'canto_grey_t' || tds[j].className == 'canto_t')
            {
                tds[j].className = 'canto_greyLight_t';
            }
            else if (tds[j].className == 'canto_grey_r' || tds[j].className == 'canto_r')
            {
                tds[j].className = 'canto_greyLight_r';
            }
            else if (tds[j].className == 'canto_grey_c' || tds[j].className == 'canto_c')
            {
                tds[j].className = 'canto_greyLight_c';
            }
            else if (tds[j].className == 'canto_grey_b' || tds[j].className == 'canto_b')
            {
                tds[j].className = 'canto_greyLight_b';
            }
            
            var innerTds = tds[j].getElementsByTagName('td');
            for (var k = 0; k < innerTds.length; ++k)
            {
                if (innerTds[k].className == 'div_box_texto1' || innerTds[k].className == 'div_box_texto4')
                {
                    innerTds[k].className = 'div_box_texto7';
                }
                
                else if (innerTds[k].className == 'div_box_texto5' || innerTds[k].className == 'div_box_texto2')
                {
                    innerTds[k].className = 'div_box_texto8';
                    innerTds[k].getElementsByTagName('span')[0].className = 'div_box_texto9';
                }
            }
        }
    }
    setInfoClassTo(product, 'div_box_info2');
    disableReadioButton(product, false);
}

function setReadioButton(product, state)
{
    var inputs = product.getElementsByTagName('input');
    for (var i = 0; i < inputs.length; ++i)
    {
        if (inputs[i].type == 'radio')
        {
            inputs[i].checked = state;
            inputs[i].disabled = false;
            break;
        }
    }
}

function disableReadioButton(product, state)
{
    var inputs = product.getElementsByTagName('input');
    for (var i = 0; i < inputs.length; ++i)
    {
        if (inputs[i].type == 'radio')
        {
            inputs[i].checked = state;
            inputs[i].disabled = true;
            break;
        }
    }
}

// Altera o CSS do elemento recebido para o de um produto errado.
// No caso do error, nunca pode vir de um noClickProduct, logo, não é 
// necessário ver as classNames dos divs.
function errorProduct(product)
{
//    product.className = 'div_box_border_x';
//    (product.getElementsByTagName('img'))[0].src = '../img/styles_1/checkbox_03.gif';
}

// Verificar se um produto pode ser seleccionado.
function verifySelectionStatus(product)
{
    //return (product.getElementsByTagName('img'))[0].src.lastIndexOf('checkbox_04.gif') == -1;
    
    return product.getElementsByTagName('tr')[0].getElementsByTagName('td')[0].className != 'canto_greyLight_l';
}

function setAllTypeProductsToNoClickProduct(typeId)
{
    // Podem não existir produtos para este tipo na página!!
    if (typeProducts[typeId] == undefined) return;
    
    for (var i = 0; i < typeProducts[typeId].length; ++i)
    {
        noClickProduct(document.getElementById(PRODUCT_PREFIX+typeProducts[typeId][i]));
    }
}

function setAllTypeProductsToProductToSelect(typeId)
{
    // Podem não existir produtos para este tipo na página!!
    if (typeProducts[typeId] == undefined) return;

    for (var i = 0; i < typeProducts[typeId].length; ++i)
    {
        productToSelect(document.getElementById(PRODUCT_PREFIX+typeProducts[typeId][i]));
    }
}

// Altera CSS class do span de +Info do produto product para infoClass.
function setInfoClassTo(product, infoClass)
{
    // +Info!
    var info = product.nextSibling;
    while (info.nodeType == 3) info = info.nextSibling;
    info.className = infoClass;
}

function setInnerBoxClass (product, cssClass)
{
    while (product.nodeType == 3) product = product.nextSibling;
    product.className = cssClass;
}

// Retorna a abreviatura do typeId passado como parâmetro ou null.
function getTypeAbv(typeId)
{
    for(var i = 0; i < shopTypes.length; ++i)
    {
        if (shopTypes[i].id == typeId) return shopTypes[i].abv;
    }
    
    return null;
}

var lastSpanClicked = null;
var lastSpanClickedProductId = null;

// Invocada quando existe click em +info para um produto do pack no simulador.
// spanInfo -> Span onde é feito o click para ver a informação.
function showPackProductInfo(productId, divInfoId, divInfoTextId, spanInfo)
{
    if (spanInfo.firstChild.nodeValue == '-Info')
    {
        spanInfo.innerHTML == '+Info';
        closePackProductInfo(divInfoId);
        return;
    }

    if (lastSpanClicked != null) 
        lastSpanClicked.innerHTML = '+Info';

    var divInfoText = document.getElementById(divInfoTextId);

    var restartScroll = false;
    
    if (productId != lastSpanClickedProductId)
        getInfoByAJAX(divInfoText,  productId, 2);
    else
        restartScroll = true;
    
    var divInfo = document.getElementById(divInfoId);
    divInfo.style.display = 'block';
    setPosition(divInfo, spanInfo);
    
    lastSpanClicked = spanInfo;
    lastSpanClickedProductId = productId;
    spanInfo.innerHTML = '-Info';
    
    if (restartScroll) setScroll(divInfoText);
}

function closePackProductInfo(divInfoId)
{
    if (lastSpanClicked != null)
    {
        document.getElementById(divInfoId).style.display = 'none';
        lastSpanClicked.innerHTML = '+Info';
    }
}

function getTypeLine(typeId)
{
    for (var i = 0; i < shopTypes.length; ++i)
    {
        if (shopTypes[i].id == typeId) return i;
    }

    return null;
}

function manageView(clickedDivIconId, clickedDivContentId, otherDivIconId, otherDivContentId, simulatorDivId)
{


    var clickedDivIcon = document.getElementById(clickedDivIconId);
    var clickedDivContent = document.getElementById(clickedDivContentId);
    var otherDivIcon = document.getElementById(otherDivIconId);
    var otherDivContent = document.getElementById(otherDivContentId);
    var simuladorCabo= document.getElementById("hdSimuladorCabo").value;

    
    if(clickedDivContent.style.display == 'none')// depois de clicar no mais
    {
        if (clickedDivContentId == 'ctl00_ctl00__centralContentPlaceHolder__servicesSelectionContent__simulatorDiv')
        {
         //por botões visiveis
         
//          document.getElementById("ctl00_ctl00_GoBack").style.cssText = "visibility: visible";
//          document.getElementById('ctl00_ctl00__aNextMaster').style.display = 'none';
            document.getElementById("topNext").style.display = 'block';
            document.getElementById("_BNext").style.display = 'block';
            document.getElementById("_divbanner").style.display = 'none';
            document.getElementById("_divbanner_SimuladorCBL").style.display = 'none';
            
            document.getElementById("ctl00_ctl00__centralContentPlaceHolder__servicesSelectionContent__divSumuladorCaboSatelite").style.display = 'block';
        }
        else
        {
        // por botoes invisiveis
        
            document.getElementById('ctl00_ctl00__aNextMaster').style.display = 'none';
            document.getElementById("topNext").style.display = "none";
            document.getElementById("_BNext").style.display = 'none';
            document.getElementById("_divbanner").style.display = 'none';
            document.getElementById("_divbanner_SimuladorCBL").style.display = 'block';
            if (simuladorCabo==0)
            {
                document.getElementById("_divbanner").style.display = 'block';
                document.getElementById("_divbanner_SimuladorCBL").style.display = 'none';
            }
            
            document.getElementById("ctl00_ctl00__centralContentPlaceHolder__servicesSelectionContent__divSumuladorCaboSatelite").style.display = 'block';
        }
        
        clickedDivIcon.className='menusImg'; 
        clickedDivContent.style.display='block';
        
        otherDivIcon.className='plusImg'; 
        otherDivContent.style.display='none';
        
        window.scrollTo(0, findPosY(clickedDivIcon));
        
    }
    else //ctl00_ctl00__centralContentPlaceHolder__servicesSelectionContent__simulatorDiv
    {
        if (otherDivContentId == 'ctl00_ctl00__centralContentPlaceHolder__servicesSelectionContent__simulatorDiv')
        {
          // por botoes visiveis
     
//          document.getElementById("ctl00_ctl00_GoBack").style.cssText = "visibility: visible";
            document.getElementById('ctl00_ctl00__aNextMaster').style.display = 'none';
            document.getElementById("topNext").style.display = "block";
            document.getElementById("_BNext").style.display = 'block';
            document.getElementById("_divbanner").style.display = 'none';
            document.getElementById("_divbanner_SimuladorCBL").style.display = 'none';
            
            document.getElementById("ctl00_ctl00__centralContentPlaceHolder__servicesSelectionContent__divSumuladorCaboSatelite").style.display = 'block';
        }
        else
        {
        // por botoes invisiveis
            document.getElementById('ctl00_ctl00__aNextMaster').style.display = 'none';
            document.getElementById("ctl00_ctl00_GoBack").style.cssText = "visibility: none";
            document.getElementById("topNext").style.display = 'none';
            document.getElementById("_BNext").style.display = 'none';
            document.getElementById("_divbanner").style.display = 'none';
            document.getElementById("_divbanner_SimuladorCBL").style.display = 'block';
            if (simuladorCabo==0)
            {
                document.getElementById("_divbanner").style.display = 'block';
                document.getElementById("_divbanner_SimuladorCBL").style.display = 'none';
            }
            
            document.getElementById("ctl00_ctl00__centralContentPlaceHolder__servicesSelectionContent__divSumuladorCaboSatelite").style.display = 'none';
        }
        
        
        
        clickedDivIcon.className='plusImg'; 
        clickedDivContent.style.display='none';
        
        otherDivIcon.className='menusImg'; 
        otherDivContent.style.display='block';
        
        window.scrollTo(0, findPosY(otherDivIcon));
    }
    
    closePackProductInfo('_productInfoDiv');
}

function resetPredefinedPacks()
{

    var radios = document.getElementById(PREDEFINED_PACK_DIV_ID).getElementsByTagName('input');
    
    for (var i = 0; i < radios.length; ++i)
    {
        if (radios[i].type == 'radio') radios[i].checked = false;
    }
}

function setPredefinedPackState(packId, state)
{
    document.getElementById(PREDEFINED_PACK_PREFIX + packId).getElementsByTagName('input')[0].checked = state;
}

function predefinedSelected(packId, predefinedRadio)
{

    ADITIONAL_PRODUCT_ID = '';
    ADITIONAL_PRODUCT_NAME = '';
    ADITIONAL_PRODUCT_PRICE = '';
    if (predefinedRadio.checked == false) return;
    automaticPackSelection(packId);
}


function predefinedSelected_BuyNow(packId)
{

    ADITIONAL_PRODUCT_ID = '';
    ADITIONAL_PRODUCT_NAME = '';
    ADITIONAL_PRODUCT_PRICE = '';
    needsRestart = false;
    automaticPackSelection(packId);
}


// Valida campos utilizados para testar cobertura
function validateTestCoverage(postalPart1Id, postalPart2Id)
{
    var postalPart1 = document.getElementById(postalPart1Id); 
    var postalPart2 = document.getElementById(postalPart2Id); 
    
    if (postalPart1.value.length == 0 || postalPart2.value.length == 0)
    {
        alert('Tem que preencher os dois campos do código postal.'); 
        return false;
    } 
    if ((!parseInt(postalPart1.value, 10) && postalPart1.value != '0000') || (!parseInt(postalPart2.value, 10) && postalPart2.value != '000'))
    {
        alert('O código postal é composto apenas por dígitos.'); 
        return false;
    }
    if(postalPart1.value.length != 4 || postalPart2.value.length != 3)
    {
        alert('Tem de inserir o código postal no formato 1234-123');
        return false;
    }
    
    return true;
}

function selectWB(div,prod,name)
{
debugger;
        aLinkAlterar = document.getElementById(div);
      
        aLinkAlterar.href ='../Services/Form.aspx?packId='+id+'&type=Simulator';
        lb = new lightbox(aLinkAlterar);
        return false;
    
}
