/* Event manager _________________________________________________ */
var Event = {
    TYPE: {
        ON_SCROLL: ["scroll", "onscroll"],
        ON_LOAD: ["load", "onload"],
        ON_UNLOAD: ["unload", "onunload"],
        ON_RESIZE: ["resize", "onresize"],
        ON_CLICK: ["click", "onclick"],
        ON_MOUSEOVER: ["mouseover", "onmouseover"],
        ON_MOUSEOUT: ["mouseout", "onmouseout"],
        ON_MOUSEDOWN: ["mousedown", "onmousedown"],
        ON_MOUSEWHEEL: ["onmousewheel", "onmousewheel"],
        ON_READYSTATECHANGE: ["readystatechange", "onreadystatechange"]
    },
    getType: function(type) {
        for (var p in this.TYPE) if (type.toLowerCase() == this.TYPE[p][0]) return p;
    },
    addEvent: function(target, type, handler) {
        var eType = this.getType(type);
        if (typeof (target) == "object" && eType && handler) {
            try { target.attachEvent(this.TYPE[eType][1], handler); }
            catch (e) {
                try { target.addEventListener(this.TYPE[eType][0], handler, true); }
                catch (e) { }
            }
        }
    },
    removeEvent: function(target, type, handler) {
        var eType = this.getType(type);
        if (typeof (target) == "object" && eType && handler) {
            try { target.detachEvent(this.TYPE[eType][1], handler); }
            catch (e) {
                try { target.removeEventListener(this.TYPE[eType][0], handler, true); }
                catch (e) { }
            }
        }
    }
};

var Test = {
    traceBox: null,
    createTrace: function(x) {
        this.traceBox = document.createElement("textarea");
        this.traceBox.style.position = "absolute";
        this.traceBox.style.zIndex = 9999999;
        this.traceBox.style.top = 0;
        this.traceBox.style.width = "200px";
        this.traceBox.style.height = "200px";
        this.traceBox.style.border = "1px solid black";
        this.traceBox.style.backgroundColor = "#fff";
        this.traceBox.style.font = "11px Verdana";
        if (x == "right") this.traceBox.style.right = 0;
        else this.traceBox.style.left = 0;
        Event.addEvent(window, "load", function() { document.body.appendChild(Test.traceBox); });
    },
    setTraceBox: function(w, h, x) {
        if (!this.traceBox) this.createTrace();
        if (w > 0 && h > 0) {
            this.traceBox.style.width = w + "px";
            this.traceBox.style.height = h + "px";
        }
        if (x == "right") {
            this.traceBox.style.left = "";
            this.traceBox.style.right = 0;
        } else {
            this.traceBox.style.left = 0;
            this.traceBox.style.right = "";
        }
    },
    erase: function() { if (this.traceBox) this.traceBox.value = ""; },
    trace: function(msg, clear, tag) {
        if (!this.traceBox) this.createTrace();
        if (arguments.length > 0) {
            if (clear == true) this.erase();
            this.traceBox.value += msg + "\n";
            this.traceBox.scrollTop = this.traceBox.scrollHeight;
        }
    },
    traceMember: function(obj, clear) {
        var partsTable = "";
        var name;
        clear = clear == true ? true : false;
        for (name in obj) { partsTable += name + " -> " + obj[name] + "\n"; }
        this.trace(partsTable, clear, true);
    }
};
//Test.setTraceBox(400, 250) ;

