/******************************************************************************
Module:			NAVIGATIONUTILS.JS
Description:	Provides all functions needed to implement full navigation
				on Brumon.com site, including main menus, sub menus and
				popup menus for submenu items.
				
Created By:		Edson Lucas Carlotti (ELC)

Creation Date:  15/02/2009
Last Modified:  08/03/2009

------------------------------------------------------------------------------
VERSION HISTORY
------------------------------------------------------------------------------
15/02/2009 (ELC) - Criado o módulo navigationutils.js
02/03/2009 (ELC) - Modificado para mostrar corretamente nas páginas diretas
                   (notas legais, contato, etc)
08/03/2009 (ELC) - Criado o HOME icon no menu principal, controlado pela
                   constante showHomeIcon
******************************************************************************/

//----------------------------------------------------------------------------
// GLOBAL CONSTANTS AREA
//----------------------------------------------------------------------------
var showHomeIcon      = true;

var mainMenuItemID    = "globalNavMain";
var mainMenuInnerID   = "globalNavmainInner";
var subMenuItemID     = "segNavMainTab";
var subMenuInnerID    = "segNavmainInner";
var popupID           = "segNavFly";

var mainMenuClass     = "globalNav";
var mainMenuItemClass = "globalNavMain";
var subMenuClass      = "segNav";
var subMenuItemClass  = "segNavMainTab";
var popupClass        = "segNavFly";
var popupBottomClass  = "segFlygs";

//----------------------------------------------------------------------------
// GLOBAL VARIABLES AREA
//----------------------------------------------------------------------------
var globalNavMainTabs = [];
var segNavMainTabs    = [];
var segNavPopups      = [];

//----------------------------------------------------------------------------
// GLOBAL PROTOTYPES AREA
//----------------------------------------------------------------------------
String.prototype.trim = function() {
    return this.replace(/^s+|\s+$/g, "");
}
String.prototype.ltrim = function() {
    return this.replace(/^\s+/g, "");
}
String.prototype.rtrim = function() {
    return this.replace(/\s+$/g, "");
}
String.prototype.removecrlf = function() {
   return this.replace(/\r|\n|\r\n|\n\r/g, "");
}

//============================================================================
// Function:	initMenuArray
//
// Description:	Usada para inserir um item no ARRAY de items de menu
// 
// Parameters:
//   idx:       INDEX do item sendo inserido
//   arrMenu:   ARRAY onde os itens do menu serão inseridos
//   id:        ID da DIV utilizada para o item de menu completo
//   inner:     ID da DIV utilizada para exibir o LINK desse item de menu 
//   url:       URL para onde o usuário é redirecionado ao selecionar o menu
//   txt:       Texto visível exibido para esse item de menu
//============================================================================
function initMenuArray(idx, arrMenu, id, inner, url, txt) {
    var navUrl = url.toLowerCase();
    if (!((navUrl.indexOf('http://') == 0) && (navUrl.lastIndexOf('/') == 6))) {
        navUrl = navUrl.substring(0, navUrl.lastIndexOf('/')+1);
    }

    arrMenu[idx]         = new Object;
    arrMenu[idx].id      = id;
    arrMenu[idx].idInner = inner;
    arrMenu[idx].path    = navUrl;
	arrMenu[idx].url     = url;
    arrMenu[idx].text    = txt;
}

//============================================================================
// Function:	initMainMenu
//
// Description:	Usada para definir a estrutura do Menu Principal
// 
// Parameters:
//   arrItems:	ARRAY contendo os ITENS dos menus, ou seja, as STRINGS que
//				irão estar visíveis para o usuário do site.
//   arrLinks:	ARRAY contendo os links para os quais o usuário será 
//				redirecionado ao clicar no ITEM correspondente. Esse array
//				tem que obrigatoriamente ter o mesmo tamanho do array de
//				items. Essa verificação NÃO É FEITA por esse método e os
//				resultados caso isso não seja verdade são imprevisíveis.
//============================================================================
function initMainMenu (arrItems, arrLinks) 
{
    globalNavMainTabs = new Array(arrItems.length);

    for (i=0; i < arrItems.length; i++) {
		initMenuArray(i, 
					  globalNavMainTabs, 
					  mainMenuItemID + String(i+1), 
					  mainMenuInnerID + String(i+1), 
					  arrLinks[i], 
					  arrItems[i]);
    }	
}

