// Basket popup
BasketPopup = new Class({
	
	Implements: [Options],

  options: {
		basketUrl: '/kosik/',
		updateUrl: '/kosik/upravit',
		addUrl: '/kosik/pridat'
	},

  initialize: function(options){
				
		this.setOptions(options);
		
		// build popup
		/*
			this.container = new Element('div', {
		  	'id' : 'giant-basket-popup',
				'html' : '<h3>Přidáno do košíku</h3><p>V košíku nyní máte <span class="basket-popup-count">1</span> ks artiklu <strong class="basket-popup-product"></strong></p><p>Zde můžete upravit jeho množství: <input type="text" name="count" class="input" value="1" /> ks</p><a href="#" class="button continue">Pokračovat v nákupu</a><a href="' + this.options.basketUrl + '" class="button basket">Nákupní košík</a><a href="#" id="giant-basket-popup-close"></a>'
			});	
		*/
		//console.log(this.options.addUrl);
		if(this.options.addUrl == '/kosik/pridat') { 
			//console.log('normal');
			this.container = new Element('div', {
		  	'id' : 'giant-basket-popup',
				'html' : '<h3>Přidáno do košíku</h3><p>V košíku nyní máte <span class="basket-popup-count">1</span> ks artiklu <strong class="basket-popup-product"></strong></p><p>Zde můžete upravit jeho množství: <input type="text" name="count" class="input" value="1" /> ks</p><a href="#" class="button continue">Zpět na web</a><a href="' + this.options.basketUrl + '" class="button basket">Nákupní košík</a><a href="#" class="close" id="giant-basket-popup-close"></a>'
			});		
		}
		if(this.options.addUrl == '/kosik/pridat-sada') { 
			//console.log('sada');
			this.container = new Element('div', {
		  	'id' : 'giant-basket-popup-sada',
				'html' : '<h3>Přidáno do košíku</h3><p>V košíku nyní máte <span class="basket-popup-count">1</span> ks artiklu <strong class="basket-popup-product"></strong></p><p>Zde můžete upravit jeho množství: <input type="text" name="count" class="input" value="1" /> ks</p><a href="#" class="button continue">Zpět na web</a><a href="' + this.options.basketUrl + '" class="button basket">Nákupní košík</a><a href="#" class="close" id="giant-basket-popup-close-sada"></a>'
			});		
		}
		
		this.container.inject('page-wrapper');

		this.itemID = 0;
		
		this.title = this.container.getElement('strong.basket-popup-product');
		this.count = this.container.getElement('span.basket-popup-count');
		this.input = this.container.getElement('input[name=count]');
		this.position = { left: 0, top: 0 }
		this.text = '';
		
		// ajax request
		this.requestUpdate = new Request.JSON({
		  url: this.options.updateUrl,
			onComplete: function(jsonObj){
				if (jsonObj && $chk(jsonObj.count)){
					this.count.set('text', jsonObj.count);
					this.input.set('value', jsonObj.count);
					this.totalPrice = jsonObj.totalPrice;
					this.title.set('text', this.text);
					this.container.setStyles(this.position);
					this.showFx.start(1);
					if (jsonObj.all) {
						Basket.update(jsonObj.all);
						$('kosik').getElement('span#kosik-cena').set('text', this.totalPrice + ',-');
					}
				}
			}.bind(this),
			link: 'cancel'
		});
		
		// ajax request
		this.requestAdd = new Request.JSON({
		  url: this.options.addUrl,
			onComplete: function(jsonObj){
				if (jsonObj && $chk(jsonObj.count)){
					this.count.set('text', jsonObj.count);
					this.input.set('value', jsonObj.count);
					this.totalPrice = jsonObj.totalPrice;
					this.title.set('text', this.text);
					this.container.setStyles(this.position);
					this.showFx.start(1);
					if (jsonObj.all) {
						Basket.update(jsonObj.all);
						$('kosik').getElement('span#kosik-cena').set('text', this.totalPrice + ',-');
					}
				}
			}.bind(this),
			link: 'cancel'
		});
		
		// open/close fx
		this.showFx = new Fx.Tween(this.container, { property: 'opacity', duration: 200, link: 'cancel' });
		this.showFx.set(0);
		
		// close event
		this.buttonContinue = this.container.getElement('a.continue');
		this.buttonContinue.addEvent('click', function(event){
		  event.stop();
			this.close();
		}.bind(this));
		
		// button close
		this.closeBtn = this.container.getElement('a.close');
		if (this.closeBtn){
			this.closeBtn.addEvent('click', function(event){
				event.stop();
				this.close();
			}.bind(this));
		}

		
		// input event
		this.input.addEvent('keyup', function(event){
			var value = this.input.get('value');
			value = value.replace(/[^0-9]/g, '');
			value = value.replace(/(^0)(.+)/,'$2');
			this.input.set('value', value);
			if (this.input.get('value')){
				this.requestUpdate.get({
					'id' : this.itemID,
					'count' : this.input.get('value')
				});
			}
		}.bind(this));
		
		
  },
	
	// set text in popup
	setText: function(text){
		this.text = text;
	},
	
	// set id for count update
	setID: function(id){
		this.itemID = id;
	},
	
	// set position of popup
	setPosition: function(pos){
		pos.x = (pos.x || 0);
		pos.y = (pos.y || 0);
		var dim = this.container.getSize();
		this.position.top = pos.y-dim.y+30;
		this.position.left = ((pos.x - (dim.x/3).toInt()) > 10 ? (pos.x - (dim.x/3).toInt()) : 10);
	},
	
	// updates number of products in basket
	update: function(id, count, totalPrice){
		this.requestUpdate.get({
			'id' : id,
			'count' : count
		});
	},
	
	close: function(){
		this.showFx.start(0);
	},
	
	open: function(){
		this.close();
		this.requestAdd.get({
			'id' : this.itemID,
			'count' : this.mnozstvi
		});
	}

});

