//klasa obslugi playera
var ProductPlayer = new Class({
	
	Implements: [Events, Options],
	
	options: {
		playerName: null,
		menuRev: null,
	 	menuWrapper: null,
		menu: null,
		menuFf: null,
		contentWrapper: null,
		content: null,
		delay: null,
		transition_time: false
	},
	
	initialize: function(options) {
		this.setOptions(options);
		this.playerName = this.options.playerName;
		
		this.visibleMenuItems = this.options.visibleMenuItems;
		this.menuRev = this.options.menuRev;
		this.menuWrapper = this.options.menuWrapper;
		this.menu = this.options.menu;
		this.menuFf = this.options.menuFf;
		this.contentWrapper = this.options.contentWrapper;
		this.content = this.options.content;
		
		this.itemCount = this.menu.getElements('li').length;		
		this.menu.getFirst().addClass('active'); //ustawiamy pierwszy li listy menu jako aktywny
				
		this.hoverMenuNavs();
		this.linkMenuNavs();
		this.linkMenuItems();
		this.slideshowStart();
		this.addPauseResumeBehaviour();
		
		this.scrollContent(this.menu.getFirst());
		
		this.addTip();
		
		this.centerContentImages();
	},
	
	//dowiazuje zdarzenia onmouseover do przyciskow do przewijania menu
	hoverMenuNavs: function() {
		$$(this.menuRev, this.menuFf).each(function(el) {			
			el.addEvent('mouseover', function() { 
				el.addClass('hover');
			})
			el.addEvent('mouseout', function() { 
				el.removeClass('hover'); 
			})
		}.bind(this))  
	},
	
	//dowiazuje zdarzenia onclick do przyciskow do przewijania menu
	linkMenuNavs: function() {
		this.menuRev.addEvent('click', this.scrollContent.bind(this, 'prev'));
		this.menuFf.addEvent('click', this.scrollContent.bind(this, 'next'));		  
	},
	
	//przewija menu do zadanego elementu
	scrollMenu: function(/*dest*/el) { //element
		this.menu.getElement('.active').erase('class'); //uwaga, kasuje caly atrybut class!
		el.addClass('active');
			
		if (el.getAllPrevious().length > 1 && el.getAllNext().length > 1) var el = el.getAllPrevious()[1];
		else if (el.getAllPrevious().length <= 1) el = this.menu.getFirst();
		else if (el.getAllNext().length <= 1) el = this.menu.getLast().getAllPrevious()[(this.visibleMenuItems - 2)];
		new Fx.Scroll($(this.menuWrapper), { duration: 500 }).toElement(el);
	},
	
	//zmienia element menu z klasa .active 
	menuChangeActive: function(el) {
		this.menu.getElement('.active').erase('class'); //uwaga, kasuje caly atrybut class!
		el.addClass('active');
	},
	
	//dowiazuje zdarzenia onclick do pozycji menu
	linkMenuItems: function() {
		this.menu.getElements('a').each(function(a) {			
			a.addEvent('click', function(ev) { new Event(ev).stop(); })
			a.addEvent('click', this.scrollContent.bind(this, a.getParent()));
		}.bind(this))
	},
	
	//przewija zawartosc do konkretnej pozycji lub poprzedniej|nastepnej ('prev'|'next')
	//a takze przewija menu i ustawia aktywny element - uwaga, aktywny element menu sluzy do ustalenia pozycji zarowno menu, jak i contentu!
	scrollContent: function(dest) {
		var activeMenuItem = this.menu.getElement('.active');
		if (dest == 'prev' || dest == 'next') {	//jesli z przewijania lub auto scrolla
			if (dest == 'prev') {
				if (activeMenuItem == this.menu.getFirst()) var el = this.menu.getLast();
				else var el = activeMenuItem.getPrevious();
			} else if (dest == 'next') {
				if (activeMenuItem == this.menu.getLast()) var el = this.menu.getFirst();
				else var el = activeMenuItem.getNext();
			}
		} else var el = dest; //jesli z kliku na a
		
		this.scrollMenu(el);
		
		var elementToGoAHref = el.getFirst().get('href');
		elementToGoAHref = elementToGoAHref.substr(elementToGoAHref.indexOf('#')+1);
		new Fx.Scroll($(this.contentWrapper), { duration: 500 }).toElement(elementToGoAHref);
	},

	slideshowStart: function() {
		if (!this.options.timer) this.options.timer = ( function() { /*console.log('timer goes, delay: '+this.options.delay);*/ this.scrollContent('next'); }.bind(this) ).periodical(this.options.delay);
	},
	
	slideshowStop: function() {
		if (this.options.timer) $clear(this.options.timer);
		this.options.timer = false;
	},
	
	addPauseResumeBehaviour: function() {
		$$(this.options.content, this.options.menu, this.menuRev, this.menuFf).addEvents({
			'mouseenter': this.slideshowStop.bind(this),
			'mouseleave': this.slideshowStart.bind(this)
		})
	},
	
	//dowiazuje pojawianie sie/ukrywanie tipa do pozycji menu
	addTip: function() {
		playerTip = new Element('div', {
			id: 'playerTip',
			html: '<span><span></span></span>'
		}).inject(document.body);
		this.menu.getElements('li').each(function(el) {			
			el.addEvent('mouseenter', function(ev) {
				playerTip.getFirst().getFirst().setStyle('background-image', el.getFirst().getStyle('background-image').replace(/40x30/, "100x75"));
				playerTip.setStyles({
					'left': el.getPosition().x - (playerTip.getSize().x / 2) + (el.getSize().x / 2),
					'top': el.getPosition().y - (playerTip.getSize().y - 5)
				});
				playerTip.fade('in');
			})
			el.addEvent('mouseleave', function() {
				playerTip.fade('out');
			})
		}.bind(this))
	},
	
	centerContentImages: function() {
		this.content.getElements('img').each(function(el){
				el.set({ styles: {
					'width': 160,
					'height': 160,
					'background': 'url('+el.get('src')+') center center no-repeat' 
				},
				src: '/style/img/blank.png'				
			}) 
		});
	
	}

}) //koniec klasy ProductPlayer