var FadeShow = {
	
  options: {
	  slides: 'div.slide',
		duration: 5000,
		transition: Fx.Transitions.Quart.easeOut,
		togglerDuration: 300,
		changeDuration: 500,
		togglerClass: 'fsToggler',
		togglers: 'fsTogglers',
		display: 0,
		offset: 100,
		button: false,
		buttonOn: 'Zastavit',
		buttonOff: 'Spustit',
		run: true
	},
	
	init: function(element,options){
		this.options = new Object.extend(this.options, options || {});
		this.element = $(element);
		this.slides = this.element.getElements(this.options.slides);
		this.timer = null;
		this.current = this.options.display;
		
		this.togglers = new Element('div',{ 'id' : this.options.togglers });
		this.togglers.injectInside(this.element);
		this.element.addEvent('mouseenter', function(){
				$('togglers').effect('top',{duration: 300, wait: false}).start(178);
		});
		this.element.addEvent('mouseleave', function(){
				$('togglers').effect('top',{duration: 300, wait: false}).start(218);
		});
		
		// slides links
		this.slides.each(function(element){
		  var slideLink = element.getElement('a[rel=slide-link]');
			if (slideLink) {
				element.setStyle('cursor', 'pointer');
				element.addEvent('click', function(event){
					var event = new Event(event);
					event.stop();
					window.location = slideLink.getProperty('href');
				});
			}
		});
		
		// togglers
		for (var i=0; i<this.slides.length; i++) {
			new Element('a').addClass(this.options.togglerClass).setText(i+1).injectInside(this.togglers);
		}
		if (this.options.button) {
			this.button = new Element('a', { 'id' : 'fsButton' });
			this.button.injectInside(this.togglers);
			(this.options.run) ? this.button.setText(this.options.buttonOn) : this.button.setText(this.options.buttonOff);
			this.button.addEvent('click', function(event){
				var event = new Event(event);
			  event.preventDefault();
				if (this.options.run){
					this.options.run = false;
					this.button.setText(this.options.buttonOff);
					$clear(this.timer);
				} else {
					this.options.run = true;
					this.button.setText(this.options.buttonOn);
					this.display.bind(this, (this.current+1) % this.slides.length);
					this.timer = this.change.bind(this).periodical(this.options.duration);
				}
			}.bind(this));
		}

		this.togglers = this.togglers.getElements('a[class='+this.options.togglerClass+']');
		this.togglers.each(function(element, index){
		  element.addEvent('click', function(event){
				var event = new Event(event);
			  event.preventDefault();
				this.display(index);
				if (this.options.run) {
				  $clear(this.timer);
				  this.timer = this.change.bind(this).periodical(this.options.duration);
				}
			}.bind(this));
		}, this);
		
		this.slides.setStyle('opacity',0);
		this.slides[this.current].setStyle('opacity',1);
		this.togglers[this.current].toggleClass('active');
		if (this.options.run) { this.timer = this.change.bind(this).periodical(this.options.duration); }

	},
	
	display: function(index){
		if (this.current > index){
				this.slides[index].setStyle('left', -this.options.offset);
				this.slides[this.current].effects({
					duration: this.options.changeDuration
				}).start({
					'left' : this.options.offset,
					'opacity' : 0
				});
				this.slides[index].effects({
					duration: this.options.changeDuration,
					transition: this.options.transition
				}).start({
					'left' : 0,
					'opacity' : 1
				});
		} else if (this.current < index){
				this.slides[index].setStyle('left', this.options.offset);
				this.slides[this.current].effects({
					duration: this.options.changeDuration
				}).start({
					'left' : -this.options.offset,
					'opacity' : 0
				});
				this.slides[index].effects({
					duration: this.options.changeDuration,
					transition: this.options.transition
				}).start({
					'left' : 0,
					'opacity' : 1
				});
		}
		this.togglers[this.current].toggleClass('active');
		this.togglers[index].toggleClass('active');
		this.current = index;
	},
	
	change: function(){
		this.display((this.current+1) % this.slides.length);
	}
	
};

