// Create namespace object if it doesn't exist
if ( ! window.nl.shaveworld ) {
	window.nl.shaveworld = {} ;
} ;

/* Shaveworld Class */
nl.shaveworld.Shaveworld = function() {
	this.initialize() ;
} ;
nl.shaveworld.Shaveworld.prototype = {
	initialize: function() {
		
		var productssectionform = nl.xd.dom.DOM.get( 'productssectionform' ) ;
		if( productssectionform ){
			new nl.shaveworld.ProductSectionForm() ;
		}
		var productssectionform_ordertypes = nl.xd.dom.DOM.get( 'productssectionform_ordertypes' ) ;
		if( productssectionform_ordertypes ){
			new nl.shaveworld.ProductSectionForm_ordertypes() ;
		}
		var cartpage = nl.xd.dom.DOM.get( 'cartpage' )
		if( cartpage ){
			new nl.shaveworld.CartPage() ;
		}
		var checkout = nl.xd.dom.DOM.get( 'checkout' ) ;
		if( checkout ){
			new nl.shaveworld.CheckoutPage() ;
		}
		
		var login = nl.xd.dom.DOM.get( 'login' ) ;
		if( login ){
			new nl.shaveworld.Login() ;	
		}
		
		var checkoutlogin = nl.xd.dom.DOM.get( 'checkoutloginscreen' ) ;
		if( checkoutlogin ){
			new nl.shaveworld.CheckoutLogin() ;	
		}
		
		var faqlist = nl.xd.dom.DOM.get( 'faqlist' ) ;
		if( faqlist ){
			new nl.shaveworld.FaqList();	
		}
		
		var productgroupform = nl.xd.dom.DOM.get( 'productgroupform' ) ;
		if( productgroupform ){
			new nl.shaveworld.ProductGroupForm();		
		}
		
		var home = nl.xd.dom.DOM.get( 'home' ) ;
		if( home ){
			new nl.shaveworld.HomePage() ;	
		}
		// correct layout to minimal size
		if( !home && !productssectionform_ordertypes ){
			var content = nl.xd.dom.DOM.get( 'content' ) ;
			if( content.offsetHeight < 265 ) {
				content.style.height = '265px' ;
			}
		}
	}
} ;
/* HomePage */
nl.shaveworld.HomePage = function(){
	this.initialize() ;
}
nl.shaveworld.HomePage.prototype = {
	initialize: function(){
		this.setEvents() ;	
	} ,
	setEvents: function(){
		var self = this ;
		var imagelistener = {} ;
		imagelistener.onClickImage = function( index ){
			self.onClickImage( index ) ;
		}
		var image1 = nl.xd.dom.DOM.get( 'homeimage1' ) ;
		new nl.shaveworld.RollOverImage( image1, imagelistener, 1 ) ; // men
		var image2 = nl.xd.dom.DOM.get( 'homeimage2' ) ;
		new nl.shaveworld.RollOverImage( image2, imagelistener, 0 ) ; // women
	} ,
	onClickImage: function( index ){
		var form = nl.xd.dom.DOM.get( 'home' ) ;
		form.selectedindex.value = index ;
		form.submit() ;
	}
}

/* RolloverImage */
nl.shaveworld.RollOverImage = function( element, listener, index ){
	this.element = element ;
	this.listener = listener ;
	this.index = index ;
	this.initialize() ;
}
nl.shaveworld.RollOverImage.prototype = {
	initialize: function(){
		this.setEvents() ;
	} ,
	setEvents: function(){
		var self = this ;
		nl.xd.event.Event.addListener( this.element , 'click' , 		function() { self.onClick() } ) ;
		nl.xd.event.Event.addListener( this.element , 'mouseover' , 	function() { self.onRollOver() } ) ;
		nl.xd.event.Event.addListener( this.element , 'mouseout' , 		function() { self.onRollOut() } ) ;
	} ,
	onClick: function(){
		this.listener.onClickImage( this.index ) ;
	} ,
	onRollOver: function(){
		nl.xd.dom.DOM.addClass( this.element, 'rollover' ) ;
	} ,
	onRollOut: function(){
		nl.xd.dom.DOM.removeClass( this.element, 'rollover' ) ;
	}
}

