﻿/// <reference path='~/jQuery/jQuery-vsdoc.js' />
var _cap = {client:''}

_cap.OnLoad = function() {
	_cap.LogoTop = 20
	_cap.MenuTop = _cap.LogoTop + _mp.logoClear.height() + 4
	_cap.MenuIndent = 20
	_cap.TotalMenuWidth = 0
}

// Get the client menu and wait for the logo to slide
_cap.DrawPage = function(client) {
	if (_cap.client != client)
	{
		_cap.menu = null
		_cap.menuLoaded = false
		_cap.client = client
		$.ajax({
			type: "POST",
			url: "ClientMenu.aspx/GetMenu",
			data: "{'client':'" + client + "'}",
			contentType: "application/json; charset=utf-8",
			dataType: "json",
			// _cap.menu=[{mc:'Locations',mt:'cache/mt Locations 9.png',ms:'cache/ms Locations 9.png',width:64, content:[{mc:'CafeDotcom',mt:'cache/mt CafeDotcom 9.png',ms:'cache/ms CafeDotcom 9.png',width:86, content:{imgs:[{name:"_MG_1425.jpg",width:640,height:426,textImg:'cache/fn _MG_1425 9.png',textLen:68}
			success: function(xhr) {
			 eval(xhr.d)
			  }
		})
	}
	_mp.SwitchLogoFooter(_cap.LogoTop, _cap.WaitForMenu)
}

// Called when the logo has completed its slide
// Reveals the top level menu
_cap.WaitForMenu = function()
{
	if (_cap.menu == null)
		setTimeout(_cap.WaitForMenu, 100)	// waiting for ajax
	else
	{
		_mp.hotSpot.Div.unbind()
		if ( ! _cap.menuLoaded)
		{
			_cap.InsertMenu(_cap.menu, "mc_", 'mcap ', 0)
			_cap.menuLoaded = true
			_cap.allMenuItems = $('.mcap')
		}
		_mp.RevealMenuItems(0, _mp.menuLeft, _cap.MenuTop, $('.mc_.sel'), $('.mc_.top'))
		_cap.PositionDivs()	
	}
}

// Recursevely insert menus into the DOM
// Also calculates _cap.TotalMenuWidth
_cap.InsertMenu = function(menus, menuClass, commonClass, indent)
{
	for (var idx in menus)
	{
		var menuitem = menus[idx]
		var totalWidth = indent + menuitem.width
		if (_cap.TotalMenuWidth < totalWidth)
			_cap.TotalMenuWidth = totalWidth
		var isSubMenu = menuitem.content && !menuitem.content.folder
		var subMenuClass = menuClass + menuitem.mc
		var menuTop = _cap.AddMenuItem(menuitem.mt, commonClass + menuClass + ' top', subMenuClass)
		var menuSel = _cap.AddMenuItem(menuitem.ms, commonClass + menuClass + ' sel', subMenuClass)
		var option = menuTop.bind('mouseover', _mp.FadeIn)
											  .bind('mouseout', _mp.FadeOut)
											  .add(menuSel)
		if (isSubMenu)
		{
			option.bind('click', function(event) { _cap.ClickMenu(event) })
			_cap.InsertMenu(menuitem.content, subMenuClass, commonClass, indent + _cap.MenuIndent)
		}
		else if (menuitem.mc == 'Log_Out')
			option.bind('click', _cap.ClickLogout)
		else
		{
			var content = menuitem.content
			var folder = 'Clients/' + _cap.client + '/' + content.folder
			menuTop[0].imageSet =
			menuSel[0].imageSet = new ImageSet(subMenuClass, folder, content.imgs, _cap.fontSize, content.totalWidth, content.numWidth, content.totalName)
			option.bind('click', function(event) { event.target.imageSet.LoadThumbs() })
		}
	}
}

_cap.AddMenuItem = function(src, menuClass, subMenuClass)
{
	var img = new Image()
	img.src = src
	_mp.Frame.Div.append(img)
	img.subMenuClass = subMenuClass
	return $(img).addClass(menuClass)
}