/* ==================================================
EmObj Object
Exp : Create object element
Version : 0.1
Browser : MS IE, Mozila, Opera, Safari
Coder : Sun heub Lee (heubi25@naver.com)
Parameter : 
Method : 
parseParam(paramObj:Object) : void
Samples : 
var newSWF = new EmObj() ;
newSWF.codeBase = "http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" ;
newSWF.width = 400 ;
newSWF.height = 300 ;
newSWF.parseParam({src:"movie.swf"}) ;
newSWF.write() ;
================================================== */
var EmObj = function() {
    var myHTML = "";
    var paramHTML = "";
    var embedHTML = "";
    var pname;
    this.classId = "";
    this.codeBase = "";
    this.plugIn = "";
    this.type = "";
    this.id = "";
    this.width = 0;
    this.height = 0;
    this.align = "";
    this.style = "";
    this.parseParam = function(paramObj) {
        embedHTML += '<embed name="' + this.id + '" width="' + this.width + '" height="' + this.height + '" align="' + this.align + '" pluginspage="' + this.plugIn + '" type="' + this.type + '" ';
        for (pname in paramObj) {
            paramHTML += '<param name="' + pname + '" value="' + paramObj[pname] + '" />';
            embedHTML += pname + '="' + paramObj[pname] + '" ';
        }
        embedHTML += '></embed>';
    }
    this.getHTML = function() {
        myHTML = '<object id="' + this.id + '" width="' + this.width + '" height="' + this.height + '" classid="clsid:' + this.classId + '" codebase="' + this.codeBase + '" style="' + this.style + '">' + paramHTML + embedHTML + '</object>';
        return myHTML;
    }
    this.write = function() {
        document.write(this.getHTML());
    }
}

/* ==================================================
attachSWF(parameters:Object) : Object
Exp : Embed SWF file (Extends by EmObj)
Version : 1.0
Browser : MS IE, Mozila, Opera, Safari
Coder : Sun heub Lee (heubi25@naver.com)
Parameter : 
parameters : Parameters object
returnType : choice return type(html code or object)
Method : 
Samples : 
attachSWF({src:"movie.swf", width:400, height:300}) ;
================================================== */
function attachSWF(parameters, returnType) {
    var wrapper;
    var swfHTML;
    var swfParam = { src: "", movie: "", menu: false, quality: "high", allowScriptAccess: "always", bgcolor: "#FFFFFF" };
    var swfObj = new EmObj();
    var pname;
    for (pname in parameters) {
        if (pname != "id" && pname != "width" && pname != "height" && pname != "style" && pname != "align") {
            if (swfParam[pname] != undefined) {
                swfParam[pname] = parameters[pname] ? parameters[pname] : swfParam[pname];
                if (pname == "src") swfParam.movie = swfParam.src;
            } else {
                swfParam[pname] = parameters[pname];
            }
        }
    }
    swfObj.classId = "d27cdb6e-ae6d-11cf-96b8-444553540000";
    swfObj.codeBase = "https://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0";
    swfObj.plugIn = "https://www.macromedia.com/go/getflashplayer";
    swfObj.type = "application/x-shockwave-flash";
    swfObj.id = parameters.id ? parameters.id : "";
    swfObj.width = parseInt(parameters.width) > 0 ? parameters.width : 400;
    swfObj.height = parseInt(parameters.height) > 0 ? parameters.height : 300;
    swfObj.align = parameters.align ? parameters.align : "middle";
    swfObj.style = parameters.style ? parameters.style : "";
    swfObj.parseParam(swfParam);
    if (returnType == "html") {
        return swfObj.getHTML();
    } else {
        wrapper = document.createElement("div");
        wrapper.innerHTML = swfObj.getHTML();
        document.write(wrapper.innerHTML);
        return wrapper.firstChild;
    }
}

