/*
 @description: JavaScript Object Libary for Webstar
 @related: prototype and scriptacoulus JavaScript frameworks
 @useage:
	<script type="text/javascript">
		var wsObj = WSshop.getInstance();
			wsObj.myfunctionName();
    </script>
*/
var WSshop = {	
	getInstance: function() {
		if (this._instance == null){
			this.lang = icmsLanguage;
			this._instance = this;
		}
		return this._instance;
	},
	
	jsonstate: false,
	genIndex: 1,
	
	autoComplete: function() {
		var searchUrl = absCorrect + icmsLanguage + '/components/webstar_search_suggest.html';
		new Ajax.Autocompleter('q', 'autocomplete_choices', searchUrl, {
					minChars:3,
					indicator:'suggest_indicator',
					afterUpdateElement:WSshop.goToArticleDetail
				}
			);
	},
	
	trim: function(str) {
		var	str = str.replace(/^\s\s*/, ''),
			ws = /\s/,
			i = str.length;
		while (ws.test(str.charAt(--i)));
		return str.slice(0, i + 1);
	},

	goToArticleDetail: function(text, li) {
		var articleId = li.id;
		if (articleId != '')
		{
			$('articleid').value = articleId;
			document.location.replace('search.html?articleid=' + articleId);
		}
		else
		{
			document.search.submit();
		}
	},
	
	setSortLabel: function(txtLbl, id)
	{
		$('sortlbl_' + id).innerHTML = txtLbl;
	},
	
	ajaxSearch: function(params) {
		WSshop.hideEffect('col2_nopadding');
		new Ajax.Updater('col2_nopadding', 'components/webstar_search.html', {
					method: 'post',
					evalJS: true,
					evalScripts: true,
					parameters: params
				}
		);
	},
	
	ajaxFavourites: function(params) {
		WSshop.hideEffect('col2_nopadding');
		
		var append = '';
		params.groups.each(function(item) {
			append += '&shop.category[]=' + item;
		});
		
		var pageNo = 1;
		WSshop.historyAdd('action=mywebstar&shop.page='+pageNo+append);
	},
	
	openCloseNode: function(obj, alink) {
		if ($(obj).style.display == 'none'){
			$(obj).show();
			$(alink).addClassName('active');
		} else {
			$(obj).hide();
			$(alink).removeClassName('active');
		}
	},

	showNextLevel: function(obj) {
		var li = Element.up(obj, 'li');
		var ul = Element.down(li, 'ul');
		$$('#mywebstar_features li a').each(function(item) {
			item.removeClassName('active');
		});
		
		if (ul)
		{
			if (ul.style.display == 'none') {
				ul.show();
				$(obj).addClassName('active');
			} else {
				ul.hide();
				$(obj).removeClassName('active');
			}
		}
		return false;
	},

	closeAllNodes: function() {
		var navNodes = $('nav_categories').getElementsByTagName('ul');
		for(var i=0; i<navNodes.length; i++)
		{
			navNodes[i].hide();
		}
	},
	
	showFieldHint: function(inputEl, hintText) {
		if (inputEl.value == '') {
			inputEl.value = hintText;
			inputEl.className = 'textfield_hint';
		}
	},
	
	clearFieldHint: function(inputEl, hintText) {
		if (inputEl.value == hintText) {
			inputEl.value = '';
			inputEl.className = 'textfield';
		}
	},
	
	afterLoginBoxLoad: function() {
		$('username').focus();
	},

	gainFocus: function() {
		var self = this;
		if(navigator.appName == 'Microsoft Internet Explorer') {
			$('buttonAddToBasket').onmousedown = function() {
				self.buttonWasClicked = true;
				return true;
			};
		} else {
			$('buttonAddToBasket').onclick = function() {
				if(self.isWarning) {
					WSshop.buttonWasClicked = true;
					return false;
				} else {
					return true;
				}
			};
		}
	},
	
	gainPromoFocus: function() {
		var self = this;
		if(navigator.appName == 'Microsoft Internet Explorer') {
			$('webstarpromobutton').onmousedown = function() {
				self.buttonWasClicked = true;
				return true;
			};
		} else {
		
			$('webstarpromobutton').onclick = function() {
				if(self.isWarning) {
					WSshop.buttonWasClicked = true;
					return false;
				} else {
					return true;
				}
			};
		}
	},
	
	buttonWasClicked: false,
	isWarning: false,
	
	disableFields: function(aranr, palette, form, warnPalets) {
		if(warnPalets == undefined) {
			warnPalets = false;
		}
		if(palette) {
			var thisElem = $('shop.cart['+aranr+'_palette][artcount]');
			var otherElem = $('shop.cart['+aranr+'][artcount]');
			if(warnPalets) {
				var self = this;
				this.isWarning = true;
				var thisElem = $('shop.cart['+aranr+'_palette][artcount]');
				var thisValue = parseInt(thisElem.value);
				if(!isNaN(thisValue) && thisValue > 0) {
					this.showPalettWarning(	function() {
							fb.end();
							self.isWarning = false;
							if(thisElem && otherElem) {
								var thisValue = parseInt(thisElem.value);
								if(!isNaN(thisValue) && thisValue > 0) {
									otherElem.disabled = 'disabled';
									otherElem.style.backgroundColor = '#F0F0F0';
									otherElem.value = '';
								} else {
									otherElem.disabled = false;
									otherElem.style.backgroundColor = 'white';
								}
							}
							if(self.buttonWasClicked) {
								self.addArticlesToBasket(form, false);
							}
							self.buttonWasClicked = false;
							return false;
						},
						function() {
							fb.end();
							self.isWarning = false;
							thisElem.value = '';
							otherElem.disabled = false;
							otherElem.style.backgroundColor = 'white';
							self.buttonWasClicked = false;
							WSshop.wasWarning = true;
							return false;
						},
						thisValue
					);
				} else {
					otherElem.disabled = false;
					otherElem.style.backgroundColor = 'white';
				}
			} 
		} else {
			var thisElem = $('shop.cart['+aranr+'][artcount]');
			var otherElem = $('shop.cart['+aranr+'_palette][artcount]');
		}
		if(thisElem && otherElem) {
			var thisValue = parseInt(thisElem.value);
			if(!isNaN(thisValue) && thisValue > 0) {
				otherElem.disabled = 'disabled';
				otherElem.style.backgroundColor = '#F0F0F0';
				otherElem.value = '';
			} else {
				otherElem.disabled = false;
				otherElem.style.backgroundColor = 'white';
			}
		}
		return true;
	},
	
	hasArticlesInBasket: false, // this is a flag, that is used to recognize if the paging has saved any articles

	dontBuyPalets: function() {
		fb.end();
		var form = $('cartform');
		Form.getInputs(form, 'text').each(function(element) {
			if(/^shop.cart\[[0-9]+_palette\]\[artcount\]$/.match(element.name)) {
				var number = parseInt(element.value);
				if(!isNaN(number) && number > 0) {
					element.value = '';
				}
			}
		});
		return false;
	},

	callback: false,

	showPalettWarning: function(cb1, cb2, n) {
		this.successCallback = cb1;
		this.failureCallback = cb2;
		fb.ajax({ url: absCorrect + icmsLanguage + '/components/fb_palets_are_you_sure.html?n=' + n,
					cache: false,
					callback: function(xhr) {
						fb.start({
							html: xhr.responseText,
							rev: "height:284 width:446 type:ajax scrolling:no outsideClickCloses:false"
						});
					}
		});
	},
	
	addArticlesToBasket: function(form, quiet) {
		var btn = $('buttonAddToBasket');
		if(btn)
		{
			btn.disable();
			var func = function() { btn.enable(); };
			func.delay(2);
		}

		if(quiet == undefined) {
			quiet = false;
		}
	
		if(navigator.appName == 'Microsoft Internet Explorer' && WSshop.isWarning) {
			window.setTimeout('WSshop.addArticlesToBasket($(\''+form.id+'\'), '+quiet+');', 5000);
			return false;
		}
		
		if(navigator.appName == 'Microsoft Internet Explorer' && WSshop.wasWarning) {
			WSshop.wasWarning = false;
			return false;
		}
		
		//	check if basket is already displayed
		if($('li_shortcart')) {
			this.hasArticlesInBasket = true;
		}
		
		form = $(form);
		if(form) {
			var tuEs = false;
			Form.getInputs(form, 'text').each(function(element){
				if(tuEs) {
					return;
				}
				if(/^shop.cart\[[0-9]+(_palette)?\]\[artcount\]$/.match(element.name)) {
					var number = parseInt(element.value);
					if(!isNaN(number) && number > 0) {
						tuEs = true;
					}
				}
			});
			
			Form.getInputs(form, 'hidden').each(function(element){
				if(tuEs) {
					return;
				}
				if(/^shop.cart\[[0-9]+(_palette)?\]\[artcount\]$/.match(element.name)) {
					var number = parseInt(element.value);
					if(!isNaN(number) && number > 0) {
						tuEs = true;
					}
				}
			});
			// check if the customer orders paletts
			/*
			var hasPaletts = false;
			Form.getInputs(form, 'text').each(function(element){
				if(/^shop.cart\[[0-9]+_palette\]\[artcount\]$/.match(element.name)) {
					var number = parseInt(element.value);
					if(!isNaN(number) && number > 0) {
						hasPaletts = true;
					}
				}
			});
			*/
			// create a callback, so the code won't be written twice.
			var self = this;
			var fn = function() {
				//	new articles for the basket
				if(tuEs) {
					var data = Form.serialize(form);
					fb.ajax({	url: absCorrect + icmsLanguage + '/components/fb_addArticlesToBasket.html',
								postData: data,
								cache: false,
								callback: function(xhr) {
									if(!quiet) {
										fb.start({
											html: xhr.responseText,
											rev: "height:284 width:446 type:ajax scrolling:no outsideClickCloses:false"
										});
									}
								}
					});
				
					self.hasArticlesInBasket = true;
				
				//	articles already were saved through paging before - display 'no new articles'
				} else if(self.hasArticlesInBasket) {
					fb.ajax({	url: absCorrect + icmsLanguage + '/components/fb_oldArticlesToBasket.html',
						cache: false,
						callback: function(xhr) {
							if(!quiet) {
								fb.start({
									html: xhr.responseText,
									rev: "height:284 width:446 type:ajax scrolling:no"
								});
							}
						}
					});
					
				//	no articles for the basket
				} else {
					fb.ajax({	url: absCorrect + icmsLanguage + '/components/fb_noArticlesAddedToBasket.html',
								cache: false,
								callback: function(xhr) {
									if(!quiet) {
										fb.start({
											html: xhr.responseText,
											rev: "height:284 width:446 type:ajax scrolling:no"
										});
									}
								}
					});
				}
				return false;
			};
			// if(hasPaletts) {
				// if there are paletts, show a warning
				//this.showPalettWarning(fn);
			// } else {
				fn();
			// }
		}
		return false;
	},

	ajaxCheckLogin: function(lang, targetPage) {
		$('loginProgress').update('<img src="'+absCorrect+icmsLanguage+'/images/blue/ajax_loader.gif" title="Loading..." style="margin:10px 5px 0px 5px;" />');
		new Ajax.Request(absCorrect + icmsLanguage + '/ajax_login.html', { 
			method: 'post',
			parameters: Form.serialize('login'),
			onSuccess: function(transport) {
				if (transport.responseJSON == null) {
					document.location.href = absCorrect + icmsLanguage + '/' + targetPage;
					//window.parent.fb.end();
				} else {
					$('loginError').innerHTML = transport.responseJSON.webstar.error;
					$('loginProgress').innerHTML = '';
				}
			}
		});
		return false;
	},
	
	ajaxLoadSubusers: function(local) {
		$('subusers').update('<img src="'+absCorrect+icmsLanguage+'/images/blue/ajax_loader.gif" title="Loading..." style="margin:10px 5px 0px 5px;" />');
		if (local) {
			ajax_path = absCorrect + 'templates_local/ajax_subusers.html';
		} else {
			ajax_path = absCorrect + icmsLanguage + '/ajax_subusers.html';
		}
		new Ajax.Request(ajax_path, { 
			method: 'post',
			parameters: {login: $('username').value, password: $('password').value, lang: icmsLanguage},
			onComplete: function(transport) {
				$('subusers').update(transport.responseText);
				$('loginbtn').disabled = false;
				$('loginbtn').className = 'webstarbutton';
				$('username').readOnly = true;
				$('password').readOnly = true;
				
				$('username').setStyle({
					backgroundColor: '#D3D3D3'
				});
				$('password').setStyle({
					backgroundColor: '#D3D3D3'
				});
				
			}
		});
	},

	ajaxAddFavourite: function(articleId, divisionId) {
		if($('favourite_btn_'+articleId).className == 'norm')
		{
			return;
		}
		$('favourite_btn_'+articleId).className = 'loading';
		var params = 'shop.divisionId='+divisionId+'&shop.articleId='+articleId;
		new Ajax.Request('ajax_add_favourite.html', {
			method: 'post',
			parameters: params,
			onSuccess: function(transport) {
				$('favourite_btn_'+articleId).className = 'norm';
			}
		});
	},

	ajaxDelFavourite: function(articleId, divisionId) {
		$('favourite_btn_'+articleId).className = 'loading';
		var params = 'shop.divisionId='+divisionId+'&shop.articleId='+articleId;
		new Ajax.Request(absCorrect + icmsLanguage + '/ajax_del_favourite.html', {
			method: 'post',
			parameters: params,
			onSuccess: function(transport) {
				var table = $('article_'+articleId).parentNode;
				var tbody = $('article_'+articleId).parentNode;
				table.deleteRow($('article_'+articleId).sectionRowIndex);
				table.deleteRow($('more_'+articleId).sectionRowIndex);
				for(var i = 0;i < tbody.rows.length;i++) {
					if(tbody.rows[i].className == 'grouphead') {
						var hideIt = true;
						for(var ii = i+1;ii < tbody.rows.length;ii++) {
							if($(tbody.rows[ii]).hasClassName('article')) {
								hideIt = false;
								break;
							}
							if($(tbody.rows[ii]).hasClassName('grouphead')) {
								break;
							}
						}
						if(hideIt) {
							table.deleteRow(tbody.rows[i].sectionRowIndex);
						}
					}
				}
					new Ajax.Request(absCorrect + icmsLanguage + '/components/nav_mywebstar.html', {
								method: 'post',
								onSuccess: function(transport) {
									$('col1').innerHTML = transport.responseText;
								}
					});
			}
		});
	},
	
	selectArticlesForTemplate: function(groupId) {
			var articles = $$('.cb_article_' + groupId);
			var notChecked = 0;
			for (var i=0; i < articles.length; i++) {
				if (!articles[i].checked) notChecked++;
			}
			for (var j=0; j < articles.length; j++)
			{
				if (notChecked > 0) {
					articles[j].checked = true;
				} else {
					articles[j].checked = false;
				}
			}
			return false;
	},
	
	expandHideArticleGroup: function(groupId) {
		var button = $('grouphead_button_'+groupId);
		var showIt = button.hasClassName('hide');
		if(showIt) {
			button.removeClassName('hide');
			button.addClassName('expand');
		} else {
			button.removeClassName('expand');
			button.addClassName('hide');
		}
		var table = $('grouphead_'+groupId).parentNode;
		for(var i = 0;i < table.rows.length;i++) {
			if($(table.rows[i]).hasClassName('group_'+groupId)) {
				if(showIt) {
					Element.hide(table.rows[i]);
					Element.addClassName(table.rows[i], 'doNotShow');
				} else {
					
					if(!Element.hasClassName(table.rows[i], 'article_more') || WSshop.showAll)
						Element.show(table.rows[i]);	
					
					if(!WSshop.showAll)
						Element.removeClassName(table.rows[i], 'article_active');

					Element.removeClassName(table.rows[i], 'doNotShow');
				}
			}
		}
		return false;
	},
	
	checkTWCategorieFilters: function()
	{
		$('tw_filter_error').hide();
		if (!$('tabac').checked && !$('sweets').checked) {
			$('tw_filter_error').show();
			return false;
		} else {
			WSshop.downloadPDF('stats');
		}	
	},
	
	addQuickOrderArticleFields: function() 
	{
		quickOrderFlds = '';
		for (var i=0; i<10; i++) 
		{
			quickOrderFlds += '<tr id="quick_order_art_' + WSshop.genIndex +'">';
			quickOrderFlds += '<td class="col1"><input type="text" class="text" name="shop.ARANR' + WSshop.genIndex + '" onchange="WSshop.checkArticleNo(this.value, ' + WSshop.genIndex + ')"/></td>';
			quickOrderFlds += '<td class="col2"><input name="artcount' + WSshop.genIndex  + '" type="text" class="text text_small" maxlength="5" /></td>';
			quickOrderFlds += '<td class="article_name">&nbsp;</td>';
			quickOrderFlds += '</tr>';
			WSshop.genIndex++;
		}
		Element.insert('quickorder', quickOrderFlds);
	},
	
	checkArticleNo: function(artNo, obj) 
	{
		new Ajax.Request(absCorrect + icmsLanguage + '/ajax_check_article_no.html', {
			method: 'post',
			evalJS: true,
			evalScripts: true,
			parameters: 'articleno=' + artNo + '&element=' + obj,
			onComplete: function(transport) {
				children = $('quick_order_art_' + obj).childElements();
				for (var i=0; i<children.length; i++) {
						children[i].remove();
				}
				Element.insert('quick_order_art_' + obj, transport.responseText);
			}
		});
	},
	
	ajaxDelStatisticUser: function(customerNo) 
	{
		new Ajax.Request('ajax_del_statistic_user.html', {
			method: 'post',
			parameters: 'customerno=' + customerNo,
			onSuccess: function(transport) {
				$('stats_user_' + customerNo).style.display = 'none';
			}
		});
	},
	
	editStatisticUser: function(customerNo)
	{
		var oldUserName = $('username_'+customerNo).value;
		var inputFlds = $('stats_user_' + customerNo).getElementsByTagName('input');
		$('mangageaction').value = 'edit';
		
		$('btn_edit_stats_user_' + customerNo).style.backgroundPosition = '0px -46px';
		$('btn_edit_stats_user_' + customerNo).href = "#";
		
		$('btn_edit_stats_user_' + customerNo).onclick = function () {
			var newUserName = $('username_'+customerNo).value;
			WSshop.validateStatisticUserForm('statisticuser', oldUserName, newUserName);
			return false;
		};
		
		//Element.writeAttribute('btn_edit_stats_user_' + customerNo, 'onclick', "if (WSshop.validateStatisticUserForm('statisticuser')) { $('statsusers').submit(); } return false;");
		for (var i=0; i<inputFlds.length; i++)
		{
			inputFlds[i].disabled = false;
			Element.removeClassName(inputFlds[i], 'inactive');
		}
	},

	checkUserExists: function(username, fn)
	{
			$('userValidationError').hide();
			
			new Ajax.Request('ajax_check_statistic_user.html', {
			method: 'post',
			parameters: 'username=' + username,
			onSuccess: function(transport) {
					if (transport.responseJSON.userok == 'no') {
						$('userValidationError').show();
						WSshop.jsonstate = false;
					} else {
						$('userValidationError').hide();
						WSshop.jsonstate = true;
					}
					fn();
			}
		});
	},
	
	validateStatisticUserForm: function(filter, oldUserName, newUserName)
	{
		if(oldUserName == undefined) {
			oldUserName = '';
		}
		if(newUserName == undefined) {
			newUserName = '';
		}
		var cb = function() {
			var error = false;
			var children = Element.descendants('statisticUserTable');
			var p = 0;
						
			for(var i = 0;i < children.length;i++)
			{
				if(children[i].nodeName == 'INPUT')
				{
					if(children[i].readAttribute('type') == 'text' || children[i].readAttribute('type') == 'password')
					{
						var value = WSshop.trim(children[i].value);
						if(children[i].readAttribute('name').search(/\[email\]/) == -1)
						{						
							if(children[i].readAttribute('type') == 'password')
							{
								if(p % 2 == 0) var password = value;
								else if(value != password) error = true;
								p++;
							}
							if(filter)
							{
								if(children[i].readAttribute('name').search(filter) != -1)
								{
									if(value == '' || value == null || !value) error = true;
								}
							}
							else
							{
								if(value == '' || value == null || !value) error = true;
							}
						}
						else
						{
							if(value)
							{
								var regExp = new RegExp(/[\w\-_\.]+@[\w\-\.]+\.[a-z]{2,5}/i);
								if(!value.match(regExp)) error = true;
							}
						}
					}
				}
			}

			if (!WSshop.jsonstate) {
				return false;
			}
	
			if(error)
			{
				$('validationError').show();
				return false;
			}
			else
			{
				$('validationError').hide();
				$('statsusers').submit();
			}
		};

		if(oldUserName == newUserName) {
			WSshop.jsonstate = true;
			cb();
		} else {
			WSshop.checkUserExists(newUserName, cb);
		}
		return false;
	},
	
	downloadPDF: function(type) 
	{	
		if (type == 'fax') {
			createPdfUrl = absCorrect + icmsLanguage + '/ajax_create_fax_pdf.html';
			params = {};
		} else {
			createPdfUrl = absCorrect + icmsLanguage + '/ajax_create_statistic_pdf.html';
			params = Form.serialize('statsform');
		}
		
		var button = $(type + '_downloadbutton');
		if(button)
		{
			button.hide();
		}
		
		$(type + '_pdfloader').show();
		$(type + '_pdferror').hide();
		$(type + '_pdfdownload').hide();
		
		new Ajax.Request(createPdfUrl, { 
			method: 'post',
			parameters: params,
			onComplete: function(transport) {
				if (transport.responseJSON != null && transport.responseJSON.pdffile != null) {
					// check if pdf file exists
					new Ajax.Request(absCorrect + icmsLanguage + '/ajax_check_pdf.html?pdf=' + transport.responseJSON.pdffile, {
						method: 'post',
						onComplete: function(transport) {
							if (transport.responseJSON != null && transport.responseJSON.pdfpath != null) {
								$(type + '_pdfloader').hide();
								$(type + '_btn_pdfstats').style.backgroundColor = '#999';
								$(type + '_pdfdownload').show();
								$(type + '_pdfdownload').href = absCorrect + icmsLanguage + '/getpdf.html?pdf=' + transport.responseJSON.pdfpath;
							} else {
								if(button)
								{
									button.show();
								}
								$(type + '_pdfloader').hide();
								$(type + '_pdferror').show();
							}
						}
					});
				} else {
					$(type + '_pdfloader').hide();
					$(type + '_pdferror').show();
				}
			}
		});
		return false;
	},
	
	ajaxFavouritesPager: function(pageNo, urlAppend) {
		WSshop.showSaleItems = false;
		WSshop.showAll = false;
		
		//	save selections into cart before switching page
		if($('cartform')) {
			WSshop.addArticlesToBasket($('cartform'), true); //	quiet mode
		}
			
		WSshop.historyAdd('action=mywebstar&shop.page='+pageNo+urlAppend);
		return false;
	},

	ajaxOrdersPager: function(pageNo, urlAppend) {
		
		//	save selections into cart before switching page
		if($('cartform')) {
			WSshop.addArticlesToBasket($('cartform'), true); //	quiet mode
		}
		
		WSshop.historyAdd('shop.page='+pageNo+urlAppend);
		return false;
	},

	ajaxSearchPager: function(pageNo, urlAppend) {
		WSshop.showSaleItems = false;
		WSshop.showAll = false;

		//	save selections into cart before switching page
		if($('cartform')) {
			WSshop.addArticlesToBasket($('cartform'), true); //	quiet mode
		}
		
		WSshop.historyAdd('shop.page='+pageNo+urlAppend);
		return false;
	},

	ajaxProductsSorter : function(urlAppend) {
		WSshop.showSaleItems = false;
		WSshop.showAll = false;
		WSshop.historyAdd(urlAppend);
		return false;
	},
	
	ajaxSearchSorter : function(urlAppend) {
		WSshop.showSaleItems = false;
		WSshop.showAll = false;
		WSshop.historyAdd(urlAppend);
		return false;
	},

	hideEffect: function(elemId) {
		$(elemId).update('<div style="width:100%;"><img src="'+absCorrect+icmsLanguage+'/images/blue/ajax_loader.gif" alt="Loading..." style="margin-left:10px;margin-top:10px;" /></div>');
		Effect.ScrollTo('headerWrapper', {
			duration: 1
		});
		// new Effect.Fade(elemId, { duration: 0.5 });
	},

	showEffect: function(elemId, newContent) {
		// new Effect.Fade(elemId, { duration: 0.0 });
		$(elemId).update(newContent);
		// new Effect.Appear(elemId, {queue: 'end', duration: 2.0 });
	},
	
	handleHistoryChange: function(template, urlAppend) {
		if(urlAppend.indexOf('action=mywebstar') != -1) {
			new Ajax.Updater('col2_nopadding', 'components/mywebstar_favourites_detail.html?'+urlAppend, {
						method: 'get',
						evalJS: true,
						evalScripts: true
					}
			);
			return;
		}
		switch(template) {
			case 'products.html':
				WSshop.hideEffect('col2_nopadding');
				new Ajax.Request('components/detail.html?'+urlAppend, {
					'method': 'post',
					evalJS: true,
					evalScripts: true,
					onComplete: function(transport) {
						WSshop.showEffect('col2_nopadding', transport.responseText);
						fb.anchors.length = 0;
						fb.tagAnchors(document);
					}
				});	
				break;
			case 'search.html':
				if(urlAppend == 'products')
				{
					return;
				}
				if(urlAppend == 'pageedit')
				{
					return;
				}
				WSshop.hideEffect('col2_nopadding');
				new Ajax.Request('components/webstar_search.html?'+urlAppend, {
					'method': 'post',
					evalJS: true,
					evalScripts: true,
					onComplete: function(transport) {
						WSshop.showEffect('col2_nopadding', transport.responseText);
						fb.anchors.length = 0;
						fb.tagAnchors(document);
					}
				});
				break;
			case 'mywebstar_products.html':
				WSshop.hideEffect('col2_nopadding');
				new Ajax.Request('components/mywebstar_favourites_detail.html?'+urlAppend, {
					'method' : 'get',
					evalJS: true,
					evalScripts: true,
					onSuccess : function(transport) {
						WSshop.showEffect('col2_nopadding', transport.responseText);
						fb.anchors.length = 0;
						fb.tagAnchors(document);
					}
				});
				break;
			case 'mywebstar_order_history.html':
				WSshop.hideEffect('col2_nopadding');
				new Ajax.Request('components/mywebstar_order_history.html?'+urlAppend, {
					'method' : 'get',
					evalJS: true,
					evalScripts: true,
					onSuccess : function(transport) {
						WSshop.showEffect('col2_nopadding', transport.responseText);
						fb.anchors.length = 0;
						fb.tagAnchors(document);
					}
				});
				break;
		}
	},

	historyAdd: function(history) {
		unFocus.History.addHistory(history);
	},
	
	lastHistoryHash: null,

	historyListener: function(historyHash) {
		var template = location.href;
		if(template.lastIndexOf('/') != -1) {
			template = template.substring(template.lastIndexOf('/')+1);
		}
		if(template.indexOf('#') != -1) {
			template = template.substring(0, template.indexOf('#'));
		}
		if(template.indexOf('?') != -1) {
			template = template.substring(0, template.indexOf('?'));
		}
		if(historyHash.indexOf('#') != -1) {
			historyHash = historyHash.substring(historyHash.indexOf('#')+1);
		}
		if(WSshop.hasHistoryChanged(historyHash)) {
			WSshop.handleHistoryChange(template, historyHash);
		}
	},
	
	hasHistoryChanged : function(historyHash) {
		if(WSshop.lastHistoryHash == historyHash || historyHash == '') {
			return false;
		}
		var historyChanged = false;
		var keysAndValues = WSshop.urlHashToArray(historyHash);
		for(var key in keysAndValues) {
			if(historyChanged) {
				continue;
			}
			if(WSshop.historyData[key] == undefined || WSshop.historyData[key] != keysAndValues[key]) {
				historyChanged = true;
			}
		}
		for(var key in WSshop.historyData) {
			if(historyChanged) {
				continue;
			}
			if(keysAndValues[key] == undefined || keysAndValues[key] != WSshop.historyData[key]) {
				historyChanged = true;
			}
		}
		if(historyChanged) {
			WSshop.lastHistoryHash = historyHash;
			return true;
		} else {
			return false;
		}
	},
	
	historyData : new Object(),

	load: function(e) {
		unFocus.History.addEventListener('historyChange', WSshop.historyListener);
		var urlHash =  (window.location.search.length > 1) ? window.location.search.substring(1) : '';
		var keysAndValues = WSshop.urlHashToArray(urlHash);
		for(var key in keysAndValues) {
			WSshop.historyData[key] = keysAndValues[key];
		}
		WSshop.historyListener(location.hash);
		unFocus.History.addHistory(location.hash);
	},
	
	urlHashToArray : function(urlHash) {
		var retArray = new Object;
		var keysAndValues = urlHash.split('&');
		keysAndValues.each(function(value){
			var keyValuePair = value.split('=', 2);
			if(keyValuePair.size() == 2) {
				var key = keyValuePair[0];
				retArray[key] = keyValuePair[1];
			} else if(keyValuePair != '') {
				var key = keyValuePair[0];
				retArray[key] = true;
			}
		});
		return retArray;
	},
	
	showSaleItems: false,
	showAll: false,
	
	toggleSaleItems: function(checkbox)
	{
		var saleItems = $('articlelist').select('tr');			
		for(var a=0; a<saleItems.length; a++)
		{
			// Ignore header row
			if(Element.hasClassName(saleItems[a], 'header')) continue;
			
			// Hide all items
			saleItems[a].hide();
			
			if((Element.hasClassName(saleItems[a], 'article') || Element.hasClassName(saleItems[a], 'article_active')) && 
				!Element.hasClassName(saleItems[a], 'tophit'))
			{
				if (WSshop.showAll) {
						Element.addClassName(saleItems[a], 'article_active');						
				} else {						
						Element.removeClassName(saleItems[a], 'article_active');
				}
			}			
			
			if(this.showSaleItems = checkbox.checked)
			{					
				if(Element.hasClassName(saleItems[a], 'aktion')) saleItems[a].show();
				if(WSshop.showAll) if(Element.hasClassName(saleItems[a], 'aktion_more')) saleItems[a].show();
			}
			else
			{
				if (!Element.hasClassName(saleItems[a], 'article_more') || Element.hasClassName(saleItems[a], 'tophit_more') || WSshop.showAll) saleItems[a].show();	
			}	
		}
		
	},
	
	toggleAll: function(link, collapsed, expanded)
	{		
		var shopItems = $('articlelist').select('tr');
			
		WSshop.showAll = !WSshop.showAll;
		link.innerHTML = WSshop.showAll ? expanded : collapsed;
		
		for(var i = 0; i<shopItems.length; i++)
		{
			// Ignore header row
			if(Element.hasClassName(shopItems[i], 'header')) continue;
			
			if(WSshop.showAll && !Element.hasClassName(shopItems[i], 'doNotShow') &&
				((WSshop.showSaleItems && Element.hasClassName(shopItems[i], 'aktion_more')) ||
				(!WSshop.showSaleItems && Element.hasClassName(shopItems[i], 'article_more'))))
			{
				shopItems[i].show();
			}
			else if(Element.hasClassName(shopItems[i], 'article_more') && !Element.hasClassName(shopItems[i], 'tophit_more'))
			{
				shopItems[i].hide();
			}
			
			if((Element.hasClassName(shopItems[i], 'article') || Element.hasClassName(shopItems[i], 'article_active')) && 
				!Element.hasClassName(shopItems[i], 'tophit'))
			{
				if (WSshop.showAll) {
						Element.addClassName(shopItems[i], 'article_active');						
				} else {	
						Element.removeClassName(shopItems[i], 'article_active');	
				}
			}
		}
	},

	highlightOnLoad: function(node) {
		// Get search string
		if (/s\=/.test(window.location.search)) {
			// Starting node, parent to all nodes you want to search
			node = $(node);
			
			var searchString = WSshop.getSearchString();
			// alert(searchString);
			var searchTerms = searchString.split('|');
			// alert(searchTerms);

			for(var i = 0;i < searchTerms.length;i++) {
				node.innerHTML = WSshop.highlightNode(node, searchTerms[i]);
			}
		}
	},
	
	highlightNode: function(node, kw) {
		var html = '';
		// Return the whole HTML data, parsing the child nodes
		for(var i = 0;i < node.childNodes.length;i++) {
			if(node.childNodes[i].nodeType == 3) {
				html += node.childNodes[i].nodeValue.gsub(new RegExp(kw, 'i'), '<span class="highlight">#{0}</span>');
			} else {
				var attributes = '';
				for(var j = 0;j < node.childNodes[i].attributes.length;j++) {
					attributes += ' '+node.childNodes[i].attributes[j].nodeName+'="'+node.childNodes[i].attributes[j].nodeValue+'"';
				}
				html += '<'+node.childNodes[i].nodeName+attributes+'>';
				html += WSshop.highlightNode(node.childNodes[i], kw);
				html += '</'+node.childNodes[i].nodeName+'>';
			}
		}
		return html;
	},

	// Pull the search string out of the URL
	getSearchString: function() {
		// Return sanitized search string if it exists
		var rawSearchString = window.location.search.replace(/[a-zA-Z0-9\?\&\=\%\#\-\_]+s\=(\w+)(\&.*)?/,"$1");
		// Replace '+' with '|' for regex
		// Also replace '%20' if your cms/blog uses this instead (credit to erlando for adding this)
		return rawSearchString.replace(/\%20|\+/g,"\|");
	},
	
	addArticleToTemplate: function(tplForm, formObj, templateId) {
		var paramArray = $H(Form.serialize(formObj, true));
		paramArray.unset('shop.action');
		
		params = paramArray.toQueryString();
		params = params + '&shop.templateId=' + templateId;
		
		new Ajax.Request( tplForm.action, {
			'method': 'post',
			parameters: params,
			evalJS: true,
			evalScripts: true,
			onSuccess: function(transport) { 
				window.location.href = absCorrect + icmsLanguage + '/mywebstar_templates_detail.html?shop.templateId=' + templateId; 
			}
		});
	},
	
	createTemplateAndAddArticles: function(formObj) {
		var paramArray = $H(Form.serialize(formObj, true));
		paramArray.unset('shop.action');
		params = paramArray.toQueryString();
			
		new Ajax.Request( absCorrect + icmsLanguage + '/ajax_saveArticlesForTemplate.html', {
			'method': 'post',
			parameters: params,
			evalJS: true,
			evalScripts: true,
			onSuccess: function(transport) { 
				window.location.href = absCorrect + icmsLanguage + '/mywebstar_templates.html'; 
			}
		});
	},
	
	showAttributeImages: function (id, title) {
		new Ajax.Request('components/webstar_attribute_details.html?id=' + id, {
			'method' : 'post',
			evalJS: true,
			evalScripts: true,
			asynchronous: true,
			onSuccess : function(transport) {
				WSshop.showEffect('ajax_attribute_details', transport.responseText);
			}
		});
	},
	
	setHistoryAndcalcPrice: function (typeId, attributeId, priceRelevant) {		
		if (attributeId != '' && attributeId != 0) {
			$('attr_' + typeId).show();
			if (attributes[typeId] == '') {
				$('attr_value_' + typeId).innerHTML = attributeId;
			} else {
				$('attr_value_' + typeId).innerHTML = attributes[typeId][attributeId];	
			}
		} else {
			$('attr_' + typeId).hide();
		}
		if (priceRelevant) {
			WSshop.setPrice(typeId, attributes[typeId]['prices'][attributeId]);
			WSshop.getPrice();
		}
	},
	
	setPrice: function(typeId, price)
	{
		upPrices[typeId] = price;
	},
	
	getPrice: function()
	{
		var attrPrice = 0;
		var totalPrice = 0;
		for (var i=0; i<upPrices.length; i++) {
			if (parseFloat(upPrices[i]) > 0) {
				attrPrice += parseFloat(upPrices[i]);
			}
		}
		
		if (parseInt($('amount').value) > 0) {
			amount = $('amount').value;
		} else {
			amount = 1;
		}
		piecePrice = parseFloat(prs) + parseFloat(attrPrice);
		totalPrice =  parseInt(amount) * (parseFloat(prs) + parseFloat(attrPrice));
		new Ajax.Request('components/webstar_attribute_price.html?shop.price=' + totalPrice, {
			'method' : 'post',
			asynchronous: true,
			onSuccess : function(transport) {
				WSshop.showEffect('totalprice_to_count', transport.responseText);
			}
		});
		
		new Ajax.Request('components/webstar_attribute_price.html?shop.price=' + piecePrice, {
			'method' : 'post',
			asynchronous: true,
			onSuccess : function(transport) {
				WSshop.showEffect('price_to_count', transport.responseText);
			}
		});
	},
	
	updatePrice: function()
	{
		WSshop.getPrice();
	},
	
	validateAttributes: function()
	{
		MenukartenFormValidator = Class.create();
		MenukartenFormValidator.prototype = FormValidator.prototype;
		Object.extend(MenukartenFormValidator.prototype, {
			"checkForm": function(ev) {
				Event.stop(ev);
				var attributes = new Object();
				attributes['form_validator_ajax'] = 1;
				var elems = Form.getInputs(this, 'file');
				for (var i = 0; i < elems.length; i++) {
					var elemName = elems[i].name;
					if (typeof(elems[i].files) != 'undefined') {
						if (typeof(elems[i].files[0]) != 'undefined') {
							attributes[elemName+'_fileName'] = elems[i].files[0].fileName;
							attributes[elemName+'_fileSize'] = elems[i].files[0].fileSize;
						}
					}
				}
				MenukartenFormValidatorAjaxHandle = Class.create();
				MenukartenFormValidatorAjaxHandle.prototype = FormValidatorAjaxHandle.prototype;
				Object.extend(MenukartenFormValidatorAjaxHandle.prototype, {
					handleAjaxResponce: function(ajaxResponse) {

						//alert(ajaxResponse.responseText);

						var response      = ajaxResponse.responseXML;
						var fields        = response.getElementsByTagName('formField');
						var invalidFields = new Array();
						var tagedFields   = new Array();

						var failures = 0;
						var checkMethod = this.method;

						if (fields.length) {

							for (var j = 0; j < fields.length; j++) {

								invalidFields[j] = new Array();

								for (var i = 0; i < fields[j].childNodes.length; i++) {

									if (fields[j].childNodes[i].nodeName == '#text') {
										continue;
									}

									if (fields[j].childNodes[i].nodeName == '#comment') {
										continue;
									}

									if (fields[j].childNodes[i].firstChild && fields[j].childNodes[i].firstChild.nodeValue) {
										invalidFields[j][fields[j].childNodes[i].nodeName] = fields[j].childNodes[i].firstChild.nodeValue;
									} else {
										invalidFields[j][fields[j].childNodes[i].nodeName] = '';
									}
								}
							}
							
							var elems = Form.getInputs(this.form, 'text');
							for (var i = 0; i < elems.length; i++) {
								if(elems[i].hasAttribute('fv_format') && elems[i].readAttribute('fv_format') == 'integer') {
									var hasError = false;
									// check ints (range and  stuff)
									for (var j = 0; j < invalidFields.length; j++) {
										if(invalidFields[j]['fieldName'] == elems[i].name) {
											hasError = (invalidFields[j]['errorType'] && invalidFields[j]['errorType'].length > 0) ? true : false;
										}
									}
									if(!hasError && elems[i].hasAttribute('fv_min_range')) {
										var value = parseInt(elems[i].value);
										var rangeMin = parseInt(elems[i].readAttribute('fv_min_range'));
										if(value == NaN || rangeMin == NaN || value < rangeMin) {
											invalidFields[invalidFields.length] = { 'fieldName' : elems[i].name, 'errorType' : 'fv_min_range' };
										}
									}
								}
							}

							for (var i = 0; i < invalidFields.length; i++) {

								if (invalidFields[i]['fieldName'].length) {

									var affectedElements = document.getElementsByName(invalidFields[i]['fieldName']);

									for (var j = 0; j < affectedElements.length; j++) {

										if (affectedElements[j].type == 'hidden' || tagedFields.indexOf(affectedElements[j].form.id + ';' + affectedElements[j].name) != -1 || affectedElements[j].form.id != this.form.id) {
											continue;
										}

										if (invalidFields[i]['errorType'].length) {
											failures++;
											tagedFields[tagedFields.length] = affectedElements[j].form.id + ';' + affectedElements[j].name;
										}

										// Highlight the Element with a Configurated CSS Class
										if (FormValidatorConfig.displayHighlightElements && this.form.object.ignore_highlight_types.indexOf(affectedElements[j].getAttribute('type')) == -1) {
											if (invalidFields[i]['errorType'].length) {
												Element.addClassName(affectedElements[j], FormValidatorConfig.cssErrorHighlightClass);
												Element.removeClassName(affectedElements[j], FormValidatorConfig.cssProtectedClass);
												Element.removeClassName(affectedElements[j], FormValidatorConfig.cssUnProtectedClass);
											} else {
												Element.addClassName(affectedElements[j], FormValidatorConfig.cssUnProtectedClass);
												Element.removeClassName(affectedElements[j], FormValidatorConfig.cssErrorHighlightClass);
												Element.removeClassName(affectedElements[j], FormValidatorConfig.cssProtectedClass);
											}
										}

										// Alert a Given Error Message or display a Configurated
										if (FormValidatorConfig.displayErrorMethode == 'alert' && invalidFields[i]['errorType'].length) {
											alert(this.getErrorMsg(affectedElements[j], invalidFields[i]['errorType']));
											Field.focus(affectedElements[j]);
											return;
										}

										// Display a Given Error Message in a Layer or display a Configurated
										if (FormValidatorConfig.displayErrorMethod == 'layer' && invalidFields[i]['errorType'].length) {

											if (typeof affectedElements[j].errorLayer == 'object' && affectedElements[j].errorLayer != null) {
												Element.remove(affectedElements[j].errorLayer);
												affectedElements[j].errorLayer = null;
											}

											// errorLayer Contains the Message and the Style Informations
											errorLayer = document.createElement('div');
											errorLayer.setAttribute('id', 'absoluteerrorlayer_' + Math.random());

											document.getElementsByTagName('body')[0].appendChild(errorLayer);
											// relativeErrorLayer.appendChild(errorLayer);
											affectedElements[j].errorLayer = $(errorLayer.id);

											// Set Element Class / Content
											Element.hide(errorLayer);
											Element.addClassName(errorLayer, FormValidatorConfig.cssErrorLayerClass);

											errorLayer.innerHTML = this.getErrorMsg(affectedElements[j], invalidFields[i]['errorType']).escapeHTML();

											// Get Posiiton of the Element
											var element_position = Position.cumulativeOffset(affectedElements[j]);

											// Get Dimension of the Element
											var element_dimension = Element.getDimensions(affectedElements[j]);

											if (FormValidatorConfig.displayLayerPosition == 'right') {
												var position_x = element_position[0] + element_dimension.width;
												var position_y = element_position[1];
											}

											errorLayer.style.position =  'absolute';
											errorLayer.style.top = position_y + 'px';
											errorLayer.style.left =  position_x + 'px';

											// Observe an on Click Event Endler to close an error Message by klicking
											if (FormValidatorConfig.hideErrorLayerOnClick) {
												Event.observe(errorLayer, 'click', this.hideErrorMsg.bind(affectedElements[j]));
											}
											Element.show(errorLayer);

											if (typeof this.form.object.options.onFailed == 'function'){
												this.form.object.options.onFailed();
											}
											
										}
										else {
											if (affectedElements[j].errorLayer) {
												Element.remove(affectedElements[j].errorLayer);
												affectedElements[j].errorLayer = null;
											}
										}
									}
								}
							}
						}

						// Check if all elements are errorless, Submit the Form if everything is ok
						if (checkMethod == 'form' && failures == 0)
						{
							if (typeof this.form.object.options.onSuccess == 'function'){
								if (this.form.object.options.onSuccess(this.form)){
									this.form.object.form.submit();
								}
							}else{
								this.form.submit();
							}
						}
					}
				});
				var validate = new MenukartenFormValidatorAjaxHandle('form', this, $H(attributes).toQueryString() + '&' + Form.serialize(this), this.object.options);
				this.object.calculatePrice(this);
				return;
			}
		});
		new MenukartenFormValidator({
					onSuccess: function(form){
						WSshop.addArticlesToBasket(form);
						return true;
					},
					onFailed: function(){
						return false;
					}
				}
			);
	},
	
	setAttibuteValue: function(selectId, attributeId)
	{
		if ($(selectId)) {
			for(i=0;i<$(selectId).options.length;i++)
			{
				if($(selectId).options[i].value == attributeId)
				{
					$(selectId).options[i].selected = true;
				}
			}
		}
	}
};

/**
 * setting focus
 * @param element_id
 */
function setFocus(element_id) {
	try
	{
		document.getElementById(element_id).focus();
	}
	catch(e)
	{
		//if this goes wrong element is inexistent or you are in internet explorer and the field is hidden
	}
}

function setTitleLabel(val, lastnameField, firstnameField) {
	if (val == 'Firma')
	{
		$(lastnameField+'1').style.display = 'none';
		$(lastnameField+'2').style.display = 'block';
		
		$(firstnameField+'1').style.display = 'none';
		$(firstnameField+'2').style.display = 'block';
	}
	else
	{
		$(lastnameField+'2').style.display = 'none';
		$(lastnameField+'1').style.display = 'block';
		
		$(firstnameField+'2').style.display = 'none';
		$(firstnameField+'1').style.display = 'block';
	}
}

function toggleArticleDetail(el) {
	if($('more_' + el).style.display == 'none')
	{		
		Element.addClassName('article_' + el, 'article_active');
		$('more_' + el).show();
	}
	else
	{
		$('more_' + el).hide();
		Element.removeClassName('article_' + el, 'article_active');		
	}
}

function moveSprite() {
	if($('login-link-stoerer').className=='left')
	{
		$('login-link-stoerer').style.backgroundPosition='bottom left';
		$('login-link-stoerer').className='right';
		startSpriteAnimation();
	}
	else
	{
		$('login-link-stoerer').style.backgroundPosition='top left';
		$('login-link-stoerer').className='left';
		startSpriteAnimation();
	}
}

function startSpriteAnimation() {
	if($('login-link-stoerer'))
	{
		setTimeout("moveSprite();",1000);
	}
}

var wsObj = WSshop.getInstance();

fbPageOptions = {
		innerBorder: 0,
		outerBorder: 0,
		padding: 0,
		roundCorners: 'none',
		shadowSize: 8,
		shadowType: 'halo',
		showClose: false,
		hideFlash: false,
		titleAsCaption: false,
		preloadAll: false,
		cacheAjaxContent: true,
		afterBoxEnd: function () {
			// Remove all form_validator error layers
			var layers = $$('.form_validator_error_layer');
			for(var i = 0; i < layers.length; i++) {
				layers[i].parentNode.removeChild(layers[i]);
			}		
		}
};

function selectSelecter(trigger,defaultvalue)
{

	if(trigger.substr(0,1)=='%')
	{
		if(defaultvalue) trigger=defaultvalue;
		else return 0;
	}

	myselect=document.forms[document.forms.length-1].elements[document.forms[document.forms.length-1].elements.length-1];
	items = trigger.split(",");
	for(j=0;j<myselect.options.length;j++)
	{
		myselect.options[j].selected=false;
	}
	for(i=0;i<items.length;i++)
	{
		for(j=0;j<myselect.options.length;j++)
		{
			if(myselect.options[j].value==items[i])
			{
				myselect.options[j].selected=true;
			}


		}

	}
	if(myselect.selectedIndex>=0) return myselect.selectedIndex;
	else return 0;
}

Event.observe(window, 'load', WSshop.load);

Event.observe(window, 'load', startSpriteAnimation);
