var SlateNav = {};
// NOTE: initialized in a doc.ready call at end of file
SlateNav.MYSLATE_TRACKING_PIXEL_URL = 'http://ad.doubleclick.net/clk;252663412;73738151;f;pc=[TPAS_ID];ord=' + Math.floor(Math.random()*10000000000) + '?';
SlateNav.FLYOUT_COLUMN_SIZE = 3;
SlateNav.sects = $('.sl-nav-sect-link[class!="sl-nav-lock"][class!="sl-nav-sl-nav-99"]');
// SlateNav.sectionMap maps identifying component of the nav section links'
// classes to static vals.
// The second class name in each link contains an identifier we'll ultimately
// use to fetch each
// section's most recent stories, e.g. the 'np' in 'sl-nav-np-link' maps that
// element to
// 'News and Politics'.
SlateNav.sectionMap = {
	'np' : {
		path : 'news_and_politics',
		name : 'News and Politics',
		list : ''
	},
	'tech' : {
		path : 'technology',
		name : 'Technology',
		list : ''
	},
	'bus' : {
		path : 'business',
		name : 'Business',
		list : ''
	},
	'arts' : {
		path : 'arts',
		name : 'Arts',
		list : ''
	},
	'life' : {
		path : 'life',
		name : 'Life',
		list : ''
	},
	'hs' : {
		path : 'health_and_science',
		name : 'Health and Science',
		list : ''
	},
	'spo' : {
		path : 'sports',
		name : 'Sports',
		list : ''
	},
	'dx' : {
		path : 'double_x',
		name : 'Double X',
		list : ''
	},
	'pod' : {
		path : 'podcasts',
		name : 'Podcasts',
		list : ''
	},
	'gal' : {
		path : 'galleries',
		name : 'Galleries',
		list : '',
		link : false
	},
	'vid' : {
		path : 'video',
		name : 'Video',
		list : false
	},
	'slst' : {
		path : 'slatest',
		name : 'Slatest',
		list : '',
		link : 'http://slatest.slate.com/'
	},
	'blogs' : {
		path : 'blogs',
		name : 'Blogs',
		list : '',
		link : false
	},
	'mys' : {
		path : 'my_slate',
		name : 'MySlate',
		list : '',
		link : '/myslate.html'
	}
}
// flyout data parsed into this object. keys are the section names, vals are
// arrays of that section's
// stories.
SlateNav.flyoutMap = {};
SlateNav.init = function() {
	// var slateFlyoutData decalred in separate script:
	// http://www.slate.com/content.flyout.json
	$(slateFlyoutData)
			.each(
					function(i) {
						SlateNav.flyoutMap[slateFlyoutData[i].name] = slateFlyoutData[i].stories;
					});
	SlateNav.initHandlers();
	setInterval(function() {
		$('.mys-stream-list').animate({
			top : '0px'
		}, 'slow', 'swing', function() {
			$('.mys-stream-list').css('top', '-70px');
		});
	}, 5000);
}

