/**
 * @classDescription prototype.js
 */
if(!Control) var Control = {};
Control.cypopupMenus = [];

if(!tmenuUrls){
    var tmenuUrls = $H({});
}

Control.CypopupMenu = Class.create({
    initialize : function(field, captions, urls, baseClassName){
        var popMenu = this;
        Control.cypopupMenus.push(popMenu);
        this.myField = $(field);
        this.baseClassName = baseClassName;
        this.onMyField = false;
        this.onMyChildren = false;
        this.isOpen = false;
        this.urls = $H({});
        this.items = [];
        this.MyChildrenRap = Builder.node('div', {id:this.myField.id + 'childrenRap', className:"cypopupmenu"});
        document.body.appendChild(this.MyChildrenRap);
        this.makeHtml(captions, urls);
        this.eventSet();
        Element.hide(this.MyChildrenRap);
    },
    makeHtml : function(captions, urls){
        var html = "";
        var childClassName = this.baseClassName + "child";
        var id;
        var i;
        var obj;
        for(i = 0; i < captions.length; i++){
            id = this.myField.id + '-'+ i;
            obj = Builder.node('div', {id:this.myField.id + '-'+ i,
                                       className:childClassName}
                                    ,captions[i]);

            this.MyChildrenRap.appendChild(obj);
            this.urls.set(id, urls[i]);
            this.items.push(obj);
        }
    },
    eventSet : function(){
        this.fieldMouseoverListener = this.fieldMouseOver.bindAsEventListener(this);
        this.fieldMouseoutListener = this.fieldMouseOut.bindAsEventListener(this);
        Event.observe(this.myField, "mouseover", this.fieldMouseoverListener);
        Event.observe(this.myField, "mouseout", this.fieldMouseoutListener);

        this.childMouseoverListener = this.childMouseOver.bindAsEventListener(this);
        this.childMouseoutListener = this.childMouseOut.bindAsEventListener(this);
        this.childMouseclickListener = this.childMouseClick.bindAsEventListener(this);
        var i;
        for(i = 0; i < this.items.length; i++){
            Event.observe(this.items[i], "mouseover", this.childMouseoverListener);
            Event.observe(this.items[i], "mouseout", this.childMouseoutListener);
            Event.observe(this.items[i], "click", this.childMouseclickListener);

        }
    },
    MyChildrenRapMouseOver : function(event){

        return;
    },


    childMouseClick : function(event){
        Event.stop(event);
        var ele = Event.element(event);
        var now_style = Element.classNames(ele);
        if(now_style == this.baseClassName + "childOn"){
            ele.removeClassName(now_style);
            ele.addClassName(this.baseClassName + "child");
        }
        this.myField.removeClassName(this.baseClassName + "On");
        this.myField.addClassName(this.baseClassName);
        var url = this.urls.get(ele.id);
        Element.hide(this.MyChildrenRap);
        this.isOpen = false;
        location.href = url;
    },

    childMouseOut : function(event){
        var ele = Event.element(event);
        var now_style = Element.classNames(ele);
        ele.removeClassName(now_style);
        ele.addClassName(this.baseClassName + "child");
        if(this.isOpen){
            var x = event.pointerX();
            var y = event.pointerY();
            var pos = Position.cumulativeOffset(this.MyChildrenRap);
            var dim = Element.getDimensions(this.MyChildrenRap);
            dim.width -= 2;
            dim.height -= 1;

            if ((x <= pos[0]) || (x >= pos[0] + dim.width) ||
                (y >= pos[1] + dim.height) ||
                (y <= pos[1])) {
                pos = Position.cumulativeOffset(this.myField);
                dim = Element.getDimensions(this.myField);
                if ((x <= pos[0]) || (x >= pos[0] + dim.width) ||
                    (y >= pos[1] + dim.height) ||
                    (y <= pos[1])) {
                    this.myField.removeClassName(this.baseClassName + "On");
                    this.myField.addClassName(this.baseClassName);
                    Element.hide(this.MyChildrenRap);
                    this.isOpen = false;
                }
            }
        }
    },

    childMouseOver : function(event){
        var ele = Event.element(event);
        var now_style = Element.classNames(ele);
        ele.removeClassName(now_style);
        ele.addClassName(this.baseClassName + "childOn");
    },

    fieldMouseOver : function(event){
        if(!this.isOpen){
            this.myField.removeClassName(this.baseClassName);
            this.myField.addClassName(this.baseClassName + "On");
            Element.show(this.MyChildrenRap);
            var pos = Position.cumulativeOffset(this.myField);
            pos[0] += this.myField.getWidth();
//          pos[1] += this.myField.getHeight();
            this.MyChildrenRap.style.left = (pos[0]) + "px";
            this.MyChildrenRap.style.top =  (pos[1]) + "px";
            this.isOpen = true;
        }
    },


    fieldMouseOut :function(event){
        if(Element.classNames(this.myField) == this.baseClassName + "On"){
            this.myField.removeClassName(this.baseClassName + "On");
            this.myField.addClassName(this.baseClassName);
        }
        if(this.isOpen){
            var x = event.pointerX();
            var y = event.pointerY();
            var pos = Position.cumulativeOffset(this.MyChildrenRap);
            var dim = Element.getDimensions(this.MyChildrenRap);
            if ((x < pos[0]) || (x > pos[0] + dim.width) ||
                (y < pos[1]) || (y > pos[1] + dim.height)) {
                    this.myField.removeClassName(this.baseClassName + "On");
                    this.myField.addClassName(this.baseClassName);
                    Element.hide(this.MyChildrenRap);
                    this.isOpen = false;
            }
        }
    }
});

