/*
 *	Gui scripts for bhvstore
 *
 *
 **/

document.observe("dom:loaded", function() {
	init();
});

var Timer = null;

function init()
{
	initTabs()
	initProductOverview();
	initGrouped();
	initSlider();
	initPaymentNumber();
	initCheckoutForm();
}

function initCheckoutForm()
{
	var chForm = $('bettercheckout');
	if (chForm)
	{
		var inp = $$('input[value=purchaseorder]')[0];
		Event.observe(inp, 'click', checkVatKvK)

		var inp2 = $$('input[value=ideal_basic]')[0];
		Event.observe(inp2, 'click', uncheckVatKvK)
	}
}
function uncheckVatKvK(event)
{
	unsetRequired('box-billing-business');
}

function checkVatKvK(event)
{
	var element = event.element();
	if (element.checked)
	{
		$('box-billing-business').setStyle({'display': 'block'});
		setRequired('box-billing-business');
	}
	
}

function unsetRequired(id)
{

	var elem = $(id);
	var labels = elem.getElementsByTagName('label');
	var inputs = elem.getElementsByTagName('input');
	for (var n = 0; n < inputs.length; n++)
	{
		$(inputs[n]).removeClassName('required-entry');
	}
	for (n = 0; n < inputs.length; n++)
	{
		$(labels[n]).removeClassName('required');
		var em = labels[n].getElementsByTagName('em');
		if (em[0])
		{
			labels[n].removeChild(em[0]);
		}
	}
}

function setRequired(id)
{
	var elem = $(id);
	var labels = elem.getElementsByTagName('label');
	var inputs = elem.getElementsByTagName('input');

	for (var n = 0; n < inputs.length; n++)
	{
		$(inputs[n]).addClassName('required-entry');
	}
	for (n = 0; n < inputs.length; n++)
	{
		var em = document.createElement('em');
		em.innerHTML = '*';

		labels[n].appendChild(em);
		$(labels[n]).addClassName('required');
	}
}

function initPaymentNumber()
{
	var pNum = $('po_number');
	if (pNum && pNum.value == '')
	{
		pNum.value = '0';
	}
}

function initTabs()
{
	if ($('tab_nav'))
	{
		new Control.Tabs('tab_nav');
	}
}

function initProductOverview()
{
	var ProductGrid = $$('ul.products-grid');
	if (ProductGrid)
	{
		ProductGrid.each(function(Grid)
		{
			productGridSetHeights(Grid);
		});
	}
	var ProductCatGrid = $$('ul.productcategories');
	if (ProductCatGrid)
	{
		ProductCatGrid.each(function(CatGrid)
		{
			productCatGridSetHeights(CatGrid);
		});
	}
	var BestSellers = $$('div.best-sellers')
	if(BestSellers)
	{
		BestSellers.each(function(BestSeller)
		{
			bestSellerSetHeights(BestSeller);
		});
	}
	var Upsells = $$('table#upsell-product-table')
	if(Upsells)
	{
		Upsells.each(function(Upsell)
		{
			upsellSetHeights(Upsell);
		});
	}
	var Assocs = $$('.course-view')
	if(Assocs)
	{
		Assocs.each(function(Assoc)
		{
			assocSetHeights(Assoc);
		});
	}
}

function upsellSetHeights(Upsell)
{
	equalizeHeights(Upsell.select('h3'));
}

function bestSellerSetHeights(BestSeller)
{
	equalizeHeights(BestSeller.select('h3'));
	equalizeHeights(BestSeller.select('p'));
}
function assocSetHeights(Assoc)
{
	equalizeHeights(Assoc.select('div.productdata'));
	equalizeHeights(Assoc.select('div.coursedates'));
}
function productGridSetHeights(Grid)
{
	equalizeHeights(Grid.select('h2.product-name'));
}
function productCatGridSetHeights(CatGrid)
{
	equalizeHeights(CatGrid.select('h3'));
}

