/*** tabpanels ***/
function _h_tab() {

    this.tp = [];

    this.getPanels = function(idtabpanel, op) {
        var cp = 0;
        var _self = this;
        panels = $(idtabpanel).getElements('div');
        panels.each(function(p) { 
            if ((/tabpanel/).test(p.className)) {
                _self.tp.push(p);
                p.style.display = (++cp == op)? 'block':'none';
            }        
        });
    }

    this.closeAllPanels = function() {
        for (var i=0; i<this.tp.length; i++)
        this.tp[i].setStyle('display', 'none');
    }

    this.setLinkEvt = function(idtablink, op) {
        
        lnk = $(idtablink).getElements('a');
        var _self = this;
        
        lnk.each(function(l) {
            id = l.hash.replace(/^#/, '');
            _self.associateLink(l, id);
            if (i+1 == op) l.parentNode.className += ' current';
        });

        this.tl = $(idtablink).getElements('li');
    }

    this.removeCurrentClass = function() {
        for (var i=0; i<this.tl.length; i++) {
            var ccn = this.tl[i].className;
            if (/current/.test(ccn))
            this.tl[i].className = trim(ccn.replace(/current/, ''));
            if (/^\s*$/.test(this.tl[i].className)) this.tl[i].removeAttribute('class');
        }
    }

    this.associateLink = function(l, d) {
        var _self = this;
        l.onclick = function() {
            return function(l) {
                if (!(/current/.test(l.parentNode.className))) {
                    _self.closeAllPanels();
                    if ($(d)) {
                        _self.removeCurrentClass();
                        $(d).style.display = 'block';
                        l.parentNode.className = 'current';
                    }
                    else alert([d, 'is undefined'].join(' '));
                }
                else {
                    _self.closeAllPanels();                
                    if ($(d)) {
                        _self.removeCurrentClass();
                        $(d).style.display = 'none';
                    }
                }
                return false;

            }(l)
        }
    }

    this.init = function(idtablink, idtabpanel, openpanel) {
        
        if (!$(idtablink) || !$(idtabpanel)) return; 
        $(idtablink).setStyle('visibility', 'visible');
        op = openpanel || 0;
        this.getPanels(idtabpanel, op);
        this.setLinkEvt(idtablink, op);
    }
};






/*** colorchooser ***/
function _h_colorchooser() {

    this.setLinkEvt = function(idcc, idimg) {
        
        var lks = $(idcc).getElements('a');
        lks.each(function(l, i) {
            l.onclick = function() {
                
                if (this.className != 'current') {
                    var imageUri = this.href;
                    if (/\.(jpg|gif)$/.test(imageUri)) {
                        lks.each(function(l) { l.className = ''; });
                        this.className = 'current';
                        $(idimg).src = imageUri;
                        _h_changeSelectColor(this.parentNode.className);
                        //_h_selectColor(this.parentNode.className);
                    }
                };
                
                return false;
            };
        });
    };

    this.init = function(idimg, idcc) {
        if (!$(idimg) || !$(idcc)) return; 
        $(idcc).setStyle('display', 'block');
        this.setLinkEvt(idcc, idimg); 

    }
};


function _h_changeSelectColor(color) {
    var select = $('productcolor');
    var options = select.getElementsByTagName('option');
    for (var i=0; i<options.length; i++) {
        if (options[i].value == color) {
            options[i].selected = 'selected';
             _h_changeprice();
        }
    }
}


function _h_selectColor(color) {
    color = color.options[color.selectedIndex].value;
    var cclis = $('colorchooser').getElements('li');
    cclis.each(function(ccli) {
        if (ccli.getElements('a')[0].className == 'current') ccli.getElements('a')[0].removeAttribute('class');
        if (ccli.className == color) {
            ccli.getElements('a')[0].onclick();
            _h_changeprice();
        }
    });
}

function _h_changeprice() {
    var selcolor = $('productcolor');
    var opts = selcolor.getElements('option');
    opts.each(function(opt) {
        if (opt.selected) {
            $('pricecolor').value = opt.title;
            return false;
        }
    });
}






/*** overlayer ***/
function _h_closeoverlaygallery() {

        $('galleryoverlayer').setStyle('display', 'none');
        $('centeredlayer').setStyle('display', 'none');
        
        var html = $$('html')[0];
        html.setStyle('height', 'auto');
        html.setStyle('width', 'auto'); 
        
        var body = $$('body')[0];
        body.setStyle('overflow', 'auto');
        body.setStyle('height', 'auto');
        body.setStyle('width', 'auto'); 

        var selects = $$('select');
        selects.each(function(s) { s.setStyle('display', 'inline'); });
        
        return false;

};





/*** overlayer ***/
function _h_openoverlaygallery() {
    
    // creating view galley link
    if ($('mainimg_cnt')) {
        var viewlink = new Element('a');
        viewlink.id = 'opengallery';
        viewlink.innerHTML = 'Zoom / Other views';
        viewlink.href = '#';
        viewlink.injectAfter($('mainimg_cnt'));    
    }
    
    if ($('opengallery') && $('illypg')) {
    
        var linkgallery = $('opengallery');
        var gallery = $$('.pgcontainer')[0];
        gallery.setStyle('display', 'none');


        linkgallery.onclick = function() {
            var html = $$('html')[0];
            html.setStyle('height', '100%');
            html.setStyle('width', '100%'); 
            
            var body = $$('body')[0];
            body.setStyle('overflow', 'hidden');
            body.setStyle('height', '100%');
            body.setStyle('width', '100%'); 
            
            // hide selects
            var selects = $$('select');
            selects.each(function(s) { s.setStyle('display', 'none'); });
            
            var container = $('bodycnt');
            
            
            if ($('galleryoverlayer') && $('centeredlayer')) {
                $('galleryoverlayer').setStyle('display', 'block');
                $('centeredlayer').setStyle('display', 'block');        
            }
            
            else {
            
                // overlayer
                var g_ov = new Element('div');
                g_ov.id = 'galleryoverlayer';
                
                    // centered box
                    var centeredlayer = new Element('div');
                    centeredlayer.id = 'centeredlayer';
                   
                    
                        // close link
                        var closelink = new Element('a');
                        closelink.id = 'closeoverlayer';
                        closelink.innerHTML = 'Close';
                        closelink.href = '#';
                        
                        closelink.onclick = _h_closeoverlaygallery;
                        
                        closelink.inject(centeredlayer);
                        
                        // imagecnt
                        var zoomcnt = new Element('div');
                        zoomcnt.id = 'zoomcntoverlayer';
                        zoomcnt.inject(centeredlayer);
                        
                        // image zoom
                        var zoomover = new Element('img');
                        zoomover.id = 'zoomoverlayer';
                        $$('#illypg a')[0].className = 'current';
                        zoomover.src = $$('#illypg a')[0].href;
                        zoomover.inject(zoomcnt);
                            
                        // gallery (already defined in page)
                        gallery.inject(centeredlayer);
                        gallery.setStyle('display', 'block');

                        

                g_ov.injectAfter(container);
                centeredlayer.injectAfter(container);


                // start gallery
                $$('#illypg img').each(function(img){ img.setStyle('border', '0'); });  
                $$('#illypg li').each(function(img){ img.setStyle('border', '0'); });  
                $$('.photogallery')[0].setStyle('width', '457px');
                $$('.photogallery')[0].setStyle('display', 'block');
                $$('.pgcontainer')[0].setStyle('width', '527px');
                $$('.pgcontainer')[0].setStyle('height', '77px');
                
                // set link on gallery img
                
                var gallerylinks = $$('#illypg a');
                gallerylinks.each(function(linkgallery, i) {
                    linkgallery.onclick = function() {
                        if (this.className != 'current') {
                            gallerylinks.each(function(linkgallery) { linkgallery.erase('class'); });
                            this.className = 'current';
                            $('zoomoverlayer').src = this.href;
                        }
                        return false;
                    };
                });
                
                
                var photogallery = new _h_photogallery();
                photogallery.init('illypg', 92, 77);
                photogallery.setWindow(5);        
            };
        
            return false;
        
        }; 
        
        linkgallery.setStyle('display', 'block');

    };
}








/*** gallery ***/
function _h_photogallery() {

    var pg          = null;
    var pgcontainer = null;
    var pgWindow    = 0;
    
    var pgpictures  = [];
    var currpicture = 1;
    var picturesize = {
        width       : 0,
        height      : 0
    }
    
    var nextLink, prevLink = null;
    var slideFx     = null;
    var pgMutex     = true;    
    
    this.initGallery = function() {
        pgpictures  = pg.getElements('img');
        pglinks     = pg.getElements('a');
        
        currlink    = 1;
        totlink     = pgpictures.length;
        pglinks.each(function(l) { 
            l.title += [' Image', currlink++, 'of', totlink].join(' '); 
        });
    };

    this.setClasses = function() {
        pg.addClass('js');    
        pgcontainer         = pg.getElements('div')[0];
        pgcontainer.setStyle('width', (pgpictures.length * picturesize.width)+2);
        slideFx = new Fx.Morph(pgcontainer, {duration: '500', transition: Fx.Transitions.Quart.easeOut});
        
    };
    
    this.createLinks = function() {
        
        prevLink = new Element('a');
        prevLink.addClass('prevlink');
        prevLink.href = '#';
        prevLink.innerHTML = 'previous photo';
        prevLink.setStyle('visibility', 'hidden');        
        prevLink.injectBefore(pg);
        
        nextLink = new Element('a');
        nextLink.addClass('nextlink');
        nextLink.href = '#';
        nextLink.innerHTML = 'next photo';
        nextLink.injectAfter(pg);
        

        prevLink.onclick = this.prevClick;
        nextLink.onclick = this.nextClick;
    }
    
    
    this.nextClick = function() {
        if (pgMutex) {
            prevLink.setStyle('visibility', 'visible');
            
            if (currpicture <= pgpictures.length - pgWindow) {
                pgMutex = false;
                var offset = -(currpicture * (picturesize.width - 1));
                
                slideFx.start({'margin-left': offset}).chain(function() {
                    pgMutex = true;
                    ++currpicture;
                });
            }
        }
        
        if ((currpicture) == pgpictures.length - pgWindow) { 
            this.setStyle('visibility', 'hidden'); 
        }
            
        return false;
    };

    this.prevClick = function() {
    
        if (pgMutex) {
            nextLink.setStyle('visibility', 'visible');
            
            if (currpicture > 1) {
                pgMutex = false;
                var offset = -((--currpicture - 1) * (picturesize.width - 1));
                slideFx.start({'margin-left': offset}).chain(function() {
                    pgMutex = true;
                });
            }
        };
        
        
        if (currpicture == 1) { 
            this.setStyle('visibility', 'hidden'); 
        };
        
        return false;
    };



    this.init = function(idpg, width, height) {
        if ($(idpg)) {
            pg = $(idpg);
            picturesize.width   = width;
            picturesize.height  = height;
            
            this.initGallery();
            this.setClasses();
            this.createLinks();
        }
    };
    
    this.setWindow = function(window) {
        pgWindow        = window;
        if (pgWindow >= pgpictures.length) {
            nextLink.setStyle('visibility', 'hidden');   
        };
    };
    
}









/*** giftcart ***/
function _h_giftcart() {
    if (!$('cartchoose_ul') || !$('cartprodlist_ul') || !$('removeallitems')) return false;


  
        
    $('removeallitems').onclick = function() {
        // remaining prod 
        $$('#cartchoose_ul li').each(function(li) {
            li.empty();
            graft(li, ["span", { }, "No item selected"]);                
            $('totalpricegift').value = document.getElementById('tax').value;
            formatCurrency('totalpricegift');            
        });
            
        return false;
    }
  
    var prodtochoose = $$('#cartprodlist_ul a');
    prodtochoose.each(function(prod) {
        prod.addEvent('click', function(event) {
            var totprod = $$('#cartchoose_ul li');
            
            var price = prod.parentNode.getElementsByTagName('strong')[0].innerHTML.replace(/,/, '.').replace(/[^0-9\.]+/, '');
            price = parseFloat(price);
            
            var choosedprod = $$('#cartchoose_ul li a');
            //alert([totprod.length, chosedprod.length].join(' '));
            if (totprod.length > choosedprod.length) {
            
                var choosedimg = this.getElementsByTagName('img')[0];
                totprod[choosedprod.length].empty();
                
                
                graft(totprod[choosedprod.length],
                    ["a", { 
                        href    : "#", 
                        title   : "Remove item " + choosedimg.parentNode.rel,
                        rel     : price,
                        onclick : function() { return removeFromCart(this.parentNode) }
                    },
                        ["img", {
                                src     : choosedimg.src,
                                alt     : choosedimg.parentNode.rel
                            }
                        ],
                        
                        ["del", {
                                    
                        },                            
                            ["strong", { }, "Remove"]
                        ],
                        
                        ["input", {
                            type        : "hidden",
                            name        : "giftproducts[]",
                            value       : choosedimg.parentNode.rel
                        }]
                    ]);
                    
                    /** update price **/
                    //alert(price);
                    $('totalpricegift').value = (parseFloat(($('totalpricegift').value)) + price);
                    formatCurrency('totalpricegift');
                    
                
            } /** space available **/
            event.preventDefault();
        });
    });
    
    function removeFromCart(node) {
    
        var price = parseFloat(node.getElementsByTagName('a')[0].rel);
        
        node.innerHTML = '';
        graft(node,["span", { }, "No item selected"]);
        
        // remaining prod 
        var totprod = $$('#cartchoose_ul li');
        var choosedprod = $$('#cartchoose_ul li a');
        
        for (var i=choosedprod.length; i>=0; i--) {
            var li = totprod[i];
            if (!li.getElementsByTagName('a')[0]) {
            
                var ullist = li.parentNode;
                ullist.removeChild(li);
                
                var newli = ullist.appendChild(document.createElement('li'));
                graft(newli, ["span", { }, "No item selected"]);                

            }
        }
        
        
        $('totalpricegift').value = (parseFloat(($('totalpricegift').value)) - price);
        formatCurrency('totalpricegift');
        return false;
    }
    
}

function formatCurrency(id) {
        lengthdec =  ($(id).value.replace(/^\d+/, '')).length;
        if (lengthdec == 0) { $(id).value; }   
        if (lengthdec == 2) { $(id).value += '0'; }   
}


/******************* send a friend *******************/

function _h_addsendfriend() {
    if ($id('form_sendfriend_cnt')) {
        if ($id('form_sendfriend')) $id('form_sendfriend').style.display   = 'none';
        
        var objhform = new _HForm.Form(['form_sendfriend']);
        objhform.setFieldContainer('div');
        objhform.raiseAllErrors(0);
        objhform.addCallback(function() {
        
            var cnt = $id('sf_message').parentNode.parentNode;
            cnt.className = '';
            
            if (trim($id('sf_message').value) == '') {
                cnt.className = 'wrong';
                $id('sf_message').focus();
                return false;
            }
            
            return true;
        
        });

        if ($id('sendafriend')) {
            $id('sendafriend').onclick = function() {
                _h_openoverlay('form_sendfriend_cnt');
                $id('form_sendfriend').style.display   = 'block';
                return false;
            }
        }
        
    }
}

/********************* recipient *********************/

function _h_addnewrecipient() {

    if ($id('edit_recipient_new')) {
        if ($id('form_recipient_cnt')) $id('form_recipient_cnt').style.display   = 'none';
        
        var objhform = new _HForm.Form(['edit_recipient_new']);
        objhform.setFieldContainer('div');
        objhform.raiseAllErrors(1);
    }   

    if ($id('shiplist')) { 
        var sl = $id('shiplist');
        var prevsl = sl.onchange;
        sl.onchange = function() {
            /* if (typeof prevsl === 'function')  { 
                delegateShip(this, 'prodcart'); 
            } */
            // last selected option
            if (this.options.length == (this.selectedIndex + 1)) {
                // reset selectedIndex
                //if (typeof prevsl !== 'function') {
                this.selectedIndex = 0;
                //}
                var id = 'edit_recipient_new';
                _h_openoverlay(id);
                var formsel = $id('edit_recipient_new').getElementsByTagName('select');
                for (var i=0; i<formsel.length; i++) {
                    formsel[i].removeAttribute('disabled');
                }
            }
            
            delegateShip(this, 'prodcart'); 
            
        }
    }
    
    if ($id('r_whenadd1') && $id('r_whenadd2') && $id('whenaddlater')) {
        var rw1 = $id('r_whenadd1');
        var rw2 = $id('r_whenadd2');
        var wal = $id('whenaddlater');
        
        function disable() {
            wal.style.display = 'none';
            switchFields(wal, 'input', false, '');
            switchFields(wal, 'select', false, '');
        }
        
        rw1.onclick = disable;
        rw2.onclick = function() {
            switchFields(wal, 'input', true, '');
            wal.style.display = 'block';
        }
        
        disable();
    }
    
}


function delegateShip(sel, id) {
    
    var val = sel.options[sel.selectedIndex].value;
    //alert(val);
    
    var form = $id(id);
    var delegatedShip = form.getElementsByTagName('input');
    for (var i=0; i<delegatedShip.length; i++) {
        if ((delegatedShip[i].type == 'hidden') && (delegatedShip[i].className == 'shipdel')) {
            delegatedShip[i].value = val;
        }
    }
}

function _h_handleQuantity() {

    var btsubmit;
    var inputs = $id('prodcart').getElementsByTagName('input');
    var qty = 0;
    
/*     function updateQty() {
        qty = 0;
        for (var j=0; j<inputs.length; j++) {
            if ((inputs[j].type === 'text') && (inputs[j].maxLength == 2)) {
                qty = (inputs[j].value == '')? (qty + 0) : (qty + parseInt(inputs[j].value, 10));
            }
        }
    } */
    
/*     for (var j=0; j<inputs.length; j++) {
        if (inputs[j].type === 'image') {
            btsubmit = inputs[j];
        }
    }   */  
    
    for (var j=0; j<inputs.length; j++) {

        
        if ((inputs[j].type === 'text') && (inputs[j].maxLength == 2)) {
            
            /* inputs[j].onkeyup = function() {
                    
                updateQty();
                
                if (qty == 0) {
                    
                    btsubmit.disabled = 'disabled';
                    btsubmit.style.opacity = "0.5";
                    btsubmit.style.filter = "alpha(opacity=50)";
                }
                else {
                    btsubmit.removeAttribute("disabled");
                    btsubmit.style.opacity = "1";
                    btsubmit.style.filter = "alpha(opacity=100)";
                }                  
            } */
            
            inputs[j].onkeypress = function(e) {
                if (!e) var e = window.event;
                if (e.keyCode) code = e.keyCode;
                else if (e.which) code = e.which;
                
                return (code in quantitykeys);
            }

        }
    }
    
    //updateQty();
}



function verifyMultipleQty(el) {
    sumqty = 0;
    var _ipt = el.getElementsByTagName('input');
    for (var i=0; i<_ipt.length; i++) {
        if ((_ipt[i].type === 'text') && !(_ipt[i].readOnly)) sumqty += parseInt(_ipt[i].value, 10);
    }
    
    if (sumqty > 0) return true;
    
    document.getElementsByTagName('html')[0].style.height='100%';
    document.getElementsByTagName('body')[0].style.height='100%';
    document.getElementsByTagName('body')[0].style.overflow='hidden';
    var selects = document.getElementsByTagName('select');
    for (var i=0; i<selects.length; i++) { 
        if(!(/(^|\b)nohide(\b|$)/).test(selects[i].className)) selects[i].style.visibility = 'hidden'; 
    }        
    
    var myDOM = new DOMBuilder();
    myDOM.create({
        'div#minimum_quantity_cl' : {
            'class' : 'centeredlayer',
            'p'     : {
                'text'      : "Select at least one item"
            },
            
                    
            'a'     : {
                'href'      : '#',
                'onclick'   : function() { 
                
                    if ($id('minimum_quantity_cl')) $id('minimum_quantity_cl').parentNode.removeChild($id('minimum_quantity_cl'))
                    if ($id('minimum_quantity_overlayer')) $id('minimum_quantity_overlayer').parentNode.removeChild($id('minimum_quantity_overlayer'));

                    document.getElementsByTagName('html')[0].style.height='auto';
                    document.getElementsByTagName('body')[0].style.height='auto';
                    document.getElementsByTagName('body')[0].style.overflow='auto';
                    if (!document.all) document.getElementsByTagName('body')[0].style.overflowY='scroll';
                    var selects = document.getElementsByTagName('select');
                    for (var i=0; i<selects.length; i++) { 
                        if(!(/(^|\b)nohide(\b|$)/).test(selects[i].className)) selects[i].style.visibility  = 'visible'; 
                    }        

                    return false;                        
                },
                'class'     : 'closelayer',
                'text'      : 'close'
            }
        },
            
        'div#minimum_quantity_overlayer' : {
        }
    }, document.body, true);
    
    return false;
}
           

/*****************************************************/

DomLoad.load(function() {

    _h_openoverlaygallery();
    
    var tabs = new _h_tab();
    tabs.init('tablinks','tabpanels');
    
    var cc = new _h_colorchooser();
    cc.init('mainimg', 'colorchooser');
    
    _h_giftcart();   
    _h_addnewrecipient();
    _h_addsendfriend();
    //_h_handleQuantity();

});