var Products = {
	
	init: function(){
		
		//hover effect
		$$('.product-item').each(function(element){
		  var fx = new Fx.Style(element, 'border-color', { duration: 200, wait: false });
			
			element.addEvent('mouseenter', function(){
			  fx.start('#EBEBEB','#779FC3');
			});
			
			element.addEvent('mouseleave', function(){
			  fx.start('#779FC3','#EBEBEB');
			});
			
		});
		// plus and minus buttons
		$$('.count a').each(function(element){
		  if (element.getText() == '+') {
				element.onclick = function(event){
					event = new Event(event);
					event.preventDefault();
					var inputElem = element.getParent().getElement('input');
					var inputElemVal = inputElem.getProperty('value');
					inputElemVal = inputElemVal.replace(/ /,'');
					inputElemVal = inputElemVal.slice(0, inputElemVal.indexOf('k')).toInt();
					inputElemVal += 1;
					inputElem.setProperty('value', inputElemVal + ' ks');
				}
			} else {
				element.onclick = function(event){
					event = new Event(event);
					event.preventDefault();
					var inputElem = element.getParent().getElement('input');
					var inputElemVal = inputElem.getProperty('value');
					inputElemVal = inputElemVal.replace(/ /,'');
					inputElemVal = inputElemVal.slice(0, inputElemVal.indexOf('k')).toInt();
					if (inputElemVal > 1) {
						inputElemVal -= 1;
					  inputElem.setProperty('value', inputElemVal + ' ks');
					}
				}
			}
		});
	}
	
};

var Basket = {
	  init: function(){
			  
				// popup block
				var popupBlock = new Element('div',{ 'id' : 'basket-popup' });
				popupBlock.setHTML('<div id="basket-popup-content"><a href="#" id="button-close"><img src="/public/img/button-close.gif" width="11" height="22" alt="" /></a><h2>Přidáno do košíku</h2><p id="detail"><strong id="pcount">1 ks</strong> produktu <strong id="pdesc">PC Gamepad USB-3200 Elvish Pad</strong> bylo přidáno do košíku.</p><p class="buttons"><a href="#" id="btn-continue">Pokračovat v nákupu</a> <a href="/kosik/" id="btn-goto-basket">Nákupní košík</a></p></div>');
				popupBlock.injectInside('page-wrapper').setOpacity(0);
				
				// close button
				$('button-close').onclick = function(event){
					event = new Event(event);
					event.preventDefault();
					Basket.closePopup();
				}
				
				// continue shopping
				$('btn-continue').onclick = function(event){
					event = new Event(event).preventDefault();
					Basket.closePopup();
				}
				
				// forms 
				var forms = $$('.product-item form, .specs-text form');
				
				forms.each(function(element){
					 var path = element.getProperty('action').replace(/pridej/,'add');
					 element.getElement('button').onclick = function(event){
						   event = new Event(event);
							 event.preventDefault();
							 
							 var count = element.getElement('input[name=count]').getProperty('value')
					     count = count.replace(/ /,'').slice(0, count.indexOf('k')).toInt();

               // odliseni formularu
							 var product;
							 if (element.hasClass('big-form')) {
								 product = $$('body').getElement('h1').getText();
							 } else {
								 product = element.getElement('h3 a').getText();
							 }

							 new Ajax(path+count,{
									onSuccess: function(response){
										var info = new Array();
									      info = response.split(';');
												info[0] = info[0].toFloat().toFixed(2);
										$('header').getElement('.basket p').setHTML('<span>V košíku máte <strong>'+info[1]+' ks zboží</strong></span> <span>v ceně <strong class="price">'+info[0]+' Kč (vč. DPH)</strong></span>');
									}
							 }).request();

               var position = {
								 x: element.getPosition().x - $('page-wrapper').getPosition().x,
								 y: element.getPosition().y + 80
							 }
							 
							 // pozice dle typu formulare
							 if (element.hasClass('big-form')){
								 position.x += 130;
								 position.y -= 110;
							 }
							 Basket.openPopup(count, product, position);
					 }
			  });
				

		},
		
		// close popup
		closePopup: function(){
			$('basket-popup').effect('opacity', { duration: 200, wait: false }).start(0);
		},
		
		openPopup: function(count, product, position){
			var popup = $('basket-popup');
			popup.setStyles({
				 'left' : position.x,
				 'top' : position.y
			});
			$('pcount').setText(count+' ks');
			$('pdesc').setText(product);
			popup.effect('opacity', { duration: 200, wait: false }).start(1);
		}
};