SlateNav.initHandlers = function() {
	var tout;
    var navpanel = $('.sl-nav-panel'); // Doesn't change, so cache here to avoid some jquery searches on mousemove
	// for each section link, assign event handlers
	for ( var i = 0; i < SlateNav.sects.length; i++) {
		// add ref to flyout element to be used in the handlers
		SlateNav.sects[i].sectId = $(SlateNav.sects[i]).attr('class')
				.split(' ')[1].split('-')[2];
		// SlateNav.sects[i].flyout = $('.sl-nav-' + SlateNav.sects[i].sectId +
		// '-flo');
		$(SlateNav.sects[i])
				.hoverIntent(
					function() {
						var sect = this;
						// mouseouts have a 500ms delay before flyouts get
						// hidden.
						clearTimeout(tout);
						// If flyout list is empty, populate it
						if (!SlateNav.sectionMap[sect.sectId].list) {
							var stories = SlateNav.flyoutMap[SlateNav.sectionMap[sect.sectId].name] || [];
							SlateNav.createFlyout(stories, sect.sectId);
						}
						$('.sl-nav-panel .sl-nav-panel-inner').html(
							SlateNav.sectionMap[sect.sectId].list);
						navpanel.slideDown('fast');
                        
                        // Orient nav indicator in flyout
                        var indicator = $('.sl-nav-indica');
                        var secNavWidth = $(this).width();
                        var secNavPos = $(this).position().left + (secNavWidth/1.5) + indicator.width();
                        indicator.css('left',secNavPos);
                        
                        // Is this the MySlate section?
                        if ($(sect).attr('href').indexOf(SlateNav.sectionMap.mys.link) != -1) {
                            if ($("#myslate-tracking-pixel").size() == 0) {
                                navpanel.prepend('<img src="' + SlateNav.MYSLATE_TRACKING_PIXEL_URL +'" width="1" height="1" alt="" border="0" id="myslate-tracking-pixel" style="display:none"/>');
                            }
                            
                            if (!MySlateData.isActiveUser) {
                                SlateNav.newUserMessage(true);
                            }  else {
                                //show sponsored by to user
                                $(".sl-nav-menu:last").append('<div class="sl-nav-myslate-sponsored-logged-in"><div class="sl-nav-myslate-caption">Sponsored Link</div><div class="sl-nav-myslate-sp-link-text"><a href="/myslate.html">MySlate: Personalized news for Slate readers. Presented by Toyota</a></div></div>')
                            }
                        } else {
                            SlateNav.newUserMessage(false);
                        }
                        //console.log("hi fired");
					}, function() { 
                        //console.log("hi out fired");
                    }
                );
	}
	$('.sl-nav-sect-link, .sl-nav-panel, .sl-header-plink, .sl-nav-cntr').mouseout(
			function() {
                //console.log("out fired");
				clearTimeout(tout);
				tout = setTimeout(function() {
                    SlateNav.newUserMessage(false);
					navpanel.slideUp('fast');
				}, 50)
			});
	navpanel.mousemove(function() {
        //console.log("mm fired");
		clearTimeout(tout);
	});
    $('.sl-nav-cntr').mousemove(function() {
        if (navpanel.css('display') == 'block') {
            clearTimeout(tout);
        }
    });
        
}

