// page init
jQuery(function(){
	initCufon();
	initScaleDrop();
	initSlideDrop();
})

// cufon init
function initCufon() {
	Cufon.replace('.info-block h1', { fontFamily: 'Arial Narrow Bold'});
	Cufon.replace('#sidebar .date', { fontFamily: 'Arial Narrow Bold'});
}

// sliding dropdown init
function initSlideDrop() {
	$('#nav').slideDropdown({
		hoverClass:'hover',
		items:'> li',
		drop:'.drop',
		slideSpeed: 300,
		addIFrame:true,
		vertical:true
	});
}

// slide dropdown plugin
jQuery.fn.slideDropdown = function(_options){
	// default options
	var _options = jQuery.extend({
		hoverClass:'expanded',
		items:'> li',
		drop:'div.drop',
		slideSpeed: 500,
		stayTime: 100,
		hideSpeed:-1,
		addIFrame:false,
		vertical:true
	},_options);

	return this.each(function(){
		// options
		var _holder = jQuery(this);
		var _slideSpeed = _options.slideSpeed;
		var _hideSpeed = _options.hideSpeed;
		var _activeClass = _options.hoverClass;
		var _vertical = _options.vertical;
		var _stayTime = _options.stayTime;
		var _addIFrame = _options.addIFrame;
		var _items = jQuery(_options.items, _holder);
		if(_hideSpeed<0) _hideSpeed = _slideSpeed;

		// init behaviour
		_items.each(function(){
			var _opener = jQuery(this);
			var _drop = _opener.find(_options.drop);
			if(_drop.length) {
				var _dropHolder = jQuery('<dropholder>');
				var _dropHeight, _dropWidth;
				var _timer;

				// create wrapper
				if(_vertical) _opener.css({position:'relative'})
				_dropHeight = _drop.show().outerHeight();
				_dropWidth = _drop.outerWidth();

				if(_vertical) _drop.css({marginTop:-_dropHeight});
				else _drop.css({marginLeft:-_dropWidth});

				// set styles
				_dropHolder.show().css({
					position:'absolute',
					overflow:'hidden',
					display:'block',
					top:_drop.css('top'),
					left:_drop.css('left'),
					height:_dropHeight,
					width:_dropWidth
				});
				_drop.css({
					top:'auto',
					left:'auto'
				})
				_dropHolder.appendTo(_opener).append(_drop).hide();

				// IE6 fix
				if(_addIFrame) {
					if(jQuery.browser.msie && jQuery.browser.version < 7) {
						var _frame = $('<iframe src="javascript:false">');
						_frame.css({
							position:'absolute',
							height:_dropHeight,
							width:_dropWidth,
							zIndex:0,
							opacity:0,
							left: 0,
							top: 0
						});
						_frame.appendTo(_drop)
					}
				}

				// toggle drop
				function toggleDrop(state) {
					if(_timer) clearTimeout(_timer)
					_timer = setTimeout(function(){
						// vertical drop
						if(_vertical) {
							if(state) {
								_dropHolder.show(); _drop.stop().animate({marginTop:0},{duration:_slideSpeed});
							}
							else {
								_drop.stop().animate({marginTop:-_dropHeight},{duration:_hideSpeed,complete:function(){_dropHolder.hide()}});
							}
						}
						else {
							if(state) {
								_dropHolder.show(); _drop.stop().animate({marginLeft:0},{duration:_slideSpeed});
							}
							else {
								_drop.stop().animate({marginLeft:-_dropWidth},{duration:_hideSpeed,complete:function(){_dropHolder.hide()}});
							}
						}

					},_stayTime);
				}

				// drop behaviour
				_opener.hover(function(){
					toggleDrop(true);
				},function(){
					toggleDrop(false);
				})
			}
		});
	});
}

