var _ILLY = { };

//$('document').ready(function() {              /* sostituito con l'evento window load */
$(window).load(function() {
var originalValuenl = '',
    originalValuese = '';

    $('#fld_footernewsletter').bind('focus', function() {
        if (originalValuenl == '' || originalValuenl == this.value) {
            originalValuenl = this.value;
            this.value = '';
        }
    });
    $('#fld_footernewsletter').bind('blur', function() {
        this.value = $.trim(this.value)
        if (this.value == '') {
            this.value = originalValuenl;
        }
    });

    $('#fldricerca').bind('focus', function() {
        if (originalValuese == '' || originalValuese == this.value) {
            originalValuese = this.value;
            this.value = '';
        }
    });
    $('#fldricerca').bind('blur', function() {
        this.value = $.trim(this.value)
        if (this.value == '') {
            this.value = originalValuese;
        }
    });

    function iconhover() {
        $('#mainmenu a').each(function() {

            var $this = $(this);
            var $img = $('img', $this);

            //$imgsrc = $img.get(0).src;
            $imgsrc = (('v' == '\v') && (!window.XMLHttpRequest))? $img.get(0).pngsrc : $img.get(0).src;

            var $fn = $imgsrc.match(/^(.+)\./);
            var $fe  = $imgsrc.match(/^.+(\..+)$/);

            (function(a, i, fn, fe) {
                $this.bind('mouseover', function() { /* aggiunta { */
                    if (!(a.parent().hasClass('current'))){
                    //alert([fn, fe].join('-on'));
                        i.attr('src', [fn, fe].join('-on'));

                        if (('v' == '\v') && (!window.XMLHttpRequest)) {
                            var png = i.get(0).src;
                            var gif = png.replace(/^(.+\/).+$/, function(png, url) { return [url, 'transparent.gif?spp'].join(''); });
                            var filter   = ['progid:DXImageTransform.Microsoft.AlphaImageLoader(src="', png,'", sizingMethod="noscale")'].join('');
                            i.attr('src', gif);
                            i.get(0).runtimeStyle.filter = filter;
                        };
                    } /* aggiunta } */

                });

                $this.bind('mouseout', function() {
                    if (!(a.parent().hasClass('current'))) {  /* aggiunta { */
                        i.attr('src', [fn, fe].join(''));
                        if (('v' == '\v') && (!window.XMLHttpRequest)) {
                            var png = i.get(0).src;
                            var gif = png.replace(/^(.+\/).+$/, function(png, url) { return [url, 'transparent.gif?spp'].join(''); });
                            var filter   = ['progid:DXImageTransform.Microsoft.AlphaImageLoader(src="', png,'", sizingMethod="noscale")'].join('');
                            i.attr('src', gif);
                            i.get(0).runtimeStyle.filter = filter;
                        };
                    } /* aggiunta } */
                });
            })($this, $img, $fn[1], $fe[1])
         });
    }

    setTimeout(function() { iconhover(); }, 500);



    /*** keyup action ***/
    var editingKeys = {
        '8'  : 'delete',
        '9' : 'tab',
        '46' : 'canc',
        '37' : 'leftarrow',
        '39' : 'rightarrow'
    };

    $('input.phone').bind('keydown', function(e) {
        var key = e.keyCode;
        var keynum = (key > 47) && (key < 58);
        var keypad  = (key > 95) && (key < 106);  // tastiera numerica
        var admittedchars = (key in {'32': '1', '55' : '1', '107': '1', '109': '1', '110': '1', '111': '1', '190':'1'});
        if (!keynum && !keypad && !admittedchars) {
           return (key in editingKeys);
        }
    });

    $('input.numeric').bind('keydown', function(e) {
        var key = e.keyCode;
        var keynum = (key > 47) && (key < 58);
        var keypad  = (key > 95) && (key < 106);  // tastiera numerica
        if (!keynum && !keypad) {
           return (key in editingKeys);
        }
    });

    $('input.chars').bind('keyup', function(e) {
        _ILLY.notTyping = false;
        var key = e.keyCode;
        var re = /^[a-z\u0027\u00C0-\u00F6\u00F8-\u017E]*$/i;

        var keyspace = (key === 32);

        if (!(key in editingKeys)) {
           var f = this.value;
           this.value = this.value.replace(/[^a-zA-Z\s\u0027\u00C0-\u00F6\u00F8-\u017E]/g,'');
        }
        _ILLY.notTyping = true;
    });

    $('input.chars').bind('keydown', function(e) {
        return !!_ILLY.notTyping;
    });

    _ILLY.notTyping = true;
    /* cart */
});

/* eliminazione scrollbar in gallery e cambio di classe sui link in h3 homepage */
$('document').ready(function() {
    $('.imagegallery ul').each(function() { $(this).addClass('jquery'); });

    var lb = $('#hplancibottom div.cl');
        lb.bind("mouseenter", function() { $("h3", $(this)).addClass('hovered'); });
        lb.bind("mouseleave", function() { $("h3", $(this)).removeClass('hovered'); });
    var lb_half = $('#hplancibottom div.half');
        lb_half.bind("mouseenter", function() { $("h3", $(this)).addClass('hovered'); });
        lb_half.bind("mouseleave", function() { $("h3", $(this)).removeClass('hovered'); });
});
/******************************************************/

_ILLY.accordion = function(id) {

    this.id = null;
    this.opened = 0;
    this.speed = 320;
    this.collapsable = false;
    this.multiopened = false;

    this.acc = {
        'links' : undefined,
        'panels' : undefined
    };

    var _setLinkClass = function(element, _s) {
        var  panelid = element.attr('href');
        /* tab aperto e collassabile */
        if (element.hasClass('current')) {
            if (_s.collapsable ||  (!_s.collapsable && $('a.current', _s.id).length > 1)) {
                 element.removeClass('current');
                $(panelid).slideUp(_s.speed);
            }
        }
        else {
            /* il tab cliccato è chiuso */
            if (!_s.multiopened && $('a.current', _s.id).length > 0) {
                /* se non è consentita la multiapertura ed esiste un tab aperto*/
                    $($('a.current', _s.id).attr('href')).slideUp(_s.speed);
                    (_s['acc']['links']).removeClass('current');
            };

            /* apro l'elemento cliccato */
            element.addClass('current');
            $(panelid).slideDown(_s.speed);
        }
    };

    this.init  = function(options) {

        this.id = id;
        this.speed = options['speed'] || 300;
        this.opened = options['opened'] || -1;
        this.collapsable = options['collapsable'] || false;
        this.multiopened = options['multiopened'] || false;

        var _self = this;

        this['acc']['links'] = $('a.accordionlink',  _self.id);
        this['acc']['panels'] = $('.accordionpanel',  _self.id);


        this['acc']['panels'].hide();
        /* default tab link selected */
        if (this.opened > -1) {
            this['acc']['links'].each(function(i) { $(this).toggleClass('current',  i === _self.opened - 1); });
            $(this['acc']['panels'].get(this.opened-1)).show();
        };

        (this['acc']['links']).bind('click', function() {
            _setLinkClass($(this), _self);
            return false;
        });
    };

};

