
// IE6 check
var is_ie6 = false /*@cc_on || @_jscript_version < 5.7 @*/;


// Http Global Request 
var req;
var xml;

//call this function on page load	
function getSmallBasket(url, pricePosition)
{
	getSmallBasketUpdater(url, pricePosition, new Boolean(false));
}


function getSmallBasketUpdater(url, pricePosition, reload)
{
	url = url + "&sid=" + Math.random()
	if (!xml || reload) xml = xmlLoader(url);
	if (xml) smallBasketRenderer(xml);
}


function submitBasketForms(theForm, urlRetrievingSmallBasketData) {
	
	var body = $('eShopBasketWrapper');
	
	var basketUrlFound = false;
	
	var isCollapsableBasket = $('eShopBasketWrapper') && $('eShopBasketWrapper').hasClassName('eShopCollapsableBasket');
	
	if (!isCollapsableBasket) {
		// avoid using ajax posts
		theForm.submit();
	} else {
		theForm.request
		(
			{
				method: 'post',
				requestHeaders:  ['Pragma', 'no-cache', 'Cache-Control', 'must-revalidate','If-Modified-Since', document.lastModified],
				onFailure: function() { 
				},
				onCreate: function(transport) {

					disableAddToBasketButtons();
					showBasketSpinner(true);				
					
					if ($('eShopBasketContainer')) {
						var handle = $('eShopBasketContainer').down('.eShopBasketHandle');
						if (handle && handle.hasClassName('handleOpened')) {
							window.setTimeout('toggleBasketHandle()',100);
						}
					}
					
					var basketEditForm = $('basketedit');
					// the url to post basket actions "trough" should be be provided by the basket themself
					if (basketEditForm && basketEditForm.action) {
						
						// use the current protcoll (ajax cross domain issue)
						var currProtocol = window.location.protocol;
						
						
						
						transport.request.url =  basketEditForm.action + ((basketEditForm.action.indexOf('?') >= 0 ? '&' : '?')) + "extractContent=x&regExp="  + encodeURIComponent('<div id=\"startBasket\"></div>([\\s\\S]*)<div id=\"endBasket\">') ;
						
						if (currProtocol) {
							transport.request.url = transport.request.url.replace(/https?:/, currProtocol);
						}
						basketUrlFound = true;
					}
					transport.request.url = transport.request.url.replace(/&+/g, '&').replace(/\\?\\&/, '?').replace(/#$/, '');
				},
				onSuccess: function(transport) {
	
					alreadyInitialized = false;
								
					var myresponse = transport.responseText;
	
					if (myresponse && basketUrlFound) {
						$('eShopBasketWrapper').up('div').update(myresponse);
						window.setTimeout('toggleBasketHandle()',100);
					} else {
						//alert('basket update failed!');
					}
			
					if (urlRetrievingSmallBasketData && urlRetrievingSmallBasketData.length != 0) {
						getSmallBasketUpdater(urlRetrievingSmallBasketData, 0, new Boolean(true));
					}		
					
					showBasketSpinner(false);	
					enableAddToBasketButtons();
				}
			}
		);
	}
	
	return false;
}

function showBasketSpinner(show) {
	if($('eShopBasketWrapper')) {
		var resultDiv = $('eShopBasketWrapper').up('.resultAjaxContent');
		if(resultDiv) {
			var initialDiv = resultDiv.up('div.AjaxContentContainer').down('.initialAjaxContent');
			if(initialDiv) {
				if(show) {
					new Effect.Appear(initialDiv, {duration: 1.0});
				} else {
					new Effect.Fade(initialDiv, {duration: 1.0});
				}
			}
		}
	}	
}

// changes the qty to add to basket without form submitting
function changeAddToBasketAmount(action, qtyElement, displayQtyElement, amount, maxValue) {
	
	amount = changeAmount(action, amount);
	maxValue = parseInt(maxValue);
	
	if (amount == 0)	amount = 1;
	if (amount >= maxValue)	amount = maxValue;
	
	if (qtyElement && displayQtyElement) {
		qtyElement.value = amount;
		displayQtyElement.update(amount);
	}
}


// changes the quantity of the current propduct and submits the form
function changeItemAmount(action, productId, basketIndex, amount, urlRetrievingSmallBasketData) {
	
	amount = changeAmount(action, amount);
	
	if (amount == 0)
	{
		// delete the item
		document.basketremove.basketItem.value=basketIndex;
		submitBasketForms($('basketremove'), urlRetrievingSmallBasketData);
	} else {
		// change the amount of the item
		document.basketedit.id.value = productId;
		document.basketedit.basketItem.value= basketIndex;
		document.basketedit.qty.value=amount;
		submitBasketForms($('basketedit'), urlRetrievingSmallBasketData);
	}
}

function changeAmount(action, amount) {

	try {
		amount = parseInt(amount);
		
		if ("add" == action) {
			amount += 1;
		} else if ("sub" == action) {
			amount -= 1;
		} else if ("direct" == action) {
			// use the passed amount as amount value
		}
    } catch (e) {
    	amount = 1;
    }
    
    return amount;
}	

function smallBasketRenderer(xml)
{
	if (!xml) return;
	
	//var productSimpleItemElem = xml.getElementsByTagName("productsimpleitem");
	//var itemCount = productSimpleItemElem.length;

	var basketElem = xml.getElementsByTagName("basket")[0];
	
	if (basketElem && basketElem.getElementsByTagName("username").length != 0) {
		if (document.getElementById('miniBasketUserName'))
			document.getElementById('miniBasketUserName').innerHTML = '(' + basketElem.getElementsByTagName('username')[0].childNodes[0].nodeValue + ')';
	}

	if (!basketElem || basketElem.getElementsByTagName("price").length == 0 ||
		basketElem.getElementsByTagName("measure").length == 0 ||
		basketElem.getElementsByTagName("items").length == 0) return;
	
	if (document.getElementById('miniBasketWrapper'))
		document.getElementById('miniBasketWrapper').className = 'hasItems';
	
	var price = basketElem.getElementsByTagName("price")[0].childNodes[0].nodeValue;
	var currency = basketElem.getElementsByTagName("measure")[0].childNodes[0].nodeValue;
	var itemCount = basketElem.getElementsByTagName("items")[0].childNodes[0].nodeValue;
	
	if(document.getElementById('miniBasketItemCount')) {
		var miniBasketItemCount = document.getElementById('miniBasketItemCount');
		miniBasketItemCount.innerHTML = '(' + itemCount + ')';		
	}

	if(document.getElementById('miniBasketMeasure')) {
		var miniBasketMeasure = document.getElementById('miniBasketMeasure');
		miniBasketMeasure.innerHTML = currency;		
	}

	if(document.getElementById('miniBasketPrice')) {
		var miniBasketPrice = document.getElementById('miniBasketPrice');
		miniBasketPrice.innerHTML = price;		
	}
}

function getElement(psID) { 
   if(document.all) { 
      return document.all[psID]; 
   } else { 
      return document.getElementById(psID); 
   } 
} 

function submitAllForms(count){
	var ids = "";
	var qtys = "";
	for (var x=1;x<=count;x++) {
		var formName = "favouriteForm" + x;
		ids = ids + getElement(formName).id.value + "|";
  		qtys = qtys + getElement(formName).qty.value + "|";
	}
	document.submitAll.id.value = ids;
	document.submitAll.qty.value = qtys;
	document.submitAll.submit();

}

function enableAddToBasketButtons() {
	$$('div.eshopProduct-addToBasket fieldset button').each(function(button) {
		button.removeClassName('inactive');
		Form.Element.enable(button);
	});
}

function disableAddToBasketButtons() {
	$$('div.eshopProduct-addToBasket fieldset button').each(function(button) {
		button.addClassName('inactive');
		Form.Element.disable(button);
	});
}


// shopping basket open/close behaviour in right col
// requires: prototype & scriptaculous
var protoaculous_included = (typeof Prototype != 'undefined' && typeof Scriptaculous != 'undefined');
if (protoaculous_included) {

	// we need to store the original height of the content, so that this is the minimum height when resizing due to opening of the basket
	var contentCentreInitialHeight;
	var alreadyInitialized = false;
	
	function eShopBasketInit() {
		
		var isCollapsableBasket = $('eShopBasketWrapper') && $('eShopBasketWrapper').hasClassName('eShopCollapsableBasket');
		
		if (isCollapsableBasket && !alreadyInitialized) {
			alreadyInitialized = true;
			// remove "special" workaround for initial display:none styling
			if ($('eShopBasketContainer').down('.eShopMinOrderMessage')) {
				$('eShopBasketContainer').down('.eShopMinOrderMessage').hide();
				$('eShopBasketContainer').down('.eShopMinOrderMessage').removeClassName('eShopMinOrderMessageSpecial');
			}
			
			$('eShopBasketContainer').down('.eShopBasketItems').hide();
			$('eShopBasketContainer').down('.eShopBasketItems').removeClassName('eShopBasketItemsSpecial');
			
			
			if ($('eShopBasketContainer').down('.basketPostStdContent')) {
				$('eShopBasketContainer').down('.basketPostStdContent').hide();
				$('eShopBasketContainer').down('.basketPostStdContent').removeClassName('eShopBasketItemsSpecial');
			}
			
			if ($('eShopBasketContainer').down('.preBasketItemsStdContent')) {
				$('eShopBasketContainer').down('.preBasketItemsStdContent').hide();
				$('eShopBasketContainer').down('.preBasketItemsStdContent').removeClassName('eShopBasketItemsSpecial');
			}
			
			$('eShopBasketContainer').down('.grandTotal').hide();
			$('eShopBasketContainer').down('.grandTotal').removeClassName('grandTotalSpecial');

			if ($('eShopBasketContainer').down('.eShopBasketSummary')) {
				$('eShopBasketContainer').down('.eShopBasketSummary').hide();
				$('eShopBasketContainer').down('.eShopBasketSummary').removeClassName('eShopBasketItemsSpecial');
			}
			if ($('eShopBasketContainer').down('.eShopBasketFooter')) {
				$('eShopBasketContainer').down('.eShopBasketFooter').hide();
				$('eShopBasketContainer').down('.eShopBasketFooter').removeClassName('eShopBasketItemsSpecial');
			}
			
			if ($('contentCentre')) {
				contentCentreInitialHeight = $('contentCentre').getDimensions().height;
			}
			
			var basketHandle = $('eShopBasketContainer').down('.eShopBasketHandle');
			basketHandle.setStyle({cursor: 'pointer'});
			Event.observe(basketHandle, 'click', toggleBasketHandle.bindAsEventListener());
			if (typeof window['rotatingContentContainerInit'] == 'function') {
				rotatingContentContainerInit(null, $$('div.RccPreviewBasketOffer '));
			}
			if (typeof window['initShopVoucherGroup'] == 'function') {
				initShopVoucherGroup();
			}
			
		}
		enableAddToBasketButtons();
	}
	
	function setPageBodyHeight() {
		var newPageBodyHeight = $('eShopBasketContainer').getDimensions().height;
		var newHeight = Math.max(newPageBodyHeight, contentCentreInitialHeight) + 'px';
		if (!is_ie6) {
			$('pageBody').style.minHeight = newHeight;		
		}
	}
	
	function toggleBasketHandle() {
		var handle = $('eShopBasketContainer').down('.eShopBasketHandle');
		// tag coremetrics element basket open/close?
		var cmElemInfos = $('eShopBasketContainer').down('form[name="eShopCMConvEvent"]');
		// check if we need to open or close the basket and start appropriate effects
		if (handle.hasClassName('handleOpened')) {
			handle.removeClassName('handleOpened');
			
			// fire coremetrics element basket close tag
			if (cmElemInfos) {
				var inputs = cmElemInfos.getInputs('hidden', 'close_id');
				if (inputs && inputs.length > 0) {
					var catInputs = cmElemInfos.getInputs('hidden', 'cat');
					cmCreateElementTag(inputs[0].value, (catInputs && catInputs.length > 0) ? catInputs[0].value : null);
				}
			}

			if ($('eShopBasketContainer').down('.eShopBasketSummary')) {
				new Effect.BlindUp($('eShopBasketContainer').down('.eShopBasketSummary'), {duration: 0.5, queue: { position: 'end', scope: 'summary'}});
			}
			if ($('eShopBasketContainer').down('.basketPostStdContent')) {
				new Effect.BlindUp($('eShopBasketContainer').down('.basketPostStdContent'), {duration: 0.5, queue: { position: 'end', scope: 'postContent'}});
			}
			if ($('eShopBasketContainer').down('.eShopBasketFooter')) {
				new Effect.BlindUp($('eShopBasketContainer').down('.eShopBasketFooter'), {duration: 0.5, queue: { position: 'end', scope: 'footer'}});
			}
			new Effect.BlindUp($('eShopBasketContainer').down('.grandTotal'), {duration: 0.5, queue: { position: 'end', scope: 'basket'}});

			if ($('eShopBasketContainer').down('.errorMinOrder')) {
				new Effect.BlindUp($('eShopBasketContainer').down('.eShopMinOrderMessage'), {duration: 0.5, queue: { position: 'end', scope: 'errMin'}});
			}
			new Effect.BlindUp($('eShopBasketContainer').down('.eShopBasketItems'), {duration: 0.5, queue: { position: 'end', scope: 'items'}});
			if ($('eShopBasketContainer').down('.preBasketItemsStdContent')) {
				new Effect.BlindUp($('eShopBasketContainer').down('.preBasketItemsStdContent'), {duration: 0.5, queue: { position: 'end', scope: 'preItems'}});				
			}
		} else {
			handle.addClassName('handleOpened');

			// fire coremetrics element basket open tag
			if (cmElemInfos) {
				var inputs = cmElemInfos.getInputs('hidden', 'open_id');
				if (inputs && inputs.length > 0) {
					var catInputs = cmElemInfos.getInputs('hidden', 'cat');
					cmCreateElementTag(inputs[0].value, (catInputs && catInputs.length > 0) ? catInputs[0].value : null);
				}
			}

			if ($('eShopBasketContainer').down('.basketPostStdContent')) {
				new Effect.BlindDown($('eShopBasketContainer').down('.basketPostStdContent'), {duration: 0.5, queue: { position: 'end', scope: 'postContent'}});				
			}
			if ($('eShopBasketContainer').down('.errorMinOrder')) {
				new Effect.BlindDown($('eShopBasketContainer').down('.eShopMinOrderMessage'), {duration: 0.5, queue: { position: 'end', scope: 'errMin'}});
			}
			if ($('eShopBasketContainer').down('.eShopBasketFooter')) {
				new Effect.BlindDown($('eShopBasketContainer').down('.eShopBasketFooter'), {duration: 0.5, queue: { position: 'end', scope: 'footer'}});
			}
			if ($('eShopBasketContainer').down('.eShopBasketSummary')) {
				new Effect.BlindDown($('eShopBasketContainer').down('.eShopBasketSummary'), {duration: 0.5, queue: { position: 'end', scope: 'summary'}});
			}
			if ($('eShopBasketContainer').down('.grandTotal')) {
				new Effect.BlindDown($('eShopBasketContainer').down('.grandTotal'), {duration: 0.5, queue: { position: 'end', scope: 'grandTotal'}});
			}
			if ($('eShopBasketContainer').down('.eShopBasketItems')) {
				new Effect.BlindDown($('eShopBasketContainer').down('.eShopBasketItems'), {duration: 0.5, queue: { position: 'end', scope: 'items'}, afterFinish: effectsdone});
			}
			if ($('eShopBasketContainer').down('.preBasketItemsStdContent')) {
				new Effect.BlindDown($('eShopBasketContainer').down('.preBasketItemsStdContent'), {duration: 0.5, queue: { position: 'end', scope: 'preItems'}});				
			}

		}
	}
	
	function effectsdone() {
		var basketItems = $('eShopBasketItems');
		
		// do it only once
		if (basketItems && !$('eShopBasketItems').hasClassName('flexcrollactive') ) {
			fleXenv.fleXcrollMain(basketItems);
			setPageBodyHeight();
		}
	}
	
	function eShopTeaserInit() {
		if (!$('contentCentre')) return;
		var eShopCatProds = $('contentCentre').select('.eshopCategoryProducts');
		if (eShopCatProds) eShopCatProds.each(function(eShopCatProd) {
			if (eShopCatProd.getAttribute('id') == 'eshopHomeProductTeaser_big' || eShopCatProd.getAttribute('id') == 'eshopHomeProductTeaser_small')
				new eShopTeaser(eShopCatProd);
		});
	}
	
	eShopTeaser = Class.create({
		initialize: function(ele) {
			this.ele = ele;
			this.activeItem = 1;
			if (ele.hasClassName('autoRotate'))
				this.pe_autoRotate = new PeriodicalExecuter(this.showNext.bindAsEventListener(this), 6);
			
			var t = this;
			
			// register click event on handles
			var handles = ele.select('.categoryProductHandle div');
			if (handles) handles.each(function(handle) {
				handle.setStyle({cursor: 'pointer'});
				Event.observe(handle, 'click', t.click.bindAsEventListener(t));
			});
			
			// deactivate link behaviour on images
			/*var images = ele.select('img.eshopProduct_image');
			if (images) images.each(function(image) {
				image.setStyle({cursor: 'default'});
				Event.observe(image, 'click', function(evt) { evt.stop(); });
			});*/
			
			// remove "special" workaround for initial display:none styling
			var items = ele.select('.eshopProductForm');
        	if (items) items.each(function(item) {
	        	if (!item.hasClassName('first') && items.length > 1) item.hide();
	        	item.removeClassName('eshopProductFormSpecial');
        	});
		},
		showNext: function() {
			// used by auto rotate to show next item
			this.click(this.activeItem + 1);
		},
		click: function(evt) {
			if (!evt) return;
			
			// stop auto rotate if manually clicked
			var clickedHandle;
			if (typeof evt == 'object') {
				if (this.pe_autoRotate) this.pe_autoRotate.stop();
				clickedHandle = Event.element(evt).up();
			} else {
				clickedHandle = this.ele.down('.handle' + evt);
				if (!clickedHandle) clickedHandle = this.ele.down('.handle1');
			}
			
			// which number has been clicked?
			var handleNum;
			if (clickedHandle.className) {
				clickedHandle.className.split(" ").each(function(v){
					if (v.match(/^handle\d+$/))
						handleNum = parseInt(v.gsub(/^handle(\d+)/, '#{1}'));
				})
			}
			if (handleNum == this.activeItem) return;
			
			// start fading between involved products
			this.ele.down('.handle' + this.activeItem).removeClassName('handleActive');
	        if (handleNum) {
	        	var items = this.ele.select('.eshopProductForm');
	        	var activeItem = this.activeItem;
	        	if (items) items.each(function(item) {
	        		if (item.attributes['id'].nodeValue.match(new RegExp('productItem' + handleNum + '$')))
	        			new Effect.Appear(item, {duration: 0.7, queue: { position: 'end', scope: 'item' + handleNum}});
	        		if (item.attributes['id'].nodeValue.match(new RegExp('productItem' + activeItem + '$')))
	        			new Effect.Fade(item, {duration: 0.7, queue: { position: 'end', scope: 'item' + activeItem}});
	        	});
	        }
	        this.activeItem = handleNum;
	        this.ele.down('.handle' + this.activeItem).addClassName('handleActive');
		}
	});
	
	// toggable info areas for product detail pages
	function eShopAdditionalInfoInit() {
		if (!$('contentCentre')) return;
		var additionalInfoAreas = $('contentCentre').select('.eshopProductAdditionalInfo_wrapper div.eshopProductAdditionalInfo');
		
		if (additionalInfoAreas) additionalInfoAreas.each(function(additionalInfoArea) {
			new eShopAdditionalInfoArea(additionalInfoArea);
		});
	}
	
	eShopAdditionalInfoArea = Class.create({
		initialize: function(ele) {
			this.ele = ele;
			this.handle = this.ele.down('h4');
			this.contentWrapper = this.ele.down('.additionalInfoContentWrapper');
			
			if (this.contentWrapper && this.contentWrapper.hasClassName('additionalInfoContentWrapper_closed')) {
				this.contentWrapper.hide();
				this.contentWrapper.removeClassName('additionalInfoContentWrapper_closed');
			}

			this.handle.setStyle({cursor: 'pointer'});
			Event.observe(this.handle, 'click', this.click.bindAsEventListener(this));
		},
		
		click: function(evt) {
			if (this.handle.hasClassName('additionalInfoOpened')) {
				this.handle.removeClassName('additionalInfoOpened');
				this.contentWrapper.setStyle({height: 'auto'});
				new Effect.BlindUp(this.contentWrapper, {duration: 0.5});
			} else {
				this.handle.addClassName('additionalInfoOpened');
				this.contentWrapper.setStyle({height: 'auto'});
				new Effect.BlindDown(this.contentWrapper, {duration: 0.5});
			}
		}
	});
	
	Event.observe(window, 'load', eShopAdditionalInfoInit);
	
}

//-----------------------------------------------------------------
// Flash integration
//
// We expect to find a div with id 'addToBasketItems'. That is the
// product list (ShopProductList) that contains the "Add To Basket" 
// items (ShopProducts)
//-----------------------------------------------------------------
var addToBasketItems = null;
Event.observe(window, 'load', function() {
	
	if (alreadyInitialized) {
		// be sure to enable the add to basket functionalitay 
		// this might occur if the ajax call is back before the buttons are rendered
		enableAddToBasketButtons();
	}
	
	if($('addToBasketItems')) {
		addToBasketItems = $('addToBasketItems');
		addToBasketItems.select('div.productContainer').each(function(item) {
			item.hide();
			item.removeClassName('hideElement');
		});		
	}
});

var currentProduct = null;
function productUpdate(pid) {
	var prev = currentProduct;
	var d = 0.2;
	var ret = '';
	
	if(addToBasketItems != null) {
		currentProduct = addToBasketItems.select('div.pid'+pid)[0];
		if (prev == currentProduct) return;
		if (prev) {
			prev.fade({ duration:d });
			new Effect.Move(prev, { y:30, mode:"absolute", duration:d });
		}
		if(currentProduct) {
			currentProduct.setStyle({ display:"block", opacity:0, top:"-30px" });
			currentProduct.appear({ duration:d });		
			new Effect.Move(currentProduct, { y:0, mode:"absolute", duration:d });
			var urlItem = currentProduct.down('div.prodDetailUrl');
			if(urlItem) {
				var urlItemLink = urlItem.down('a');
				if(urlItemLink)
				ret = urlItemLink.href;
			}
		}
		return ret;
	}
}

//-----------------------------------------------------------------
// List filter
//-----------------------------------------------------------------
if ($$('.productListFilter')) {
	function productFilterInit() {
		if (!$$('.productListFilter')) return;
		$$('.productListFilter').each(function(e) {
			new shopFilter(e);
		});
	}
	Event.observe(window, 'load', productFilterInit);

	shopFilter = Class.create({
		initialize: function(ele) {
			this.ele = ele;
			var t = this;
			
			// register click event on handles
			var handles = ele.select('.catRadio input');
			if (handles) handles.each(function(handle) {
				handle.observe('click', function(event){
					setFilterCategory(handle, t.ele);
				});
			});
			
		}
	});
	
	function setFilterCategory(handle, filterGroup) {
		var frm = $(filterGroup).down('form');
		var radios = frm.getInputs('radio');
		var cats = "";
		for (var i=0; i<radios.length; i++) {
			var input = radios[ i ];    
			if (input.checked) {
				if(input.value != '')
					cats += "&catid=" + input.value;
			}
		}

		var elems = frm.getInputs('hidden', 'currpage');
		if (elems.length > 0) {
			var currpage = elems[0];
			var url = currpage.value;
			
			var qsAvailable =  url.indexOf('?') >= 0;
			
			var url_base = qsAvailable ? url.substring(0, url.indexOf('?')+1) : url + "?";
			
			if(url) {
				var new_qs = "";
				if (qsAvailable) {
					var params = $H(url.toQueryParams());
					params.unset('catid');
					// 	remove page param when filter changes
					params.unset('page');
					new_qs = $H(params).toQueryString();
				}
				new_qs += cats ;
				url = url_base + new_qs;
				window.location = url.replace(/\?\&/,"?");
			}
		}
	
	}
}

//ShopProductList 'num per page'.
//Attach event to react in dropdown change. Reload page with result limit.
function initListNumPerPage() {
	
	var selects = $('pageBody').select('select');

	if (selects) {
		selects.each(function (s) {
			if (s.id.indexOf("spl_npp_") == 0) {

				// get groupId from element id "spl_npp_0815"
				var grpId = s.id.sub('spl_npp_', '');
				
				s.observe('change', function(event){
					event.preventDefault();
					var numPerPageVal = $F(s);
					// take current url
					var newUrl = window.location.href;
					// remove old num per page if existing
					var re = new RegExp("(&|\\?)spl_npp_"+grpId+"=([^&]*)","g");
					var oldParam = newUrl.match(re);
					if (oldParam != null && oldParam.length > 0) {
						var i = newUrl.indexOf(oldParam[0]); 
						var tmp = newUrl.substring(0, i+1);
						tmp += newUrl.substring(i+1+oldParam[0].length, newUrl.length);
						newUrl = tmp;
						if (newUrl.lastIndexOf('&') == newUrl.length-1) {
							newUrl = newUrl.substring(0, newUrl.length-1);
						}
					}					

					var new_qs = "";
					var qsAvailable =  newUrl.indexOf('?') >= 0;
					var url_base = qsAvailable ? newUrl.substring(0, newUrl.indexOf('?')+1) : newUrl + "?";

					if (qsAvailable) {
						var params = $H(newUrl.toQueryParams());
						params.unset('page');
						new_qs = $H(params).toQueryString();
					}

					// add current sort-value					
					if(numPerPageVal && numPerPageVal != '') {
						if(new_qs == '') {
							new_qs += "spl_npp_"+grpId+"="+numPerPageVal;
						} else {
							new_qs += "&spl_npp_"+grpId+"="+numPerPageVal;
						}
					}
					newUrl = url_base + new_qs;
					
					// load new url
					window.location.href= newUrl;
				});
				
			}
		});
	}
}
Event.observe(window, 'load', initListNumPerPage);

//-----------------------------------------------------------------
// ShopProductList sort.
// Attach event to react in dropdown change. Reload page with 
// sort criteria.
//-----------------------------------------------------------------
function initListSort() {
	
	var selects = $('pageBody').select('select');

	if (selects) {
		selects.each(function (s) {
			if (s.id.indexOf("spl_srt_") == 0) {

				// get groupId from element id "spl_srt_0815"
				var grpId = s.id.sub('spl_srt_', '');
				
				s.observe('change', function(event){
					event.preventDefault();
					var sortVal = $F(s);
					// take current url
					var newUrl = window.location.href;
					// remove old sort-param if existing
					var re = new RegExp("(&|\\?)spl_srt_"+grpId+"=([^&]*)","g");
					var oldParam = newUrl.match(re);
					if (oldParam != null && oldParam.length > 0) {
						var i = newUrl.indexOf(oldParam[0]); 
						var tmp = newUrl.substring(0, i+1);
						tmp += newUrl.substring(i+1+oldParam[0].length, newUrl.length);
						newUrl = tmp;
						if (newUrl.lastIndexOf('&') == newUrl.length-1) {
							newUrl = newUrl.substring(0, newUrl.length-1);
						}
					}

					var qsAvailable =  newUrl.indexOf('?') >= 0;
					var url_base = qsAvailable ? newUrl.substring(0, newUrl.indexOf('?')+1) : newUrl + "?";
					var new_qs = "";
					if (qsAvailable) {
						var params = $H(newUrl.toQueryParams());
						new_qs = $H(params).toQueryString();
					}

					// add current sort-value
					if(new_qs == '') {
						new_qs += "spl_srt_"+grpId+"="+sortVal;						
					} else {
						new_qs += "&spl_srt_"+grpId+"="+sortVal;						
					}
					newUrl = url_base + new_qs;
					// load new url
					window.location.href= newUrl;
				});
				
			}
		});
	}
}
Event.observe(window, 'load', initListSort);

//------------------------------------------------------------------------
// Shop voucher (see template name="ShopVoucher" in CMSLiteCommon.xsl)
//------------------------------------------------------------------------
function initShopVoucherGroup() {
	var addVoucherForms = $$('form.addVoucherForm'); 
	if (addVoucherForms) {
		addVoucherForms.each(function(form) {
			if(!form.hasClassName("addVoucher_Initialized")) {
				form.addClassName("addVoucher_Initialized");

				Form.reset(form);
				var submitBtn = form.down('.btn_submit');
				if(submitBtn) {
					Event.observe(submitBtn, 'click', function(event) {
						event.preventDefault();

						var voucher = form['voucher'];
						if(voucher && $(voucher).getValue()!='') {
							var servletPath = form['servletPath'];
							var locale = form['locale'];
							var siteId = form['siteId'];
							var pageId = form['pageId'];
							var groupId = form['groupId'];
							var SSID = form['SSID'];
							var pos = form['pos'];
							addVoucherPerAjax($(servletPath).getValue(), $(siteId).getValue(), $(locale).getValue(), $(pageId).getValue(), $(groupId).getValue(), $(SSID).getValue(), $(pos).getValue());							
						}						
					});						
				}
			}
		});
	}
}

function addVoucherPerAjax(servletPath, siteId, locale, pageId, groupId, SSID, pos) {
	var url = servletPath+'/servlet/AjaxActionServlet?';
	url += 'siteid='+siteId;
	url += '&locale='+locale;
	url += '&pageId='+pageId;
	url += '&ssid='+SSID;
	url += '&pos='+pos;
	url += '&action=addVoucher';

	url = addFormElementsToUrl(url, 'shopvoucher_'+groupId);

	// remove previous errors
	var theForm = $('shopvoucher_'+groupId+'_form');
	var formerErrorDiv = findErrorDiv(theForm);
	if(formerErrorDiv) {
		Element.remove(formerErrorDiv);
	}
	
	showAjaxWaitingScreen('shopvoucher_waiting_'+groupId);
	new Ajax.Request(url, {
		method: 'post',
		onComplete: function() {
			hideAjaxWaitingScreen('shopvoucher_waiting_'+groupId);
		},
		onSuccess: function(response) {
			addVoucherPerAjaxComplete(siteId, locale, groupId, response);
		}
	});
}

function addVoucherPerAjaxComplete(siteId, locale, groupId, response) {
	var xmlDoc = response.responseXML;
	if(xmlDoc) {
		var elem = xmlDoc.firstChild;
		if(elem) {
			var code = elem.getAttribute("code");
			if (code != '0') {
				var theForm = $('shopvoucher_'+groupId+'_form');
				
				var errorMsg = "A technical error occured. Please try again later.";
				var errors = elem.getElementsByTagName('Error');
				var errorMsgs = (errors && errors.length > 0 ) ? errors[0].getElementsByTagName('LoadedMessage') : null;
				if(errorMsgs) {
					errorMsg = errorMsgs[0].firstChild.data;
				}				
				if (errorMsg) {
					var errorDiv = document.createElement("div");
					errorDiv.setAttribute("class", "errors");
					errorDiv.setAttribute("id", "errors");
					Element.update(errorDiv, errorMsg);
					theForm.insertBefore(errorDiv, theForm.firstChild);
				}
			} else {
				htmlElementClose('shopvoucher_'+groupId+'_form');
				htmlElementOpen('shopvoucher_'+groupId+'_success');
				
				submitBasketForms($('basketedit'), '');
			}
		}
	}

}

Event.observe(window, 'load', initShopVoucherGroup);