/* ProductGroup Form */
nl.shaveworld.ProductGroupForm = function(){
	this.initialize() ;	
}
nl.shaveworld.ProductGroupForm.prototype = {
	initialize: function(){
		this.setEvents() ;	
	} ,
	setEvents: function(){
		var self = this ;
		var imagelistener = {} ;
		imagelistener.onClickImage = function( index ){
			self.onClickImage( index ) ;
		}
		var image1 = nl.xd.dom.DOM.get( 'homeimage1' ) ;
		new nl.shaveworld.RollOverImage( image1, imagelistener, 1 ) ; // men
		var image2 = nl.xd.dom.DOM.get( 'homeimage2' ) ;
		new nl.shaveworld.RollOverImage( image2, imagelistener, 0 ) ; // women
	} ,
	onClickImage: function( index ){
		var form = nl.xd.dom.DOM.get( 'productgroupform' ) ;
		form.selectedindex.value = index ;
		var itemid = form[ 'groupid' + index ].value ;
		
//		alert( 'itemid: ' + itemid ) ;
		form.selecteditemid.value = itemid ;
		form.submit() ;
	}
}


/* CheckoutPage */
nl.shaveworld.CheckoutPage = function(){
	this.initialize() ;
}
nl.shaveworld.CheckoutPage.prototype = {
	initialize: function(){
		this.setEvents() ; 
		this.handleFormValues() ;
	} ,
	handleFormValues: function(){
	} ,
	setEvents: function(){
		var form = nl.xd.dom.DOM.get( 'checkout' ) ;
		var back = nl.xd.dom.DOM.get( 'backbutton' ) ;
		var backlistener = {} ;
		backlistener.holder = this ;
		backlistener.onClick = function(){
			form.direction.value = 'back' ;
			form.submit() ;
		}
		backlistener.onRollOver = function(){}
		backlistener.onRollOut = function(){}
		new nl.shaveworld.NavigationButton( back, backlistener ) ;
		
		var next = nl.xd.dom.DOM.get( 'nextbutton' ) ;
		var nextlistener = {} ;
		nextlistener.holder = this;
		nextlistener.onClick = function(){
			
			if( nl.xd.form.Form.check( form ) ){
				var checkoutlogin = nl.xd.dom.DOM.get( 'checkoutloginscreen' ) ;
				if( checkoutlogin ){
					( new nl.shaveworld.CheckoutLogin() ).login();	
				}
				form.submit() ;
			} else {
				alert( "U heeft niet alle verplichte velden ingevuld!" ) ;
			}
			
		}
		nextlistener.onRollOver = function(){}
		nextlistener.onRollOut = function(){}
		new nl.shaveworld.NavigationButton( next, nextlistener ) ;
		
		// radio actions
		var radiogroups = nl.xd.dom.DOM.getByClassName( 'radiogroup', 'div', form );
		var radiogrouplistener = {} ;
		radiogrouplistener.holder = this ;
		this.radiogroups = new Array() ;
		radiogrouplistener.onSelectRadio = function( item, radiogroupindex ){
			this.holder.onSelectRadio( item, radiogroupindex ) ;
		}
		for( var i=0; i<radiogroups.length; i++ ){
			this.radiogroups[i] = new nl.shaveworld.RollOverRadioGroup( radiogroups[i], radiogrouplistener, i )	;
		}
	} ,
	onSelectRadio: function( item, radiogroupindex ){
		var form = nl.xd.dom.DOM.get( 'checkout' ) ;
		switch( form.step.value ){
			case '0':
				// first page select returning or new customer
				var next = nl.xd.dom.DOM.get( 'nextbutton' ) ;
				nl.xd.dom.DOM.removeClass( next, 'displaynone' )
				var checkoutloginscreen  	= nl.xd.dom.DOM.get( 'checkoutloginscreen' ) ;
				if( item.index == 0 ){
					nl.xd.dom.DOM.addClass( checkoutloginscreen, 'displaynone' ) ;
				} else {
					nl.xd.dom.DOM.removeClass( checkoutloginscreen, 'displaynone' ) ;
				}
				break ;
			case '1':
				// second page with NAW
				if( radiogroupindex == 1 ){
					var differentaddress = nl.xd.dom.DOM.get( 'differentaddressform' ) ;
					if( item.index == 0 ){
						nl.xd.dom.DOM.addClass( differentaddress, 'displaynone' )
					} else {
						nl.xd.dom.DOM.removeClass( differentaddress, 'displaynone' )
					}
				}
		}
	}
}