/* jquery gallery */
_ILLY.simpleGallery = function(idGallery, w) {

    this.currentphoto  = 1;

    /* elemento gallery */
    this.g = {
        'cnt'        : undefined,
        'list'       : undefined,
        'offset'     : 0,
        'width'      : 0
    };

    this.listWidth   = 0;
    this.imagesWidth = [];
    this.actionsCnt  = undefined;

    /* azioni della gallery */
    var _actions    = {
        'prev'  : 'precedente',
        'next'  : 'successiva'
    };

    var _scrollTime = 650;

    var _addGalleryActions = function(self) {
        $('<p class="gallerycontrols"></p>').appendTo(self.g['cnt']);
        self.actionsCnt = $('p.gallerycontrols', self.g['cnt']);

        var addAction = function(label, classname, f) {
                $('<a></a>')
                .html(label)
                .attr('href', 'javascript:void(0)')
                .attr('class', classname)
                .bind('click', f)
                .appendTo(self.actionsCnt);
        };

        /* azioni 'prev' e 'next' */
        addAction(_actions['prev'], 'prev', function(e) { _imageClick('prev', self); return false; });
        addAction(_actions['next'], 'next', function(e) { _imageClick('next', self); return false; });

        /* il link 'previous' e' disabilitato allo stato iniziale */
        $('a.prev', self.actionsCnt).addClass('disabled');

    };


    var _imageClick = function(direction, self) {

        switch (direction) {
            case 'prev' :
                if (self.g['offset'] < 0) {
                      self.g['offset'] += self.imagesWidth[self.currentphoto-2];
                      self.g['list'].animate({ 'left' : self.g['offset'] }, _scrollTime);
                      self.currentphoto--;

                      /* abilito next e disabilito prev se sono all'inizio della gallery */
                      $('a.next', self.actionsCnt).removeClass('disabled');
                      $('a.prev', self.actionsCnt).toggleClass('disabled', self.g['offset'] >= 0);

                };
                break;

            case 'next' :
                if (self.g['offset'] > -(self.listWidth - self.g['width'])) {
                        self.g['offset'] -= self.imagesWidth[self.currentphoto-1];

                        /* lo spostamento della gallery deve considerare la parte restante che puo' essere
                           minore rispetto alla larghezza del <li> successivo. Spostiamo la gallery del
                           valore minimo tra i due. */
                        self.g['list'].animate({ 'left' : -(Math.min(-self.g['offset'], (self.listWidth - self.g['width']))) }, _scrollTime);
                        self.currentphoto++;

                        /* abilito prev e disabilito next se sono alla fine della gallery */
                        $('a.prev', self.actionsCnt).removeClass('disabled');
                        $('a.next', self.actionsCnt).toggleClass('disabled', self.g['offset'] <= -(self.listWidth - self.g['width']));
                };
                break;
        };
    };

    /* funzione init */
    (function(self) {
        if (self.g['cnt'] = $(idGallery)) {
            self.g['list'] = $('ul', self.g['cnt']);
            self.g['list'].addClass('jquery');
            $(self.g['cnt']).css('display', 'block');
            self.g['width'] = self.g['cnt'].width();
           // $(self.g['cnt']).css('display', 'none');

            var $li = $('ul li', self.g['cnt']);
            $li.each(function(i) {
                self.imagesWidth[i] = ($('img', this).innerWidth()>0)? $(this).outerWidth() : (w || 0);
                self.listWidth += self.imagesWidth[i];
            });

            $links = $('ul li a', self.g['cnt']);
            $links.each(function(i) {
                $this = $(this);
                $this.bind('click', function() {
                    $li.removeClass('currentthumb');
                    $(this).parent().addClass('currentthumb');
                });
            });

            //console.log("---"+self.listWidth+ " ---"+self.g['width']);
            if (self.listWidth < self.g['width']) return false;
            self.g['list'].addClass('scrollable');
            $(self.g['list']).css('width', self.listWidth);
            _addGalleryActions(self);
        };
    })(this);
};






