// 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
/* STEJSKY TO DO
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
        $$('.counter 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');
                    if($('step1')) {
                        Products.recount(this);
                    }
                });
            } 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');
                    }
                    if($('step1')) {
                        Products.recount(this);
                    }
                });
            }
        });
		
        $$('.counter input').each(function(element){
            var curVal = element.getProperty('value').toInt();
            element.addEvents({
                change: function(event){
                    event.stop();
                    var newVal = this.getProperty('value').toInt();
                    if(!isNaN(newVal)){
                        this.setProperty('value', newVal + ' ks');	
                    } else { 
                        this.setProperty('value', curVal + ' ks');	
                    }
                    Products.recount(this);
                },
				
                keypress: function(){
                    if(event.keyCode==13) 
                    {
                        var newVal = this.getProperty('value').toInt();
                        if(!isNaN(newVal)){
                            this.setProperty('value', newVal + ' ks');	
                        } else { 
                            this.setProperty('value', curVal + ' ks');	
                        }
                        Products.recount(this);
                        this.blur();
                        return false;
                    }
                }
			
            });
		
		
        });
    },
	
    recount: function(el){
        var totalPrice = $$('form#form1 tr.total td.price-vat')[0];
        var totalVat = $$('form#form1 tr.total td.price-vat')[1];
        var totalPriceVat = $$('form#form1 tr.total td.price-vat')[2];
        var productPrice = el.getParent('tr').getElement('span.base-price');
        var productPriceVat = el.getParent('tr').getElement('span.vat');
        var itemId = el.getParent('tr').getElement('input').getProperty('name');
        var itemCnt = el.getParent('tr').getElement('input').getProperty('value').toInt(); 
        var req = new Request.JSON({
            url: '/kosik/upravit?' + itemId + '=' + itemCnt,
            onSuccess: function(price){
                productPrice.setProperty('html', price.productPrice);
                productPriceVat.setProperty('html', price.productPriceVat + ' s DPH');
                $('cart-price').setProperty('html', 'Cena nákupu: ' + price.totalPrice);
                totalPrice.setProperty('html', price.totalPrice);
                totalVat.setProperty('html', price.totalVat);
                totalPriceVat.setProperty('html', '<strong>'+price.totalPriceVat+'</stron>');
            }
        });
        req.send();
    }
	
};

var addressToggler = {
    init: function(){

        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 == false) {
            this.slideFx.hide();
        }
		
        this.toggler.addEvent('click', function(event){
            this.toggle();
        }.bind(this));
		
        this.checkbox.addEvent('click', function(event){
            this.toggle();
        }.bind(this));

    },
	
    toggle: function(){
        this.checkbox.checked ? this.slideFx.slideIn() : this.slideFx.slideOut();
    }
};

var passwordToggler = {
    init: function(){

        this.toggler = $('password-box-toggler');
        this.slide = $('password-change-box');
        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 == false) {
            this.slideFx.hide();
        }
		
        this.toggler.addEvent('click', function(event){
            this.toggle();
        }.bind(this));
		
        this.checkbox.addEvent('click', function(event){
            this.toggle();
        }.bind(this));

    },

    toggle: function(){
        this.checkbox.checked ? this.slideFx.slideIn() : this.slideFx.slideOut();
    }
};

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 == false) {
            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 fields = ['firstname','surname'];
        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 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.slideIn() : this.slideFx.slideOut();
    }
	
};


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.block = {
            delivery: this.delivery.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(){                
        if(this.delivery.length) {
            var err = 'Musíte zvolit způsob dopravy.';        
            this.delivery.each(function(radio){
                if (radio.checked) err = false;
            });
        } else {
            var err = false;
        }
				
        if (err != false){
            alert(err);
        } else {
            this.form.submit();
        }
    }
	
};

/* TRASH
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');
		
}
*/

showPopupBox = new Class({
    Implements: Options,
    options: {
        lockPosition: 'login-btn',
        wrapper: 'page-bg',
        box: 'login-box-wrapper',
        showSpeed: 200,
        leftIndent: 0,		
        topIndent: 0
    },
	
    initialize: function(options){
        this.setOptions(options);
        this.lockPosition = $(this.options.lockPosition);
        this.box = $(this.options.box);
        this.box.setStyle('display', 'block');
        this.boxContent = $(this.options.boxContent);
        this.alternateContent = $(this.options.alternateContent);
        this.showBox = new Fx.Tween(this.box, {
            property: 'opacity', 
            duration: this.options.showSpeed
        });
        this.showBox.set(0);
    },
	
    open: function() {
        this.pos = this.lockPosition.getPosition();
        this.cont = $(this.options.wrapper).getSize();
        this.posLeft = (this.pos.x - ((this.cont.x - 990) / 2) + this.options.leftIndent).round();
        this.box.setStyle('left', this.posLeft + 'px');
        this.box.setStyle('top', this.pos.y + this.options.topIndent + 'px');
        this.showBox.start(1);	
    },
	
    close: function() {
        this.showBox.start(0);	
    },
	
    switchContent: function() {
        this.activeContent = this.box.getElement('.active');
        this.inactiveContent = this.box.getElement('.inactive');
        this.hideContent(this.activeContent, this.inactiveContent);
    },
	
    hideContent: function(a, i) {
        a.removeClass('active').addClass('inactive');
        this.showAlternate(i);	
    },
	
    showAlternate: function(i) {
        i.removeClass('inactive').addClass('active');
    }
	
});


window.addEvent('domready', function() {

    $$('div.additional-links a, div.docs-2-down a').addEvent('click', function(event){
        window.open(this.href);
        return false;
    });

    if ($$('div.info-boxes').length){
        Vizualizace();
    }

    if ($('login-btn')){
        loginBtn = $('login-btn');
		
        var loginBox = new showPopupBox({
            leftIndent: -213, 
            topIndent: -5
        });
			
        $('login-btn').addEvent('click', function(event){
            event.preventDefault();	
            loginBox.open();
        });
		
        $('forgotten-show').addEvent('click', function(event){
            event.preventDefault();	
            loginBox.switchContent();
        });	
		
        $('forgotten-hide').addEvent('click', function(event){
            event.preventDefault();	
            loginBox.switchContent();
        });	
			
        $('login-box-close').addEvent('click', function(event){
            event.preventDefault();	
            loginBox.close();
        });
        
        if ($('login-box-message')) {
            loginBox.open();
        }
    }

    // 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 ($$('.counter')) {
        Products.init();
    }

    if ($('form-address')) FormReg.init();
    if ($('delivery-address-toggler')) addressToggler.init();
    if ($('password-change-box')) passwordToggler.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.
	 */
 
});