/* Balloon object generator ____________________________________________ */
var Balloon = function(paramObj) {
    var balloonBody = document.createElement("div");
    var properties = { id: "", obj: null, html: "", width: 0, height: 0, scrollHeight: 0, align: "left", offset: 0, top: 0, bottom: 0, y: 0, ease: 1, fps: 30 };
    var enabled = false;
    var animateID;
    var animateTimer;
    var destY;
    var error;

    checkParam();
    generate();
    Event.addEvent(window, "scroll", onAction);
    Event.addEvent(window, "resize", onAction);

    // Check parameters
    function checkParam() {
        if (typeof (paramObj) == "object") {
            if (paramObj.obj || paramObj.html) {
                if (paramObj.obj) properties.obj = paramObj.obj;
                if (paramObj.html) properties.html = paramObj.html;
                if (paramObj.id) properties.id = paramObj.id;
                if (paramObj.width > 0) properties.width = paramObj.width;
                if (paramObj.height > 0) properties.height = paramObj.height;
                if (paramObj.align) properties.align = paramObj.align;
                if (Math.abs(paramObj.offset) >= 0) properties.offset = parseInt(paramObj.offset);
                if (Math.abs(paramObj.top) >= 0) properties.top = parseInt(paramObj.top);
                if (Math.abs(paramObj.bottom) >= 0) properties.bottom = parseInt(paramObj.bottom);
                if (Math.abs(paramObj.y) >= 0) properties.y = paramObj.y < properties.top ? paramObj.y : properties.top;
                else properties.y = properties.top;
                if (paramObj.ease > 0) properties.ease = paramObj.ease;
                if (paramObj.fps > 0) properties.fps = paramObj.fps;
                animateTimer = Math.round(1000 / properties.fps);
                enabled = true;
            }
        }
    }

    // Check activation
    function getStatus() {
        var possible = "normal";
        if (document.documentElement.clientHeight <= properties.height + properties.top) possible = "disable";
        return possible;
    }

    // Generate codes
    function generate() {
        if (enabled) {
            if (properties.obj) balloonBody = properties.obj;
            else balloonBody.innerHTML = properties.html;
            document.body.appendChild(balloonBody);
            balloonBody.id = properties.id;
            balloonBody.style.position = "absolute";
            balloonBody.style.width = properties.width == 0 ? "auto" : properties.width + "px";
            balloonBody.style.height = properties.height == 0 ? "auto" : properties.height + "px";
            balloonBody.style.overflow = "hidden";
            balloonBody.style.top = properties.y + "px";
            switch (properties.align) {
                case "center":
                    balloonBody.style.left = "50%";
                    balloonBody.style.marginLeft = properties.offset + "px";
                    break;
                case "left":
                    balloonBody.style.left = properties.offset + "px";
                    break;
                case "right":
                    balloonBody.style.right = properties.offset + "px";
                    break;
            }
        }
    }

    // Handler
    function onAction() {
        if (properties.width == 0) properties.width = balloonBody.clientWidth;
        if (properties.height == 0) properties.height = balloonBody.clientHeight;
        properties.scrollHeight = document.documentElement.scrollHeight - properties.height;
        destY = Math.abs(document.body.scrollTop - document.documentElement.scrollTop);
        if (destY >= properties.scrollHeight) destY = properties.scrollHeight;
        if (getStatus() != "disable") destY += properties.top;
        if (animateID) clearInterval(animateID);
        animateID = setInterval(animation, animateTimer);
    }

    // Animating
    function animation() {
        var currY = parseInt(balloonBody.style.top);
        var mount = (destY - currY) * properties.ease;
        if (Math.abs(destY - currY) <= 1) {
            currY = destY;
            clearInterval(animateID);
        } else {
            if (Math.abs(mount) <= 1) mount = mount / Math.abs(mount);
            currY += Math.round(mount);
        }
        balloonBody.style.top = currY + "px";
    }

}

