$(document).ready(function(){
	
	$.manageAjax.create("categoryBrowser", {
		queue: true,
		abortOld: true
	});
	
	$('#categoryBrowser-List ul li ul, #categoryBrowser-List ul li div, .categoryBrowser-History ul li ul, .categoryBrowser-History ul li div').hide();
	$('#categoryBrowser-List > div > ul > li > a.landingPage, .categoryBrowser-History > div > ul > li > a.landingPage').each(function(){
		$(this).nextAll('div.intro').addClass('landingPage');
	});
	$('#categoryBrowser-List > div > ul > li > a, .categoryBrowser-History > div > ul > li > a').removeClass('landingPage');
	// hidden by default, so browsers without JS don't see the unformatted list
	$('#categoryBrowser').show();
	// hide the default list
	$('#product-SubCategories').hide();
	_setHeight($('#categoryBrowser-PreviewPane'),$('#categoryBrowser-List'));

	$('#categoryBrowser-List ul li a').live('click',function(event){
		event.preventDefault();
		var eventEl = $(event.target);
		if (eventEl.hasClass('productPage') || eventEl.hasClass('landingPage')) {
			window.location = eventEl.attr('href');
		} else {
			var subMenu = eventEl.nextAll('div, ul').clone();
			var previewPane = $('#categoryBrowser-PreviewPane');
			if (previewPane.hasClass('categoryBrowser-Featured')) {
				featured = previewPane.clone();
				featured.attr('id','categoryBrowser-Featured').hide().appendTo('#categoryBrowser');
				$('<a href="#categoryBrowser-Featured" id="categoryBrowser-FeaturedLink" class="fr" style="position:relative;top:15px;right:22px;">Featured Products</a>').appendTo('#categoryBrowser-Breadcrumb');
			}
			$('#categoryBrowser-List ul li.selected').removeClass('selected prel').find('div:last').remove();
			eventEl.parent('li').addClass('selected prel').append('<div style="position:absolute;top:0;right:-3px;z-index:1;background-color:#FFFFFF;height:23px;width:3px;"></div>');
			if (eventEl.nextAll('div.intro').hasClass('landingPage')) {
				titleText = '<a href="' + eventEl.attr('href') + '" class="landingPage">' + eventEl.text() + '</a>';
			} else {
				titleText = eventEl.text();
			}
			previewPane.html('<div class="title">' + titleText + '</div>').css({backgroundColor:'#FFFFFF'}).removeClass('categoryBrowser-Featured');
			if (jQuery.browser.msie) {
				subMenu.show().appendTo(previewPane);
			} else {
				subMenu.css({opacity:'0'}).show().appendTo(previewPane).animate({opacity:'1'},1000);
			}
			$('#categoryBrowser-PreviewPane > div, #categoryBrowser-PreviewPane > ul').wrapAll('<div class="mt10" />');
			$('.intro ul, .intro div',previewPane).show();
			list = $('#categoryBrowser-List');
			
			_setHeight(previewPane,list);
	
			$('#categoryBrowser-PreviewPane ul li a').each(function(index,el){
				loadNext($(this));
			});
		}
	});
	
	$('#categoryBrowser-PreviewPane ul li a').live('click', function(event){
		event.preventDefault();
		var eventEl = $(event.target);
		if (eventEl.hasClass('productPage') || eventEl.hasClass('landingPage') || eventEl.parents('#categoryBrowser-PreviewPane').hasClass('categoryBrowser-Featured')) {
			window.location = eventEl.attr('href');
		} else {
				__setCookie(eventEl);
				showCategory(eventEl);
		}
	});
	
	$('#categoryBrowser-Breadcrumb a').live('click', function(event){
		event.preventDefault();
		eventEl = $(event.target);
		var historyLink = eventEl.attr('href');
		historySelector = historyLink.split('#')[1];
		var historyItem = $('#' + historySelector);
		if (eventEl.is('#categoryBrowser-FeaturedLink')) {
			$('#categoryBrowser-PreviewPane').remove();
			$('#categoryBrowser-Featured').attr('id','categoryBrowser-PreviewPane').appendTo('#categoryBrowser').show().height('auto');
			eventEl.remove();
			$('#categoryBrowser-List li.selected').removeClass('selected prel');
		} else {
			$('#categoryBrowser-List').remove();
			var historyLink = eventEl.attr('href');
			historySelector = historyLink.split('#')[1];
			var historyItem = $('#' + historySelector);
			if (jQuery.browser.msie) {
				historyItem.attr('id','categoryBrowser-List').removeClass('categoryBrowser-History').show().insertAfter('#categoryBrowser-Breadcrumb');
			} else {
				historyItem.attr('id','categoryBrowser-List').removeClass('categoryBrowser-History').css({opacity:'0'}).show().insertAfter('#categoryBrowser-Breadcrumb').animate({opacity:'1'});
			}
			var removeAbove = $('#categoryBrowser-Breadcrumb a:not("#categoryBrowser-FeaturedLink")').index(eventEl) - 1;
			if (removeAbove == -1) {
				$('#categoryBrowser-Breadcrumb a:not("#categoryBrowser-FeaturedLink")').each(function(){
					$(this).prev('span.separator').remove();
				}).remove();
				$('.categoryBrowser-History').remove();
			} else {
				$('#categoryBrowser-Breadcrumb a:gt(' + (removeAbove + 1) + '):not("#categoryBrowser-FeaturedLink")').each(function(){
					$(this).prev('span.separator').remove();
				}).remove();
				$('.categoryBrowser-History:gt(' + (removeAbove + 1) + ')').remove();
			}
			activeLink = historyItem.find('li.selected > a');
			if (removeAbove == -1) {
				page_cPath = parse_cPath(location.href);
				eraseCookie('mpCategoryBrowser-Page' + page_cPath);
			} else {
				__setCookie(activeLink);
			}
			activeLink.trigger('click');
		}
	});
	
	$('#categoryBrowser-Help').click(function(){
		var cbParent = $('#categoryBrowser').parent().parent();
		var shim = $('#categoryBrowser').parent();
		cbParent.addClass('prel');
		var overlayWidth =  cbParent.width() + (shim.offset().left - cbParent.offset().left);
		var overlayHeight = cbParent.height();
		var overlay = $('<div id="categoryBrowser-Overlay" />').css({width:overlayWidth + 'px',height:overlayHeight + 'px',position:'absolute',top:0,left:0}).appendTo(cbParent);
		overlay.append($('<div id="categoryBrowser-OverlayBlackout" />').css({width:overlayWidth + 'px',height:overlayHeight + 'px',position:'absolute',zIndex:'2'}));
		var previewPane = $('#categoryBrowser-PreviewPane');
		var helpPane = previewPane.clone().addClass('fr').attr('id','categoryBrowser-HelpDialog')
				.css({zIndex:3,backgroundColor:'#FFFFFF',position:'relative'})
				.height(500)
				.html('<div id="categoryBrowser-CloseHelp" class="imageText">close<span></span></div><div class="mt10">this is the help text</div>');
		previewPane.hide();
		helpPane.appendTo(overlay);
	});
	
	$('#categoryBrowser-CloseHelp').live('click',function(){
		$('#categoryBrowser-Overlay').remove();
		$('#categoryBrowser-PreviewPane').show();
	});
	
	if ((stored_cPath = readCookie('mpCategoryBrowser-Page' + parse_cPath(location.href))) !== null) {
		selectLink = $('#categoryBrowser-List a[href*="cPath=' + stored_cPath + '&"]');
		selectLink.trigger('click');
	}
});