//============================================================================
// Function:	initSubMenu
//
// Description:	Usada para definir a estrutura do SubMenu Principal
// 
// Parameters:
//   arrItems:	ARRAY contendo os ITENS do menu, ou seja, as STRINGS que
//				irão estar visíveis para o usuário do site.
//   arrLinks:	ARRAY contendo os links para os quais o usuário será 
//				redirecionado ao clicar no ITEM correspondente. Esse array
//				tem que obrigatoriamente ter o mesmo tamanho do array de
//				items. Essa verificação NÃO É FEITA por esse método e os
//				resultados caso isso não seja verdade são imprevisíveis.
//============================================================================
function initSubMenus (arrItems, arrLinks) 
{
    segNavMainTabs = new Array(arrItems.length);

    for (i=0; i < arrItems.length; i++) {
		initMenuArray(i, 
					  segNavMainTabs, 
					  subMenuItemID + String(i+1), 
					  subMenuInnerID + String(i+1), 
					  arrLinks[i], 
					  arrItems[i]);
		segNavMainTabs[i].hasPopup = false;
    }	
}

//============================================================================
// Function:	initPopup
//
// Description:	Usada para definir a estrutura de um menu POPUP
// 
// Parameters:
//   subMenuID: INDEX do submenu que vai receber o POPUP
//   arrItems:	ARRAY contendo os ITENS do menu, ou seja, as STRINGS que
//				irão estar visíveis para o usuário do site.
//   arrLinks:	ARRAY contendo os links para os quais o usuário será 
//				redirecionado ao clicar no ITEM correspondente. Esse array
//				tem que obrigatoriamente ter o mesmo tamanho do array de
//				items. Essa verificação NÃO É FEITA por esse método e os
//				resultados caso isso não seja verdade são imprevisíveis.
//============================================================================
function initPopup (subMenuID, arrItems, arrLinks) 
{
    var arr = new Array(arrItems.length);
    for (i=0; i < arrItems.length; i++) {
		initMenuArray(i, 
					  arr, 
					  "", 
					  "", 
					  arrLinks[i], 
					  arrItems[i]);

    }	

    segNavMainTabs[subMenuID].popupID  = popupID + String(subMenuID+1); 
    segNavMainTabs[subMenuID].popup    = arr;
    segNavMainTabs[subMenuID].hasPopup = true;
}

//============================================================================
// Function:	setNoSubMenu
//
// Description:	Usada para definir que a página não possui SubMenu. Esse 
// 				método é necessário porque as funções de HIGHLIGHT de menus
//				dependem da existência dos menus e sub-menus. Esse método
//				cria um submenu "fake" para que os métodos de HIGHLIGHTING
//				funcionem adequadamente em todos os browsers. Esse método só
//				pode ser executado DEPOIS do método initMainMenu.
// 
// Parameters:	NONE
//============================================================================
function setNoSubMenu() 
{
    segNavMainTabs = new Array(globalNavMainTabs.length);

    for (i=0; i < globalNavMainTabs.length; i++) {
		initMenuArray(i, 
					  segNavMainTabs, 
					  subMenuItemID + String(i+1), 
					  subMenuInnerID + String(i+1), 
					  globalNavMainTabs.slice(i,i+1)[0].url, 
					  globalNavMainTabs.slice(i,i+1)[0].text);
    }	
}