SlateNav.createFlyout = function(stories, sectId) {
	var div, indicator, ul, li, p, h5, a, span, authors;
	// sectId is used to select elements from the dom
	div = $(document.createElement('div'));
	// flyout = $('.sl-nav-' + sectId + '-flo');
	// create ul element using createElement (it's faster)
	ul = $(document.createElement('ul'));
	ul.addClass('sl-nav-menu');
    
    // Add in nav section indicator
    if ($('.sl-nav-indica').length == 0){
        indicator = $(document.createElement('div'));
        indicator.addClass('sl-nav-indica');
        $('.sl-nav-panel').append(indicator);
    }
    
	segmentSize = Math.ceil(stories.length / SlateNav.FLYOUT_COLUMN_SIZE);
	// loop thru stories, adding <li>s for each
	// console.log(segmentSize);
	$.each(stories, function(i, entry) {
		if ((i > 0) && ((i % segmentSize) == 0)) {
			div.append(ul);
			ul = $(document.createElement('ul'));
			ul.addClass('sl-nav-menu');
		}
		// handling different author cases
		if (entry.authors.length > 0) {
			if (entry.authors.length >= 3) {
				authors = " | " + entry.authors[0] + ' et al.';
			} else if (entry.authors.length == 2) {
				authors = " | " + entry.authors[0] + ' & ' + entry.authors[1];
			} else {
				authors = " | " + entry.authors[0];
			}
		} else {
			authors = '';
		}
		li = $(document.createElement('li'));
		li.addClass('sl-nav-menu-item');
		// if(i==0){
		// $(li).addClass('sl-nav-menu-item-first');
		// }
		ul.append(li);
		p = $(document.createElement('p'));
		p.addClass('sl-nav-byline');
		li.append(p);
		// Add rubric and author data
		span = $(document.createElement('span'));
        span.addClass('sl-to-uppercase');
		span.html(entry.rubric);
		p.append(span);
		p.append(authors);

		h5 = $(document.createElement('h5'));
		h5.addClass('sl-nav-hed');
		li.append(h5);
		// add menuline and link data
		a = $(document.createElement('a'));
		a.addClass('sl-nav-link');
		a.attr('href', entry.link);
		a.html(entry.menuline);
		h5.append(a);
		li = p = span = h5 = a = null;
	});
	li = $(document.createElement('li'));
	li.addClass('sl-nav-menu-item');
	ul.append(li);
	h5 = $(document.createElement('h5'));
	h5.addClass('sl-nav-hed');
	li.append(h5);
	// big "SEE ALL..." link at the end of each flyout
	if (!("link" in SlateNav.sectionMap[sectId]) || SlateNav.sectionMap[sectId].link != false) {
		var seeAllLink = ("link" in SlateNav.sectionMap[sectId]) ? SlateNav.sectionMap[sectId].link : 'http://' + SlateNav.getLinkHost() + '/articles/'
				+ SlateNav.sectionMap[sectId].path + '.html';
		a = $(document.createElement('a'));
		a.addClass('sl-nav-link');
		a.addClass('sl-to-uppercase');
		a.attr('href', seeAllLink);
		a.append('See all ' + SlateNav.sectionMap[sectId].name);
		h5.append(a);
	}
	div.append(ul);
	SlateNav.sectionMap[sectId].list = div.html();
	li = h5 = a = ul = authors = null;
}
SlateNav.getLinkHost = function() {
	var host;
	var regex = /(cq5)|(pub\d+)|(author)(.\w+)*|(www)+|(slatest)+.slate.com/;
	if (regex.test(window.location.hostname)) {
		host = window.location.hostname;
	} else {
		host = "www.slate.com";
	}
	if (window.location.port) {
		host += ':' + window.location.port;
	}
	return host;
}
SlateNav.newUserMessage = function(on) {
    if (on) {
        $(".sl-nav-panel").css('min-height', '150px').append('<div class="sl-nav-myslate-new-user"><div class="sl-nav-myslate-welcome-header">Welcome to MySlate!</div><div class="sl-nav-myslate-welcome-text">MySlate is a new tool that lets you track your favorite parts of <em>Slate</em>. Already a member? <a href="/myslate.html">Sign in</a>. Or <a href="/myslate.html">get started now</a>!</div><div class="sl-nav-myslate-sponsored"><div class="sl-nav-myslate-caption">Sponsored Link</div><div class="sl-nav-myslate-sp-link-text"><a href="/myslate.html">MySlate: Personalized news for Slate readers. Presented by Toyota</a></div></div></div>');
    } else {
        $(".sl-nav-panel .sl-nav-myslate-new-user").remove();
        $(".sl-nav-panel").css('min-height', '0');
    }
};

$(document).ready(function() {
	SlateNav.init();
	var lockObj = $("li.sl-nav-lock");
	lockObj.click(function() {
		var bgUrl = lockObj.css("background-image");
		if (bgUrl.indexOf("/images/unlocked.png") > 0) {
			//Lock it;
			lockObj.css('background-image', bgUrl.replace("unlocked.png", "locked.png"));
			if ($(".sl-nav-panel").css('display') == 'block') {$(".sl-nav-panel").slideUp('fast');}
			for ( var i = 0; i < SlateNav.sects.length; i++) {
				$(SlateNav.sects[i]).hoverIntent(function(){},function(){});
			}
		} else {
			//UnLock it;
			lockObj.css('background-image', bgUrl.replace("locked.png", "unlocked.png"));
			SlateNav.initHandlers();
		}
	});
});