/* Styled selector generator ____________________________________________ */
var styledSelectCollection = { list: [], options: {}, selected: null, sFocus: false,
    unSelect: function() {
        if (this.selected) {
            this.options[this.selected.id].style.display = "none";
            this.selected = null;
        }
    }
};
var styledSelect = function(where, paramObj) {
    var PARENT;
    var SELECTOR_ID = "";
    var SELECTOR_CLASS = paramObj.className ? paramObj.className : "";
    var SELECTOR_OPTIONS = typeof (paramObj.items) == "object" ? paramObj.items : [];
    var SELECTOR_SEQ = paramObj.selectedIndex > 0 ? paramObj.selectedIndex : 0;
    var itemLabel;
    var itemValue;
    var itemClick;
    var maxLabel = [0, 0];
    var selectedLabel = "";
    var elSelector = document.createElement("div");
    var elLabel;
    var elOptions;
    var elOption;
    var elInput;
    var elOLabel;
    Event.addEvent(window, "load", init);
    return elSelector;
    function init() {
        var seq;
        SELECTOR_ID = paramObj.id ? paramObj.id : "S_SELECTOR" + styledSelectCollection.list.length + (new Date()).getTime();
        PARENT = document.getElementById(where);
        if (PARENT && typeof (paramObj) == "object") {
            elSelector.id = SELECTOR_ID;
            elSelector.selectedIndex = SELECTOR_SEQ;
            elSelector.className = SELECTOR_CLASS;
            elSelector.style.position = "relative";
            PARENT.appendChild(elSelector);
            elLabel = document.createElement("strong");
            elLabel.className = SELECTOR_CLASS + "_Label";
            elLabel.style.display = "block";
            elLabel.style.cursor = "default";
            elSelector.appendChild(elLabel);
            elOptions = document.createElement("ul");
            elOptions.className = SELECTOR_CLASS + "_Options";
            elOptions.style.display = "none";
            elOptions.style.position = "absolute";
            elOptions.style.left = 0;
            elOptions.style.overflow = "hidden";
            elSelector.appendChild(elOptions);
            styledSelectCollection.list.push(elSelector);
            styledSelectCollection.options[SELECTOR_ID] = elOptions;
            for (seq = 0; seq < SELECTOR_OPTIONS.length; seq++) {
                if (typeof (SELECTOR_OPTIONS[seq]) == "object") {
                    itemLabel = SELECTOR_OPTIONS[seq].label ? SELECTOR_OPTIONS[seq].label : "";
                    itemValue = SELECTOR_OPTIONS[seq].value ? SELECTOR_OPTIONS[seq].value : "";
                    itemClick = SELECTOR_OPTIONS[seq].click ? SELECTOR_OPTIONS[seq].click : "";
                    if (itemLabel) {
                        elOption = document.createElement("li");
                        elOption.style.position = "relative";
                        elOption.style.overflow = "hidden";
                        elOption.onmouseover = function() { this.className = "hover"; }
                        elOption.onmouseout = function() { this.className = ""; }
                        elOptions.appendChild(elOption);
                        elInput = document.createElement("input");
                        elInput.type = "radio";
                        elInput.name = SELECTOR_ID;
                        elInput.id = SELECTOR_ID + '_OPTION' + seq;
                        elInput.style.position = "absolute";
                        elInput.style.left = "-1000px";
                        elInput.style.top = 0;
                        elOption.appendChild(elInput);
                        elOLabel = document.createElement("label");
                        elOLabel.htmlFor = SELECTOR_ID + '_OPTION' + seq;
                        elOLabel.value = itemValue;
                        elOLabel.style.display = "block";
                        elOption.appendChild(elOLabel);
                        elLabel.innerHTML = elOLabel.innerHTML = itemLabel;
                        elOLabel.onmousedown = setValue;
                        if (itemClick) elOLabel.clickMethod = itemClick;
                        if (seq == SELECTOR_SEQ) selectedLabel = itemLabel;
                        if (maxLabel[0] < elLabel.offsetWidth) maxLabel[0] = elLabel.offsetWidth;
                        if (maxLabel[1] < elLabel.offsetHeight) maxLabel[1] = elLabel.offsetHeight;
                    }
                }
            }
            elLabel.onclick = setVisible;
            elLabel.onmouseover = function() { styledSelectCollection.sFocus = true; }
            elLabel.onmouseout = function() { styledSelectCollection.sFocus = false; }
            elLabel.innerHTML = selectedLabel;
            elOptions.style.top = maxLabel[1] - 1 + "px";
            elOptions.style.width = maxLabel[0] - 2 + "px";
            elSelector.style.width = maxLabel[0] + "px";
        }
    }
    function setVisible() {
        var __List = styledSelectCollection.options[this.parentNode.id];
        var __selected = __List.style.display == "block" ? true : false;
        styledSelectCollection.unSelect();
        if (!__selected) styledSelectCollection.selected = this.parentNode;
        __List.style.display = __selected ? "none" : "block";
    }
    function setValue() {
        elSelector.selectedIndex = this.value;
        elLabel.innerHTML = this.innerHTML;
        if (this.clickMethod) this.clickMethod();
    }
}
Event.addEvent(document, "mousedown", function() { if (!styledSelectCollection.sFocus) styledSelectCollection.unSelect(); });