//============================================================================
// Function:	mLink
//
// Description:	Retorna o HTML de um link de menu.
// 
// Parameters:
//   i:         O INDEX do array de onde pegar os dados do item de menu
//   arr:       O ARRAY de onde pegar os dados do item de menu
//
// Returns:     O código HTML do LINK do menu
//============================================================================
function mLink(i, arr) 
{
    var sLink = "";
	
	if (arr[i].url.length > 0) {
      sLink = "<a href=\"" + arr[i].url + "\">" + arr[i].text + "</A>";
	} else {
      sLink = "<a href=\"#\">" + arr[i].text + "</a>";
	}
	
	return sLink;
}

//============================================================================
// Function:	displayMainMenu
//
// Description:	Usada para exibir o menu principal. Esse método GERA O CÓDIGO
//              HTML NA PÁGINA referente ao menu principal. Esse método só
//				pode ser executado DEPOIS do método initMainMenu.
// 
// Parameters:
//   imgPath:   O PATH das imagens utilizadas pelo menu (Ex.: "files/images/")
//============================================================================
function displayMainMenu(imgPath)
{
    var menuDefinition = "" +
    "<DIV id=MainMenu name=MainMenu class=" + mainMenuClass + ">\n" +
    "  <DIV class=" + mainMenuClass + "LftCnr><img src=\"" + imgPath + "globalnavlftCnr.gif\"></DIV>\n" +
    "    <DIV class=" + mainMenuClass + "Cntr>\n";
		
		if (showHomeIcon) {
			menuDefinition +=
      "      <DIV class=" + mainMenuItemClass + " id=homePageMainMenuTab>\n" +
      "        <DIV id=homePageMainMenuTabInner>" + 
		           "<A href=\"http://www.brumon.com/\">" +
							 "<IMG src=\"" + imgPath + "home_icon.jpg\">" +
							 "</A>" + "</DIV>\n" +
      "      </DIV>\n" +
			"      <SPAN>|</SPAN>\n";
		}
	
	  for (i=0; i < globalNavMainTabs.length; i++) {
		  if (i > 0) {
            menuDefinition += "      <SPAN>|</SPAN>\n";
		  }
		
		  menuDefinition +=
        "      <DIV class=" + mainMenuItemClass + " id=" + globalNavMainTabs[i].id + ">\n" +
        "        <DIV id=" + globalNavMainTabs[i].idInner + ">" + mLink(i, globalNavMainTabs) + "</DIV>\n" +
        "      </DIV>\n";
	  }
	
    menuDefinition +=
      "    </DIV>\n" +
      "  <DIV class=" + mainMenuClass + "RgtCnr><img src=\"" + imgPath + "globalnavrgtCnr.gif\"></DIV>\n" +
      "</DIV>\n";
  
    document.writeln(menuDefinition);
}

