/**
 * Javascript library for template ExtremeMagento
 * @copyright 2007 Quick Solution LTD. All rights reserved.
 * @author Giao L. Trinh <giao.trinh@quicksolutiongroup.com>
 */

(function() {
	
// EM.tools {{{
	
if (typeof BLANK_IMG == 'undefined') 
	var BLANK_IMG = '';

// declare namespace() method
String.prototype.namespace = function(separator) {
  this.split(separator || '.').inject(window, function(parent, child) {
    var o = parent[child] = { }; return o;
  });
};


'EM.tools'.namespace();


// EM0015 {{{
	
function decorateNav() {
	
	
	$('nav').childElements().each(function(li) {
		if (li.hasClassName('parent')) {
			li.down('ul').insert({'top': '<li class="title"><a>'+li.down('a').innerHTML+'</a></li>'});
		}
	});
	
	var MEGA_MAX_WIDTH = 700;
	
	// stretch out the mega menu in order to calcuate the child elements' widths correctly
	$$('#nav ul.level0').each(function(ul) {
		ul.setStyle({'width': '1000px'});
	});
	
	// split each UL.level1 to contain max 10 LI
	var MAX_ROWS = 10;
	$$('#nav ul.level1').each(function(ul) {
		ul.addClassName('first');
		
		var li_list = ul.childElements();
		var new_ul = false;
		
		for (var i = MAX_ROWS-1; i < li_list.length; i++) {
			var li = li_list[i];
		
			if (i % MAX_ROWS == 0) {
				li.addClassName('first');
				var new_ul = new Element('ul'); /* add class in the contructor does not work on IE */
				new_ul.addClassName('level1');
				ul.parentNode.appendChild(new_ul);
			}
			else if ((i+1) % MAX_ROWS == 0)
				li.addClassName('last');
			
			if (new_ul) new_ul.appendChild(li);
		}
		
		if (new_ul) 
			new_ul.addClassName('last');
		else
			ul.addClassName('last');
	});
	
	// calculate LI.level1 width
	$$('#nav li.level1').each(function(li) {
		// IE doesn't work
		//var width = parseInt(li.getStyle('border-left-width'))
		//			+ parseInt(li.getStyle('border-right-width')) 
		//			+ parseInt(li.getStyle('padding-left'))
		//			+ parseInt(li.getStyle('padding-right')) + 1;
		var width = parseInt(li.getStyle('padding-left')) + parseInt(li.getStyle('padding-right')) + 1;
					
		// loop child elements to calculate the total width of all UL
		li.childElements().each(function(ul) {
			if (ul.tagName == 'UL' || ul.tagName == 'DIV') width += ul.getWidth();
		})
		
		var width = Math.min(width, MEGA_MAX_WIDTH);
		// set the LI's width if neccessary
		if (width > li.getWidth())
			li.setStyle({'width': width+'px'});
	});
	
	// calculate UL.level0's width
	$$('#nav ul.level0').each(function(ul) {

		// IE doesn't work
		//var width = parseInt(ul.getStyle('border-left-width'))
		//			+ parseInt(ul.getStyle('border-right-width')) 
		//			+ parseInt(ul.getStyle('padding-left'))
		//			+ parseInt(ul.getStyle('padding-right')) + 1;
		var width = parseInt(ul.getStyle('padding-left')) + parseInt(ul.getStyle('padding-right')) + 1;
					
		ul.childElements().each(function(li) {
			if (li.tagName == 'LI' && !li.hasClassName('title')) width += li.getWidth();
		});
		
		var width = Math.min(width, MEGA_MAX_WIDTH);
		ul.setStyle({'width': width+'px'});
	});
	
	// add class to align-right to the mega menu if neccessary 
	var right = $('nav').cumulativeOffset()[0] + $('nav').getWidth();
	$$('#nav ul.level0').each(function(ul) {
		if (ul.up().cumulativeOffset()[0] + ul.getWidth() > right)
			ul.addClassName('a-right');
	});
}

function decorateSlideshow() {
	var $$li = $$('#slideshow ul li');
	if ($$li.length > 0) {
		
		// reset UL's width
		var ul = $$('#slideshow ul')[0];
		var w = 0;
		$$li.each(function(li) {
			w += li.getWidth();
		});
		ul.setStyle({'width':w+'px'});
		
		// private variables
		var previous = $$('#slideshow a.previous')[0];
		var next = $$('#slideshow a.next')[0];
		var num = 2;
		var width = ul.down().getWidth() * num;
		var slidePeriod = 3; // seconds
		var manualSliding = false;
		
		// next slide
		function nextSlide() {
			new Effect.Move(ul, { 
				x: -width,
				mode: 'relative',
				queue: 'end',
				duration: 1.0,
				//transition: Effect.Transitions.sinoidal,
				afterFinish: function() {
					for (var i = 0; i < num; i++)
						ul.insert({ bottom: ul.down() });
					ul.setStyle('left:0');
				}
			});
		}
		
		// previous slide
		function previousSlide() {
			new Effect.Move(ul, { 
				x: width,
				mode: 'relative',
				queue: 'end',
				duration: 1.0,
				//transition: Effect.Transitions.sinoidal,
				beforeSetup: function() {
					for (var i = 0; i < num; i++)
						ul.insert({ top: ul.down('li:last-child') });
					ul.setStyle({'position': 'relative', 'left': -width+'px'});
				}
			});
		}
		
		function startSliding() {
			sliding = true;
		}
		
		function stopSliding() {
			sliding = false;
		}
		
		// bind next button's onlick event
		next.observe('click', function(event) {
			Event.stop(event);
			manualSliding = true;
			nextSlide();
		});
		
		// bind previous button's onclick event
		previous.observe('click', function(event) {
			Event.stop(event);
			manualSliding = true;
			previousSlide();
		});
		
		
		// auto run slideshow
		//new PeriodicalExecuter(function() {
			//if (!manualSliding) previousSlide();
			//manualSliding = false;
		//}, slidePeriod);
		
		
	}
}

function decorateSlideshow2()
{
	var slideshow2 = $('slideshow2');
	if (slideshow2) {
		var current_idx = 0;
		var effectDuration = 1;
		var effectInterval = 6;
		var delay = 5;
		var manualAppear = false;
		var preventAppear = false;
		
		var ul = slideshow2.select('.slideshow-box ul')[0];
		var intro=$('intro-text');
		var $$li = ul.select('li');
		$$li.invoke('hide');
		$$li[current_idx].addClassName('current').show();
		
		ul.select('img').each(function(img) {
			var $img = $(img);
			$img.setStyle({ background:'url('+$img.readAttribute('src')+') 0 0 no-repeat'});
			$img.writeAttribute('src', EM_SLIDESHOW_OVERLAY_IMG);
		});		
		intro.select('img').each(function(imgintro) {			
			imgintro.observe('click', function(event) {
			
				appearimgintro(imgintro,event);
			});
		});
		slideshow2.down('a.previous').observe('click', function(event) {
			Event.stop(event);
			manualAppear = true;
			if (current_idx > 0) 
				appear(current_idx-1);
			else
				appear($$li.length-1);
		});
		
		slideshow2.down('a.next').observe('click', function(event) {
			Event.stop(event);
			manualAppear = true;
			if (current_idx < $$li.length - 1) 
				appear(current_idx+1);
			else
				appear(0);
		});
		function appearimgintro(i,event) {
			Event.stop(event);
			manualAppear = true;			
			intro.select('img.active').each(function(n) {			
				Element.removeClassName(n, 'active');
			});
			
			if(Number(i.alt)==current_idx) return;
			if(Number(i.alt)>=0&&Number(i.alt)<=$$li.length)
			{
				
				Element.addClassName(i, 'active');
				appear(Number(i.alt));
			}
		};
		function appear(i) {
			//if (preventAppear) return;
			//preventAppear = true;
			
			if (typeof i == 'undefined') 
				i = current_idx < $$li.length - 1 ? current_idx+1 : 0;
			
			//alert(current_idx);
			//alert(i);
			var hide_li = $$li[current_idx];
			var show_li = $$li[i];
			
			current_idx = i;
			
			new Effect.Parallel([
				new Effect.Fade(hide_li, { sync: true }),
				new Effect.Appear(show_li, { sync: true })
			], {
				queue: { position:'end', scope:'slideshow' },
				duration: effectDuration,
				afterFinish: function() {
					Element.removeClassName(hide_li, 'current');
					Element.addClassName(show_li, 'current');
					//preventAppear = false;
				}
			});
		}
		
		// auto run slideshow
		window.setTimeout(function() {
			new PeriodicalExecuter(function() {
				if (!manualAppear) appear();
				manualAppear = false;
			}, effectInterval);
		}, delay * 1000);
		
	}
}



document.observe("dom:loaded", function() {
	decorateNav();
	decorateSlideshow();
	decorateSlideshow2();
});

// }}}

})();