// Tooltip message box generator _________________________________________________
var Tooltip = function(pid, clsName) {
    var parentEl;
    var tooltipEl;
    var msgEl;
    var roundEl;
    Event.addEvent(window, "load", init);
    function init() {
        parentEl = document.getElementById(pid);
        if (parentEl) {
            var seq;
            parentEl.style.position = "relative";
            tooltipEl = document.createElement("span");
            tooltipEl.style.display = "none";
            tooltipEl.style.position = "absolute";
            for (seq = 1; seq <= 8; seq++) {
                tooltipEl["rounding" + seq] = document.createElement("span");
                tooltipEl["rounding" + seq].className = "rounding" + seq;
                tooltipEl.appendChild(tooltipEl["rounding" + seq]);
            }
            tooltipEl.roundArr = document.createElement("span");
            tooltipEl.roundArr.className = "roundArr";
            tooltipEl.appendChild(tooltipEl.roundArr);
            msgEl = document.createElement("span");
            msgEl.className = "msgBox";
            tooltipEl.appendChild(msgEl);
            parentEl.appendChild(tooltipEl);
        }
    }
    this.setMsg = function(type, msg) {
        if (parentEl) {
            tooltipEl.style.display = "block";
            msgEl.innerHTML = msg;
            switch (type.toLowerCase()) {
                case "alert":
                    tooltipEl.className = clsName + "_Alert";
                    break;
                case "notice":
                default:
                    tooltipEl.className = clsName + "_Notice"; break;
            }
            tooltipEl.rounding2.style.width = tooltipEl.offsetWidth + "px";
            tooltipEl.rounding7.style.width = tooltipEl.offsetWidth + "px";
            tooltipEl.rounding4.style.height = tooltipEl.offsetHeight + "px";
            tooltipEl.rounding5.style.height = tooltipEl.offsetHeight + "px";
        }
    }
    this.clear = function() {
        if (parentEl) {
            tooltipEl.style.display = "none";
            tooltipEl.className = "";
            msgEl.innerHTML = "";
        }
    }
}

/* Select box control (Test) ____________________________________________ */
function selectListDisplay(who) {
    var list = who.parentNode.getElementsByTagName("ul")[0];
    list.style.display = list.style.display == "block" ? "none" : "block";
}

function onSearchTypeChecked(who) {
    var selectedLabel = who.parentNode.parentNode.parentNode.getElementsByTagName("strong")[0];
    selectedLabel.innerHTML = who.parentNode.getElementsByTagName("label")[0].innerHTML;
    selectListDisplay(who.parentNode.parentNode);
}

function pageTop() {
    document.documentElement.scrollTop = 0;
    document.body.scrollTop = 0;
}

/* PNG image load (Only MS IE6) ____________________________________________ */
function initPNGImage() {
    var imageElements = document.getElementsByTagName("img");
    for (var seq = 0; seq < imageElements.length; seq++) {
        if (imageElements[seq].src.toLowerCase().lastIndexOf(".png") == imageElements[seq].src.length - 4) transImage(imageElements[seq]);
    }
}
function transImage(img) {
    if (window.navigator.appVersion.indexOf("MSIE 6.0") > -1 && window.navigator.appVersion.indexOf("MSIE 8.0") == -1) {
        img.style.filter += " progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + img.src + "', sizingMethod='image') ";
        img.src = "/image/blank.gif";
    }
}
if (window.navigator.appVersion.indexOf("MSIE 6.0") > -1 && window.navigator.appVersion.indexOf("MSIE 8.0") == -1) Event.addEvent(window, "load", initPNGImage);

// Document cover for product previewer
function previewerDisplay(sw) {
    var elPreviewer = document.getElementById("ProductPreviewer");
    if (elPreviewer) {
        var viewerY;
        var scrollBarWidth;
        elPreviewer.style.display = sw == true ? "block" : "none";
        viewerY = Math.max(document.body.scrollTop, document.documentElement.scrollTop);
        elPreviewer.style.top = viewerY + "px";
        scrollBarWidth = document.body.scrollWidth;
        document.body.parentNode.style.overflow = sw == true ? "hidden" : "";
        if (!document.body.scrollBarWidth) {
            document.body.scrollBarWidth = document.body.scrollWidth - scrollBarWidth;
        }
        document.body.parentNode.style.paddingRight = sw == true ? document.body.scrollBarWidth + "px" : 0;
    }
}