function _setHeight(setHeight,toHeight) {
	//always reset the height before comparing to ensure the correct value is compared against 
	setHeight.height('auto');
	toHeight.height('auto');
	
	if (setHeight.height() < toHeight.height()) {
		setHeight.height(toHeight.height());
	}
}

function parse_cPath(selectedLink) {
	var linkParts = selectedLink.split('?');
	var queryString = linkParts[1];
	var qsParts = queryString.split('&');
	var cPath = -1;
	for (var i = 0; i < qsParts.length; i++) {	
		if (qsParts[i].indexOf('cPath=') != -1) {
			var cPathParts = qsParts[i].split('=');
			cPath = cPathParts[1];
			break;
		}
	}
	return cPath;
}

function loadNext(eventEl) {
	var selectedLink = eventEl.attr('href');
	cPath = parse_cPath(selectedLink);
	$.manageAjax.add('categoryBrowser',{
		url: 'categoryBrowser.php',
		data: {'cPath': cPath},
		success: function(data){
			_loadResponse(eventEl,data);
		},
		dataType: 'html'
	});
}

function showCategory(eventEl,options) {
	var historyCount = $('.categoryBrowser-History').length + 1;
	var historyLink = 'categoryBrowser-History-' + historyCount;
	var config = {effect:'blind', effectSpeed:1000, breadcrumbSeparator:'>'};
	config = $.extend(config,options);
	var hideMe = $('#categoryBrowser-List');
	var titleBase = hideMe.find('a[href="' + eventEl.attr('href') + '"]');
	var grandTitle = titleBase.closest('div').find('div.title').text();
	var bcLink = $('<a href="#' + historyLink + '">' + grandTitle + '</a>');
	
	if (historyCount > 1) {
		$('<span class="separator">' + config.breadcrumbSeparator + '</span>').appendTo('#categoryBrowser-Breadcrumb');
	}
	bcLink.appendTo('#categoryBrowser-Breadcrumb');

	$('#categoryBrowser-PreviewPane').css('background','transparent').animate({left:'0',borderWidth:'0px'},2000);
	if (eventEl.data('loaded') === true) {
		hideMe.hide(config.effectSpeed, function(){
			hideMe.attr('id',historyLink).addClass('categoryBrowser-History');
			animateCategory(eventEl);
		});
	} else {
		var selectedLink = eventEl.attr('href');
		cPath = parse_cPath(selectedLink);
		$.manageAjax.add('categoryBrowser',{
			url: 'categoryBrowser.php',
			data: {'cPath': cPath},
			success: function(data){
				_loadResponse(eventEl,data);
				hideMe.hide(config.effect,config.effectSpeed, function(){
					hideMe.attr('id',historyLink).addClass('categoryBrowser-History');
					animateCategory(eventEl);
				});
			},
			dataType: 'html'
		});
	}
}