/* form styled */
_ILLY._forms = {

    instances : {},

    addRadio  : function(form, options) {
         $('fieldset.jphradiogroup', form).each(function() {
            new _ILLY._forms.inputgroup($(this), $('input[type=radio].jphorms', $(this)), options, 'radio'); /* define radiogroups */
        });
    },

    addCheckbox  : function(form, options) {
        /*  $('fieldset.jphcbgroup', form).each(function() { */
            new _ILLY._forms.inputgroup($(this), $('input[type=checkbox].jphorms', form), options, 'checkbox'); /* define radiogroups */
      /*   }); */
    },

    addTextarea    : function(form, options) {
        $('div.jphorms_textarea', form).each(function(i, el) { new _ILLY._forms.textarea(el, options); });
    },

    addSelect  : function(form, options) {
        $('select.jphorms', form).each(function(i, el) { new _ILLY._forms.select(el, options); });
        /* Outside select click event */
        $('html').bind('click', function() {
            $('div.jfselect').each(function() { $(this).removeClass('opened'); });
        });
    },

    init        : function(form, options) {
        this.addSelect(form, options);
        this.addRadio(form, options);
        this.addCheckbox(form, options);
        this.addTextarea(form, options);
    }
};

        _ILLY._forms.textarea = function(el, options) {



            var wrap = $(el)
                .wrap('<div></div>')
                .parent()
                .addClass('jphtextarea')
                .append('<a class="up" href="#">up</a>')
                .append('<div class="selectscroller"><span>d</span></div>')
                .append('<a class="down"  href="#">down</a>');

            var scroller    = $('.selectscroller span', wrap);
            var height = {
                'wrap'      : wrap.height(),
                'textarea'  : $(el).innerHeight(),
                'scroller'  : $('.selectscroller', wrap).innerHeight()
            };

            var scrolleram   = height.wrap * height.scroller / height.textarea;
            var ratio       = -(height.textarea - height.wrap) / ($('.selectscroller', wrap).height() - scrolleram);
            var inc         = ($('.selectscroller', wrap).height() - scroller.height()) / 25;

            scroller.draggable({
                axis                : 'y',
                containment         : 'parent',
                snap                : true,

                drag                : function(event, ui) {
                    //$(el).animate({ 'top' : ui.position.top * ratio}, 300);
                    $(el).css({ 'top' : ui.position.top * ratio});
                }
            });

            scroller.css({
                'height'    : scrolleram,
                'top'       : 0
            });

            $('.up', wrap).bind('click', function() {
                if ($(el).get(0).offsetTop < 0) {
                    var limit = ($(el).get(0).offsetTop - (inc*ratio) > 0)? 0 : $(el).get(0).offsetTop - (inc*ratio);
                    $(el).css({ 'top' : limit });

                    var limit = (scroller.get(0).offsetTop - inc < 0)? 0 : scroller.get(0).offsetTop - inc;
                    scroller.css({'top' : (scroller.get(0).offsetTop - inc)});
                };
                return false;
            });

            $('.down', wrap).bind('click', function() {
                if (-$(el).get(0).offsetTop < (height.textarea - height.wrap)) {

                    var limit = (Math.round($(el).get(0).offsetTop + (inc*ratio)) < -(height.textarea - height.wrap))
                        ? -(height.textarea - height.wrap) : Math.round($(el).get(0).offsetTop + (inc*ratio));

                    $(el).css({ 'top' : limit });

                    var limit = (scroller.get(0).offsetTop + inc > $('.selectscroller', wrap).height() - scrolleram)
                        ? $('.selectscroller', wrap).height() - scrolleram : scroller.get(0).offsetTop + inc;

                    scroller.css({'top' : limit });
                };
                return false;
            });

        };

        /* Radio and checkbox extension plugin */
        _ILLY._forms.inputgroup = function(fieldset, inputgroup, options, type) {

                var limit = 0;
                var checked = 0;

                var _decheckAll = function() {
                    inputgroup.removeAttr('checked');
                    $('a.jph'+type, fieldset).removeClass('jph'+type+'on');
                };

                inputgroup.each(function() {
                    var $this = $(this);            /* singola radio o checkbox del gruppo */
                    var oldonclick = $(this).get(0).onclick;
                    $this.css('display', 'none');

                    if ((options || {})['checkbox']) {
                        if (typeof options['checkbox']['limit'] !== 'undefined') {
                            limit = options['checkbox']['limit'];
                        }
                    };

                    var linkitem = $('<a href="#"></a>')
                    .addClass('jph'+type)
                    .insertAfter($this)
                    .bind('click', function(e) {

                        if (type === 'radio') {
                            if (!($(this).hasClass('jphradioon'))) {
                                _decheckAll();
                                $this.attr('checked', 'checked'); /* $this è il radio di riferimento */
                                $(this).addClass('jphradioon');
                                $this.change();
                            };
                        }
                        else {
                                if (!$(this).hasClass('jphcheckboxon') && (limit > 0))  {
                                        if (checked < limit) {
                                            ++checked;
                                        } else { return false; }
                                } else { checked--; };

                                $(this).toggleClass('jphcheckboxon');
                                if ($(this).hasClass('jphcheckboxon')) {
                                    $this.attr('checked', 'checked');
                                }
                                else {
                                    $this.removeAttr('checked');
                                };
                                $this.change();

                        };
                        if (!e.triggered) {
                            if (typeof oldonclick === 'function') { oldonclick(); };
                        }

                        return false;
                    });

                    if ($this.attr('checked')) { linkitem.trigger({type : 'click', triggered: true}); };
                    //$this.parent().bind('click', function() { linkitem.trigger({type: 'click', triggered: true}); });
                });
        };

        /* Select extension plugin */
        _ILLY._forms.select = function(el, options) {

            this.nodes = {
                'element'       : undefined, /* select */
                'fragment'      : undefined, /* replacing fragment */
                'caption'       : undefined, /* element with actual value */
                'value'         : undefined,
                'divlist'       : undefined,
                'list'          : undefined,
                'links'         : undefined,
                'listitems'     : undefined,
                'scroller'	    : undefined,
                'scrollerup' 	: undefined,
                'scrollerunder' : undefined
            };


            this.currentListValue   = null;
            this.stepsArray         = [ ];
            this.visibleOptions     = 6;
            this.liHeight           = 0;
            this.scrollerHeight     = 0;
            this.scrollerMaxHeight  = 0;
            this.visibleOptionWindow = {
                'first'	    : 0,
                'last'	    : 0
            };

            /* public methods */

            this.updateListFragment = function() {
                this.nodes.list.empty();
                //if (typeof this.nodes.divlist !== 'undefined') this.nodes.divlist.empty();
                _createListFragment(this);

                var fv = $('option', this.nodes.element)[0];
                if (typeof fv !== 'undefined') {
                    this.nodes.caption.remove();
                    this.nodes.caption = $('<span></span>').html($(fv).html()).appendTo(this.nodes.value);
                }
            };

            this.removeFragment = function(showElement) {
                var showElement = !!showElement || false;
                $(this.nodes.fragment).remove();
                if (showElement) $(this.nodes.element).show();
                delete this;
            };

            this.removeSelect = function() {
                $(this.nodes.element).remove();
                this.removeFragment();
            };

            /*
             * Creates the visible part of customized select
             */
            var _createSelectFragment = function(_s) {

                /* element replacing _s.nodes.fragment */
                _s.nodes.fragment = $('<div><a class="selectvalue"><span></span></a><div class="selectlist"><ul></ul></div></div>');
                _s.nodes.fragment
                    .attr({
                        'id'    : [(_s.nodes.element.id || _s.nodes.element.name), 'jforms'].join('_'),
                        'class' : 'jforms jfselect'
                    })
                    .bind('click', function() {
                            (_s.nodes.value).focus();
                            _s.nodes.caption    = (_s.nodes.fragment).find('.selectvalue span'); // need for country
                            return (!!$(this).hasClass('disabled'))
                                ? false
                                : _toggleSelectVisibility(this, $(this).hasClass('opened'), _s);
                    })
                    .find('a').attr('href', '#').end()
                    .insertAfter(_s.nodes.element);

                /* hide the real element */
                $(_s.nodes.element).hide();

                _s.nodes.caption    = (_s.nodes.fragment).find('span');
                _s.nodes.value      = (_s.nodes.fragment).find('a');
                _s.nodes.list       = (_s.nodes.fragment).find('ul');

                (_s.nodes.fragment).bind(($.browser.mozilla)? "keypress" : "keydown", function(e) {
                    _setArrowsSelection(e.keyCode, _s);
                    if (e.keyCode.toString() !== '9') {
                        e.stopPropagation();
                        e.preventDefault();
                    }
                    else {
                        if (_s.nodes.fragment.hasClass('opened')) {
                            e.stopPropagation();
                            e.preventDefault();
                        }
                    }
                });

                _createListFragment(_s);
            }


            var _createListFragment = function(_s) {
                /* creates values list */
                $('option', _s.nodes.element).each(function(i, option) {

                    var option = $(option);
                    $('<li><a></a></li>').find('a').attr({'rel' : i, 'href' : '#'})

                    /* Add caption */
                        .html(option.html())
                    /* Add click and mouseenter event */
                        .bind('click',      function(e) {
                            var t = !!e.triggered;
                            var previndex = _s.nodes.element.selectedIndex;

                            /* we trigger a 'changed' event if the value has changed from the previous one */
                            var triggerfunction = !(previndex === parseInt($(this).attr('rel'), 10));
                            _addCurrentListValue(this, _s);

                            if (triggerfunction) {
                                $(_s.nodes.element).trigger('changed');

                            };

                            if (!t) {
                                //alert($(this).parent().attr('id'));
                                var ccid = ($(this).parent().attr('id') || '').replace(/^sl/, "#cc");
                                if ($(ccid).length > 0 && _s.nodes.element.id == 'selectcolor') {
                                    return $('a', $(ccid)).trigger({type: 'click', triggered: true});
                                };
                            };

                            _s.nodes.fragment.removeClass('opened');
                            return false;
                        })


                        .bind('mouseenter', function(e) {
                            $('li', _s.nodes.list).removeClass('currentlistvalue');
                            $(this).parent().addClass('currentlistvalue');
                            e.stopPropagation();
                            e.preventDefault();
                        })

                    /* li element */
                    .parent().attr({
                        'id'    : option.attr('id'),
                        'class' : option.attr('class')
                    })
                    .toggleClass('currentlistvalue', i == _s.nodes.element.selectedIndex)
                    .appendTo(_s.nodes.list);
                    option.removeAttr('id');
                });

                /* collect list-items and links */
                    _s.nodes.links      = (_s.nodes.list).find('li a');
                    _s.nodes.listitems  = (_s.nodes.list).find('li');

                /* set current value */
                    _s.currentListValue  = $('.currentlistvalue', _s.nodes.list);
                    _s.nodes.caption.html((_s.currentListValue).find('a').html());
                    if (_s.currentListValue.attr('id')) {
                        _s.nodes.caption.parent().attr('id', "rel_" + _s.currentListValue.attr('id'));
                    };
            };




            var _createScrollersFragment = function(fragment, _s) {

                var listcnt = _s.nodes.list.parent();
                listcnt.addClass('scrollable');
                _s.nodes.divlist = $('<div class="jfscrollers"></div>');
                $(_s.nodes.divlist).insertBefore(_s.nodes.list)
                    .append('<a class="up" href="#">Up</a>')
                    .append('<div class="selectscroller"><a class="scrollup" href="#">over</a><span>Scroller</span><a class="scrollunder" href="#">under</a></div>')
                    .append('<a class="down" href="#">Down</a>');

                /* force li width */
                var ulWidth = $(_s.nodes.list).width();
                $('li', _s.nodes.list).css({ 'width'     : ulWidth });

                _s.liHeight = $(_s.nodes.list).find('li').height();
                var maxHeight = _s.liHeight * _s.visibleOptions;


                /* we set the height of .selectlist element due to a IE6 bug */
                var listheight = ($(_s.nodes.list).height()  >  maxHeight)?  maxHeight: $(_s.nodes.list).height();
                $('.selectlist', fragment).css({
                    'height'    : listheight + 'px' ,
                    'zoom'      : 1
                });

                if (!!$.browser.opera)   $('.selectlist', fragment).css({ 'position' : 'relative' }); /* Opera hack */

                /* calculating the initial offset top of the list */

                var scrollableOptions = _s.nodes.listitems.length - _s.visibleOptions;
                var firstItemVisible = (_s.nodes.element.selectedIndex > (scrollableOptions))
                    ? (scrollableOptions) : _s.nodes.element.selectedIndex;

                _setOptionsWindow(_s, firstItemVisible);

                var initialTop = -(firstItemVisible * _s.liHeight);
                $(_s.nodes.list).css({ 'top' : initialTop + 'px' });

                //console.log('w: (createscrollers) '+ _s.visibleOptionWindow['first'] + ':' + _s.visibleOptionWindow['last']);

                _s.scrollerMaxHeight = listheight - ($('.jfscrollers a', fragment).height() * 2);
                $('.selectscroller', fragment).css({ 'height': _s.scrollerMaxHeight + 'px' });
                var scrollerHeight = _s.visibleOptions * _s.scrollerMaxHeight / _s.nodes.listitems.length;
                _s.scrollerHeight = Math.round(scrollerHeight);

                /* Pixel amount of scroller step */
                var availY = _s.scrollerMaxHeight - _s.scrollerHeight;
                var stepsY = availY / (scrollableOptions);
                    stepsY = ((availY - (Math.ceil(stepsY) * (scrollableOptions-1))) >= 1)? Math.ceil(stepsY) : Math.floor(stepsY);


                /* Creating the scroller Array: stepAmount contains the grid available for scroller position */
                var sopt = 0;
                var laststep = availY - (stepsY * (scrollableOptions-1));

                while (sopt <= scrollableOptions) {
                    _s.stepsArray[sopt] = { };
                    _s.stepsArray[sopt]['step'] = sopt;
                    _s.stepsArray[sopt]['offset'] = (sopt === 0)? 0 : _s.stepsArray[sopt - 1]['offset'] +
                                  ((sopt === scrollableOptions)? laststep : stepsY);
                    sopt++;
                };


                var scrollerTopPos = (_s.nodes.element.selectedIndex >= (scrollableOptions))
                    ? _s.stepsArray[scrollableOptions]['offset'] : _s.stepsArray[_s.nodes.element.selectedIndex]['offset'];

                _s.nodes.scroller = $('.selectscroller span', fragment);
                _s.nodes.scrollerup = $('.selectscroller a.scrollup', fragment);
                _s.nodes.scrollerunder = $('.selectscroller a.scrollunder', fragment);
                _s.nodes.scroller.css({
                    'height' : _s.scrollerHeight + 'px' ,
                    'top'    : scrollerTopPos + 'px'
                }).bind('click', function() { return false; });


                /* draggable scrollbar*/
                $('.selectscroller span', _s.nodes.fragment).draggable({
                    axis                : 'y',
                    containment         : 'parent',
                    drag                : function(event, ui) {

                        (function(s, array) {
                            var _alen = array.length, a = 0, b = 0;
                            if (_alen === 1) {
                                _listPosition(_s, array[0]['step']);
                                _setOptionsWindow(_s, array[0]['step']);
                                _setScrollerLinks(_s);
                                return;
                            };

                            var j = Math.ceil(_alen / 2);
                            if (array[j]['offset'] > s)  { a = 0; b = j; }
                            if (array[j]['offset'] < s)  { a = j; b = _alen; }
                            if (array[j]['offset'] == s) {
                                _listPosition(_s, array[j]['step']);
                                _setOptionsWindow(_s, array[j]['step']);
                                _setScrollerLinks(_s);
                                return;
                            };

                            arguments.callee(s, array.slice(a, b));
                        })(ui.position.top, _s.stepsArray);
                    }
                });


                /* up and down links */

                $('.up', fragment).bind('click', function() {
                     if (_getOptionsWindow(_s) > 0) _doScroll(_s, -1);
                     return false;
                });

                $('.scrollup', fragment).bind('click', function() {
                     if ((gow = _getOptionsWindow(_s)) > 0) {
                        var amount = (gow < _s.visibleOptions)? gow : _s.visibleOptions;
                        _doScroll(_s, -amount);
                     };
                     return false;
                });

                $('.down', fragment).bind('click', function() {
                     if (_getOptionsWindow(_s) < (_s.nodes.listitems.length - _s.visibleOptions)) _doScroll(_s, 1);
                     return false;
                });

                $('.scrollunder', fragment).bind('click', function() {
                     if ((gow = _getOptionsWindow(_s)) < (_s.nodes.listitems.length - _s.visibleOptions)) {
                        var amount = ((gow + _s.visibleOptions) < _s.stepsArray.length)
                            ? (_s.visibleOptions)
                            : (_s.stepsArray.length - gow - 1);
                        _doScroll(_s, amount);
                     };
                     return false;
                });

                /*! Mousewheel bind */
                $(_s.nodes.fragment).bind('mousewheel', function(e, delta) {
                    //$('li', _s.nodes.list).each(function(i, li) { $(li).removeClass('currentlistvalue'); });

                    if (delta > 0) $('.up', _s.nodes.fragment).trigger('click')
                    else $('.down', _s.nodes.fragment).trigger('click');
                    e.stopPropagation();
                    e.preventDefault();
                });
                _setScrollerLinks(_s);
            };



           /* utils */
            var _listPosition = function(_s, index) {
                $(_s.nodes.list).css({ 'top': -index * _s.liHeight });
            };

            var _scrollPosition = function(_s, index) {
                //console.log(_s.stepsArray);
                $('.selectscroller span', _s.nodes.fragment).css({
                    'top'	: _s.stepsArray[index]['offset']
                });
                //console.log('_scrollPosition : ' + index);
            };

            var _setOptionsWindow = function(_s, i) {
                _s.visibleOptionWindow['first'] = i;
                _s.visibleOptionWindow['last']  = i - 1 + _s.visibleOptions;
               //console.log('_setOptionsWindow : ' + _s.visibleOptionWindow['first'] + ':'+ _s.visibleOptionWindow['last']);
            };

            var _getOptionsWindow = function(_s) {
                return _s.visibleOptionWindow['first'];
            };

            var _addOptionsWindow = function(_s, inc) {
                if (_s.visibleOptionWindow['first'] + inc < 0) return;
                if (_s.visibleOptionWindow['last'] + inc > _s.nodes.listitems.length) return;
                _s.visibleOptionWindow['first'] += inc;
                _s.visibleOptionWindow['last']  += inc;
                //console.log('_addOptionsWindow : ' + _s.visibleOptionWindow['first'] + ':'+ _s.visibleOptionWindow['last']);
                return _s.visibleOptionWindow['first'];
            };

            var _isInsideWindow = function(_s, i) {
                return (i >= _s.visibleOptionWindow['first'] && i <= _s.visibleOptionWindow['last']);
            }

            var _doScroll = function(_s, i) {
                var fitem = _addOptionsWindow(_s, i);
                //console.log(i);
                //console.log(fitem);
                _scrollPosition(_s, fitem);
                _listPosition(_s, fitem);
                _setScrollerLinks(_s);
                (_s.nodes.fragment).get(0).focus();
            };

            var _setScrollerLinks = function(_s) {
                var ot = (_s.nodes.scroller).get(0).offsetTop;
                $(_s.nodes.scrollerup).css({ 'height'	: ot });
                $(_s.nodes.scrollerunder).css({ 'height'  : _s.scrollerMaxHeight - _s.scrollerHeight - ot });
            };
            /* utils */




            /* other private methods */
            var _toggleSelectVisibility = function(fragment, opened, _s) {

                $('html').trigger('click');
                $(fragment).toggleClass('opened', !opened);

                if ($(fragment).hasClass('opened')) {
                    if (_s.nodes.listitems.length  >  _s.visibleOptions) {
                        if ($('.jfscrollers', fragment).length === 0) {
                            _createScrollersFragment(fragment, _s);
                        }
                        else {
                             var scrollableOptions = _s.nodes.listitems.length - _s.visibleOptions;
                             var firstItemVisible = (_s.nodes.element.selectedIndex > (scrollableOptions))
                            ? (scrollableOptions) : _s.nodes.element.selectedIndex;

                            _setOptionsWindow(_s, firstItemVisible);
                            _listPosition(_s, firstItemVisible);
                            _scrollPosition(_s, firstItemVisible);
                            _setScrollerLinks(_s);
                        }
                    }
                    else {
                        _s.nodes.list.css({ 'width' : $('.selectlist', fragment).width() });
                    };

        };
        return false;
    };








    var _addCurrentListValue = function(selectedItem, _s, direction) {

        var d = direction || '';
        jQuery.each(jQuery.browser, function(i, val) {
              if (i=="mozilla" && jQuery.browser.version.substr(0,3)=="1.9") {
                 /* for FF2-3.0.x . Due to the xml binding for ellipsis truncation */
                 _s.nodes.caption.remove();
                 _s.nodes.caption = $('<span></span>').html($(selectedItem).html()).appendTo(_s.nodes.value);
              }
              else {
                _s.nodes.caption.html($(selectedItem).html());
              }
        });


        if ($(selectedItem).parent().attr('id')) {
            _s.nodes.caption.parent().attr('id', "rel_" + $(selectedItem).parent().attr('id'));
        };

        var prevsi = _s.nodes.element.selectedIndex;
        //console.log('prev si :'+ prevsi);
        _s.nodes.element.selectedIndex = parseInt($(selectedItem).attr('rel'), 10);
        $('li.currentlistvalue', _s.nodes.fragment).removeClass();
        _s.currentListValue  = $(selectedItem).parent();
        _s.currentListValue.addClass('currentlistvalue');

        var si = _s.nodes.element.selectedIndex;

        /* update list and scroller position */
        if ($('.jfscrollers', _s.nodes.fragment).length > 0) {

            if (!_isInsideWindow(_s, si)) {
                //console.log('si dentro w');
            	if (_isInsideWindow(_s, prevsi)) {
                    //console.log('prevsi dentro w');
                    var inc = (d === 'up')? -1 : 1;
                    _addOptionsWindow(_s, inc);
                    _listPosition(_s, _getOptionsWindow(_s));
                }
            };


            _scrollPosition(_s, _getOptionsWindow(_s));
            _setScrollerLinks(_s);
        };

    };





    /* add keyboards navigation capability */
    var _setArrowsSelection = function(code, _s) {

        var selectedIndex = parseInt(_s.nodes.element.selectedIndex, 10);
        var selectOpened = _s.nodes.fragment.hasClass('opened');
        var ce = $('li.currentlistvalue', _s.nodes.list);

        switch (code.toString()) {

            case "38":
                if (selectedIndex == 0 || !selectOpened) return;

                selectedIndex = ce.parent().children().index(ce);
                //$('li', _s.nodes.list).each(function(i, li) { $(li).removeClass('currentlistvalue'); });
                _addCurrentListValue(_s.nodes.links[selectedIndex - 1], _s, 'up');
                break;

            case "40":
                if (selectedIndex == (_s.nodes.listitems.length - 1) || !selectOpened) return;
                //$('li', _s.nodes.list).each(function(i, li) { $(li).removeClass('currentlistvalue'); });
                selectedIndex = ce.parent().children().index(ce);
                _addCurrentListValue(_s.nodes.links[selectedIndex + 1], _s, 'down');
                break;

            case "10":
            case "13":
                if (selectOpened) {
                    $(_s.nodes.links[selectedIndex]).trigger({ type: 'click', triggered : false });
                }
                else {
                    (_s.nodes.fragment).trigger('click');
                    //_toggleSelectVisibility(_s.nodes.fragment, selectOpened, _s);
                };
                break;
        };
    };





    /* public constructor */

    return {
        init : (function(_s) {
            _s.nodes.element = el;
            //$(_s.nodes.element).bind('changed', function() {});
            _createSelectFragment(_s);
            _ILLY._forms.instances[el.id || el.name] = _s;
        })(this)
    }
};
/* end select */