/* CartPage */
nl.shaveworld.CartPage = function(){
	this.initialize() ;
}

nl.shaveworld.CartPage.prototype = {
	initialize: function(){
		this.setEvents();	
	} ,
	setEvents: function(){
		var form = nl.xd.dom.DOM.get( 'cartpage' ) ;
		var back = nl.xd.dom.DOM.get( 'backbutton' ) ;
		var backlistener = {} ;
		backlistener.holder = this ;
		backlistener.onClick = function(){
			form.direction.value = 'back' ;
			form.submit() ;
		}
		backlistener.onRollOver = function(){}
		backlistener.onRollOut = function(){}
		new nl.shaveworld.NavigationButton( back, backlistener ) ;
		
		var next = nl.xd.dom.DOM.get( 'nextbutton' ) ;
		var nextlistener = {} ;
		nextlistener.holder = this;
		nextlistener.onClick = function(){
			form.submit() ;
		}
		nextlistener.onRollOver = function(){}
		nextlistener.onRollOut = function(){}
		new nl.shaveworld.NavigationButton( next, nextlistener ) ;	
	} 

}
/* ProductSectionForm */
nl.shaveworld.ProductSectionForm = function(){
	this.initialize();	
}
nl.shaveworld.ProductSectionForm.prototype = {
	initialize: function(){
		this.imageOrInfo = 'image' ;
		this.setEvents() ;
		this.handleFormValues() ;
	} ,
	handleFormValues: function(){
		var form = nl.xd.dom.DOM.get( 'productssectionform' ) ;
		this.selectablelist.setSelectedItemByID( form.selecteditemid.value ) ;
		if( form.step.value == 0 ){
			var back = nl.xd.dom.DOM.get( 'backbutton' ) ;
			nl.xd.dom.DOM.addClass( back, 'displaynone' ) ;
		}
	} ,
	setEvents: function(){
		var self = this ;
		
		var form = nl.xd.dom.DOM.get( 'productssectionform' ) ;
		
		var back = nl.xd.dom.DOM.get( 'backbutton' ) ;
		var backlistener = {} ;
		backlistener.holder = this ;
		backlistener.onClick = function(){
			form.direction.value = 'back' ;
			form.submit() ;
		}
		backlistener.onRollOver = function(){}
		backlistener.onRollOut = function(){}
		new nl.shaveworld.NavigationButton( back, backlistener ) ;
		
		var next = nl.xd.dom.DOM.get( 'nextbutton' ) ;
		var nextlistener = {} ;
		nextlistener.holder = this;
		nextlistener.onClick = function(){
			form.submit() ;
		}
		nextlistener.onRollOver = function(){}
		nextlistener.onRollOut = function(){}
		new nl.shaveworld.NavigationButton( next, nextlistener ) ;
		
		var tabimage = nl.xd.dom.DOM.get( 'tabimage' ) ;
		var tabimagelistener = {} ;
		tabimagelistener.holder = this;
		tabimagelistener.onClick = function(){
			this.holder.onSelectTab( 'image' ) ;
		}
		tabimagelistener.onRollOver = function(){}
		tabimagelistener.onRollOut = function(){}
		new nl.shaveworld.NavigationButton( tabimage, tabimagelistener ) ;
		
		var tabinfo = nl.xd.dom.DOM.get( 'tabinfo' ) ;
		var tabinfolistener = {} ;
		tabinfolistener.holder = this;
		tabinfolistener.onClick = function(){
			this.holder.onSelectTab( 'info' ) ;
		}
		tabinfolistener.onRollOver = function(){}
		tabinfolistener.onRollOut = function(){}
		new nl.shaveworld.NavigationButton( tabinfo, tabinfolistener ) ;
		
		var listlistener = {} ;
		listlistener.holder = self ;
		listlistener.onSelectListItem = function( item ){
			this.holder.onSelectTab( this.holder.imageOrInfo ) ;		
			this.holder.showInfo( item.index, this.holder.imageOrInfo ) ;
			var next = nl.xd.dom.DOM.get( 'nextbutton' ) ;
			nl.xd.dom.DOM.removeClass( next, 'displaynone' ) ;
			var form = nl.xd.dom.DOM.get( 'productssectionform' ) ;
			form.selectedindex.value = item.index ;
			form.selecteditemid.value = item.itemid ;
		}
		var list 				= nl.xd.dom.DOM.get( 'selectablelist' ) ;
		this.selectablelist 	= new nl.shaveworld.SelectableList( list, listlistener ) ;
	} ,
	showInfo: function( index, imageOrInfo ){
		var tabs 			= nl.xd.dom.DOM.get( 'selectioninfosection_tabs' ) ;
		nl.xd.dom.DOM.removeClass( tabs, 'displaynone' ) ;
		
		var nothingselected = nl.xd.dom.DOM.get( 'nothingselected' ) ;
		nl.xd.dom.DOM.addClass( nothingselected , 'displaynone' ) ;
		
		var info 			= nl.xd.dom.DOM.get( 'selectioninfosection' ) ;
		var infoitems 		= nl.xd.dom.DOM.getByClassName( 'selectediteminfo', 'div', info ) ;
		var imageitems 		= nl.xd.dom.DOM.getByClassName( 'selecteditemimage', 'div', info ) ;
		for( var i=0; i<infoitems.length; i++ ){
			if( i == index ){
				if( imageOrInfo=='image' ){
					nl.xd.dom.DOM.removeClass( imageitems[i], 'displaynone' ) ;
					nl.xd.dom.DOM.addClass( infoitems[i], 'displaynone' ) ;
				} else {
					nl.xd.dom.DOM.addClass( imageitems[i], 'displaynone' ) ;
					nl.xd.dom.DOM.removeClass( infoitems[i], 'displaynone' ) ;
				}
			} else {
				nl.xd.dom.DOM.addClass( imageitems[i], 'displaynone' ) ;
				nl.xd.dom.DOM.addClass( infoitems[i], 'displaynone' ) ;
			}
		}
	} ,
	onSelectTab: function( tab ){
		this.imageOrInfo = tab;
		var form = nl.xd.dom.DOM.get( 'productssectionform' ) ;
		this.showInfo( form.selectedindex.value, tab ) ;
		var tabinfo = nl.xd.dom.DOM.get( 'tabinfo' ) ;
		var tabimage = nl.xd.dom.DOM.get( 'tabimage' ) ;
		if( tab=='info' ){
			nl.xd.dom.DOM.addClass( tabinfo, 'selected' ) ;
			nl.xd.dom.DOM.removeClass( tabimage, 'selected' ) ;
		} else {
			nl.xd.dom.DOM.removeClass( tabinfo, 'selected' ) ;
			nl.xd.dom.DOM.addClass( tabimage, 'selected' ) ;			
		}
	}
} ;
/* ProductSectionForm_ordertypes */
nl.shaveworld.ProductSectionForm_ordertypes = function(){
	this.initialize(); 	
}
nl.shaveworld.ProductSectionForm_ordertypes.prototype = {
	initialize: function(){
		this.setEvents();
		this.handleFormValues();
	} ,
	handleFormValues: function(){
		var form = nl.xd.dom.DOM.get( 'productssectionform_ordertypes' ) ;
		
		var standardradio 		= nl.xd.dom.DOM.get( 'radio_standard_radio' ) ;
		var subscriptionradio 	= nl.xd.dom.DOM.get( 'radio_subscription_radio' ) ;
		if(  standardradio.checked ){
			this.radiogroups[0].setSelectedItemByIndex( 0 ) ;
		} else if( subscriptionradio.checked ) {
			this.radiogroups[0].setSelectedItemByIndex( 1 ) ;
		}
		
	} ,
	setEvents: function(){
		var self = this ;
		
		var form = nl.xd.dom.DOM.get( 'productssectionform_ordertypes' ) ;
		
		var back = nl.xd.dom.DOM.get( 'backbutton' ) ;
		var backlistener = {} ;
		backlistener.holder = this ;
		backlistener.onClick = function(){
			form.direction.value = 'back' ;
			form.submit() ;
		}
		backlistener.onRollOver = function(){}
		backlistener.onRollOut = function(){}
		new nl.shaveworld.NavigationButton( back, backlistener ) ;
		
		var next = nl.xd.dom.DOM.get( 'nextbutton' ) ;
		nl.xd.dom.DOM.addClass( next, 'displaynone' ) ; // hide if no selection
		
		var nextlistener = {} ;
		nextlistener.holder = this;
		nextlistener.onClick = function(){
			form.submit() ;
		}
		nextlistener.onRollOver = function(){}
		nextlistener.onRollOut = function(){}
		new nl.shaveworld.NavigationButton( next, nextlistener ) ;
		
		// radio actions
		var radiogroups = nl.xd.dom.DOM.getByClassName( 'radiogroup', 'div', form );
		var radiogrouplistener = {} ;
		radiogrouplistener.holder = this ;
		this.radiogroups = new Array() ;
		radiogrouplistener.onSelectRadio = function( item ){
			this.holder.onSelectRadio( item ) ;
		}
		for( var i=0; i<radiogroups.length; i++ ){
			this.radiogroups[i] = new nl.shaveworld.RollOverRadioGroup( radiogroups[i], radiogrouplistener, i )	;
		}
		
		nl.xd.event.Event.addListener( nl.xd.dom.DOM.get( 'periodselect' ), 'change' , 	function() { self.updateOverview() } ) ;
		nl.xd.event.Event.addListener( nl.xd.dom.DOM.get( 'packageselect' ), 'change' , function() { self.updateOverview() } ) ;
		nl.xd.event.Event.addListener( nl.xd.dom.DOM.get( 'amountselect' ), 'change' , 	function() { self.updateOverview() } ) ;

	} ,
	onSelectRadio: function( item, radiogroupindex ){
		var next = nl.xd.dom.DOM.get( 'nextbutton' ) ;
		nl.xd.dom.DOM.removeClass( next, 'displaynone' )
		
		var form_standardorder  	= nl.xd.dom.DOM.get( 'form_standardorder' ) ;
		var form_subscriptionorder	= nl.xd.dom.DOM.get( 'form_subscriptionorder' ) ;
		if( item.index == 0 ){
			nl.xd.dom.DOM.removeClass( form_standardorder, 'displaynone' ) ;
			nl.xd.dom.DOM.addClass( form_subscriptionorder, 'displaynone' ) ;
		} else {
			nl.xd.dom.DOM.removeClass( form_standardorder, 'displaynone' ) ;
			nl.xd.dom.DOM.removeClass( form_subscriptionorder, 'displaynone' ) ;
		}
		this.updateOverview();
	} ,
	updateOverview: function(){
		// update amounts, cost in overview
		var form = nl.xd.dom.DOM.get( 'productssectionform_ordertypes' ) ;
		var productname		=	form.productname.value ;
		var packageid 		=	form.packagesize.value ;
		var packageprice 	=	1*form[ 'packageprice_' + packageid ].value;
		packageprice = packageprice.toFixed(2);

		var amount			=	form.amount.value ;
		var period			=	form.period.value ;
		var priceperyear	=	amount * ( period ) * packageprice;
		priceperyear = priceperyear.toFixed(2);
		var ordertype		=	form.ordertype.value ;
		var overviewnode	=	nl.xd.dom.DOM.get( 'orderoverview' ) ;
		var totalAmount;
		var standardradio 	= nl.xd.dom.DOM.get( 'radio_standard_radio' ) ;
		
		if(  standardradio.checked ){
			totalAmount = amount*packageprice;
			totalAmount = totalAmount.toFixed(2);
			overviewnode.innerHTML = form.standard_order_name.value + ': ' + productname + ' ( &euro; ' + packageprice.replace('.',',') +  ') ' +  ' x ' + amount + ' = &euro; ' + totalAmount.toString().replace('.',',') ;
		} else {
			overviewnode.innerHTML = form.subscription_order_name.value + ': ' + productname + ' ( &euro; ' + packageprice.toString().replace('.',',') +  ' ) x ' + ( period ) + ' x ' + amount + ' = &euro; ' + priceperyear.toString().replace('.',',') + ' ' + form.per_year_name.value ;
		}
	}
} ;