// Image mouse over effects
function addRollOver(targetObj) {
    if (targetObj.tagName && targetObj.tagName.toUpperCase() == "IMG") {
        var wrapper = targetObj.parentNode;
        var twinSrc = targetObj.src.indexOf("_off") == -1 ? "" : targetObj.src.replace("_off", "_on");
        targetObj.onload = null;
        if (twinSrc) {
            targetObj.baseImg = document.createElement("img");
            targetObj.baseImg.src = targetObj.src;
            targetObj.overImg = document.createElement("img");
            targetObj.overImg.src = twinSrc;
            targetObj.overImg.width = targetObj.baseImg.width = targetObj.width;
            targetObj.overImg.height = targetObj.baseImg.height = targetObj.height;
            targetObj.overImg.alt = targetObj.baseImg.alt = targetObj.alt;
            targetObj.overImg.className = targetObj.baseImg.className = targetObj.className;
            targetObj.overImg.style.display = targetObj.baseImg.style.display = "none";
            wrapper.appendChild(targetObj.baseImg);
            wrapper.appendChild(targetObj.overImg);
            Event.addEvent(targetObj, "mouseover", onMouseIMenu);
            Event.addEvent(targetObj, "mouseout", onMouseIMenu);
        }
    }
    function onMouseIMenu(e) {
        var me;
        switch (e.type.toUpperCase()) {
            case "MOUSEOVER": me = e.toElement ? e.toElement : e.target; me.src = me.overImg.src; break;
            case "MOUSEOUT": me = e.fromElement ? e.fromElement : e.target; me.src = me.baseImg.src; break;
        }
    }
}

// LNB for Display section
function initDispLNB(el) {
    if (el.tagName && el.tagName.toUpperCase() == "IMG") {
        var group = el.parentNode.parentNode.getElementsByTagName("table")[0];
        el.onload = null;
        addRollOver(el);
        Event.addEvent(el, "mouseover", onFocusMenu);
        Event.addEvent(el, "mouseout", onFocusMenu);
        if (group) {
            group.indexMenu = el;
            el.subPannel = group;
            group.onmouseover = function() {
                this.style.display = "block";
                this.indexMenu.className = "overImg";
                this.indexMenu.src = this.indexMenu.overImg.src;
            }
            group.onmouseout = function() {
                this.style.display = "none";
                this.indexMenu.className = "defImg";
                this.indexMenu.src = this.indexMenu.baseImg.src;
            }
        }
    }
    function onFocusMenu(e) {
        var me;
        var stat;
        switch (e.type.toUpperCase()) {
            case "MOUSEOVER": me = e.toElement ? e.toElement : e.target; stat = true; break;
            case "MOUSEOUT": me = e.fromElement ? e.fromElement : e.target; stat = false; break;
        }
        me.className = stat == true ? "overImg" : "defImg";
        if (me.subPannel) {
            me.subPannel.style.display = stat == true ? "block" : "none";
        }
    }
}

// GNB 
function reInitGNB(fHeight) {
    var gnbSwf = document.getElementById("GNBSWF");
    var gnbSwfEm = gnbSwf.getElementsByTagName("embed")[0];
    gnbSwf.height = 35 + fHeight;
    if (gnbSwfEm) gnbSwfEm.height = gnbSwf.height;
}

// GNB¿¡¼­ ±âÅ¸¸Þ´º ¹Ù·Î°¡±â (È®ÀÎ¿ë)
function goGNBOtherMenu(type) {
    var menuLabel = ["", "Today sales", "Style shopping", "Cafe style", "Events"];
    alert(menuLabel[type] + " : " + type);
}

// Yes point guider
var YesPointGuide = {
    Enable: false,
    Guider: null,
    Visible: false,
    init: function() {
        this.Guider = document.getElementById("YesPointGuide");
        return this.Guider ? true : false;
    },
    open: function() {
        this.Enable = this.init();
        if (this.Enable) {
            this.Guider.style.display = "block";
            this.Visible = true;
        }
    },
    close: function() {
        this.Enable = this.init();
        if (this.Enable) {
            this.Guider.style.display = "none";
            this.Visible = false;
        }
    },
    toggle: function() {
        if (this.Visible) this.close();
        else this.open();
    }
};