/* Overlayer */
_ILLY.overlayer = (function() {

    var _oldIE = ($.browser.msie && !(Object.prototype.toString.call(self.JSON) === "[object JSON]"));
    var _html = $('html');

    return {
        open            : function(layerid) {
               var layer = $(layerid);
               var layergroup = layer.parent().parent();
               if (_oldIE)  layergroup = layergroup.parent();

               //alert(_oldIE);

               if(layergroup.parent().get(0)){
								 if (layergroup.parent().get(0).tagName !== 'BODY') {

											if ($('#innermost_layerwrapper').length === 0) {
													$('body').append($(layergroup));
													var layersgroup_wrapper = $('div', layergroup).get(0);
													if (_oldIE)  layersgroup_wrapper = $('div', layersgroup_wrapper).get(0);
													$(layersgroup_wrapper).attr('id',  'innermost_layerwrapper');
											 }
											 else {
													layer.appendTo($('#innermost_layerwrapper'));
													layergroup.remove();
											}
								};
							}

            _html.addClass('overlayer');
            $(layerid).toggleClass('openedlayer');
            if (!$(layerid).hasClass('layer')) $(layerid).addClass('layer');
            $(layerid).removeClass('closedlayer');
            return false;
        },

        close           : function(layerid) {
            _html.removeClass('overlayer');
            $(layerid).toggleClass('openedlayer');
            $(layerid).addClass('closedlayer');
            $(layerid).removeClass('layer');
            $('#objvideo').html('');
            return false;
        }
    }
})();



