var homepage = Class.create({

	initialize: function(homepageid) {
		this.elem    = $(homepageid);
		
		this.productviewer       = this.elem.down('div.cssclass_hpproductviewer');
		
		this.actuviewer          = this.elem.down('div.cssclass_hpactuviewer');
		this.actuviewercontainer = this.actuviewer.down('div.cssclass_viewercontent');
		this.actuviewermask      = this.actuviewercontainer.down('div.cssclass_mask');
		this.actuviewercontent   = this.actuviewercontainer.down('div.cssclass_content');
		this.actuviewerdelay     = 0;
		this.actuvieweroffset    = 8;
		this.actuviewerdirection = -1;
		this.actuviewertimeout   = null;
		this.actuviewerlast      = this.actuviewercontent.down('div.cssclass_rss_line_vignette.cssclass_last');
		
		this.registerCallBacks();
		
		this.advertbannermanager = new homepageBanner(this);
	},
	
	registerCallBacks: function() {
		var zonglets = this.productviewer.select('div.cssclass_onglet');
		var zonglet ;
		var nb_zonglets = zonglets.length ;
		for (var i=0; i<nb_zonglets; i++) {
			zonglet = zonglets[i];
			zonglet.down('a').observe('click', this.onProductViewerOngletEvent.bind(this));
		}
		
		this.actuviewercontainer.down('a.cssclass_prev').observe('mousedown', this.onActuViewerDownUp.bind(this));
		this.actuviewercontainer.down('a.cssclass_next').observe('mousedown', this.onActuViewerDownUp.bind(this));
		this.actuviewercontainer.down('a.cssclass_prev').observe('mouseup', this.onActuViewerDownUp.bind(this));
		this.actuviewercontainer.down('a.cssclass_next').observe('mouseup', this.onActuViewerDownUp.bind(this));
		this.actuviewercontainer.observe('mouseover', this.onActuViewerOver.bind(this));
		this.actuviewercontainer.observe('mouseout', this.onActuViewerOut.bind(this));
	},
	
	onActuViewerDownUp: function(event) {
		if (event.type=='mousedown') {
			this.actuvieweroffset = this.actuvieweroffset*4 ;
		} else {
			this.actuvieweroffset = Math.max(1,this.actuvieweroffset/4) ;
		}
	},
	
	onActuViewerOver: function(event) {
		var element = Event.element(event);
		var type    = event.type;
		
		this.actuviewercontainer.stopObserving('mouseover');
		
		var leftx = this.actuviewercontainer.cumulativeOffset().left ;
		var rightx = leftx+this.actuviewercontainer.getWidth() ;
		var half = ( rightx - leftx ) / 2 ;
		var midx = leftx + half ;
		var power = Math.round(Math.abs((event.pointerX()-midx)/half*100));
		
		this.actuviewerdelay = (power>75) ? 50 : ( (power>50) ? 100 : ( (power>25) ? 200 : 300 ) ) ;
		
		this.actuviewerdirection = (event.pointerX()<=midx) ? 1 : -1 ;
		
		if ( ( this.actuviewertimeout == null ) && ( power>25 ) ) {
			this.actuviewertimeout = window.setTimeout(function() { ecommerce.homepage.moveActuViewer() ; }, this.actuviewerdelay);
		}
	},
	
	onActuViewerOut: function(event) {
		var element = Event.element(event);
		var type    = event.type;
		
		this.stopActuViewer() ;
	},
	
	moveActuViewer: function() {
		//this.actuviewercontainer.down('div.cssclass_mouchard').update();
		var zleft = this.actuviewercontent.positionedOffset().left ;
		var zmax = 0-this.actuviewerlast.positionedOffset().left-this.actuviewerlast.getWidth()+this.actuviewermask.getWidth()-7 ;
		if ( (this.actuviewerdirection>0) && (zleft>=0) ) {
			this.actuviewercontent.setStyle({ left: '0px' });
			this.actuviewercontainer.down('a.cssclass_prev').removeClassName('cssclass_active');
		} else if ( (this.actuviewerdirection<0) && (zleft<=zmax) ) {
			this.actuviewercontent.setStyle({ left: zmax+'px' });
			this.actuviewercontainer.down('a.cssclass_next').removeClassName('cssclass_active');
		} else {
			this.actuviewercontent.setStyle({ left: (zleft+this.actuviewerdirection*this.actuvieweroffset)+'px' });
			this.actuviewertimeout = window.setTimeout(function() { ecommerce.homepage.moveActuViewer() ; }, this.actuviewerdelay);
			this.actuviewercontainer.down('a.cssclass_next').addClassName('cssclass_active');
			this.actuviewercontainer.down('a.cssclass_prev').addClassName('cssclass_active');
		}
		this.actuviewercontainer.observe('mouseover', this.onActuViewerOver.bind(this));
	},
	
	stopActuViewer: function() {
		if (this.actuviewertimeout!=null) {
			window.clearTimeout(this.actuviewertimeout);
			this.actuviewertimeout = null;
			this.actuviewerdelay = 0; 
		}
		this.actuviewercontainer.observe('mouseover', this.onActuViewerOver.bind(this));
	},
	
	onProductViewerOngletEvent: function(event) {
		var element = Event.element(event);
		var type    = event.type;
		var za, zdiv, zt ;

		if (element.tagName.toLowerCase()=='a') {
			za   = element;
			zdiv = za.up('div.cssclass_onglet');
			
		} else if (element.tagName.toLowerCase()=='div') {
			zdiv = element;
			za   = zdiv.down('a');
			
		} else {
			return ;
			
		}
		
		if (zdiv.hasClassName('cssclass_selected')) {
			return ;
		}
		
		if (zdiv.hasClassName('cssclass_latestsales')) {
			zt = 'LSD' ;
		} else if (zdiv.hasClassName('cssclass_bestsellers')) {
			zt = 'BSD' ;
		} else if (zdiv.hasClassName('cssclass_novelties')) {
			zt = 'NED' ;
		} else {
			return ;
		}
		
		ecommerce.browsing.refreshForm('i', za, 't', zt, false, false, false);
		zi = ecommerce.browsing.formToParam('i');
		
		zdiv.siblings().each(function(el) { el.removeClassName('cssclass_selected'); });
		zdiv.addClassName('cssclass_selected');
		this.productviewer.down('div.cssclass_viewercontent').select('div.cssclass_package_vignette').each(function(el) { el.update(''); });
		new Ajax.Updater(this.productviewer.down('div.cssclass_viewercontent'),
						 '/ajax_hp_callback.php?action=product_viewer',
						 { method: 'post',
						   parameters: { i: zi },
						   onSuccess: function(transport) {
						   } } );
	}
	
});