/* RollOverRadioGroup */
nl.shaveworld.RollOverRadioGroup = function( element, listener, index ){
	this.element 			= element ; 
	this.listener 			= listener ;
	this.selecteditem		= null ;
	this.index = index ;
	this.initialize();
}
nl.shaveworld.RollOverRadioGroup.prototype = {
	initialize: function(){
		this.buildItems();
	} ,
	buildItems: function(){
		this.items = new Array() ;
		var radiolistener = {} ;
		radiolistener.holder = this;
		radiolistener.onSelectRadio = function( item ){
			this.holder.setSelectedItem( item ) ;
		}
		var elements = nl.xd.dom.DOM.getByClassName( 'radio', 'div', this.element ) ;
		for( var i=0; i<elements.length; i++ ){
			this.items.push( new nl.shaveworld.RollOverRadio( elements[i], radiolistener, i ) ) ;
		}
	} ,
	setSelectedItemByIndex: function( index ){
		this.setSelectedItem( this.items[ index ] ) ;
	} ,
	setSelectedItem: function( item ){
		if( this.selecteditem ){
			this.selecteditem.setSelected( false ) ;
		}
		this.selecteditem = item;
		this.selecteditem.setSelected( true ) ;
		
		this.listener.onSelectRadio( item, this.index ) ;
	}
} ;

