﻿if(typeof(ZNode)=='undefined') ZNode = {};
if(!ZNode.Web) ZNode.Web = {};

ZNode.Web.EventManager=function(){
    var _this=this;
    var _evts=[];

    this.Dispose=dispose;
    this.Add=addEvent;
    this.Clear=clearEvents;
    this.Remove=removeEvent;

    function dispose(){
        _this.Clear();
        _this=_evts=null;
    }

    function addEvent(elt,nm,fnc,grab){
        if(elt&&(elt==window||elt.nodeType)&&typeof(fnc)=='function'){
            var evt={elt:elt,name:nm,func:fnc,grab:!!grab};
            _evts.push(evt);
            if(elt.attachEvent)return elt.attachEvent(nm,fnc);
            if(elt.addEventListener)return elt.addEventListener(nm.replace(/^on/,''),fnc,!!grab);
            elt[nm]=fnc;
        }
    }
    function clearEvent(evt){
        var elt=evt.elt,fnc=evt.func,nm=evt.name,grab=evt.grab;
        if(elt&&(elt==window||elt.nodeType)&&typeof(fnc)=='function'){
            if(elt.attachEvent)return elt.detachEvent(nm,fnc);
            if(elt.addEventListener)return elt.removeEventListener(nm.replace(/^on/,''),fnc,grab);
            elt[nm]=null;
        }
    }
    function clearEvents(){
        for(var i=0;i<_evts.length;i++)clearEvent(_evts[i]);
    }
    function removeEvent(elt,nm,fnc,grab){
        for(var i=_evts.length-1;i>=0;i--){
            if(_evts[i].elt==elt&&_evts[i].name==nm&&_evts[i].func==fnc&&_evts[i].grab==!!grab){
                clearEvent(_evts[i]);
                _evts[i].elt=_evts[i].name=_evts[i].func=_evts[i].grab=null;
                _evts.splice(i,1);
                break;
            }
        }
    }
};

ZNode.Web.Master = new function()
{
    var imagePath = '/Themes/Default/Images/';
    var _this = this;
    var eventManager = new ZNode.Web.EventManager();
    var imageRefs = [];
    var imageCache = new Object();
    
    
    new function Master() {
        eventManager.Add(window, 'onload', initialize);
        eventManager.Add(window, 'onunload', dispose);
        
        imageRefs.push({Name:'events', Ext:'.gif'});
        imageRefs.push({Name:'cooltools', Ext:'.png'});
        imageRefs.push({Name:'catalog', Ext:'.gif'});
        imageRefs.push({Name:'trickstips', Ext:'.png'});
        imageRefs.push({Name:'embellishments', Ext:'.png'});
        imageRefs.push({Name:'gallery', Ext:'.png'});
        imageRefs.push({Name:'home', Ext:'.png'});
        imageRefs.push({Name:'inkpads', Ext:'.png'});
        imageRefs.push({Name:'mycart', Ext:'.gif'});
        imageRefs.push({Name:'newsletter', Ext:'.png'});
        imageRefs.push({Name:'papergoods', Ext:'.png'});
        imageRefs.push({Name:'rubberstamps', Ext:'.png'});
        imageRefs.push({Name:'wholesale', Ext:'.gif'});
        
        loadImageCache();
    }
    
    function dispose() {
        for(var key in imageCache) {
            imageCache[key] = null;
        }
            
        _this = imageCache = imageRefs = eventManager = null;
    }
    
    function initialize() {
        for(i=0; i<imageRefs.length; i++) {
            var img = imageRefs[i];
            eventManager.Add(document.images[img.Name], "onmouseover", _this.Activate);
            eventManager.Add(document.images[img.Name], "onmouseout", _this.Deactivate);
        }
    }
    
    function loadImageCache() { 
        for(i=0; i<imageRefs.length; i++) {
            var img = imageRefs[i];
            
            var onName = img.Name + '_ON';
            imageCache[onName] = new Image();
            imageCache[onName].src = imagePath + 'btn_' + img.Name + '_ON' + img.Ext;
            
            var offName = img.Name + '_OFF';
            imageCache[offName] = new Image();
            imageCache[offName].src = imagePath + 'btn_' + img.Name + '_OFF' + img.Ext;
        }
    }
    
    this.Activate = function activate(sender) {
        var img;
        if(window.attachEvent) img = sender.srcElement;
        else img = sender.target;
        
        var hashKey = img.name + '_ON';
        if(imageCache[hashKey].complete) {
            img.src = imageCache[hashKey].src;
        }
    }
    
    this.Deactivate = function deactivate(sender) {
        var img;
        if(window.attachEvent) img = sender.srcElement;
        else img = sender.target;
        
        var hashKey = img.name + '_OFF';
        if(imageCache[hashKey].complete) {
            img.src = imageCache[hashKey].src;
        }
    }
};