var homepageBanner = Class.create({

	initialize: function(homepage) {
		this.parent = homepage ;
		
		this.image1         = $('cssid_bigimage');
		this.imagecontainer = this.image1.up('div');
		this.buffer         = this.image1.next('div.cssclass_bigimage_buffer');
		this.form           = this.buffer.down('form');
		this.group_keyword  = this.form.down('input[name=group_keyword]').value;
		this.nb_pages       = this.form.down('input[name=nb_pages]').value;
		this.frequency      = 10;
		
		this.init() ;
	},
	
	init: function() {
		var page_number = this.form.down('input[name=page_number]').value;
		var next_page, next_div ;
		if (this.nb_pages>1) {
			var calcul = '(' + page_number + '+' + '1)%' + this.nb_pages;
			// var calcul = '(' + page_number + ')%' + this.nb_pages;
			next_page = eval(calcul);
			next_div = this.imagecontainer.down('div.cssclass_bigimage.cssclass_bigimage_index_'+next_page);
			next_div = new Element('div');
			next_div.addClassName('cssclass_bigimage');
			next_div.addClassName('cssclass_bigimage_index_'+next_page);
			next_div.setStyle( { display: 'none', zIndex: 0 } );
			this.buffer.insert( { 'before': next_div } );
			this.loadBanner(next_div,next_page);
			new PeriodicalExecuter(function() { ecommerce.homepage.advertbannermanager.rotate() }, this.frequency);
		}
	},

	loadBanner: function(target_div,page_number) {
		new Ajax.Updater(target_div,
						 '/tools/ajax/ajax_homepage_callback.php?action=load_advert_banner',
						 { method: 'post',
						   parameters: { group_keyword: this.group_keyword, page_number: page_number }
						 });
	},
	
	rotate: function() {
		var page_number = parseInt(this.form.down('input[name=page_number]').value);
		var next_page = (page_number+1)%this.nb_pages;
		var next_next_page = (next_page+1)%this.nb_pages;
		
		var cur_div = this.imagecontainer.select('div.cssclass_bigimage').find( function(el) { return el.visible(); } );
		
		var next_div = this.imagecontainer.down('div.cssclass_bigimage.cssclass_bigimage_index_'+next_page);
		var next_next_div = this.imagecontainer.down('div.cssclass_bigimage.cssclass_bigimage_index_'+next_next_page);
		
		next_div.setStyle( { zIndex: 0 } );
		cur_div.setStyle( { zIndex: 1 } );
		this.form.down('input[name=page_number]').value = next_page;
		next_div.show();
		new Effect.Fade(cur_div, { duration: 3.0 });
		
		if (next_next_div==undefined) {
			// pas encore chargé
			next_next_div = new Element('div');
			next_next_div.addClassName('cssclass_bigimage');
			next_next_div.addClassName('cssclass_bigimage_index_'+next_next_page);
			next_next_div.setStyle( { display: 'none', zIndex: 0 } );
			this.buffer.insert( { 'before': next_next_div } );
			
			this.loadBanner(next_next_div,next_next_page);
		}
	}
	
});