﻿/* 20100608-1216 */
(function($){ 
	var modMenu = function(p){
			
		//=-=-=-=-=-=-=-=-
		// Função para setar o número de digitos de um número
		//=-=-=-=-=-=-=-=-
		String.prototype.digits = Number.prototype.digits = function(numDigits){
			var str = this.toString();
			while (str.length < numDigits)
				str = "0"+str;
			return str;
		}

		var modMan = {
			globals:{
				page:{
					baseURL:p.baseURL,
					country:p.pageCountry,
					lang:p.pageLang
				}
			},
			tools:{
				jsonP:function(configsOBJ){
					var callback = configsOBJ.callback;
					if(!callback) {
						//log.critical("É preciso indicar um método (callback) para tratar o arquivo:\n" + url );
						return false;
					}
					var wrapperName = configsOBJ.wrapperName || "jsonp";

					var url = configsOBJ.url;

					var extraParams = configsOBJ.extraParams || false;

					// Json in body
					if(window[wrapperName]) {
						//log.checkpoint(wrapperName + " - Recuperando json do corpo da página.");
						configsOBJ.callback(window[wrapperName], extraParams);
						return true;
					}

					if(!configsOBJ.cache){
						var cache = new Date().getTime();
						url +=  (url.indexOf('?') != -1) ? "&" : "?";
						url += "cache=" + cache;
					}

					if(!window[wrapperName]) {
						window[wrapperName] = function(jsonOBJ){
							if (typeof(jsonOBJ) != 'object') {
								//log.critical("Erro no parse do arquivo:\n" + url);
								return false;
							}
							//log.checkpoint('disparando resposta para ' + wrapperName)
							configsOBJ.callback(jsonOBJ, extraParams);
						};
					}

					var objHead = document.getElementsByTagName("head")[0];
					var objScript = document.createElement("script");
					objScript.type = "text/javascript";
					objScript.src = url;
					objScript.charset ="utf-8";
					objHead.appendChild(objScript);

					objScript.onload = objScript.onreadystatechange = function(){
						if(objScript.readyState) {
							if (objScript.readyState == 'complete') objHead.removeChild(objScript);
						} else objHead.removeChild(objScript);
					}
				}
			}
		},
		locale = {
			defaultLNG:'br',
			defaultRGN:'BR',
			LNG:{
				br:{
					sponsoredBy:"Patrocinado por"
				},
				en:{
					sponsoredBy:"Sponsored by"
				},
				es:{
					sponsoredBy:"Patrocinado por"
				}
			}
		},
		PARAMS = {
			help:{
			},
			defaults:{
			},
			needed:{
				idItemMenu:"string"
			}
		},
		CONSTRUCTOR = function(PARAMS,$){
			
			var RECIPIENT = PARAMS.recipient,
				LNG =  PARAMS.LNG,
				RGN =  PARAMS.RGN
				

			
			var idItemMenu = PARAMS.idItemMenu;
			// Header
			/*
			 * PARAMETERS
			 * - selector (Header selector)
			 * - idItemMenu (Page ID)
			 * - Format (superslim/slim/full/footer)
			 */


			var adjustPropertiesName = function(obj,id) {
				obj.id = id;
				obj.items = obj.is;
				obj.label = obj.l;
				obj.imgSrc = obj.s;
				obj.imgSrcSmall = obj.s2;
				obj.imgWidth = obj.w;
				obj.tagMan = obj.tg;
				if (typeof(obj.t) != "undefined") {
					obj.type = obj.t;
					obj.layer = obj.t.substr(0,1) == "1";
					obj.horizontal = obj.t.substr(1,1) == "1";
					obj.more = obj.t.substr(2,1) == "1";
					obj.special = obj.t.substr(3,1) == "1";
					obj.visible = obj.t.substr(4,1) == "1";
				}
				obj.url = obj.u;

				return obj;
			}

			// Menu
			var writeMenu = function(objJsonp) {

				var htmlFirstMenu = "";
				var htmlSecondMenu = "";
				var arrBreadCrumb = (idItemMenu.split("-"));
				var itemsMenu = objJsonp.menu.is;
				var maxItens = 0;

				if (arrBreadCrumb.length < 4) $(RECIPIENT).html( writeNavigation( navega(itemsMenu, arrBreadCrumb, 0).is, arrBreadCrumb.length, PARAMS.selected ) );
				else if (arrBreadCrumb.length == 4) {
					for (var t in navega(itemsMenu, arrBreadCrumb, 0).contentNavigation) maxItens++;
					$(RECIPIENT).html(writeContentNavigation( navega(itemsMenu, arrBreadCrumb, 0).contentNavigation, PARAMS.selected ) );
				}
				else $(RECIPIENT).html("Menu not found");
				
				addEvents();
			}
			
			var navega = function(obj, itemSelecionado, pos){
				prox = false;
				var menuSelected = null;
				
				for (var itemMenu in obj){
					if (itemMenu == itemSelecionado[pos] && pos == itemSelecionado.length-1){
						return obj[itemMenu];
						break;
					} else if (itemMenu == itemSelecionado[pos] && pos < itemSelecionado.length){
						pos += 1;
						menuSelected = navega(obj[itemMenu].is, itemSelecionado, pos);
					}
				}
				return menuSelected;
			}
			
			var writeNavigation = function(objSelected, totalItem, selected){
				var htmlContentNavigationLeft = '<ul class="left">';
				var htmlContentNavigationRight = '<ul class="right">';
				var layer = null;
				var itemMenu = null;
				var right = new Array();
				var left = new Array();
				var classe = "";
				
				for (var itemMenu in objSelected) {
					var itemSelect = adjustPropertiesName(objSelected[itemMenu],itemMenu);
					
					if (itemSelect.visible) {
						if (itemSelect.special) right.push(itemSelect);
						else left.push(itemSelect); 
					}
				}
				
				for (i=0; i<left.length; i++) {
					itemMenu = left[i];
					classe = "item";

					if(i == left.length-1) classe += " last";

					if (itemMenu.id == selected) classe +=" selected"; 

					if (itemMenu.visible) {

						htmlContentNavigationLeft += '<li class="'+classe+'"><a class="'+itemMenu.id+'" href="'+itemMenu.url+'" target="_top" ><em><!-- --></em>'+itemMenu.label+'</a>';
				
						if(itemMenu.layer && totalItem < 3) htmlContentNavigationLeft += getLayer(itemMenu.items, true);
						else if (itemMenu.layer && totalItem == 3) 	htmlContentNavigationLeft += getLayer(itemMenu.contentNavigation, false);
						
						htmlContentNavigationLeft += '</li>'
					}
					
				}
				
				htmlContentNavigationLeft += '</ul>';

				for (a=0; a<right.length; a++) {
					itemMenu = right[a];
					classe = "item";
					seta = "»";

					if(a == right.length-1) classe += " last";

					if (itemMenu.id == selected) classe +=" selected"; 

					if (itemMenu.visible) {

						htmlContentNavigationRight += '<li class="'+classe+'"><a class="'+itemMenu.id+'" href="'+itemMenu.url+'" target="_top"><em><!-- --></em>'+itemMenu.label+' »</a>';
				
						if(itemMenu.layer && totalItem < 3) htmlContentNavigationRight += getLayer(itemMenu.items, true);
						else if (itemMenu.layer && totalItem == 3) 	htmlContentNavigationRight += getLayer(itemMenu.contentNavigation, false);
						
						htmlContentNavigationRight += '</li>'
					}
					
				}

				htmlContentNavigationRight += '</ul>';
				
				
				var htmlContentNavigation = htmlContentNavigationLeft;
				if (right.length > 0)htmlContentNavigation += htmlContentNavigationRight;
				
				return "<span class=\"navigation\">" + htmlContentNavigation + "</span>";
			}
			
			var getLayer = function(itemsMenu, twoColumns){
				var items = "";
				
				for (var itemMenu in itemsMenu){
					var itemMenu = adjustPropertiesName(itemsMenu[itemMenu],itemMenu);
					
					if (itemMenu.visible == "1") items += "<li class=\"\">"+"<a title=\"\" class=\"linklayer\" href=\""+itemMenu.url+"\">"+itemMenu.label+"</a></li>";
						
				}
			
				return "<ul class=\"layer\">"+items+"</ul>";
			}
			
			/*Content navigation */
			var writeContentNavigation = function(itemsMenu, selected) {
				var htmlContentNavigationLeft = '<ul class="left">';
				var htmlContentNavigationRight = '<ul class="right">';
				var right = new Array();
				var left = new Array();
				var classe = "";
				
				for (var itemMenu in itemsMenu) {
					var itemSelect = adjustPropertiesName(itemsMenu[itemMenu],itemMenu);
					
					if (itemSelect.visible) {
						if (itemSelect.special) right.push(itemSelect);
						else left.push(itemSelect); 
					}
				}
				
				for (i=0; i<left.length; i++) {
					classe = "";
					itemMenu = left[i];

					if(i == left.length-1) classe = "last";

					if (itemMenu.id == selected) classe +=" selected"; 
					
					if (itemMenu.visible) htmlContentNavigationLeft += '<li class="'+classe+'"><a href="'+itemMenu.url+'" target="_top" >'+itemMenu.label+'</a></li>';
				}
				
				htmlContentNavigationLeft += '</ul>';

				for (a=0; a<right.length; a++) {
					classe = "";
					itemMenu = right[a];
					
					if (a == 0) classe = "first";
					else if (a == right.length-1) classe = "last";

					if (itemMenu.id == selected) classe +=" selected"; 
					
					if (itemMenu.visible) htmlContentNavigationRight += '<li class="'+classe+'"><a href="'+itemMenu.url+'" target="_top" >'+itemMenu.label+' »</a></li>';
				}

				htmlContentNavigationRight += '</ul>';
				
				var htmlContentNavigation = htmlContentNavigationLeft;
				if (right.length > 0)htmlContentNavigation += htmlContentNavigationRight;
				
				return  htmlContentNavigation;
			}
			
			
			var addEvents = function(){
				 $(RECIPIENT).find(".navigation .item").bind("mouseenter",function()
					{
					
						if ($(this).position().left > 750) $(".layer",this).addClass("openLeft");
						$(".layer",this).parent().addClass("openLayer");
					})
				 
				 $(RECIPIENT).find(".navigation .item").bind("mouseleave",function()
					{
						if ($(this).position().left > 750) $(".layer",this).removeClass("openLeft");
						$(".layer",this).parent().removeClass("openLayer");
					})
			}
			
			// Request
			var arrNavigation = null;
			new modMan.tools.jsonP({
				url: PARAMS.request_url,
				wrapperName: "json_headerfooter",
				cache: true,
				callback: function(json) {

					writeMenu(json);
					
				}
			});

		}
		
		// Recipient
		p.params.recipient = $(p.selector);
		//  LNG
		PARAMS.LNG = locale.LNG[p.pageLang];

		PARAMS = $.extend(PARAMS,p.params);
		CONSTRUCTOR(PARAMS,jQuery);
	}
	window.modMenu = modMenu;
})(jQuery);