// Basket
Basket = {

	options: {
	  buttons: '#vypis-produktu .buttons .koupit, #vypis-produktu .buttons .koupit-sady, #detail .buy, #cena-sady .buy-sada, #content .sady-table-buy-button'
	},
	
	init: function(){
		
		this.buttons = $$(this.options.buttons);
		
		// prepare popup
		this.popup = new BasketPopup({addUrl: '/kosik/pridat'});
		
		// prepare popup for sady
		this.popupSada = new BasketPopup({addUrl: '/kosik/pridat-sada'});
	
		// buttons action
		this.buttons.each(function(button){
		  button.addEvent('click', function(event){
			  event.stop();
		
switch(button.get('class')){  
     case 'buy': 
				 	this.popup.setText(button.getParent('div#detail').getElement('h1').get('text'));
					this.popup.setID(button.get('id').replace('item-',''));
					this.form = button.getParent('form');
					this.form.addEvent('submit', $lambda(false));
					this.popup.mnozstvi = $('detail').getElement('input.mnozstvi').get('value');					
					this.popup.mnozstvi = this.popup.mnozstvi.toInt();
					var pos = button.getPosition('page-wrapper');
					this.popup.setPosition(pos);
					this.popup.open();
					//console.log('normal');			
     break;
		 case 'buy-sada': 
			 		this.popupSada.setText(document.getElement('div#detail').getElement('h1').get('text'));
					this.popupSada.setID(button.get('id').replace('item-',''));
					this.form = button.getParent('form');
					this.form.addEvent('submit', $lambda(false));
					this.popupSada.mnozstvi = document.getElement('div#cena-sady').getElement('input.mnozstvi').get('value');					
					this.popupSada.mnozstvi = this.popupSada.mnozstvi.toInt();
					var pos = button.getPosition('page-wrapper');
					this.popupSada.setPosition(pos);
					this.popupSada.open();
					//console.log('sada');		 	
     break;
		 case 'sady-table-buy-button':
		 			this.popup.setText(button.getParent('div.sady-tables').getElement('td.jmeno-produktu').get('text'));
					this.popup.setID(button.get('id').replace('item-',''));
					var pos = button.getPosition('page-wrapper');
					this.popup.setPosition(pos);
					this.popup.open();
			 		//console.log('sady-opt-pro');
     break;
		 case 'koupit-sady':
		 			this.popupSada.setText(button.getParent('div.product-box').getElement('a.product-name').get('text'));
					this.popupSada.setID(button.get('id').replace('item-',''));
					var pos = button.getPosition('page-wrapper');
					this.popupSada.setPosition(pos);
					this.popupSada.open();
					//console.log('sady-vypis');
     break;
     default: 
			 		this.popup.setText(button.getParent('div.product-box').getElement('a.product-name').get('text'));
					this.popup.setID(button.get('id').replace('item-',''));
					var pos = button.getPosition('page-wrapper');
					this.popup.setPosition(pos);
					this.popup.open();
					//console.log('def');
}  
				
			}.bind(this));
		}, this);	
	},

	
	update: function(count,totalPrice){
		$('kosik').getElement('span#kosik-mnozstvi').set('text', count);
	}
	
};