var ProductTabs = {
	  init: function(){
			  
				var prevTab = 0;
			  var tabs = $$('#product-tabs-tabs li');
				var layers = $$('#product-tabs .layer');
				
				tabs.each(function(element, index){
						element.addEvent('click', function(){
								tabs[prevTab].removeClass('active');
								layers[prevTab].removeClass('active');
								tabs[index].addClass('active');
								layers[index].addClass('active');
								prevTab = index;
						});
				});
				
				if (tabs && layers){
					tabs[0].addClass('active');
					layers[0].addClass('active');
				}
		}
};

var DodaciAdresa = {
	  init: function(){
			  $('dodaci-adresa-toggler').getElement('input').addEvent('click', function(){
			      ($('dodaci-adresa')) ? DodaciAdresa.fx(wrapperFx) : DodaciAdresa.toggle();
			  });
				$('dodaci-adresa-toggler').getElement('label').addEvent('click', function(event){
						var event = new Event(event);
						event.preventDefault();
						if (document.getElementById('ldodacicheck').checked){
							  document.getElementById('ldodacicheck').checked = false;
						} else {
							  document.getElementById('ldodacicheck').checked = true;
						}
				    ($('dodaci-adresa')) ? DodaciAdresa.fx(wrapperFx) : DodaciAdresa.toggle();
				});
				if ($('dodaci-adresa')) { 
				  var wrapperFx = new Fx.Slide('dodaci-adresa-wrapper', { duration: 500, wait: false, transition: Fx.Transitions.Quad.easeOut });
					wrapperFx.hide();
				  DodaciAdresa.fx(wrapperFx);
				} else {
					DodaciAdresa.toggle();
				}
		},
		
		toggle: function(){
			if (document.getElementById('ldodacicheck').checked){
				$$('.dodaci-adresa').toggleClass('disabled');
				$$('.dodaci-adresa input').each(function(element){
				    element.setProperty('disabled','disabled');
				});
			} else {
				$$('.dodaci-adresa').toggleClass('disabled');
				$$('.dodaci-adresa input').each(function(element){
				    element.removeProperty('disabled');
				});
			}
		},
		
		fx: function(wrapperFx){
			if (document.getElementById('ldodacicheck').checked){
				wrapperFx.slideOut();
				$$('#dodaci-adresa input').each(function(element){
				  element.setProperty('disabled', 'disabled');
				});
			} else {
				wrapperFx.slideIn();
				$$('#dodaci-adresa input').each(function(element){
				  element.removeProperty('disabled');
				});
			}
		}
};