function toggleMenu(el, over)
{
	el = $(el);
	var item = el.select('ul.level0')[0];
	if (over) {
		Element.addClassName(el, 'over');
		if (item)
		{
			var Menucont = $$('div.nav-container')[0];
			var maxedge = Menucont.getWidth() + Menucont.cumulativeOffset()['left'];
			var rightedge = item.getWidth() + el.cumulativeOffset()['left'];

			if (rightedge > maxedge)
			{
				var newleft = item.getWidth() - (maxedge - el.cumulativeOffset()['left']) + 'px';
				item.style.left = '-' +  newleft;
			}
			else
			{
				item.style.left = '0px';
			}
		}
    }
    else {
		if (item)
		{
			item.style.left = '-9999em';
			Element.removeClassName(el, 'over');
		}
    }
}

function initGrouped()
{
	var Assoc = $('associated-products');
	if (Assoc)
	{
		assocSetHeights(Assoc);
	}
	
}


function equalizeHeights(Elements)
{
	var heighest = 0;
	Elements.each(function(Elem)
	{
		if (Elem.getHeight() > heighest)
		{
			heighest = Elem.getHeight();
		}
	});

	Elements.each(function(Elem)
	{
		Elem.setStyle({
			height: heighest + 'px'
		});
	});
}


function menuSetWidths(Menu)
{
	var totalWidth = 0;
	var Lis = Menu.select('li[class~=nav-home]', 'li[class~=level0]');
	Lis.each(function(Li){
		totalWidth += Li.getWidth();
	});
	var rest = Menu.getWidth() - totalWidth;
	var extraPadding = (rest / Lis.length) / 2;

	Lis.each(function(Li){
		var paddingL = getPadding(Li, 'left');
		var paddingR = getPadding(Li, 'right');

		Li.setStyle({
			marginLeft: paddingL + extraPadding + 'px',
			marginRight: paddingR + extraPadding + 'px'
		});
	});
}

function getPadding(Element, which)
{
	var padding = new String(Element.getStyle('padding-' + which));
	padding = padding.replace(/[a-z]+/, '', 'i');
	return parseInt(padding, 10);
}



function initSlider()
{
	var Slider = $('home-slider');
	if (Slider)
	{
		sliderAddEvents(Slider);
		sliderSelectFirst(Slider);
		sliderStartTimer(Slider);
	}
}

function sliderSelectFirst(Slider)
{
	var Source = $(Slider.select('a[rel]')[0]);
	Source.addClassName('active');

	var Parent = $(Source.parentNode)
	Parent.addClassName('active');
}

function sliderStartTimer(Slider)
{
	Timer = new PeriodicalExecuter(function()
	{
		sliderDoSlide(Slider);
	}, 3);
}

function sliderAddEvents(Slider)
{
	var Items = Slider.select('ul li');
	Items.each(function (Item){
		var Link = $(Item.select('a')[0]);
		Link.setAttribute('href','javascript:return(false);');
		Link.observe('click', function(Evt){
			var Source = Event.element(Evt);
			var Target = $(Source.getAttribute('rel'));
			sliderShow(Slider, Source, Target);
			Source.addClassName('active');
			Source.parentNode.addClassName('active');
		});
	});

	Slider.observe('mouseover', function(){Timer.stop()})
	Slider.observe('mouseout', function(){sliderStartTimer(Slider)})
}

function sliderShow(Slider, Source, Target)
{
	Slider.select('a[rel]').each(function(a){
		a.removeClassName('active');
		a.parentNode.removeClassName('active');
	});

	Slider.select('div[id]').each(function(div){
		//div.hide();
		if (div != Target)
		{
			div.fade({duration:0.3});
		}
		else
		{
			Target.appear({duration: 2});
		}
	});
	
}

function sliderDoSlide(Slider)
{
	var index = 0;

	var Links = Slider.select('a[rel]');
	Links.each(function(Link, idx){
		if (Link.hasClassName('active'))
		{
			index = idx;
		}
	});

	index++;
	if (index == Links.length)
	{
		index = 0;
	}

	var Source = Slider.select('a[rel]')[index];
	var Target = $(Source.getAttribute('rel'));
	
	sliderShow(Slider, Source, Target);

	Links[index].addClassName('active');
	Links[index].parentNode.addClassName('active');

}