/* RollOverRadio */
nl.shaveworld.RollOverRadio = function( element, listener, index ){
	this.element 			= element ; 
	this.listener 			= listener ;
	this.index  			= index ;
	this.initialize();
}
nl.shaveworld.RollOverRadio.prototype = {
	initialize: function(){
		this.setEvents() ;	
	} ,
	setEvents: function(){
		var self = this ;
		nl.xd.event.Event.addListener( this.element , 'click' , 		function() { self.onClick() } ) ;
		nl.xd.event.Event.addListener( this.element , 'mouseover' , 	function() { self.onRollOver() } ) ;
		nl.xd.event.Event.addListener( this.element , 'mouseout' , 		function() { self.onRollOut() } ) ;
		
		var inputs = nl.xd.dom.DOM.getByTagName( 'input', this.element ) ;
		if( inputs[0].checked ){
			this.onClick() ;	
		}
		
	} ,
	onClick: function(){
		this.setSelected( true ) ;
		var inputs = nl.xd.dom.DOM.getByTagName( 'input', this.element ) ;
		inputs[0].checked = '"checked"' ;
		var self = this ;
		this.listener.onSelectRadio( self ) ;
	} ,
	onRollOver: function(){
		if( !this.selected ){
			nl.xd.dom.DOM.addClass( this.element, 'radiorollover' ) ;
		}
	} ,
	onRollOut: function(){
		if( !this.selected ){
			nl.xd.dom.DOM.removeClass( this.element, 'radiorollover' ) ;
		}
	} ,
	setSelected: function( bool ){
		this.selected = bool ;
		if( bool ){
			nl.xd.dom.DOM.removeClass( this.element, 'radiorollover' ) ;
			nl.xd.dom.DOM.addClass( this.element, 'radioselected' ) ;
		} else {
			nl.xd.dom.DOM.removeClass( this.element, 'radioselected' ) ;
		}
	}
} ;

