﻿/* 20120116-1848 */

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],
					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: ''
		},
		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">',
				htmlContentNavigationRight = '<ul class="right">',
				itemMenu = null,
				right = [],
				left = [],
				classe = "",
				layers = null,
				i = 0;
			
			organizeSpecial(objSelected, left, right);
			
			for (i; 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="' + itemMenu.id + '" href="' + itemMenu.url + '" target="_top" ><em><!-- --></em>' + itemMenu.label + '</a>' + layers + '</li>';
				
				}
				
			}
			
			htmlContentNavigationLeft += '</ul>';
			
			var a = 0;
			for (a; 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="' + 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 = [],
				itemsSpecial = [],
				content = null,
				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=\"" + modMan.tools.pubMan.getProxyTemplatePath() + "?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,
				result = "",
				b = 0;
			
			if (total > 0) {
				
				for (b; b < total; b++) {
					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) {
			
			var itemMenu, itemSelect;
			
			for (itemMenu in itemsMenu) {
				
				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;
			
			$(RECIPIENT).find(".navigation .item").bind("mouseenter", function () {

				if ($(this).position().left > 750) {
					$(".layer", this).addClass("openLeft");
					var pWidth = $(".layer", this).parent().width() - 5;
					$(".layer", this).css("left", "-" + ($(".layer", this).width() - 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 (json, breadcrumb, i) {
		
			var menuSelected = null,
				item;

			for (item in json) {
			
				if (item == breadcrumb[i] && i == breadcrumb.length - 1) {
					
					return json[item];
				
				} else if (item == breadcrumb[i] && i < breadcrumb.length) {
					
					i++;
					menuSelected = navega(json[item].is, breadcrumb, i);
					break;
				
				}
			
			}
			
			return menuSelected;
		
		};
		
		var writeMenu = function (objJsonp) {

			var htmlFirstMenu = "",
				htmlSecondMenu = "",
				arrBreadCrumb = (idItemMenu.split('-')),
				itemsMenu = objJsonp.menu.is,
				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) {
					
					var t;
					for (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);

};