// Expand and/or contract submenus
_cap.ClickMenu = function(event)
{
	caller = event.target
	// After hiding this menu do we need to Open the caller menu
	var openCallerMenu = caller.isOpen ? null : func = function() { _cap.OpenCallerMenu(caller) }

	// 1st hide any open menu
	var found = false
	$('.mc_.sel,.mc_.top').each(function()
	{
		if (this.isOpen)
		{
			// Hide this open menu.
			this.isOpen = false
			var top = parseInt($(this).css('top')) + _mp.LogoMenu.space
			var menuSel = $('.' + this.subMenuClass + '.sel')
			var menuTop = $('.' + this.subMenuClass + '.top')
			var height = menuTop.length * _mp.LogoMenu.space
			_cap.Slide(top + height, -height)
			_cap.HideMenu(menuSel.length - 1, menuSel, menuTop, openCallerMenu)
			found = true
		}
	})

	// If no submenu was hidden, then open the caller menu
	if (!found)
		_cap.OpenCallerMenu(caller)
}

_cap.OpenCallerMenu = function(caller)
{	
	var top = parseInt($(caller).css('top')) + _mp.LogoMenu.space
	var menuSel = $('.' + caller.subMenuClass + '.sel')
	var menuTop = $('.' + caller.subMenuClass + '.top')
	var height = menuTop.length * _mp.LogoMenu.space
	if (menuSel.css('display') == 'none')
	{
		// Before expanding this menu. Contract all other menus
		caller.isOpen = true
		_cap.Slide(top, height)
		var left = parseInt($(caller).css('left')) + _cap.MenuIndent
		_mp.RevealMenuItems(0, left, top, menuSel, menuTop)
	}
}

// Slide all menu items, that are on or below 'topLimit', up/down by 'distance'
_cap.Slide = function(topLimit, distance)
{
	_cap.allMenuItems.each( function() {
			var item = $(this)
			var top = parseInt(item.css('top'))
			if (top >= topLimit)
				item.animate({ top: top + distance + 'px' }, { duration: 200 })
		})
}

// Hide all items in the given menu, working from the bottom up
// Calls func when all items are hidden
_cap.HideMenu = function(idx, menuSel, menuTop, func)
{
	$(menuSel[idx]).hide()
	$(menuTop[idx]).stop()
								 .animate({ opacity: 'hide' }, { duration: 200, queue: true })
	if (idx > 0)
		setTimeout(function() { _cap.HideMenu(idx - 1, menuSel, menuTop, func) }, 30)
	else if (func)
		setTimeout(func, 300)
}

// Hide all menu items and then switch to the main page
_cap.ClickLogout = function()
{
	if (ImageSet.CurrentThumbSet)
		ImageSet.CurrentThumbSet.HideFullImage()
	ImageSet.prototype.HideThumbSet(null)
	_mp.Thumbs.Div.hide()
	var menuSel = $('.mcap.sel')
	var menuTop = $('.mcap.top')
	_cap.HideMenu(menuSel.length - 1, menuSel, menuTop, function() { _mp.SwitchLogoFooter(0) })
}

// Position the Thumb and Image Divs
_cap.PositionDivs = function() {
	_mp.Thumbs.top = _cap.MenuTop
	_mp.Thumbs.left = _mp.LogoMenu.left + _cap.TotalMenuWidth + 8
	_mp.Thumbs.width = _mp.Frame.width - _mp.Thumbs.left - _mp.Frame.padding
	var absLeft = _mp.Frame.left + _mp.Thumbs.left
	var thirdWidth = Math.floor(_mp.Thumbs.width / 3)
	_mp.Thumbs.limitLeft = absLeft + thirdWidth
	_mp.Thumbs.limitMid = _mp.Thumbs.limitLeft + thirdWidth
	_mp.Thumbs.height = _mp.Frame.height - _cap.MenuTop - _mp.Frame.padding
	_mp.Thumbs.Div.css({top: _mp.Thumbs.top + 'px',
											left: _mp.Thumbs.left + 'px',
											width: _mp.Thumbs.width,
											height: _mp.Thumbs.height})
	_mp.Thumbs.Scroll.css({ width: _mp.Thumbs.width,
													height: _mp.Thumbs.height})
}