/* SelectableList */
nl.shaveworld.SelectableList = function( list, listener ){
	this.listener 		= listener ;	// reference to object for events
	this.list			= list ; 		// reference to element containing items
	this.items			= null ; 		// array containing items
	this.selectedItem	= null ; 		// currently selected item
	this.initialize() ;
} ;
nl.shaveworld.SelectableList.prototype = {
	initialize: function() {
		this.items 		= nl.xd.dom.DOM.getByClassName( 'selectablelistitem', 'div', this.list ) ;
		this.createSelectableItems() ;
	} ,
	createSelectableItems: function(){
		var self 				= this ;
		this.selectableItems 	= new Array();
		for( var i=0; i<this.items.length; i++ ){
			this.selectableItems.push( new nl.shaveworld.SelectableItem( self.items[i] ,self, i ) ) ;
		}
	} ,
	onClickItem: function( item ){
		this.setSelectedItem( item ) ;
	} ,
	onRollOverItem: function( item ){
		if( item != this.selectedItem ){		
			nl.xd.dom.DOM.addClass( item.element, 'rollover' ) ;
		}
	} ,
	onRollOutItem: function( item ){
		if( item != this.selectedItem ){
			nl.xd.dom.DOM.removeClass( item.element, 'rollover' ) ;
		}
	} ,
	setSelectedItemByID: function( id ){
		for( var i=0; i<this.selectableItems.length; i++ ){
			if( this.selectableItems[i].itemid == id + "" )	{
				this.setSelectedItem( this.selectableItems[i] ) ;
				return ;
			}
		}
	} ,
	setSelectedItemByIndex: function( index ){
		var item = this.selectableItems[ index ] ;
		this.setSelectedItem( item ) ;
	} ,
	setSelectedItem: function( item ){
		if( item == undefined ) return ;
		this.listener.onSelectListItem( item ) ;
		
		nl.xd.dom.DOM.removeClass( item.element, 'rollover' ) ;
		// reset selection of current item
		if( this.selectedItem != null ){
			nl.xd.dom.DOM.removeClass( this.selectedItem.element, 'selected' ) ;
		}
		
		// select new item
		this.selectedItem = item ;
		// set style of selecteditem
		nl.xd.dom.DOM.addClass( this.selectedItem.element, 'selected' ) ;
	}
} ;