var Steps = {
	  
		init: function(){
			 var step = $('steps').getParent().getProperty('id').slice(4).toInt();
			 
			 var steps = $$('#steps a');
			 
			 steps.each(function(element, index){
			     element.addEvent('click', function(event){
					     event = new Event(event);
							 event.preventDefault();
							 var currentStep = index + 1;
							 if (currentStep < step) {
								   $('form1').getElement('input[name=goback]').value = step - currentStep;
									 $('form1').submit();
							 }
					 });
			 });
			 
			 // #step1 dialog prevents deletion of product
			 var collection = $$('#step1 a.delete');
			 
			 collection.each(function(element){
					 element.onclick = function(event){
						 if (confirm('Opravdu chcete smazat produkt z košíku?')) { return true; }
						 return false;
					 }
			 });

			 var o1 = $$('#form1 table input[name=o1]');
			 var o2 = $$('#form1 table input[name=o2]');
			 
			 o1.each(function(element, index){
					element.addEvent('click', function(){
					  switch (index){
							case 0: Steps.setActive(o2, [1, 2], 1);
							break;
							
							case 4: Steps.setActive(o2, [0], 0);
							break;
							
							default: Steps.setActive(o2, [0, 2], 0);
						}
					});
			 });
			 
			 // default ini
			 o1.each(function(element, index){
				  if (element.checked) {
						switch (index){
								case 0: Steps.setActive(o2, [1, 2]);
								break;
								
								case 4: Steps.setActive(o2, [0]);
								break;
								
								default: Steps.setActive(o2, [0, 2]);
						}
					}
			 });

		},
		
		// radioList = list of radio inputs
		// onArray = selectable radio buttons
		// prefer = default selection
		setActive: function(radioList, onArray, prefer){
			radioList.each(function(element, index){
			  if (onArray.contains(index)){
					element.removeProperty('disabled');
				} else {
					element.checked = false;
					element.setProperty('disabled','disabled');
				}
				if (onArray.contains(prefer)) radioList[prefer].checked = true;
			});
		}
};

var SearchForm = {
	  init:  function(){
			  $('form-search').addEvent('submit', function(event){
				  var event = new Event(event);
					event.preventDefault();
					window.location = '/hledej/' + $('form-search').getElement('input[name=text]').value;
				});
		}
};

var Konfigurator = {
	  init: function(){
			var monitor = $('monitor');
		  var diagonal = $('diagonal');
      monitor.addEvent('click', function(){
			  if (monitor.getElement('input[value=2]').checked){
					diagonal.setStyle('visibility', 'hidden');
				} else {
					diagonal.setStyle('visibility', 'visible');
				}
			});
			
			if (monitor.getElement('input[value=2]').checked){
				diagonal.setStyle('visibility', 'hidden');
			} else {
				diagonal.setStyle('visibility', 'visible');
			}
		}
}

window.addEvent('domready', function(){
  
	if ($$('.product-item')) { Products.init(); }
	
	if ($('slideshow')) {
		  FadeShow.init('slideshow',{
				togglers: 'togglers',
				duration: 7000,
				button: true
			});
	}
	
	if ($$('.buy')) { Basket.init(); }
	
	if ($('product-tabs')) { ProductTabs.init(); }
	
	//if ($('dodaci-adresa') || $$('.dodaci-adresa')) { DodaciAdresa.init(); }
	if ($('dodaci-adresa-toggler')) { DodaciAdresa.init(); }
	
	if ($('steps')) { Steps.init(); }
	
	var forms = $$('form.form-search, form.form-login');
	if (forms){
		 forms.each(function(element){
		   element.getElement('input[type=text]').onfocus = function(event){
				 if (this.value==this.defaultValue){this.value='';}
			 };
		   element.getElement('input[type=text]').onblur = function(event){
				 if (this.value==''){this.value=this.defaultValue;}
			 };
		 });
	}

/* footer
	if ($('giant')) {
		  $('giant').getElement('a').setStyle('cursor', 'default');
			$('giant').getElement('img').setStyle('cursor', 'pointer').addEvent('click', function(){ window.open('http://www.giant.cz') });
	}
*/
	if ($('form-search')) SearchForm.init();
	
	if ($('form-config')) Konfigurator.init();
	
	// soutez
	var soutez = $('soutez');
	if (soutez){
		if (!soutez.hasClass('winner')){
			soutez.addEvent('click', function(event){
			  var event = new Event(event);
				event.stop();
				window.location = '/soutez/';
			});
			soutez.setStyle('cursor','pointer');
		}
	}
	
});