dojo.provide("redfin.common.header");

dojo.addOnLoad(function(){
	
	dojo.setObject('getMenu', function(menuSearch){
		var menuFound = false;
		dojo.forEach(menus, function(menu){
			if (menu.id == menuSearch) {
				menuFound = menu;
			}
		});
		return menuFound;
	});
	
	
	dojo.setObject('createDropdowns', function() {
		var domainString = 'http://www.redfin.com';
		if( window.location.hostname.search(/redfintest/) >= 0 )
		{
		    domainString = 'http://www.redfintest.com';
		}
	
		var nav = dojo.query('div#header div.nav')[0];
		for (var menuName in menus) {

			var menu = menus[menuName];
			
			var menuDiv = dojo.query('#'+menu.id+'_dropdown', nav)[0];
			
			if(!menuDiv) {
				var menuDiv = dojo.doc.createElement("div");
				var uri = menu.uri;
				if( uri.search( /^\// ) == 0 )
				{
				    uri = domainString + uri;
				}
				
				dojo.attr(menuDiv, "id", menu.id+"_dropdown");
				dojo.addClass(menuDiv, "dropdown")
				dojo.place(menuDiv, nav, "last");
				
				var labelA = dojo.doc.createElement("a");
				dojo.addClass(labelA, "label");
				dojo.attr(labelA, 'href', uri);
				dojo.place(labelA, menuDiv, "first"); 
				
				var labelSpan = dojo.doc.createElement("span");
				labelSpan.innerHTML = menu.label;
				dojo.place(labelSpan, labelA, "first");
			}
			
			var menuSpan = dojo.doc.createElement("span");
			dojo.addClass(menuSpan, "menu")
			dojo.place(menuSpan, menuDiv, "last");
			
			var menuUl = dojo.doc.createElement("ul");
			dojo.place(menuUl, menuSpan, "last");
			
			dojo.forEach(menu, function(item){
				var itemUri = item.uri;
				if( itemUri.search( /^\// ) == 0 )
				{
				    itemUri = domainString + itemUri;
				}
				var itemLi = dojo.doc.createElement("li");
				dojo.place(itemLi, menuUl, "last");
				
				var itemA = dojo.doc.createElement("a");
				dojo.attr(itemA, "href", itemUri);
				itemA.innerHTML = item.label;
				dojo.place(itemA, itemLi, "first");
				
				try {
					if (rollover != undefined || rollover != null) {
						var itemRollover = dojo.doc.createElement("span");
						itemRollover.innerHTML = rollover;
						dojo.addClass(itemRollover, 'rollover');
						dojo.place(itemRollover, itemA, "first");
					}
				} catch (e) {}

			});
		}
	});
	dojo.setObject('findDropdowns', function() {
	    dojo.query('.dropdown').forEach(function(dropdown){
	        dojo.connect(dropdown, "onmouseover", dropdown_onMouseOver);
	        dojo.connect(dropdown, "onmouseout", dropdown_onMouseOut);
	        dojo.query('span.menu ul li a', dropdown).forEach(function(menuItem, i){
	        	if (i == (dojo.query('ul li a', dropdown).length) - 1) {
	        		dojo.addClass(menuItem, 'last');
	        	}
	        	if (i == 0) {
	        		dojo.addClass(menuItem, 'first');
	        	}
	        });
	    }).filter(function(dropdown){
	        return dojo.hasClass(dropdown.parentNode, 'nav');
	    }).forEach(function(navDropdown, i){
	    	// Note: this is for floated elements (thus backwards, top html is right is last and vice versa)
	    	if (i == (dojo.query('.dropdown').length)-1) {
	    		dojo.addClass(navDropdown, 'first');
	    	}
	    	if (i == 0) {
	    		dojo.addClass(navDropdown, 'last');
	    	}
	    }).filter(function(navDropdown){
	        return !dojo.hasClass(navDropdown, 'last');
	    })
	    /*.addContent("<span class='spacer'>"+spacer+"</span>", 'before');  Adds spacer element between menus in the nav */
	});

	dojo.setObject('dropdown_onMouseOver', function(event) {
		
		
	    var menu = dojo.query('span.menu', event.currentTarget)[0];
	    var labelA = dojo.query('a.label', event.currentTarget)[0];
	    var labelSpan = dojo.query('span', labelA)[0];
	    dojo.attr(labelA, 'style', '');
	    dojo.style(menu, 'top', dojo.coords(labelA).h);
	    //var left = dojo.coords(menu).w - dojo.coords(labelA).w;
	    var left = 174 - dojo.coords(labelA).w;
	    var top = dojo.coords(labelA).h + 3;  //Need to put some more logical logic here... someday (detect stroke and match offset)
	 
	    // Crazy quick fix for rounding issues in firefox
	    if (dojo.isFF) {
	    	var targetId = dojo.attr(event.currentTarget, 'id')
	    	var targetName = targetId.substring(0, targetId.indexOf('_dropdown'));
	    	var menuData = getMenu(targetName);
	    	if (menuData != false) {
				if (menuData.off == '1') {
					if (navigator.appVersion.indexOf("Mac")!=-1) {
						left -= 1;
					} else {
						left +=1;
					}
				}
	    	}
	    }
	    
	    dojo.style(menu, 'left', '-'+left+'px');
	    dojo.style(menu, 'top', top+'px');
	    dojo.query('a.label', event.currentTarget).addClass('hover');
	    dojo.addClass(event.target, 'hover');
	    dojo.query('span.menu', event.currentTarget).style('display', 'block');
	});

	dojo.setObject('dropdown_onMouseOut', function(event) { 
	    dojo.query('span.menu', event.currentTarget).style('display', 'none');
	    dojo.query('a.label', event.currentTarget).removeClass('hover');
	    dojo.removeClass(event.target, 'hover');
	    
	    if (!dojo.attr(event.target, 'class')) {
	    	dojo.removeAttr(event.target, 'class');
	    };
	});
	

	try {
		if (menus != undefined || menus != null) {  /*Menus is array that is defined in CMS and imbedded in page head (or somewhere else, AJAX for forums header to be written */
			createDropdowns();
			findDropdowns();
			
		}
	} catch (e) {}

	
});
