/****************** Generic scipts for UHU.com ****/
/*************Copyright 2009 Netzbewegung GmbH ****/
/**************************************************/
/********************* s.kenk@netzbewegung.com ****/ 
/****************** last update on 09 Apr 2010 ****/
var scripts = {
	
	scrollToTop : function() {
	
		if ($('scroll-to-top')) {
			$('scroll-to-top').addEvent('click', function() {
				var scroller = new Fx.Scroll(document.body);
				scroller.toTop();
				return false;
			});
		}
	},

	toggleSelect : function() {
		document.addEvent('click', function() {
			$$('div.select-wrapper').each(function(el) {
				el.getChildren('ul').addClass('hidden');
			});
		});
		
		$$('div.select-wrapper').each(function(el) {
			el.getChildren('p').addEvent('click', function(e) {
				e.stop();
				
				if (!el.hasClass('inactive')) {
					$$('div.select-wrapper').each(function(select) {
						if (this == select.getElement('p')) {
							select.getChildren('ul').toggleClass('hidden');
						} else {
							select.getChildren('ul').addClass('hidden');
						}
					}.bind(this));
				}
			});
		});
	},
	
	initElSelect : function() {
		$$('select').each(function(sl) {
			if (sl.hasClass('powermail_select') && sl.get('id')!='') {
				var wrapper = new Element('div');
				wrapper.set('id','select-wrapper-'+sl.get('id'));
				sl.inject(wrapper,'before');
				wrapper.wraps(sl);
				var select = new elSelect( {container : 'select-wrapper-'+sl.get('id')} );
			}
		});
	},
	
	// Sets a wrapper for the search result
	initIndexedSearch: function() {
		$$('div.tx-indexedsearch-secHead').each(function(el,index) {
			if (el.hasClass('fold-out') && el.getNext().hasClass('tx-indexedsearch-res')) {
				var header = el;
				resultWrapper = new Element('div', {
					'class': 'search-result-wrapper'
				});
				
				// wrap layer around results in purpose of sliding
				while (el.getNext()!=null && (el.getNext().match('div.tx-indexedsearch-res') || el.getNext().match('div.clear'))) {
					var current = el.getNext();
					resultWrapper.adopt(current);	
				}
				resultWrapper.inject(header,'after');
			}
		});
	},
	
	// Hides 2nd level of top navigation if active while hovering other item 
	hideTopNavigation: function() {
		if ($('top-nav')) {
			$('top-nav').getChildren('li').each(function(li) {
				if (!li.hasClass('single')) {
					li.addEvents({
						'mouseenter': function() {
							if (!li.hasClass('active')) {
								$('top-nav').getChildren('li').each(function(item) {
									if (item!==li) {
										item.addClass('hide');
									}
								});
							}
						},
						
						'mouseleave': function() {
							if (!li.hasClass('active')) {
								$('top-nav').getChildren('li').each(function(item) {
									if (item!==li) {
										item.removeClass('hide');
									}
								});
							}
						}
					});
				}
			});
		}
	}
}

/**
 * Provides fold-out areas (comes with proper styles for internet explorer)
 * Note: The content element must disapear as previous element in DOM
 * @author Sebastian Kenk <s.kenk@netzbewegung.com>
 */
var FoldOut = new Class(
{
	// Array with header elements
	headers: null,
	
	// Array with content elements to slide
	contents: null,
	
	// Array with effects stored in it
	fx:null,
	
	// Current clicked index
	clickIndex:0,
	
	initialize: function(headerClass,contentClass,autoSlideFirst) {

		this.headers = new Array();
		this.contents = new Array();
		this.fx = new Array();
		
		$$('.'+headerClass).each(function(header,i) {
			var content = header.getNext();

			// Proceed fold-out area
			if (content.hasClass(contentClass)) {
				this.headers.include(header);
				this.contents.include(content);

				header.addClass('fold-out');
				
				// Append spacer after content
				var spacer = new Element('div', {
					'class': 'spacer-6px'
				});
				spacer.inject(content,'after');
				

				if (!Browser.Engine.trident) {
					this.fx.include(new Fx.Slide(content, {
						duration : content.getSize().y*3
					}).hide());
					
					this.fx[i].addEvent('onComplete', function() {
						if (this.fx[i].open==true) {
							this.contents[i].getParent().setStyle('overflow','visible');
						}
					}.bind(this));
				} else {

					// If Brower is Internet Explorer
					content.toggleClass('hidden');
				}
				
				// Auto slide first fold-out area if it was set
				if (autoSlideFirst==true && i==0) {
					this.toggleFold(content,false);
				}

				// Add Events for folding header
				var click = function(e,header) {
					e.stop();
					this.clickIndex = this.headers.indexOf(header);
					this.toggleFold(this.contents[this.clickIndex],true);
				};
		
				header.addEvent('click',click.create({bind:this,event:true,arguments:header}));
			}
		},this);
	},
	
	toggleFold: function(content,recursive) {
		
		if (!Browser.Engine.trident) { 
			content.getParent().setStyle('overflow','hidden');
			
			// toggle class of header & fold content
			(function(){ this.headers[this.contents.indexOf(content)].toggleClass('fold-in'); }.bind(this)).delay(480);
			this.fx[this.contents.indexOf(content)].toggle();
			
			if (recursive==true) {
				this.contents.each(function(oContent,i) {
					if (i!=this.clickIndex && this.fx[i].open==true) {
						this.toggleFold(oContent,false);
					}
				},this);
			}

		// If browser is Internet Explorer
		} else {
			content.toggleClass('hidden');
			this.headers[this.contents.indexOf(content)].toggleClass('fold-in');
			if (recursive==true) {
				this.contents.each(function(oContent,i) {
					if (i!=this.clickIndex && !oContent.hasClass('hidden')) {
						this.toggleFold(oContent,false);
					}
				},this);
			}
		}
	}
});


window.addEvent('domready', function() {
	
	$$('body').removeClass('jsInactive');
	$$('body').addClass('jsActive');
	
	$$('.tx-uhuproductlist-pi1').each(function(obj) {
		obj.setStyles({
			'padding' : '10px 10px 0',
			'background' : '#f4f4f4'
		});
	});
	
    // Event handling for search field
	if ($('sword'))
	{
        $('sword').addEvents({
            'keydown': function(e)
            {
                if (e.key == 'enter')
                {
                    this.form.submit();
                }
            },
            'focus': function(e)
            {
                if (this.value == this.defaultValue)
                {
                    this.value = '';
                }
            },
            'blur': function(e)
            {
                if (this.value == '')
                {
                    this.value = this.defaultValue;
                }
            }
        });
    }
	
	scripts.scrollToTop();
	scripts.toggleSelect();
	scripts.initElSelect();
	scripts.initIndexedSearch();
	scripts.hideTopNavigation();
	
	// Set fold-out areas
	foldTables = new FoldOut('csc-header','table',false);
	foldManuals = new FoldOut('csc-header','tx-uhumanualview-pi1',false);
	foldProductList = new FoldOut('csc-header','tx-uhuproductlist-pi1',false);
	foldSearchResult = new FoldOut('tx-indexedsearch-secHead','search-result-wrapper',false);
	foldAdvertisement = new FoldOut('csc-header','advertisement',false);
});