/* TAB switcher
   @id              DOMnode
   @collapsable     bool    // if true all tabs can be closed, false (default) otherwise
*/
_ILLY.tabSwitcher = function(id)  {

    this.opened = 0;
    this.collapsable = true;
    this.tab = {
        'list'  : undefined,
        'links' : undefined,
        'conts' : undefined
    };

    var _setLinkClass = function(element, _s) {
        if (element.hasClass('tabcurrent') && _s.collapsable) {  // this tab has already opened
            element.removeClass('tabcurrent');
        }
        else {
            (_s['tab']['list']).removeClass('tabcurrent');
            element.addClass('tabcurrent');
        }
    };

    var _openTabPanel = function(li, id, _s) {
        (_s['tab']['conts']).hide();
        if (li.hasClass('tabcurrent')) $(id).show();
    };

    this.init  = function(options) {

        this.opened = options['opened'] || -1;
        this.collapsable = options['collapsable'] || false;
        this['tab']['list']  = $('ul.cl li', id);
        this['tab']['links'] = $('ul.cl a',  id);
        this['tab']['conts'] = $('div.tab',  id);

        var _self = this;

        /* default tab link selected */
        if (this.opened > -1) {
            this['tab']['links'].each(function(i) { $(this).parent().toggleClass('tabcurrent', i === _self.opened - 1); });
            $(this['tab']['conts'].get(this.opened-1)).addClass('tabopened');
        };

        (this['tab']['links']).bind('click', function() {
            _setLinkClass($(this).parent(), _self);
            _openTabPanel($(this).parent(), $(this).attr('rel'), _self);
            return false;
        });
    };

};