function animateCategory(eventEl) {
	var previewPane = $('#categoryBrowser-PreviewPane').clone();
	$('#categoryBrowser-PreviewPane:first').attr('id','categoryBrowser-List');
	$('#categoryBrowser-List > ul > li > a.productPage, #categoryBrowser-List > ul > li > a.landingPage').parent().hide();
	$('#categoryBrowser-List .intro').hide();
	if (jQuery.browser.msie) {
		previewPane.appendTo('#categoryBrowser').removeAttr('style');
	} else {
		previewPane.css({opacity:'0'}).appendTo('#categoryBrowser').animate({borderWidth:'1px',opacity:1},500,function(){
			height = $(this).height();
			$(this).removeAttr('style').height(height);
		});
	}
	
	eventEl.trigger('click');
}

function _loadResponse(eventEl,data) {
	eventEl.after(data);
	eventEl.nextAll('div, ul').css({'display':'none'});
	eventEl.data('loaded',true);
}

function __setCookie(eventEl) {
	cPath = parse_cPath(eventEl.attr('href'));
	page_cPath = parse_cPath(location.href);
	createCookie('mpCategoryBrowser-Page' + page_cPath,cPath,5);
}

/**
 * http://www.quirksmode.org/js/cookies.html
 */

function createCookie(name,value,mins) {
	if (mins) {
		var date = new Date();
		date.setTime(date.getTime()+(mins*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function eraseCookie(name) {
	createCookie(name,"",-1);
}

