﻿//Library Functions
function getScrollOffset()
{
    var x = 0;
    var y = 0;
    if (document.all)
    {
        if (document.compatMode && document.compatMode != "BackCompat")
        {
            x = document.documentElement.scrollLeft;
            y = document.documentElement.scrollTop;
        }
        else
        {
            x = document.body.scrollLeft;
            y = document.body.scrollTop;
        }
    }
    else
    {
        x = parseInt(pageXOffset);
        y = parseInt(pageYOffset);
    }
    return { x: x, y: y };
}

function getScreenSize()
{
    var x = 0;
    var y = 0;
    if (window.innerWidth)
    {
        x = window.innerWidth;
        y = window.innerHeight;
        if (document.body.scrollHeight > window.innerHeight)
            x -= 16;
        if (document.body.scrollWidth > window.innerWidth)
            y -= 16;
    }
    else if (document.body.clientWidth)
    {
        x = document.body.clientWidth;
        y = document.body.clientHeight;
    }
    return { x: x, y: y };
}

function getMousePosition(event) {
    var x = 0;
    var y = 0;

    if (!document.all) {
        var frames = document.getElementsByTagName("iframe");
        for (var i = 0; i < frames.length; i++) {
            var frame = frames[i];

            if (event.currentTarget && frame.src == event.currentTarget.URL) {
                var framePos = getElementPosition(frame);
                x += framePos.x;
                y += framePos.y;
            }
        }
    }

    x += event.clientX;
    y += event.clientY;
    if (document.all) {
        if (document.compatMode && document.compatMode != "BackCompat") {
            x += document.documentElement.scrollLeft;
            y += document.documentElement.scrollTop;
        }
        else {
            x += document.body.scrollLeft;
            y += document.body.scrollTop;
        }
    }
    else {
        x += parseInt(pageXOffset);
        y += parseInt(pageYOffset);
    }


    return { x: x, y: y };
}

function getElementPosition(element)
{
    var x = 0;
    var y = 0;

    while (element)
    {
        x += element.offsetLeft;
        y += element.offsetTop;
        element = element.offsetParent;
    }
    return { x: x, y: y };
}

function preventBubble(event) {
    event.cancelBubble = true;
}

//PopupButton
var currentPopup = null;
var currentButton = null;

function buttonMDown(ClientID, PopupID, popupStyle, event, openEvent, closeEvent)
{
    if (currentButton)
    {
        var isCurrent = currentButton.id == ClientID;
        var cButton = currentButton;

        if (document.body.onmousedown)
            document.body.onmousedown();

        if (isCurrent)
        {
            cButton.className = "PopupButtonHover";
            if (event.preventDefault)
                event.preventDefault();
            return false;
        }
    }

    currentButton = document.getElementById(ClientID);
    currentPopup = document.getElementById(PopupID);

    var sSize = getScreenSize();
    var pSize = { x: currentPopup.offsetWidth, y: currentPopup.offsetHeight };
    var sOffset = getScrollOffset();
    var bPos = getElementPosition(currentButton);
    var bSize = { x: currentButton.offsetWidth, y: currentButton.offsetHeight };

    if (pSize.x < sSize.x)
    {
        if (pSize.x + 10 > sSize.x)
            currentPopup.style.left = sOffset.x + (sSize.x - pSize.x) / 2 - 5 + "px";
        else
        {
            var sRight = sOffset.x + sSize.x;
            if (bPos.x + pSize.x > sRight)
                currentPopup.style.left = sRight - pSize.x - 10 + "px";
            else
                currentPopup.style.left = bPos.x + "px";
        }
    }
    else
        currentPopup.style.left = "0px";

    var bottomSpace = (sSize.y + sOffset.y) - (bPos.y + bSize.y);
    var topSpace = bPos.y - sOffset.y;
    if (bottomSpace < pSize.y && topSpace > bottomSpace)
        currentPopup.style.top = bPos.y - pSize.y + "px";
    else
        currentPopup.style.top = bPos.y + bSize.y + "px";
    
    currentPopup.className = popupStyle;        
    
    if (openEvent)
        eval(openEvent);

    event.cancelBubble = true;
    if (document.body.onmousedown)
        document.body.onmousedown();

    var oldEvent = document.body.onmousedown;

    document.body.onmousedown = function()
    {
        currentButton.className = "PopupButton";
        currentPopup.className = "HiddenPopup";

        if (closeEvent)
            eval(closeEvent);

        currentPopup = null;
        currentButton = null;

        document.body.onmousedown = oldEvent;
        if (oldEvent)
            oldEvent();
    }



    if (event.preventDefault)
        event.preventDefault();
    return false;
}

function buttonMOver(source)
{
    source.className = "PopupButtonHover";
}

function buttonMOut(source)
{
    if (currentButton != source)
        source.className = "PopupButton";
}

//MenuButton
function itemMDown(itemIndex, event)
{
    var index = document.getElementById(currentButton.id + "_index");
    if (itemIndex != index.value)
    {
        setItemIndex(itemIndex);
        if (index.onchange)
            index.onchange();
    }
    if (document.body.onmousedown)
        document.body.onmousedown();
    event.cancelBubble = true;
}

function setItemIndex(itemIndex)
{
    var index = document.getElementById(currentButton.id + "_index");
    index.value = itemIndex;

    var current = 0;
    var element = document.getElementById(currentButton.id + "_item" + current);
    while (element)
    {
        if (current == itemIndex)
            element.className = "Selected";
        else
            element.className = null;
        current += 1;
        element = document.getElementById(currentButton.id + "_item" + current);
    }

    var buttonImage = document.getElementById(currentButton.id + "_buttonImage");
    var itemImage = document.getElementById(currentButton.id + "_itemImage" + itemIndex);
    buttonImage.src = itemImage.src;
    buttonImage.alt = itemImage.title;
}

//ColorPicker
var picker = null;

function setPicker() {
    var color = document.getElementById(currentButton.id + "_color");
    if (!picker) {
        picker = new YAHOO.widget.ColorPicker("cPicker", {
            showhsvcontrols: true,
            showhexcontrols: true,
            showwebsafe: false,
            images: {
                PICKER_THUMB: "http://mob0.com/lt/PickerThumb.png",
                HUE_THUMB: "http://mob0.com/lt/HueThumb.png"
            }
        });
        picker.on("rgbChange", onRgbChange);
        picker.skipAnim = true;
    }
    picker.setValue(YAHOO.util.Color.hex2rgb(color.value), false);
}

function onRgbChange(o) {
    setButtonColor(o.newValue[0], o.newValue[1], o.newValue[2]);
}

function setButtonColor(r, g, b) {
    if (currentButton) {
        var hex = YAHOO.util.Color.rgb2hex(r, g, b);
        var image = document.getElementById(currentButton.id + "_image");
        if (image) {
            image.style.backgroundColor = "#" + hex;
            color.value = hex;
        }
    }
}

function tileSetPicker(tile) {
    var color = tile.style.backgroundColor.toString();
    var array = color.substr(4, color.length - 5).split(", ")
    picker.setValue(array);
    if (document.body.onmousedown)
        document.body.onmousedown();
}

function pickerClosing() {
    if (currentButton) {
        var color = document.getElementById(currentButton.id + "_color");
        if (color) {
            var hex = document.getElementById(picker.ID.HEX).value;
            while (hex.length < 6)
                hex += "0";
            if (hex != color.value) {
                color.value = hex;
                if(color.onchange)
                    color.onchange();
            }
        }
    }
}


