/* Shade */
Shade =
{
    containerClass:'shadecontainer',
    controlId:'shadecontrol',
    shaderId:'shader',
    enableClass:'enableshader',
    disableClass:'disableshader',
    switchClass:'switchshader',

    init : function()
    {
        if (!document.getElementById || !document.getElementsByTagName || !document.createElement) {
            return;
        }

        var divs = document.getElementsByTagName('div');

        for (var i = 0; i < divs.length; i++) {
            if (!divs[i].className.match(Shade.containerClass)) {
                continue;
            }

            var div = divs[i];
        }

        if (!div) {
            return;
        }

        if (div.className.match('autoshade')) {
            Shade.createShader(div);
        }

        Shade.createControls(div);
    },

    createControls : function(obj)
    {
        var control = document.getElementById(Shade.controlId);
        var inputs = control.getElementsByTagName('input');

        for (var i = 0; i < inputs.length; i++) {
            var input = inputs[i];

            if (input.className.match(Shade.enableClass)) {
                input.container = obj;

                input.onclick = function() {
                    return Shade.createShader(this.container);
                }
            } else if (input.className.match(Shade.disableClass)) {
                input.container = obj;

                input.onclick = function() {
                    return Shade.removeShader(this.container);
                }
            } else if (input.className.match(Shade.switchClass)) {
                input.container = obj;

                Shade.addEvent(input, 'click', Shade.switchShader);
            }
        }
    },

    createShader : function(obj)
    {
        if (obj.firstChild == document.getElementById(Shade.shaderId)) {
            return;
        }

        var shader = document.createElement('div');
        shader.className += Shade.shaderClass;
        shader.id = Shade.shaderId;
        obj.insertBefore(shader, obj.firstChild);
        Shade.shadeSelects(obj);
    },

    removeShader : function(obj)
    {
        var shader = document.getElementById(Shade.shaderId);

        if (obj.firstChild != shader) {
            return;
        }

        obj.removeChild(shader);
        Shade.unshadeSelects(obj);
    },

    switchShader : function(evt)
    {
        var obj = Shade.getTarget(evt);

        if (document.getElementById(Shade.shaderId)) {
            if (obj.id == 'changer') {
                Shade.cancelClick(evt);

                if (!obj.setAttribute('value', 'submit')) {
                    var newObj = document.createElement('input');
                    newObj.type = 'submit';
                    newObj.setAttribute('value', 'Spara');
                    newObj.id = obj.id;
                    newObj.className = obj.className;
                    obj.parentNode.replaceChild(newObj, obj);
                }
            }

            return Shade.removeShader(obj.container);
        } else {
            return Shade.createShader(obj.container);
        }
    },

    shadeSelects : function(obj)
    {
        var selects = obj.getElementsByTagName('select');

        for (var i = 0; i < selects.length; i++) {
            var select = selects[i];
            select.disabled = 'disabled';
            select.style.visibility = 'hidden';
        }
    },

    unshadeSelects : function(obj)
    {
        var selects = obj.getElementsByTagName('select');

        for (var i = 0; i < selects.length; i++) {
            var select = selects[i];
            select.disabled = false;
            select.style.visibility = 'visible';
        }
    },

    cancelClick : function(evt) {
        if (window.event) {
            window.event.cancelBubble = true;
            window.event.returnValue = false;
            return;
        }

        if (evt) {
            evt.stopPropagation();
            evt.preventDefault();
        }
    },

    setOpacity : function(obj, opacity)
    {
        obj.style.opacity = (opacity / 100);
        obj.style.MozOpacity = (opacity / 100);
        obj.style.KhtmlOpacity = (opacity / 100);
        obj.style.filter = 'alpha(opacity=' + opacity + ')';
    },

    getTarget : function(evt)
    {
        var target = window.event ? window.event.srcElement : evt ? evt.target : null;

        if (!target) {
            return false;
        }

        return target;
    },

    addEvent : function(obj, evtType, fn)
    {
        if (obj.addEventListener) {
            obj.addEventListener(evtType, fn, false);
            return true;
        } else if (obj.attachEvent) {
            var r = obj.attachEvent('on' + evtType, fn);
            return r;
        } else {
            return false;
        }
    }
}

Shade.addEvent(window, 'load', Shade.init);

