﻿/* 20101203-1100 */
(function($){

	window.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:{
			srcAdvertising:"http://stf.terra.com.br/portal/core/2/advertising.html"
		},
		needed:{
			idItemMenu:"string"
		}
	},
	CONSTRUCTOR = function(PARAMS,$){
		
		var RECIPIENT = PARAMS.recipient,
			LNG =  PARAMS.LNG,
			RGN =  PARAMS.RGN
		
		var idItemMenu = PARAMS.idItemMenu;
		
		//Structure functions		
		var writeNavigation = function(objSelected, totalItem, selected){
			var htmlContentNavigationLeft = '<ul class="left">';
			var htmlContentNavigationRight = '<ul class="right">';
			var itemMenu = null;
			var right = new Array();
			var left = new Array();
			var classe = "";
			var layers = null;
			
			organizeSpecial(objSelected, left, right);
			
			for (i=0; i<left.length; i++) {
				itemMenu = left[i];
				classe = "item";
				layers = "";

				if(i == left.length-1) classe += " last";
				if (itemMenu.id == selected) classe +=" selected"; 

				if (itemMenu.visible) {
					
					if(itemMenu.layer && totalItem < 3) layers = getLayer(itemMenu.items, itemMenu.tagMan);
					else if (itemMenu.layer && totalItem == 3) layers = getLayer(itemMenu.contentNavigation, itemMenu.tagMan);	

					if (layers != "") classe += " layer";
					
					htmlContentNavigationLeft += '<li class="'+classe+'"><a class="menu-item-'+itemMenu.id+'" href="'+itemMenu.url+'" target="_top" ><em><!-- --></em>'+itemMenu.label+'</a>'+ layers +'</li>';
				}
				
			}
			
			htmlContentNavigationLeft += '</ul>';

			for (a=0; a<right.length; a++) {
				itemMenu = right[a];
				classe = "item";

				if(a == 0) classe += " first";
				if(a == right.length-1) classe += " last";

				if (itemMenu.id == selected) classe +=" selected"; 

				if (itemMenu.visible) {

					htmlContentNavigationRight += '<li class="'+classe+'"><a class="menu-item-'+itemMenu.id+'" href="'+itemMenu.url+'" target="_top" ><em><!-- --></em>'+itemMenu.label+' »</a>';
			
					if(itemMenu.layer && totalItem < 3) htmlContentNavigationRight += getLayer(itemMenu.items, itemMenu.tagMan);
					else if (itemMenu.layer && totalItem == 3) htmlContentNavigationRight += getLayer(itemMenu.contentNavigation, itemMenu.tagMan);
					
					htmlContentNavigationRight += '</li>'
				}
				
			}

			htmlContentNavigationRight += '</ul>';
			
			var htmlContentNavigation = htmlContentNavigationLeft;
			if (right.length > 0)htmlContentNavigation += htmlContentNavigationRight;
			
			return "<span class=\"navigation\">" + htmlContentNavigation + "</span>";
		}
		
		var getLayer = function(itemsMenu, pub){
			var items = new Array();
			var itemsSpecial = new Array();
			var content = null;
			var contentSpecial = null;

			var result = "<ul class=\"layer\">";
			
			organizeSpecial(itemsMenu, items, itemsSpecial);
			
			content = getInnerContent(items);
			contentSpecial = getInnerContent(itemsSpecial);
			
			if (content) result += "<li class=\"normal\">"+content+"</li>";
			if (contentSpecial) result += "<li class=\"special\">"+contentSpecial+"</li>";
			
			var psite = typeof(site)!="undefined" ? site:"";
			var pzone = typeof(zone)!="undefined" ? zone:"";
			
			if (pub) result += "<li class=\"pub\"><iframe scrolling=\"no\" src=\"http://stf.terra.com.br/portal/core/2/advertising.html?tag="+window.tgmKey+"&area="+pub+"&site="+psite+"&zone="+pzone+"\" frameborder=\"0\" style=\"float:left;\"></iframe></li>";
			 
			result += "</ul>";
			
			if (content || contentSpecial) return result;
			else return "";
			
		}
		
		var getInnerContent = function(items) {
			var total = items.length;
			var result = "";
			
			if (total > 0){
				
				for (b=0; b<total; b++){
					//if( b == Math.ceil(total/2) )  result += "</ul><ul class=\"right\">"; retirar a divisão em colunas
					result += "<li><a title=\"\" class=\"linklayer\" href=\""+items[b].url+"\">"+items[b].label+"</a></li>";
				}
				
				return "<ul>"+result+"</ul>";
			} else {
				return null;
			}
			
			
		}
		
		//Service functions
		
		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;
		}
		
		var organizeSpecial = function(itemsMenu, items, itemsSpecial){
			
			for (var itemMenu in itemsMenu) {
				var itemSelect = adjustPropertiesName(itemsMenu[itemMenu],itemMenu);
				
				if (itemSelect.visible){
					if (itemSelect.special) itemsSpecial.push(itemSelect);
					else items.push(itemSelect);
				} 
			}
			
		}
		
		var addEvents = function(){
			
			var layers = $(RECIPIENT).find(".layer");
			var item = null;
			var size = 0;
			var sizeLeft = 0;
			var sizeRight = 0;
			var sizeLeftSPE = 0;
			var sizeRightSPE = 0;
			var sizeSpecial = 0;
			
			/* Retirada a adivisão em colunas
			 * 
			 * for (l=0; l<layers.length; l++){
				item = $(layers[l]);
				
				sizeLeft = item.find(".normal .left").width();
				sizeRight = item.find(".normal .right").width();
				sizeLeftSPE = item.find(".special .left").width();
				sizeRightSPE = item.find(".special .right").width();
				
				if (sizeLeftSPE > sizeLeft) sizeLeft = sizeLeftSPE;
				if (sizeRightSPE > sizeRight) sizeRight = sizeRightSPE;
				
				item.find(".normal .left").width(sizeLeft);
				item.find(".normal .right").width(sizeRight);
				item.find(".special .left").width(sizeLeft);
				item.find(".special .right").width(sizeRight);
				
				size = item.find(".normal .left").width() + item.find(".normal .right").width();
				sizeSpecial = item.find(".special .left").width() + item.find(".special .right").width();
				
				if (sizeSpecial > size) size = sizeSpecial;
				
				item.width(size);
				item.hide();
			}*/
			
			$(RECIPIENT).find(".navigation .item").bind("mouseenter",function(){

				if ($(this).position().left > 750) {
					$(".layer",this).addClass("openLeft");
					pWidth = $(".layer",this).parent().width();
					$(".layer",this).css("left", "-" + ($(".layer",this).outerWidth() - pWidth) + "px");
				}
				
				$(".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");
			})
			
		}
		
		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 writeMenu = function(objJsonp) {

			var htmlFirstMenu = "";
			var htmlSecondMenu = "";
			var arrBreadCrumb = (idItemMenu.split("-"));
			var itemsMenu = objJsonp.menu.is;
			var maxItens = 0;

			if (arrBreadCrumb != "home"){	
			
				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(writeNavigation( navega(itemsMenu, arrBreadCrumb, 0).contentNavigation, arrBreadCrumb.length, PARAMS.selected ) );
				} else { $(RECIPIENT).html("Menu not found"); }
				
			} else {
				$(RECIPIENT).html( writeNavigation(itemsMenu, 0 ,PARAMS.selected) );
			}
			
			addEvents();
		}
		
		// 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);
}

})(jQuery);