/* Funzione Category */

_ILLY.CATEGORIES = {

    tabFilterByClass        : function(listFilters, listCat) {
        var lc = $(listCat);
        var lf = $(listFilters);
        var lf_li    = $('li', lf);
        var lc_li    = $('li', lc);
        var lf_links = $('a', lf);

        lf_links.bind('click', function() {
            if (!($(this).parent().hasClass('tabcurrent'))) {
                lf_li.removeClass('tabcurrent');
                $(this).parent().addClass('tabcurrent');
                location.hash = "#"+$(this).attr('rel');
                showSelectedItems($(this).attr('rel') || '');
            };
            return false;
        });

        var showSelectedItems = function(sel) {
            var hash = location.hash.replace(/^#/, '');

            if  ($('#link_'+hash).length > 0) {
                lf_li.removeClass('tabcurrent');
                $('#link_'+hash).addClass('tabcurrent');
            };

            var selected = sel || hash || $('li.tabcurrent a', lf).attr('rel') || '';
            lc_li.show(0);
            if (selected.length > 0) {
                var notselected = ['li:not(.', selected,')'].join('');
                $(notselected, lc).hide(0);
            };
        };
        showSelectedItems();
    }



};


/* Funzione Ordine */

_ILLY.ORDERS = {

    overlayerGallery        : function(player, idorig) {

        var _constructedgallery = false;
        var _firstopen = true;

        var elements = $('li a', $(idorig));

        var _openMediaFileGallery = function(link) {
            _refreshGallery();
            _firstopen = false;

            var mediafile = link.attr('href');
            var mediatype = mediafile.toLowerCase().replace(/^(.+)\./,'');

            if ($('#mediatitle').length > 0) {
                $('#mediatitle').html(link.attr('title'));
            }
            switch(mediatype) {

                case 'jpg'   :
                    $('#objphoto img').attr('src', mediafile);
                    //$('#objphoto').css('visibility', 'visible');
                    $('#objphoto').css('display', 'block');
                    break;

                case 'flv'   :
                    $('#objvideo').flash({
                        swf         : player,
                        height      : "306",
                        width       : "544",
                        flashvars       : {
                    	   videoUrl        : mediafile
                        },
                        params       : {
                    	   allowFullScreen : true
                        }
                    });

                    $('#objvideo').css('display', 'block');
                    break;
            };
        };

        /* prima visualizzazione della gallery */
        var _constructGallery = function() {
            $('<div id="overlayergalleryzoom"></div>')
                .appendTo($('#overlayergallery'));
            $('<div></div>')
                .attr({'id' : 'overlayergallerythumbs', 'class' : 'imagegallery'})
                .appendTo($('#overlayergallery'));

            if ($('#productsgallery ul').length > 0) {
                $('#productsgallery ul').clone(true)
                    .appendTo($('#overlayergallerythumbs'));

                $('#overlayergallerythumbs ul')
                    .removeClass('jquery')
                    .removeClass('scrollable');

                    if ($('#overlayergallerythumbs li').length < 8) {
                        $('#overlayergallerythumbs ul').css({ 'width' : '100%'});
                    };

            } else {
                $('#overlayergallerythumbs').remove();
            }
            /* refresh media object */
            _refreshGallery();


            /* add click event */
            if ($('#overlayergallerythumbs').length > 0) {
                $('#overlayergallerythumbs a').bind('click', function() {
                    _openMediaFileGallery($(this));  return false;
                });
            }
        };

        var _refreshGallery = function() {

            var $ct = $(idorig + ' li.currentthumb');
            var pos = 0;

            if ($ct.length > 0) {
                var $pr = $ct.parent().children();
                pos = $pr.index($ct);
           };

            $('#overlayergallerythumbs ul li').removeClass('currentthumb');
            var $covl = $('#overlayergallerythumbs ul li').get(pos);
            $($covl).addClass('currentthumb');
            //$($covl).addClass('currentthumb');

            $('#overlayergalleryzoom')
                .empty();
            $('<div id="objvideo"></div><div id="objphoto"><img src="#" /></div>')
                .appendTo($('#overlayergalleryzoom'));
            $('#overlayergalleryzoom div')
                .css('display', 'none');
        };


        (function() {
            if ($('#overlayergallery').length === 0) return;

            _constructGallery();

            $(elements).bind('click', function() {
                _openMediaFileGallery($(this));
                _ILLY.overlayer.open('#overlayergallery');
                if (!_constructedgallery) {
                    _constructedgallery = true;
                    new _ILLY.simpleGallery('#overlayergallerythumbs');
                };
                return false;
            });
        })();


    },


    /*****************************/

    overlayerMultiGallery       : function(player, list) {

        var elements = $('li a', $(list));

        var _openMediaFileGallery = function(link) {

            var mediafile = link.attr('href');
            var mediatype = mediafile.toLowerCase().replace(/^(.+)\./,'');

            $('#objphoto').css('display', 'none');
            $('#objvideo').css('display', 'none');

            switch(mediatype) {

                case 'jpg'   :
                    $('#objphoto img').attr('src', mediafile);
                    $('#objphoto').css('display', 'block');
                    break;

                case 'flv'   :
                    $('#objvideo').flash({
                        swf         : player,
                        height      : "306",
                        width       : "544",
                        flashvars       : {
                            dataPath        : mediafile
                        }
                    });

                    $('#objvideo').css('display', 'block');
                    break;
            };

        };

        /* prima visualizzazione della gallery */
        var _constructGallery = function() {
            $('<div id="overlayergalleryzoom"></div>')
                .appendTo($('#ordergallerylayercnt'));
            $('<div></div>')
                .attr({'id' : 'overlayergallerythumbs', 'class' : 'imagegallery'})
                .appendTo($('#ordergallerylayercnt'));

            if ($(list).length > 0) {
                $(list).clone(true).appendTo($('#overlayergallerythumbs'));
                /* $('#overlayergallerythumbs ul')
                    .removeClass('jquery')
                    .removeClass('scrollable'); */
            } else {
                $('#overlayergallerythumbs').remove();
            };

            $('<div id="objvideo"></div><div id="objphoto"><img src="#" /></div>')
                .appendTo($('#overlayergalleryzoom'));
            $('#overlayergalleryzoom div')
                .css('display', 'none');

            /* add click event */
            if ($('#overlayergallerythumbs').length > 0) {
                $('#overlayergallerythumbs a').bind('click', function() {
                    _openMediaFileGallery($(this));  return false;
                });

                new _ILLY.simpleGallery('#overlayergallerythumbs', 81);
                $($('#overlayergallerythumbs a')[0]).trigger('click');
            }
        };

        (function() { _constructGallery(); })();


    },

    /*****************************/


    togglerDescription      : function() {
        (function() {
            $('a.toggledescription').each(function() {

                var _descriptioncnt = $(this).parent();
                var _toggledPars = $('p:not(.excerpt)', _descriptioncnt);

                if ($(_toggledPars).length < 1) {
                    $(this).css('display', 'none');
                }

                $(this).bind('click', function() {
                    var el = $(this);
                    if (el.hasClass('opened')) {    /* chiusura */
                        el.removeClass('opened');
                        el.html(this.rel);
                        _toggledPars.css({'display': 'none'});
                    }
                    else {                          /* apertura */
                        el.addClass('opened');
                        el.html(this.rev);
                        _toggledPars.css({'display': 'block'});
                    };
                    return false;
                });
            });
        })();
    },


    colorizer               : function() {

        if ($('#colorchooser').length == 0 || $('#currentimage').length == 0) {
            return false;
        };

        var li = $('#colorchooser li');
        var links = $('#colorchooser li a');

        var _chooseListItemByColor = function(link, t) {
            if (t) return false;
            idli = link.parent().attr('id').replace(/^cc/, "#sl");
            $('a', $(idli)).trigger({type: 'click', triggered: true});
        };

        _selectColorFromList = function(link) {
            li.each(function() { $(this).removeClass('selected') });
            link.parent().attr('class', 'selected');
        }

        var _openColorImage = function(link) {
            $('#currentimage').css({ 'visibility' : 'hidden'});
            $('#currentimage').bind('load', function() { this.style.visibility = 'visible'; });
            $('#currentimage').attr('src', link.href);
            if ($('#colorchoosed')[0]) {
                $('#colorchoosed').html($(link).html());
            };
        };

        links.each(function() {
            $(this).bind('click', function(e) {
                var t = !!e.triggered;
                _selectColorFromList($(this));
                _chooseListItemByColor($(this), t);
                _openColorImage(this);
                return false;
            });
        });

    },


    passThrough             : function(el, ev, oldvalue, newvalue) {

    },

    changeQuantity          : function(options) {

            var oldvalue = 0;

            var _constructActions = function(options) {

                /** quantity field **/
                $('input.quantityfield').each(function() {
									
                    var minvalue = parseInt($(this).attr('accept'), 10) || 0;
                    var qtyfield = $(this);
                    var qtycont  = qtyfield.parent();
                    $('<p class="actions"></p>').appendTo(qtycont);

                    $('<a href="#" class="incbutton">inc</a>')
                    .bind('click', function() {
                    	var readOnly = qtyfield.attr('readonly');
                    	if(!readOnly){
		                    var qty = parseInt(qtyfield.attr('value'), 10);
	                        if (isNaN(qty)) {
	                            qty = 0;
	                            qtyfield.attr('value', '0');
	                        };
	                        var oldqty = qty;
	                        if (qty < 999) qtyfield.attr('value', ++qty);
	                        _ILLY.ORDERS.passThrough(qtyfield, 'inc', oldqty, qty);
	                   	}
                        return false;
                    })
                    .appendTo($('p.actions',  qtycont));

                    $('<a href="#" class="decbutton">dec</a>')
                    .bind('click', function() {
                        var readOnly = qtyfield.attr('readonly');
                    	if(!readOnly){
		                    var qty = parseInt(qtyfield.attr('value'), 10);
	                        if (isNaN(qty)) {
	                            qty = 0;
	                            qtyfield.attr('value', '0');
	                        };
	                        var oldqty = qty;
	                        if (qty > minvalue) qtyfield.attr('value', --qty);
	                        _ILLY.ORDERS.passThrough(qtyfield, 'dec', oldqty, qty);
	                 	}
                        return false;
                    })
                    .appendTo($('p.actions',  qtycont));

                    /*** keyup action ***/
                    var editingKeys = {
                        '8'  : 'delete',
                        '9' : 'tab',
                        '46' : 'canc',
                        '37' : 'leftarrow',
                        '39' : 'rightarrow'
                    };

                    $(this).bind('keyup', function(e) {
                        var key = e.keyCode;
                        var keynum = (key > 47) && (key < 58);
                        var keypad  = (key > 95) && (key < 106);
                        if (keynum || keypad) {   
                            oldvalue = this.value;
                        };
                        _ILLY.ORDERS.passThrough(qtyfield, 'key', oldvalue, this.value);
                    });

                    $(this).bind('keydown', function(e) {
                        var key = e.keyCode;
                        var keynum = (key > 47) && (key < 58);
                        var keypad  = (key > 95) && (key < 106);  // tastiera numerica
                        if (!keynum && !keypad) {
                           _ILLY.ORDERS.passThrough(qtyfield, 'key', oldvalue, this.value);
                           return (key in editingKeys);
                        }
                        
                    });
                });

                /** add item links **/
                $('.additem').bind('click', function() {
              
                    var rel = $(this).attr('rel');
                    var arrayrel = rel.split(/,/);

                    if (arrayrel.length === 1) {
                        var fieldref = ["#", $.trim(arrayrel[0])].join('');
                        if  ($(fieldref)) {
                            var value = parseInt($(fieldref).attr('value'), 10) || 0;
                            var minvalue = parseInt($(fieldref).attr('accept'), 10);
                            if (value < minvalue) {
                                if ($('#layerqty_' + rel))  _ILLY.overlayer.open('#layerqty_' + rel);
                                return false;
                            };
                            if (document.getElementById('frequenza').selectedIndex === 0) {
                                if ($('#layer_freq'))  _ILLY.overlayer.open('#layer_freq');
                                return false;
                            };
                            
                        };
                    }
                    else {
                        var totalAmount = 0;
                        var singleItems = 0;
                        $(arrayrel).each(function(i) {
                            var fieldref = ["#", $.trim(arrayrel[i])].join('');
                            if  ($(fieldref)) {
                                var thisqty = parseInt($(fieldref).attr('value'), 10) || 0;
                                totalAmount += thisqty;
                                if (thisqty !== 0) ++singleItems;
                            };
                        });
												
	
                        if ((totalAmount < options.minquantity) || (singleItems < options.minitems)) {
                                if ($('#layerqty'))  _ILLY.overlayer.open('#layerqty');
                                return false;
                        };
                        
                        if (document.getElementById('frequenza').selectedIndex === 0) {
                            if ($('#layer_freq'))  _ILLY.overlayer.open('#layer_freq');
                            return false;
                        };
                    };
                });


            };

            (function(options) {
                _constructActions(options);
            })(options || { 'minquantity': 1, 'minitems' : 1});
    }
};


_ILLY.CART =  (function() {

    var
        _lc = null,
        _table = null,
        _removing = false;

    return {

        passThrough : function(link) {
            setTimeout(function() { location.href = link.href;}, 2000);
        },

        isOpen : function() {
            if ($('#layercart').length > 0) {
                 _lc = $('#layercart');
                 return _lc.css('display').toString().toLowerCase() != 'none'
            }
        },

        close : function() {
            _lc.css('display', 'none');
            return false;
        },

        open : function(graceful, frozen) {

            var graceful = !!graceful || false;
            var frozen = frozen || false;

            if ($('#layercart').length > 0) {

                 _lc = $('#layercart');

                 if (!graceful) {
                     _lc.css('display', 'block');
                 }
                 else {
                    if (_lc.css('display') != 'block') {
                        _lc.css({
                            'opacity': '0',
                            'display': 'block'
                        });

                        _lc.animate({'opacity': '1'}, 800);
                    }
                 };

                 var cartheight = ($('#productscartlist').height() <=  230) ? $('#productscartlist').height() : 230;
                 $('#productscartlist').css({ 'height' : cartheight });
                _table = $('table', _lc);
                var htable = _table.height();

                if ((htable > 240) && ($('#scrollbarcartcont').length === 0)) {
                    /* scrollbar */
                    $('<div><a href="#" id="cartupbt">Up</a><p><span>d</span></p><a href="#" id="cartdwbt">Up</a></div>')
                        .attr('id', 'scrollbarcartcont')
                        .appendTo($(_lc));


                        var scroller    = $('span', $('#scrollbarcartcont'));
                        scroller.css({
                            'height' : 240*218/htable,
                            'top'      : 0
                        });

                        var ratio = -(htable - 240)/(218-scroller.height());
                        var step = ((htable - 240)/80);
                        step = (220-scroller.height()) /step;

                       scroller.draggable({
                            axis                : 'y',
                            containment    : 'parent',
                            snap                : true,

                            stop                : function(event, ui) {
                                var realpos =  ui.position.top;
                                _table.css({ 'margin-top' :  realpos * ratio}, 120);
                            }
                    });


                   $('#cartdwbt').bind('click', function() {
                            var ot_scroller = parseInt($(scroller).css('top'), 10);
                            var ot_table = parseInt($(_table).css('margin-top'), 10);

                            /* console.log(ot_table);
                            console.log(-(htable - 240)); */
                            if  (ot_table > -(htable - 240)) {
                                scroller.css('top', Math.floor(ot_scroller + 5));
                                _table.css('margin-top', ot_table + (5.1*ratio));
                            };
                            return false;
                    });

                    $('#cartupbt').bind('click', function() {
                            var ot_scroller = parseInt($(scroller).css('top'), 10);
                            var ot_table = parseInt($(_table).css('margin-top'), 10);
                            if  (ot_table < 0) {
                                scroller.css('top', Math.floor(ot_scroller -5));
                                _table.css('margin-top', ot_table - (5.1*ratio));
                            };
                            return false;
                    });


                    $('.removeprod', _lc).bind('click', function() {
                        if (!_removing) {
                            _removing = true;
                            var $this = $link = $(this);
                            while ($this.get(0).tagName.toLowerCase() !== 'tr') { $this = $this.parent(); };
                            $this.remove();

                            if ($('tr', _lc).length < 3) {
                                $('#productscartlist').css({ 'height' : 'auto' });
                                $('#scrollbarcartcont').remove();
                            };

                            var _h = ($('#layercart_inner').get(0).offsetHeight - 5) + 'px';

                            $('<div id="waitremoval"></div>')
                            .css({
                                'top' : '0',
                                'width' : '353px',
                                'height' : _h,
                                'z-index' : '3000'
                            })
                            .appendTo($('#layercart_inner'));

                            //_ILLY.CART.passThrough($link.get(0));
                            _removing = false;
                        };
                        return false;
                    });


                };

            };


            //if (frozen) $('<div id="waitremoval"></div>').appendTo($('#productscartlist'));
            if (frozen) {
                var _h = ($('#layercart_inner').get(0).offsetHeight - 5) + 'px';
                $('<div id="waitremoval"></div>')
                .css({
                    'top' : '0',
                    'width' : '353px',
                    'height' : _h,
                    'z-index' : '3000'
                }).appendTo($('#layercart_inner'));
            }
            return false;
        }
    }

})();

/* subscription (condivide le stesse funzionalità di orders) */
_ILLY.SUBSCRIPTION = _ILLY.ORDERS;

/* copia dei campi */
_ILLY.copyfields =  function(trigger, fields) {

    function copy() {


        if (!!trigger.checked) {
            for (f in fields) {
                if ($(f)[0].tagName.toLowerCase() == 'input') {
                    $(fields[f])[0].value = $(f)[0].value;
                    $(fields[f]).attr('readonly', 'readonly');
                    //$(fields[f]).addClass('disabled');
                };

                if ($(f)[0].tagName.toLowerCase() == 'select') {
                    $(fields[f])[0].selectedIndex = $(f)[0].selectedIndex;
                    if ($(f + '_jforms').length > 0) {

                        if (jQuery.browser.mozilla) {
                             var dest = $('.selectvalue span', fields[f] + '_jforms');
                             /* for FF2-3.0.x . Due to the xml binding for ellipsis truncation */
                             $(dest).remove();
                             $('<span></span>').html($('span', f + '_jforms').html()).appendTo($('.selectvalue', fields[f] + '_jforms'));
                        }
                        else {
                            $('span', fields[f] + '_jforms').html($('span', f + '_jforms').html());
                        }
                        //$(fields[f] + '_jphorms').addClass('disabled');
                    };
                };


            }
        }
        else {
            for (f in fields) {
                if ($(f)[0].tagName.toLowerCase() == 'input') {
                    $(fields[f])[0].value = '';
                    $(fields[f]).removeAttr('readonly');
                    //$(fields[f]).removeClass('disabled');
                };
                if ($(f)[0].tagName.toLowerCase() == 'select') {
                    $(fields[f])[0].selectedIndex = 0;
                    if ($(f + '_jforms').length > 0) {

                        if (jQuery.browser.mozilla) {
                             var dest = $('.selectvalue span', fields[f] + '_jforms');

                             $(dest).remove();
                             $('<span></span>')
                                .html( $('.selectvalue span', fields[f] + '_jforms').html($(fields[f])[0].options[0].innerHTML))
                                .appendTo($('.selectvalue', fields[f] + '_jforms'));
                        }
                        else {
                            $('.selectvalue span', fields[f] + '_jforms').html($(fields[f])[0].options[0].innerHTML);
                        }

                        $('.selectvalue span', fields[f] + '_jforms').html($(fields[f])[0].options[0].innerHTML);
                        //$(fields[f] + '_jphorms').removeClass('disabled');
                    };
                };

            }
        };
    };

    $('#country').bind('changed', function() { copy(); });
    $('input', $('#dati_fatturazione')).bind('blur', function() { copy(); });
    $('select', $('#dati_fatturazione')).bind('change', function() { copy(); });
    copy();
};


_ILLY.closeForm = function(id) { $('form.profile', $(id)).each(function(i, el) { $(el).css('display', 'none'); }); };
_ILLY.openForm = function(id) {
    var i = $('select.nicknames', $(id))[0].selectedIndex || 0;
    $($('form.profile', $(id))[i]).css('display', 'block');
};


(function($) {

    var types = ['DOMMouseScroll', 'mousewheel'];

    $.event.special.mousewheel = {
        setup: function() {
            if ( this.addEventListener )
                for ( var i=types.length; i; )
                    this.addEventListener( types[--i], handler, false );
            else
                this.onmousewheel = handler;
        },

        teardown: function() {
            if ( this.removeEventListener )
                for ( var i=types.length; i; )
                    this.removeEventListener( types[--i], handler, false );
            else
                this.onmousewheel = null;
        }
    };

    $.fn.extend({
        mousewheel: function(fn) {
            return fn ? this.bind("mousewheel", fn) : this.trigger("mousewheel");
        },

        unmousewheel: function(fn) {
            return this.unbind("mousewheel", fn);
        }
    });


    function handler(event) {
        var args = [].slice.call( arguments, 1 ), delta = 0, returnValue = true;

        event = $.event.fix(event || window.event);
        event.type = "mousewheel";

        if ( event.wheelDelta ) delta = event.wheelDelta/120;
        if ( event.detail     ) delta = -event.detail/3;

        // Add events and delta to the front of the arguments
        args.unshift(event, delta);

        return $.event.handle.apply(this, args);
    }

})(jQuery);