// scale dropdown
function initScaleDrop() {
	initNav({
		menuId: "nav",
		cleverMode: true,
		hoverClass: "hover",
		flexibility: true,
		sideClasses: true,
		menuPaddings: 60,
		minWidth: "li",
		center: true
	});
}
function initNav(o) {
	if (!o.menuId) o.menuId = "nav";
	if (!o.cleverMode) o.cleverMode = false;
	if (!o.flexibility) o.flexibility = false;
	if (!o.dropExistenceClass) o.dropExistenceClass = false;
	if (!o.hoverClass) o.hoverClass = "hover";
	if (!o.menuHardCodeClass) o.menuHardCodeClass = "menu-hard-code";
	if (!o.sideClasses) o.sideClasses = false;
	if (!o.center) o.center = false;
	if (!o.menuPaddings) o.menuPaddings = 0;
	if (!o.minWidth) o.minWidth = 0;
	if (!o.coeff) o.coeff = 1.7;
	var n = document.getElementById(o.menuId);
	if(n)
	{
		n.className = n.className.replace(o.menuHardCodeClass, "");
		var lfl = [];
		var li = n.getElementsByTagName("li");
		for (var i=0; i<li.length; i++)
		{
			li[i].className += (" " + o.hoverClass);
			var d = li[i].getElementsByTagName("div").item(0);
			if(d)
			{
				if(o.flexibility)
				{
					var a = d.getElementsByTagName("a");
					for (var j=0; j<a.length; j++)
					{
						var w = a[j].parentNode.parentNode.offsetWidth;
						if(w > 0)
						{
							if(typeof(o.minWidth) == "number" && w < o.minWidth)
								w = o.minWidth;
							else if(typeof(o.minWidth) == "string" && li[i].parentNode == n && w < li[i].offsetWidth)
								w = li[i].offsetWidth - 3;
							a[j].style.width = w - o.menuPaddings + "px";
						}
					}
					d.style.width = li[i].getElementsByTagName("div").item(1).clientWidth + "px";
				}
				var t = document.documentElement.clientWidth/o.coeff;
				if(li[i].parentNode != n && (!o.cleverMode || fPX(li[i]) < t))
				{
					d.style.right = "auto";
					d.style.left = li[i].parentNode.offsetWidth + "px";
					d.parentNode.className += " left-side";
				}
				else if(li[i].parentNode != n && (o.cleverMode || fPX(li[i]) >= t))
				{
					d.style.left = "auto";
					d.style.right = li[i].parentNode.offsetWidth + "px";
					d.parentNode.className += " right-side";
				}
				else if(li[i].parentNode == n && o.cleverMode && fPX(li[i]) >= t)
				{
					li[i].className += " right-side";
				}
				if(li[i].parentNode == n && o.center)
					d.style.left = -li[i].getElementsByTagName("div").item(1).clientWidth/2 + li[i].clientWidth/2 + "px";
			}
			if(o.dropExistenceClass && li[i].getElementsByTagName("ul").length > 0)
			{
				li[i].className += (" " + o.dropExistenceClass);
				li[i].getElementsByTagName("a").item(0).className += (" " + o.dropExistenceClass + "-link");
				li[i].innerHTML += "<em class='pointer'></em>";
			}
			if(li[i].parentNode == n) lfl.push(li[i]);
		}
		if(o.sideClasses)
		{
			lfl[0].className += " first-child";
			lfl[0].getElementsByTagName("a").item(0).className += " first-child-link";
			lfl[lfl.length-1].className += " last-child";
			lfl[lfl.length-1].getElementsByTagName("a").item(0).className += " last-child-link";
		}
		for (var i=0; i<li.length; i++)
		{
			li[i].className = li[i].className.replace(o.hoverClass, "");
			li[i].onmouseover = function()
			{
				this.className += (" " + o.hoverClass);
			}
			li[i].onmouseout = function()
			{
				this.className = this.className.replace(o.hoverClass, "");
			}
		}
	}
	function fPX(a)
	{
		var b = 0;
		while (a.offsetParent) {b += a.offsetLeft; a = a.offsetParent;}
		return b;
	}
}