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 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';

                        var cornerurl = "#";
                        //alert((order) + " -- "+ cornerlink[order]);
                        if (cornerlink && cornerlink[order] && cornerlink[order] !== '') {
                            cornerurl = cornerlink[order];
                            parentDiv.className = 'hascornerlink current';
                        }


                        if (!(/#$/).test(storeLink)) {
                            insStructure = {
                                "ins": {
                                    "id"    : "currentins",
                                    "class" : [classY, classX].join(" "),
                                    "img~1"   : {
                                        "id"        : "current_zoom",
                                        "src"       : "#",
                                        "longDesc"  : imgMagnified
                                    },

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

                                    "p"   : {
                                        "id"     : "store_zoom",
                                        "a~1" : {
                                            "id"    : "thecorner",
                                            "href"  : cornerurl,
                                            "target" : "_blank",
                                            "onclick"   : function() {
                                                if (pageTracker) {
                                                    pageTracker._trackPageview(["/track/", fromPt,"_to_", toPt].join(""));
                                                }
                                            },
                                            "text"  : "Go to the corner"
                                        },

                                        "a~2"      : {
                                            "href"      : storeLink,
                                            "text"      : "Buy",
                                            "target" : "_blank",
                                            "onclick"   : function() {
                                                if (pageTracker) {
                                                    pageTracker._trackPageview(["/track/", fromPt,"_to_", toPt].join(""));
                                                }
                                            }
                                        },


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

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

                                    "img~2": {
                                        "id"            : "mgnloading",
                                        "alt"           : "Please wait...",
                                        "src"           : "/_img/common/btn-zoomwait.gif"
                                    },

                                    "a~2": {
                                        "id"            : "mgnbutton_closed",
                                        "text"          : "Magnified image",
                                        "rel"           : imgMagnified,
                                        "onclick"       : function() {
                                            return _that.openMagnifiedImage(this.rel);
                                        }
                                    }

                                }
                            }
                        }
                        else {
                            insStructure = {
                                "ins": {
                                    "id"    : "currentins",
                                    "class" : [classY, classX].join(" "),
                                    "img~1"   : {
                                        "id"        : "current_zoom",
                                        "src"       : "#",
                                        "longDesc"  : imgMagnified
                                    },

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


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

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


                                    "img~2": {
                                        "id"            : "mgnloading",
                                        "alt"           : "Please wait...",
                                        "src"           : "/_img/common/btn-zoomwait.gif"
                                    },


                                    "a~2": {
                                        "id"            : "mgnbutton_closed",
                                        "text"          : "Magnified image",
                                        "rel"           : imgMagnified,
                                        "onclick"       : function() {
                                            return _that.openMagnifiedImage(this.rel);
                                        }
                                    }
                                }
                            }
                        }

                        _DOMbuilder.create(insStructure).append('into', parentDiv);
                        _H.DOM.$('mgnloading').style.display = 'none';

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


                        cubeEffect.start({
                            'width'     : '414px',
                            'height'    : '414px'
                        }).chain(
                            function() {

                                _H.DOM.$('store_zoom').style.display = 'block';
                                _H.DOM.$('close_zoom').style.display = 'block';
                                _H.DOM.$('current_zoom').setStyle('opacity', 0);

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

                                    $('current_zoom').style.display = 'block';

                                    imgEffect.start({'opacity': '1' }).chain(function() {

                                        // we hide the loader
                                        $('current_zoom').parentNode.style.backgroundImage = 'none';


                                        if (_that.fileexists(imgMagnified)) {


                                            _H.DOM.$('mgnloading').style.display = 'block';
                                            $('current_zoom').style.cursor = 'wait';
                                            /** magnifier **/
                                            /*
                                            MojoMagnify.makeMagnifiable(
                                                _H.DOM.$('current_zoom'),
                                                _H.DOM.$('current_zoom').getAttribute('longdesc')
                                            );
                                            */

                                            mgnImage = new Image();
                                            mgnImage.onload = function() {
                                                //alert(imgMagnified);

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

                                                _DOMbuilder.create ({
                                                    'img': {
                                                        'id'    : "magnifiedimage",
                                                        'src'   : imgMagnified,
                                                        'class' : 'dragme'
                                                    }
                                                }).append('into', _H.DOM.$('cntdetail'));

                                                _H.DOM.$('magnifiedimage').style.left = (parseInt(ww/2, 10) - 7)+'px';
                                                _H.DOM.$('magnifiedimage').style.top  = (parseInt(ww/2, 10) - 7)+'px';
                                                if (!(Browser.Engine.trident)) {
                                                    $$('#magnifiedimage').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 = '0px';
                                                                if (el.offsetLeft < ww) el.style.left = ww + 'px';
                                                                if (el.offsetLeft > 0) el.style.left = '0px';
                                                            }
                                                        });
                                                    });
                                                }

                                                $('current_zoom').style.cursor = 'default';
                                                _H.DOM.$('mgnloading').style.display = 'none';
                                                _H.DOM.$('mgnbutton_closed').style.display = 'block';
                                                _H.DOM.$('cntdetail').style.cursor = 'pointer';


                                            }
                                            mgnImage.src = imgMagnified;
                                        }
                                        else {
                                             _H.DOM.$('cntdetail').className = 'emptymagnified';
                                        }

                                    });


                                }
                                _H.DOM.$('current_zoom').src = imgNew;

                            }
                        );

                        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) {

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

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


            _H.DOM.$('currentins').style.backgroundImage  = 'none';
            _H.DOM.$('store_zoom').style.display = 'none';
            _H.DOM.$('close_zoom').style.display = 'none';
            if (_H.DOM.$('mgnbutton_opened')) _H.DOM.$('mgnbutton_opened').style.display = 'none';
            if (_H.DOM.$('mgnbutton_closed')) _H.DOM.$('mgnbutton_closed').style.display = 'none';

            // only if magnifier is enabled */
            /*
            if (_H.DOM.$('etxmagn')) {
                var el = _H.DOM.$('etxmagn');
                el.parentNode.removeChild(el);
            }
            */


            imgEffect.start({
                'opacity'     : '0'
            }).chain(
                function() {
                    _H.DOM.$('current_zoom').style.display = 'none';
                    cubeEffect.start({
                        'width'     : '132px',
                        'height'    : '132px'
                    }).chain(function() {
                        var parentDiv = _H.DOM.$('currentins').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');
});