if (typeof _H.DIESEL !== 'object') _H.DIESEL = {};

_H.DIESEL.Gallery   = function() {

    var _galleryId      =  null;
    var _galleryNodes   = [];
    var _galleryCubes   =  28;

    var _effectLinks    = [];
    var _insStructure   = {};
    var _DOMbuilder     = new _H.DOM.Builder();

    var fromPt          = '';
    var toPt            = '';
    var xmlHttpObj      = null;

    return {

        enumerateCube       : function() {
            for (var i=1; i<= _galleryNodes.length; i++) {
                var cube = _galleryId.getElementsByTagName('div')[i-1];
                if (cube.getElementsByTagName('a')[0])
                    cube.getElementsByTagName('a')[0].rel = i;
            }
        },

        disableCube       : function(exception) {
            for (var i=1; i<= _galleryNodes.length; i++) {
                var cube = _galleryId.getElementsByTagName('div')[i-1];
                if (cube.getElementsByTagName('a')[0]) {
                    var nestedlink = cube.getElementsByTagName('a')[0];
                    if (exception !== parseInt(nestedlink.rel, 10)) {
                        _H.DOM.addClass(cube, 'disabled');
                        nestedlink.onclick = function () { return false; }
                    }
                }
            }
        },

        enableCubes      : function(exception) {
            for (var i=1; i<= _galleryNodes.length; i++) {
                var cube = _galleryId.getElementsByTagName('div')[i-1];
                if (cube.getElementsByTagName('a')[0]) {
                        _H.DOM.removeClass(cube, 'disabled');
                }
            }
        },


        setLinkCubes        : function() {

            var _that = this;

            var links = _galleryId.getElementsByTagName('a');
            for (var i=0; i<links.length; i++) {
                if (links[i].className === 'linkeffect') {
                    _effectLinks[_effectLinks.length] = links[i];
                }
            }

            for (var i=0; i<_effectLinks.length; i++) {
                _effectLinks[i].onclick = (function(i) {
                    return function() {

                        var _tl = this;
                        var rel = this.rel;
                        var title = this.title;
                        var storeLink = this.href;
                        var nameItem = this.title;
                        _that.disableCube(rel);

                        /* positioning big Cube */
                        var order = parseInt(this.rel, 10);
                        var classY = (order <= _galleryCubes/2)? 'top' : 'bottom'
                        var classX = (order in {
                            '6' : 6,    '7' : 7,
                            '13': 13,   '14': 14,
                            '20': 20,   '21': 21,
                            '27': 27,   '28': 28
                        })? 'right' : 'left';

                        /* select bigger image */
                        var img = this.getElementsByTagName('img')[0];
                        imgPath = img.src.replace(/^(.+\/).+$/, function(url, uri) { return uri });
                        imgName = img.src.replace(/^.+\//,'')
                        var imgNew = [imgPath, "zoom/", imgName].join('');
                        var imgMagnified = [imgPath, "zoom/z", imgName].join('');

                        /* append the whole DOM structure into parent DIV */
                        var parentDiv = this.parentNode.parentNode;
                        var insStructure  = {};
                        parentDiv.className = 'current';


                        if (!(/#$/).test(storeLink)) {
                            insStructure = {
                                "div"   : {

                                    "id"    : "fullzoom",

                                    "ins": {
                                        "id"    : "currentins",
                                        "class" : [classY, classX].join(" "),
										
										"p~1"   : {
                                            "id"            : "color_bar",
                                        },

                                        "p~2"   : {
                                            "id"     : "store_zoom",
                                            "a"      : {
                                                "href"      : storeLink,
                                                "text"      : "Buy",
												"target"	: (typeof targetBlank === "undefined")? "_self":"_blank",
                                                "onclick"   : function() {
                                                    if (pageTracker) {
                                                        pageTracker._trackPageview(["/track/", fromPt,"_to_", toPt].join(""));
                                                    }
                                                }
                                            },

                                            "span" : {
                                                "text"      : nameItem
                                            }
                                        },

                                        "img~1"   : {
                                            "id"        : "current_zoom",
                                            "class"     : "dragme",
                                            "src"       : "",
                                            "onerror"   : function() { this.style.display = 'none'; },
                                            "longdesc"  : imgMagnified
                                        },

                                        "span"          : {
                                            "id"        : "cntdetail"
                                        },


                                        "a~1"   : {
                                            "id"            : "close_zoom",
                                            "text"          : "Close",
                                            "onclick"       : function() {
                                                return _that.closeBigCube(rel, _tl);
                                            }
                                        }

                                    }
                                }
                            }
                        }
                        else {
                            insStructure = {
                                "div"   : {

                                    "id"    : "fullzoom",


                                    "ins": {
                                        "id"    : "currentins",
                                        "class" : [classY, classX].join(" "),
										
										"p~1"   : {
                                            "id"            : "color_bar",
                                        },


                                        "p~2"   : {
                                            "id"            : "store_zoom",
                                            "text"          : nameItem
                                        },

                                        "img~1"   : {
                                            "id"        : "current_zoom",
                                            "class"     : "dragme",
                                            "src"       : "",
                                            "onerror"   : function() { this.style.display = 'none'; },
                                            "longdesc"  : imgMagnified
                                        },

                                        "span"          : {
                                            "id"        : "cntdetail"
                                        },


                                        "a~1"   : {
                                            "id"            : "close_zoom",
                                            "text"          : "Close",
                                            "onclick"       : function() {
                                                return _that.closeBigCube(rel, _tl);
                                            }
                                        }

                                    }
                                }

                            }
                        }

                        _DOMbuilder.create(insStructure).append('after', 'gallerycnt');

                        //_H.DOM.$('mgnloading').style.display = 'none';
                        _H.DOM.$('fullzoom').style.border = '1px #e9e9e9 solid';
                        _H.DOM.$('fullzoom').style.filter = 'alpha(opacity=100)';


                        /* moo effect */
                        var cubeEffect      = new Fx.Morph(_H.DOM.$('fullzoom'), {
                                duration: 450, wait: true, transition: Fx.Transitions.Quad.easeOut
                        });
                        var imgEffect       = new Fx.Morph(_H.DOM.$('current_zoom'), { duration: 600 });
                        var imgPanning      = new Fx.Morph(_H.DOM.$('current_zoom'), { duration: 4000, transition: Fx.Transitions.Quad.easeOut });
						var imgPanningFast      = new Fx.Morph(_H.DOM.$('current_zoom'), { duration: 2000, transition: Fx.Transitions.Quad.easeOut });


                        cubeEffect.start({
                            'width'     : '978px',
                            'height'    : '565px',
                            'backgroundColor'   : '#fff'
                        }).chain(
                            function() {
                                _H.DOM.$('fullzoom').setStyle('opacity', 1);
                                _H.DOM.$('current_zoom').setStyle('bottom', 0);
                                _H.DOM.$('current_zoom').setStyle('display', 'block');
                                _H.DOM.$('current_zoom').setStyle('visibility', 'hidden');

                                _H.DOM.$('store_zoom').style.display = 'block';
                                _H.DOM.$('close_zoom').style.display = 'block';

                                //if (!(Browser.Engine.trident)) {
                                //}

                                _H.DOM.$('current_zoom').onload = function() {

                                    //imgEffect.start({'opacity': '1' });


                                    var ww = (this.width - 978) * -1;
                                    var hh = (this.height - 536) * -1;

                                    this.style.left = (parseInt(ww/2, 10))+'px';
                                    //this.style.top  = (parseInt(ww/2, 10))+'px'; // per visualizzare lo zoom centrato
                                    //this.style.top  = '0';                        // per visualizzare lo zoom in alto


                                    if (this.height > 650) { // se c'è abbastanza da scrollare....

                                        this.style.top  = [hh, 'px'].join('');        // per visualizzare lo zoom in basso
                                        _H.DOM.$('current_zoom').setStyle('visibility', 'visible');

                                        imgPanning.start({'top': '29px' }).chain(function() {
                                            if (!(Browser.Engine.trident)) {
                                                $$('#current_zoom').each(function(drag){
                                                    new Drag(drag, {
                                                        onDrag: function(el){
                                                            if (el.offsetTop < hh) el.style.top = hh+'px';
                                                            if (el.offsetTop > 0) el.style.top = el.offsetTop+'px';
															if (el.offsetTop > 29) el.style.top = '29px';
                                                            if (el.offsetLeft < ww) el.style.left = ww + 'px';
                                                            if (el.offsetLeft > 0) el.style.left = '0px';
                                                        }
                                                    });
                                                });
                                            }
                                        });
                                    }
                                    else { // ci sono meno di 100 px da scrollare
									
										this.style.top  = [hh, 'px'].join('');        // per visualizzare lo zoom in basso
											_H.DOM.$('current_zoom').setStyle('visibility', 'visible');
	
											imgPanningFast.start({'top': '29px' }).chain(function() {
												if (!(Browser.Engine.trident)) {
													$$('#current_zoom').each(function(drag){
														new Drag(drag, {
															onDrag: function(el){
																if (el.offsetTop < hh) el.style.top = hh+'px';
																if (el.offsetTop > 0) el.style.top = el.offsetTop+'px';
																if (el.offsetTop > 29) el.style.top = '29px';
																if (el.offsetLeft < ww) el.style.left = ww + 'px';
																if (el.offsetLeft > 0) el.style.left = '0px';
															}
														});
													});
												}
											});
									
                                       /* this.style.top = '29px';        // per visualizzare lo zoom in alto
                                        _H.DOM.$('current_zoom').setStyle('visibility', 'visible');

                                        if (!(Browser.Engine.trident)) {
                                            $$('#current_zoom').each(function(drag){
                                                new Drag(drag, {
                                                    onDrag: function(el){
                                                        if (el.offsetTop < hh) el.style.top = hh+'px';
                                                        if (el.offsetTop > 0) el.style.top = el.offsetTop+'px';
														if (el.offsetTop > 29) el.style.top = '29px';
                                                        if (el.offsetLeft < ww) el.style.left = ww + 'px';
                                                        if (el.offsetLeft > 0) el.style.left = '0px';
                                                    }
                                                });
                                            });
                                        }*/
                                    }
                                };

                                _H.DOM.$('current_zoom').src = _H.DOM.$('current_zoom').longDesc;

                            }
                        );

                        return false;

                    }
                })(i);
            }

        },


        openMagnifiedImage  : function(srcMagnified) {

            var _that = this;

            _H.DOM.$('cntdetail').style.display  = 'block';
            _H.DOM.$('current_zoom').style.visibility = 'hidden';

            // overwrite zoom btn handler
            var zoombtn = _H.DOM.$('mgnbutton_closed');
            _H.DOM.$('mgnbutton_closed').id = 'mgnbutton_opened';
            zoombtn.onclick = function() {
                return _that.closeMagnifiedImage();
            };

            return false;
        },

        closeMagnifiedImage  : function(node) {
            var _that = this;

            _H.DOM.$('current_zoom').style.visibility = 'visible';
            _H.DOM.$('cntdetail').style.display  = 'none';

            // overwrite zoom btn handler
            var zoombtn = _H.DOM.$('mgnbutton_opened');
            _H.DOM.$('mgnbutton_opened').id = 'mgnbutton_closed';
            zoombtn.onclick = function() {
                return _that.openMagnifiedImage();
            };

            return false;
        },



        closeBigCube        : function(i, tl) {

            var _that = this;
            /* moo effect */
            var cubeEffect      = new Fx.Morph(_H.DOM.$('fullzoom'), {
                    duration: 450, wait: true, transition: Fx.Transitions.Quad.easeOut
            });

            var imgTobeFaded    = _H.DOM.$('current_zoom');
            var imgEffect       = new Fx.Morph(imgTobeFaded, { duration: 600 });


            //_H.DOM.$('currentins').style.backgroundImage  = 'none';

            imgEffect.start({
                'backgroundColor'   : '#fff'
                //'opacity'     : '0'
            }).chain(
                function() {
                    _H.DOM.$('store_zoom').style.display = 'none';
                    _H.DOM.$('close_zoom').style.display = 'none';
                    _H.DOM.$('current_zoom').style.display = 'none';
                    cubeEffect.start({
                        'width'     : '0',
                        'height'    : '0'
                    }).chain(function() {
                        _H.DOM.$('fullzoom').style.border = '0';
                        //alert(tl.rel);

                        var parentDiv = tl.parentNode.parentNode;
                        //parentDiv.removeChild(_H.DOM.$('currentins'));
                        _H.DOM.removeClass(parentDiv, 'current');
                        _that.enableCubes();
                        _that.setLinkCubes();
                    })
                }
            );


            return false;
        },


        init                : function(idg) {

            if (!_H.DOM.$(idg)) return;

            _galleryId = _H.DOM.$(idg);
            _galleryNodes = _galleryId.getElementsByTagName('div');

            /* enumerate Cubes */
            this.enumerateCube();

            /* set Cube links */
            this.setLinkCubes();

        },

        fileexists      : function(file) {

            var size = 0;
            if (!(xmlHttpObj)) {
                if (typeof XMLHttpRequest != "undefined") {
                    xmlHttpObj = new XMLHttpRequest();
                }
                else {
                    try {
                        xmlHttpObj = new ActiveXObject("Msxml2.XMLHTTP");
                    } catch (e) {
                        try {
                            xmlHttpObj = new ActiveXObject("Microsoft.XMLHTTP");
                        }
                        catch (e) {
                            xmlHttpObj = null;
                        }
                    }
                }
            }

            if (xmlHttpObj) {
                xmlHttpObj.open("HEAD", file, false);
                xmlHttpObj.send(null);
                return (xmlHttpObj.status == 200 || xmlHttpObj.status == 304);
            }
        },

        setTrackerFrom      : function(fPt) {
            fromPt       = fPt;
        },

        setTrackerTo      : function(tPt) {
            toPt         = tPt;
        }

    }
}



DomLoad.load(function() {
    _H.DIESEL.DG = new _H.DIESEL.Gallery();
    _H.DIESEL.DG.init('gallerycnt');
});