var Products = {
	
	init: function(){
		
		// plus and minus buttons
		$$('.mnozstvi-block a').each(function(element){
		  if (element.get('text') == '+') {
				element.addEvent('click', function(event){
					event.stop();
					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.addEvent('click', function(event){
					event.stop();
					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 FormReg = {
	init: function(){
		
		this.form = $('form-address');
		
		// slide event
		this.toggler = $('delivery-address-toggler');
		this.slide = $('delivery-address-wrapper');
		this.slideFx = new Fx.Slide(this.slide, { duration: 500, link: 'cancel', transition: Fx.Transitions.Quad.easeOut });
		this.checkbox = this.toggler.getElement('input');
		
		if (this.checkbox.checked == true) {
			this.slideFx.hide();
			}
		
		this.toggler.addEvent('click', function(event){
			this.toggle();
		}.bind(this));
		
		this.checkbox.addEvent('click', function(event){
		  this.toggle();
		}.bind(this));
		
		// submit event
		this.form.addEvent('submit', function(event){
			if (!this.form.hasClass('profile')){
				event.stop();
				this.validate();
			}
		}.bind(this));
		
		
	},
	
	validate: function(){
		
		var fields = ['firstname','surname','street','town','zip','email','phone'];
		var prefix = 'form-address-';
		var err = new Array();
		
		var fieldNames = new Array();
		
		// get names
		fields.each(function(field, index){
			//console.log(this.form.getElement('label[for=' + prefix + field + ']').get('text').replace(/[:|*]/g,''));
		  fieldNames[index] = this.form.getElement('label[for=' + prefix + field + ']').get('text').replace(/[:|*]/g,'');
		}, this);
		
		// search for empty fields
		var emptyFields = new Array();
		fields.each(function(field, index){
		  if ($(prefix + field).get('value') == ''){
				emptyFields.include(fieldNames[index]);
			}
		});

    if (emptyFields.length){
			err.include('Je nutné vyplnit i následující položky: ' + emptyFields.join(', '));
		}
		
		// kontrola emailu
		var mail = $(prefix + 'email').get('value');
		if (mail){
			mail = mail.replace(/^([a-zA-Z0-9])+([\.a-zA-Z0-9_-])*@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-]+)+/, 'valid');
			if (mail != 'valid'){
					err.include('Zadaná emailová adresa je neplatná. Prosím, zkontrolujte ji.');
			}
		}
		
		// kontrola hesla
		var pass = $(prefix + 'password').get('value');
		var pass2 = $(prefix + 'password2').get('value');
		if (pass){
			if (pass != pass2){
				err.include('Zadaná hesla se neshodují.');
			}
		}
		
    if (err.length){
			alert(err.join('\n\n'));
		} else {
			this.form.submit();
		}
	},
	
	toggle: function(){
		this.checkbox.checked ? this.slideFx.slideOut() : this.slideFx.slideIn();
	}
	
};

var FormDelivery = {
	
	init: function(){
		this.form = $('form3');
		
		this.form.addEvent('submit', function(event){
		  event.stop();
			this.validate();
		}.bind(this));
		
		this.delivery = this.form.getElements('input[name=delivery]');
		this.payment = this.form.getElements('input[name=payment]');
		this.block = {
			delivery: this.delivery.getParent('fieldset'),
			payment: this.payment.getParent('fieldset')
		};
	
		
	},
	
	refresh: function(){
		this.block.payment.setStyle('display', 'block');
		this.payment.each(function(input){
		  input.disabled = false;
			input.getParent('label').removeClass('hide');
		});
		this.delivery.each(function(input, index){
		  if (input.checked){
				this.bindMatrix[index].each(function(id){
				  this.payment[id].disabled = true;
					this.payment[id].checked = false;
					this.payment[id].getParent('label').addClass('hide');
				}, this);
				this.payment[this.bindMatrixDefault[index]].checked = true;
			}
		}, this);
	},
	
	validate: function(){
		var err = new Array();
		var errQ = true;
		this.delivery.each(function(radio){
		  if (radio.checked) errQ = false;
		});
		if (errQ){
			err.include('Musíte zvolit způsob dopravy.');
		}
		
		errQ = true;
		this.payment.each(function(radio){
		  if (radio.checked) errQ = false;
		});
		if (errQ){
			err.include('Musíte zvolit způsob platby.');
		}
		
		if (err.length){
			alert(err.join('\n\n'));
		} else {
			this.form.submit();
		}
	}
	
};

var Vizualizace = function() {
	
	var container = $$('div.info-boxes');
	var boxes = $$('div.info-box');
	var buttons = $$('area.viz-button');
	var height = 0;
	
	boxes.each(function(item){
		var size = item.getStyle('height').toInt();
		item.setStyle('display','none');
		
		if(size > height) {	
			height = size + 30;
		}	
	});
	//console.log(height);
	container[0].setStyle('height',height+'px');
	
	buttons.each(function(item){
		item.addEvent('mouseover', function(){
			boxes.each(function(item){
				item.setStyle('display','none');										
			});
			boxes[buttons.indexOf(this)].setStyle('display','block');
		});
	});
	
	boxes[0].setStyle('display','block');
		
}

window.addEvent('domready', function() {

	if ($$('div.info-boxes').length){
		Vizualizace();
	}


// menu tab toggler 

			var bgr = $$('.kat-menu');
			var tabs = $$('.mtoggler');
			var menus = $$('.menu');
			var stav = 0;
					
			tabs.each(function(tab){
			  tab.addEvent('click', function(event){
				  event.stop();
					switch(stav)	{
						case 0:
						  bgr.removeClass('km-zbozi');
						 	bgr.addClass('km-znacka');
							stav = 1;
						  break;    
						case 1:
						  bgr.removeClass('km-znacka');
							bgr.addClass('km-zbozi');
							stav = 0;
						  break;
					}
					menus.removeClass('active');
					menus[stav].addClass('active');
				});
			});
	
	if ($$('.mnozstvi-block')) { Products.init(); }
	if ($('form-address')) FormReg.init();
	if ($('form3')) FormDelivery.init();
	// basket
	if ($('vypis-produktu') || $('koupit') || $('detail')) Basket.init();
	
	// clickable basket
//	var cart = $('kosik');
//	if (cart){
//		cart.addEvent('click', function(event){
//		  var link = cart.getElement('a');
//			if (event.target != link) window.location = link.get('href');
//		});
//		cart.setStyle('cursor', 'pointer');
//	}
	
});

// remooz
window.addEvent('load', function() {
 	
	//this.container = $('main-content');
	// toggler univerzal
				/*
				if ($$('.toggler').length){
					//alert("test");
					var togglers = document.getElements('.toggler');
					var slides = document.getElements('.toggled');
					
					togglers.each(function(element,index){
					 var slideFx = new Fx.Slide(slides[index], { duration: 500, link: 'cancel', transition: Fx.Transitions.Quad.easeInOut }).hide();
					 togglers[index].addEvent('click', function(event){ event.preventDefault(); });
					 togglers[index].addEvent('click', function(){
							if (this.hasClass('expand')){
								this.removeClass('expand').set('text', 'Skrýt text');
							}
							else {
								this.addClass('expand').set('text', 'Celý text');
							}
							slideFx.toggle();							
					 });
					},this);
				}
				*/
	// toggler more text
				if ($$('.mopener').length){
					var mopener = document.getElements('.mopener');
					var mcloser = document.getElements('.mcloser');
					var mslides = document.getElements('.mtoggled');
					
					mopener.each(function(element,index){
					 var mslideFx = new Fx.Slide(mslides[index], { duration: 500, link: 'cancel', transition: Fx.Transitions.Quad.easeInOut }).hide();
					 mopener[index].addEvent('click', function(event){ event.preventDefault(); });
					 mopener[index].addEvent('click', function(){
							this.addClass('hide');
							mslideFx.slideIn();
					 });
					},this);
					mcloser.each(function(element,index){
					 var mslideFx = new Fx.Slide(mslides[index], { duration: 500, link: 'cancel', transition: Fx.Transitions.Quad.easeInOut });
					 mcloser[index].addEvent('click', function(event){ event.preventDefault(); });
					 mcloser[index].addEvent('click', function(){
							mopener[index].removeClass('hide');
							mslideFx.slideOut();
					 });
					},this);					
				}
				
	/**
	 * Some options for the large photos.
	 *
	 * The first argument is the argument for $$ (can be an array of elements or a selector)
	 */
 if ($$('a.detail-img')) { 
	ReMooz.assign('a.detail-img', {
		'origin': 'img',
		'shadow': 'onOpenEnd', // fx is faster because shadow appears after resize animation
		'resizeFactor': 0.8, // resize to maximum 80% of screen size
		'cutOut': false, // don't hide the original
		'opacityResize': 0.4, // opaque resize
		'dragging': false, // disable dragging
		'centered': true // resize to center of the screen, not relative to the source element
	});
 }
	/**
	 * Note on "shadow": value can be true, onOpenEnd (appear after resize) and false, to disable shadow
	 * WebKit (Safari 3) uses (great looking) CSS shadows, so it ignores this option.
	 */
 
});