/* SelectableItem */
nl.shaveworld.SelectableItem = function( element, parent, index ){
	this.parent 	= parent ;
	this.element 	= element ;
	this.index		= index ;
	this.itemid		= null ;
	this.initialize() ;
}
nl.shaveworld.SelectableItem.prototype = {
	initialize: function(){
		 this.attachEvents() ;
		 this.detectSelected();
		 this.itemid = ( nl.xd.dom.DOM.getAttribute( this.element, 'id' ) ).split( 'item_' )[1] ;
	} ,
	attachEvents: function(){
		var self = this ;
		nl.xd.event.Event.addListener( this.element , 'click' , 		function() { self.parent.onClickItem( self ) } ) ;
		nl.xd.event.Event.addListener( this.element , 'mouseover' , 	function() { self.parent.onRollOverItem( self ) } ) ;
		nl.xd.event.Event.addListener( this.element , 'mouseout' , 		function() { self.parent.onRollOutItem( self ) } ) ;
	} ,
	detectSelected: function(){
		var self = this;
		if( nl.xd.dom.DOM.hasClass( this.element, 'selected' ) ){
			this.parent.setSelectedItemByIndex( this.index ) ;
		}
	}
} ;

/* navigationbutton */
nl.shaveworld.NavigationButton = function( element, listener ){
	this.element 	= element ;
	this.listener 	= listener ;
 	this.initialize() ;
} ;
nl.shaveworld.NavigationButton.prototype = {
	initialize: function(){
		this.attachEvents();	
	} ,
	attachEvents: function(){
		var self = this ;
		nl.xd.event.Event.addListener( this.element , 'click' , 		function() { self.onClick() } ) ;
		nl.xd.event.Event.addListener( this.element , 'mouseover' , 	function() { self.onRollOver() } ) ;
		nl.xd.event.Event.addListener( this.element , 'mouseout' , 		function() { self.onRollOut() } ) ;	
	} ,
	onClick: function(){
		this.listener.onClick() ;
	} ,
	onRollOver: function(){
		nl.xd.dom.DOM.addClass( this.element, 'rollover' ) ;
		this.listener.onRollOver() ;
	} ,
	onRollOut: function(){
		nl.xd.dom.DOM.removeClass(this.element, 'rollover' ) ;
		this.listener.onRollOut() ;
	}
} ;