Control.CypopupMenu.activeMenu;
Control.CypopupMenu.CONTROL;



Control.CypopInMenu = Class.create(Control.CypopupMenu,{

    childMouseClick : function(event){
        Event.stop(event);
        var ele = Event.element(event);
        var now_style = Element.classNames(ele);
        if(now_style == this.baseClassName + "childOn"){
            ele.removeClassName(now_style);
            ele.addClassName(this.baseClassName + "child");
        }
        this.myField.removeClassName(this.baseClassName + "On");
        this.myField.addClassName(this.baseClassName);
        var url = this.urls.get(ele.id);
        Element.hide(this.MyChildrenRap);
        this.isOpen = false;
        window.open(url, "_parent");
    }

});












function gmenuLinkSet(items){
    var i;
    var targ;

    for (i = 0; i < items.length; i++) {
        targ = $(items[i][0]);
        if(!targ)
            continue;
        tmenuUrls.set(items[i][0], items[i][1]);
        targ.style.cursor = "pointer";
        if (targ.src.indexOf(".png") > 0) {
            Event.observe(targ, 'mouseover', function(event){
                var ele = Event.element(event);
                if (ele.src.indexOf("_on.png") == -1) {
                    ele.src = ele.src.replace(/\.png/g, '_on.png');
                }
            });
        }
        else
            if (targ.src.indexOf(".jpg") > 0) {
                Event.observe(targ, 'mouseover', function(event){
                    var ele = Event.element(event);
                    if (ele.src.indexOf("_on.jpg") == -1) {
                        ele.src = ele.src.replace(/\.png/g, '_on.jpg');
                    }
                });
            }
            else
                if (targ.src.indexOf(".gif") > 0) {
                    Event.observe(targ, 'mouseover', function(event){
                        var ele = Event.element(event);
                        if (ele.src.indexOf("_on.gif") == -1) {
                            ele.src = ele.src.replace(/\.png/g, '_on.gif');
                        }
                    });
                }
        Event.observe(targ, 'mouseout', function(event){
            var ele = Event.element(event);
            if ((ele.src.indexOf("_on.") >= 0) ||
            (ele.src.indexOf("_push.") >= 0)) {
                ele.src = ele.src.replace(/(_on\.|_push\.)/g, '.');
            }
        });

        Event.observe(targ, 'mouseup', function(event){
            var ele = Event.element(event);
            if ((ele.src.indexOf("_on.") >= 0) ||
            (ele.src.indexOf("_push.") >= 0)) {
                ele.src = ele.src.replace(/(_on\.|_push\.)/g, '.');
            }
        });
        Event.observe(targ, 'click', function(event){
            var ele = Event.element(event);
            location.href = tmenuUrls.get(ele.id);
        });

    }

}


function tMemuLinkSet(items){
    var i;
    var targ;
    for (i = 0; i < items.length; i++) {
        targ = $(items[i][0]);
        tmenuUrls.set(items[i][0], items[i][1]);
        Event.observe(targ, 'click', function(event){
            var ele = Event.element(event);
            var className = Element.classNames(ele).toString();
            ele.removeClassName(className);
            className = className.substr(0, className.length - 2);
            ele.addClassName(className);
            location.href = tmenuUrls.get(ele.id);
        });
        Event.observe(targ, 'mouseover', function(event){
            var ele = Event.element(event);
            var className = Element.classNames(ele).toString();
            if (!className.endsWith("On")) {
                ele.removeClassName(className);
                ele.addClassName(className + "On");
            }
        });
        Event.observe(targ, 'mouseout', function(event){
            var ele = Event.element(event);
            var className = Element.classNames(ele).toString();
            if (className.endsWith("On")) {
                ele.removeClassName(className);
                className = className.substr(0, className.length - 2);
            }
            ele.addClassName(className);
        });
    }
}