//============================================================================
// Function:	displaySubMenu
//
// Description:	Usada para exibir o SUBMenu. Esse método GERA O CÓDIGO
//              HTML NA PÁGINA referente ao submenu. Esse método só
//				pode ser executado DEPOIS do método initSubMenus.
// 
// Parameters:
//   imgPath:   O PATH das imagens utilizadas pelo menu (Ex.: "files/images/")
//   divStyle:  Complemento para o estilo da DIV que contém o submenu 
//============================================================================
function displaySubMenu(imgPath, divStyle)
{
    var submenuDefinition = "" +
    "<DIV class=" + subMenuClass + " " + (typeof(divStyle) != "undefined" ? divStyle : "") + ">\n" +
    "  <DIV class=" + subMenuClass + "LftCnr><img alt=\"[\" src=\"" + imgPath + "segNavlftCnr.gif\"></DIV>\n" +
    "  <DIV class=" + subMenuClass + "Cntr>\n";
    
	for (i=0; i < segNavMainTabs.length; i++) {
		submenuDefinition +=
        "    <!-- ITEM " + String(i) + " -->\n" +
        "    <DIV class=" + subMenuItemClass + " id=" + subMenuItemID + String(i+1) + "\n" +
        "         onmouseover=\"showSNDropDown('" + subMenuItemID + String(i+1) + "', '" + popupID + String(i+1) + "')\"\n" +
        "         onmouseout=\"hideSNDropDown('" + subMenuItemID + String(i+1) + "', '" + popupID + String(i+1) + "'); return false\">\n" +
        "      <SPAN>" + mLink(i, segNavMainTabs) + "</SPAN>\n";
		
        if (segNavMainTabs[i].hasPopup) {
            var arr = segNavMainTabs[i].popup;

            submenuDefinition +=
            "      <!-- SUBMENU " + String(i+1) + ".1 -->\n" +
            "      <DIV class=" + popupClass + "Pane id=" + segNavMainTabs[i].popupID + ">\n" +
            "        <DIV class=" + popupClass + ">\n" +
            "          <UL>\n";

            for (k=0; k < arr.length; k++) {
                submenuDefinition += "            <LI>" + mLink(k, arr) + "\n";
            }
			
            submenuDefinition +=
            "          </UL>\n" +
            "        </DIV>\n" +
            "        <!-- SUBMENU " + String(i+1) + ".1 BOTTOM -->\n" +
            "        <DIV class=" + popupClass + "Btm>\n" +
            "          <DIV class=" + popupBottomClass + "4><b></b></DIV>\n" +
            "          <DIV class=" + popupBottomClass + "3><b></b></DIV>\n" +
            "          <DIV class=" + popupBottomClass + "2></DIV>\n" +
            "          <DIV class=" + popupBottomClass + "1><b></b></DIV>\n" +
            "        </DIV>\n" +
            "      </DIV>\n";
		}

        submenuDefinition +=
        "    </DIV>\n" +
        "    <!-- ITEM " + String(i+1) + " END -->\n";
    }

    submenuDefinition += 
    "    <DIV class=" + subMenuClass + "RgtCnr><img alt=\"]\" src=\"" + imgPath + "segNavrgtCnr.gif\"></DIV>\n" +
    "    </DIV>\n" +
    "  </DIV>\n";

    document.writeln(submenuDefinition);
}

//============================================================================
// Function:	displayNavigation
//
// Description:	Usada para exibir a barra de navegação. Esse método GERA O 
//              CÓDIGO HTML NA PÁGINA referente à barra de navegação. Esse 
//              método só pode ser executado DEPOIS dos métodos de HIGHLIGHT,
//              porque precisa das variáveis retornadas por eles.
// 
// Parameters:
//   mainSel:   O
//============================================================================
function displayNavigation(mainSel, segSel, popupSel) 
{
    var mainTab = document.getElementById(mainSel);
	var segTab  = document.getElementById(segSel);
	var crumbs  = 
        "<!-- begin navigation indicator -->\n" +
        "<DIV style=\"CLEAR: both\"></DIV>\n" +
        "<DIV class=crumbs><a href=\"http://www.brumon.com/\">Brumon.com</a> <SPAN>> </SPAN>";

    if (mainSel != null) {
		if (isIE_itm || isIE5_itm) {	
			crumbs += mainTab.firstChild.innerHTML + " <SPAN>> </SPAN>";
		} else {
			crumbs += mainTab.firstChild.nextSibling.innerHTML + " <SPAN>> </SPAN>";
		}
			
		if (popupSel != null ) {
			if (isIE_itm || isIE5_itm) {
				crumbs += 
					segTab.firstChild.innerHTML + " <SPAN>> </SPAN>" + 
					popupSel;
			} else {
				crumbs += 
					segTab.firstChild.nextSibling.innerHTML + " <SPAN>> </SPAN>" + popupSel;
			}
		} else {
			if (isIE_itm || isIE5_itm) {
				crumbs += 
					segTab.innerText;
			} else {
				crumbs += 
					segTab.textContent.removecrlf().ltrim().rtrim();
			}
		}
	} else {
		if (popupSel != null) {
			crumbs += popupSel;
		} else {
			crumbs += "localização desconhecida";
		}
	}
	
    crumbs += 
        "</DIV>\n" +
        "<!-- end navigation indicator -->\n";
		
    document.writeln(crumbs);
}
