/** Briefcase components **/
function components_init()
{
    // get .component li as draggable items
    var comps = YAHOO.util.Dom.getElementsByClassName("component", "li");
    if(!comps.length) return false;
    YAHOO.util.Dom.batch(comps, function(item) {
        var compDrag = new YAHOO.util.DD(item);
        //set drag handle
        var handle = YAHOO.util.Dom.getElementsByClassName("handle", "li", item)[0];
        compDrag.setHandleElId(handle);
        compDrag.onDragDrop = comp_drag_drop;
        compDrag.onInvalidDrop = comp_invalid_drop;
        compDrag.onDragOver = comp_drag_over;
        compDrag.onDragOut = comp_drag_out;

        compDrag.startDrag = function()
        {
            Ext.Element.select('.component').addClass('component-target');
            Ext.get(this.getEl()).removeClass('component-target');
        };
        compDrag.endDrag = function()
        {
            Ext.Element.select('.component').removeClass('component-target');
        };
    });


}

function comp_drag_drop(e, id) {
    var drg = YAHOO.util.Event.getTarget(e);

    // ensure we have the correct event target
    while(! YAHOO.util.Dom.hasClass(drg, "component"))
    {
        drg = drg.parentNode;
    }

    // insert into list and remove src
    var tar = YAHOO.util.Dom.get(id);

    // IE Hack in place where it found its source and target to be the same el
    if (tar != drg)
    {
        if (tar.previousSibling != drg) {
            drg.parentNode.removeChild(drg);
            tar.parentNode.insertBefore(drg, tar);
        } else {
            drg.parentNode.removeChild(drg);
            tar.parentNode.insertBefore(drg, tar.nextSibling);
        }

        // fix position css of dragged
        YAHOO.util.Dom.setStyle(drg, 'position', 'static');
        YAHOO.util.Dom.setStyle(drg, 'top', '');
        YAHOO.util.Dom.setStyle(drg, 'left', '');

        // remove over state
        YAHOO.util.Dom.removeClass(tar, "component-over");

        save_widget_positions();
    }
    else
    {
        // IE Hack in place where it found its source and target to be the same el
        YAHOO.util.Dom.removeClass(id, "component-over");
        YAHOO.util.Dom.setXY(this.id, [this.startPageX,this.startPageY]);
    }
}
function comp_invalid_drop(e, id) {
    // reset position
    YAHOO.util.Dom.setXY(this.id, [this.startPageX,this.startPageY]);
}
function comp_drag_over(e, id) {
    // show over state
    YAHOO.util.Dom.addClass(id, "component-over");
}
function comp_drag_out(e, id) {
    //remove over state
    YAHOO.util.Dom.removeClass(id, "component-over");
}

/* component head toolbar */
function comp_edit_toggle(item) {
    var parent = item;
    while(! YAHOO.util.Dom.hasClass(parent, "component"))
    {
        parent = parent.parentNode;
    }

    //var minimize = item.nextSibling.nextSibling;
    var minimize = YAHOO.util.Dom.getElementsByClassName("minimize", "a", parent)[0];

    // find main panel
    var mainPanel = YAHOO.util.Dom.getElementsByClassName("component-panel", "li", parent)[0];
    // find edit panel
    var editPanel = YAHOO.util.Dom.getElementsByClassName("component-edit", "li", parent)[0];
    // find image
    var edit = YAHOO.util.Dom.getElementsByClassName("edit-btn", "a", parent)[0];

    if(YAHOO.util.Dom.getStyle(editPanel, "display")=="none") {
        YAHOO.util.Dom.setStyle(editPanel, "opacity", 0);
        var hidePanel = mainPanel;
        var showPanel = editPanel;

        YAHOO.util.Dom.setStyle(edit, "opacity", 0);
        YAHOO.util.Dom.setStyle(edit, "display", 'none');

        YAHOO.util.Dom.setStyle(minimize, "opacity", 0);
        YAHOO.util.Dom.setStyle(minimize, "display", 'none');
    } else {
        var hidePanel = editPanel;
        var showPanel = mainPanel;

        YAHOO.util.Dom.setStyle(edit, "opacity", 1);
        YAHOO.util.Dom.setStyle(edit, "display", 'inline');

        YAHOO.util.Dom.setStyle(minimize, "opacity", 1);
        YAHOO.util.Dom.setStyle(minimize, "display", 'inline');
        minimize.getElementsByTagName("img")[0].src = minimize.getElementsByTagName("img")[0].src.replace("_on.gif", ".gif");
    }

    // do the hide show
    YAHOO.util.Dom.setStyle(hidePanel, "display", "none");
    YAHOO.util.Dom.setStyle(hidePanel, "opacity", 0);
    showPanel.style.display='';
    var showSub = new YAHOO.util.Anim(showPanel, {opacity:{from:0,to:1}}, .5);
    showSub.animate();
}
function comp_minimize_toggle(item) {
    var parent = item;
    while(! YAHOO.util.Dom.hasClass(parent, "component"))
    {
        parent = parent.parentNode;
    }

    if(YAHOO.util.Dom.getStyle(item, "opacity")==0) return false;

    // find main panel
    var mainPanel = YAHOO.util.Dom.getElementsByClassName("component-panel", "li", parent)[0];
    // find edit panel
    var editPanel = YAHOO.util.Dom.getElementsByClassName("component-edit", "li", parent)[0];
    // find image
    var img = item.getElementsByTagName("img")[0];

    if(YAHOO.util.Dom.getStyle(mainPanel, "display")=="none") {
        mainPanel.style.display='';
        var showSub = new YAHOO.util.Anim(mainPanel, {opacity:{from:0,to:1}}, .5);
        showSub.animate();
        img.src = img.src.replace("_on.gif", ".gif");
    } else {
        YAHOO.util.Dom.setStyle(mainPanel, "display", "none");
        YAHOO.util.Dom.setStyle(mainPanel, "opacity", 0);
        img.src = img.src.replace(".gif", "_on.gif");
    }

    save_minimized_status(parent.id, 'none' == mainPanel.style.display ? 1 : 0);
}

YAHOO.util.Event.addListener(window, "load", components_init);