/* Login */
nl.shaveworld.Login = function(){
	this.initialize() ;	
}
nl.shaveworld.Login.prototype = {
	initialize: function(){
		this.setEvents();
	} ,
	setEvents: function(){
		var loginbutton = nl.xd.dom.DOM.get( 'loginbutton' ) ;
		if( loginbutton ){
			var loginlistener = {} ;
			loginlistener.holder = this;
			loginlistener.onClick = function(){
				this.holder.login();
			}
			loginlistener.onRollOver = function(){}
			loginlistener.onRollOut = function(){}
			new nl.shaveworld.NavigationButton( loginbutton, loginlistener ) ;	
		}

		var forgottenbutton = nl.xd.dom.DOM.get( 'forgottenbutton' ) ;
		if( forgottenbutton ){
			var forgottenlistener = {} ;
			forgottenlistener.holder = this;
			forgottenlistener.onClick = function(){
				this.holder.forgotten();
			}
			forgottenlistener.onRollOver = function(){}
			forgottenlistener.onRollOut = function(){}
			new nl.shaveworld.NavigationButton( forgottenbutton, forgottenlistener ) ;	
		}
		
		var logoutbutton = nl.xd.dom.DOM.get( 'logoutbutton' ) ;
		if( logoutbutton ){
			var logoutlistener = {} ;
			logoutlistener.holder = this;
			logoutlistener.onClick = function(){
				this.holder.logout();
			}
			logoutlistener.onRollOver = function(){}
			logoutlistener.onRollOut = function(){}
			new nl.shaveworld.NavigationButton( logoutbutton, logoutlistener ) ;
		}
	} ,
	forgotten: function(){
		var form = nl.xd.dom.DOM.get( 'login' ) ;
		if( form.email.value != '' ){
			form.submit() ;
		}
	} ,
	login: function() {
		var form = nl.xd.dom.DOM.get( 'login' ) ;
		if ( form.password.value != '' ) {
			form.epassword.value = hex_hmac( form.hmac.value , form.password.value ) ;
			form.password.value  = '' ;
			form.hmac.value      = '' ;
			form.submit() ;
		} ;
	} ,
	logout: function(){
		var form = nl.xd.dom.DOM.get( 'login' ) ;
		form.submit() ;
	} 
	
}

/* Login */
nl.shaveworld.CheckoutLogin = function(){
	this.initialize() ;	
}
nl.shaveworld.CheckoutLogin.prototype = {
	initialize: function(){
	} ,
	login: function() {
		if( nl.xd.dom.DOM.get( 'checkoutloggedin' ) ) return ;
		
		var form = nl.xd.dom.DOM.get( 'checkout' ) ;
		if ( form.password.value != '' ) {
			form.epassword.value = hex_hmac( form.hmac.value , form.password.value ) ;
			form.password.value  = '' ;
			form.hmac.value      = '' ;
		} ;
	}
}
/* FaqList Class */
nl.shaveworld.FaqList = function(){
	this.initialize() ;	
}
nl.shaveworld.FaqList.prototype = {
	initialize: function(){
		this.currentAnswer = null ;
		this.buildItems() ;
	} ,
	buildItems: function(){
		var list = nl.xd.dom.DOM.get( 'faqlist' ) ;
		faq_questions	= nl.xd.dom.DOM.getByClassName( 'faq_question', 'div', list ) ;
		this.items = new Array() ;
		for( var i=0; i<faq_questions.length; i++ ){
			this.items.push( new nl.shaveworld.FaqListItem( faq_questions[ i ], this, i ) ) ;
		}
	} ,
	onClick: function( index ){
		var list = nl.xd.dom.DOM.get( 'faqanswerlist' ) ;
		faq_answers	= nl.xd.dom.DOM.getByClassName( 'faq_answer', 'div', list ) ;
		if( this.currentAnswer != null ){
			nl.xd.dom.DOM.addClass( this.currentAnswer , 'displaynone' ) ;	
		}
		this.currentAnswer = faq_answers[ index ] ;
		nl.xd.dom.DOM.removeClass( this.currentAnswer , 'displaynone' ) ;	
	}
	
}
/* FaqListItem Class */
nl.shaveworld.FaqListItem = function( element, listener, index ){
	this.listener = listener ;
	this.element = element ;
	this.index = index ;
	this.initialize() ;
}
nl.shaveworld.FaqListItem.prototype = {
	initialize: function(){
		this.setEvents() ; 	
	} ,
	setEvents: function(){
		var self = this ;
		nl.xd.event.Event.addListener( this.element , 'click' , 		function() { self.onClick() } ) ;
	} ,
	onClick: function(){
		this.listener.onClick( this.index ) ;
	}
}

nl.xd.event.Event.addListener( window , 'load' , function() { new nl.shaveworld.Shaveworld() ; } ) ;



