/**
 * gTaskbar (taskbar for jQuery Ui.Dialog Plugin)
 * Version: 1.0
 * Author: Grzegorz Zagrobelny
 * Date: 27.08.2009
 *
 * Dependencies:
 *  - jQuery 1.3.2
 *  - ui.dialog
 *  - ui.sortable
 *  - (ui.core,ui.base, css ui.all)
 */

var taskbar = {
    init: function() {
        this.taskbarObj = document.getElementById(this.taskbarID);
        this.togglerObj = document.getElementById(this.togglerID);
        this.tasksObj = document.getElementById(this.tasksID);
        this.actionsObj = document.getElementById(this.actionsID);

        $('#' + this.tasksID).sortable({revert: true, update: function(event, ui) {

        }});
    },
    taskbarID: 'taskbar',
    togglerID: 'toggler',
    tasksID:   'tasks',
    actionsID: 'actions',
    hideClass: 'hide',
    showClass: 'show',
    openClass: 'open',
    iconPath: '../application/gfx/',
    showHideTime: 1000,
    taskbarObj: {},
    togglerObj: {},
    tasksObj: {},
    actionsObj: {},
    dialogs: {},
    titles: {},
    icons: {},
    tasks: {},
    minimizedTasks: {},
    hiddenTasks: {},
    isset: function (variable) {
        return( typeof(variable) != 'undefined' );
    },
    closeAll: function() {
        for (id in this.dialogs) {
            if (this.dialogs[id].dialog('isOpen')) {
                this.dialogs[id].dialog('close');
            }
        }
    },
    toggle: function() {
        var self = this;
        if ($(this.togglerObj).hasClass(this.hideClass)) {
             $(self.tasksObj).hide('fast', function() {
                $(self.actionsObj).hide();
                $(self.taskbarObj).animate({
                    width: "35px",
                    opacity: 0.4
                }, self.showHideTime, 'linear', function() {
                    $(self.togglerObj).removeClass(self.hideClass);
                    $(self.togglerObj).addClass(self.showClass);
                    $(self.togglerObj).attr('title', 'Pokaż pasek zadań');
                    $(self.taskbarObj).animate({opacity:1});
                });
             });
        } else {
            $(this.taskbarObj).animate({
                width: "99%",
                opacity: 1
             }, this.showHideTime, 'linear', function() {
                $(self.actionsObj).show();
                $(self.togglerObj).removeClass(self.showClass);
                $(self.togglerObj).addClass(self.hideClass);
                $(self.togglerObj).attr('title', 'Schowaj pasek zadań');
                $(self.tasksObj).show('fast');
             });
        }
    },
    minimizeAll: function() {
        for (id in this.dialogs) {
            if (this.dialogs[id].dialog('isOpen')) {
                if (!this.isset(this.tasks[id])) {
                    this.tasks[id] = {title: this.titles[id] || 'Brak tytułu'};
                }
                this.dialogs[id].dialog('hideDialog');
                this.hiddenTasks[id] = true;
            }
        }
        this.render();
        for (id in this.dialogs) {
            this.classToggle(id, false);
        }
    },
    isMinimized: function(taskID) {
        if (this.isset(this.minimizedTasks[taskID])) {
            if (this.minimizedTasks[taskID] == true) {
                return true;
            } else {
                return false;
            }
        } else {
            return false;
        }
    },
    clean: function() {
        this.tasks = {};
        $(this.tasksObj).html('');
    },
    render: function() {
        for (id in this.tasks) {
            if (this.isMinimized(id) == false) {

                if (isset(this.icons[id])) {
                    // create icon for task
                    var img = document.createElement('img');
                    img.setAttribute('class', 'icon');
                    img.setAttribute('src', this.iconPath + this.icons[id]);
                }
                // create new task
                var span = document.createElement('span');
                span.setAttribute('class', 'task');
                span.setAttribute('task', id);
                if (isset(this.icons[id])) {
                    $(span).append(img);
                    $(span).append(this.tasks[id].title);
                    //span.innerHTML = img.innerHTML + this.tasks[id].title;
                } else {
                    span.innerHTML = this.tasks[id].title;
                }
                span.setAttribute('onclick', 'taskbar.open(this)');
                this.tasksObj.appendChild(span);
                this.minimizedTasks[id] = true;
                this.tasks[id].html = span;
            }
        }
    },
    open: function(senderTask) {
        var task = $(senderTask).attr('task');
        if (task != undefined) {
            if (this.isset(this.hiddenTasks[task])) {
                if (this.hiddenTasks[task]) {
                    // close and remeber to taskbar
                    this.dialogs[task].dialog('showDialog');
                    this.hiddenTasks[task] = false;
                    this.dialogs[task].dialog('moveToTop');
                    this.dialogs[task].effect('highlight');
                    this.classToggle(task, true);
                } else {
                    this.dialogs[task].dialog('hideDialog');
                    //this.minimizedTasks[task] = false;
                    //this.tasksObj.removeChild(this.tasks[id].html);
                    this.hiddenTasks[task] = true;
                    this.classToggle(task, false);
                }
            }
        }
    },
    openByID: function(task) {
        if (this.isset(this.hiddenTasks[task])) {
            if (this.hiddenTasks[task]) {
                // close and remeber to taskbar
                this.dialogs[task].dialog('showDialog');
                this.hiddenTasks[task] = false;
                this.dialogs[task].dialog('moveToTop');
                this.dialogs[task].effect('highlight');
                this.classToggle(task, true);
            } else {
                this.dialogs[task].dialog('hideDialog');
                //this.minimizedTasks[task] = false;
                //this.tasksObj.removeChild(this.tasks[id].html);
                this.hiddenTasks[task] = true;
                this.classToggle(task, false);
            }
        }
    },
    isHidden: function(task) {
        if (this.isset(this.hiddenTasks[task])) {
            if (this.hiddenTasks[task]) {
                return true;
            } else {
                return false;
            }
        } else return false;
    },
    minimize: function(id) {

        if (!this.isset(this.tasks[id])) {
            this.tasks[id] = {title: this.titles[id] || 'Brak tytułu'};
        }
        this.dialogs[id].dialog('hideDialog');
        this.hiddenTasks[id] = true;

        this.render();
        this.classToggle(id, false);
    },
    classToggle: function(id, mode) {
        if (this.isset(this.tasks[id]))
        if (mode) {
            $(this.tasks[id].html).addClass('open');
        } else {
            $(this.tasks[id].html).removeClass('open');
        }
    },
    close: function(id) {

        if (this.isset(this.tasks[id])) {
            this.tasksObj.removeChild(this.tasks[id].html);
            delete this.tasks[id];
            delete this.hiddenTasks[id];
            delete this.minimizedTasks[id];
        }
    },
    add: function(id) {
        if (this.dialogs[id].dialog('isOpen')) {
            if (!this.isset(this.tasks[id])) {
                this.tasks[id] = {title: this.titles[id] || 'Brak tytułu'};
            }
            this.hiddenTasks[id] = false;
        }
        this.render();
        this.classToggle(id, true);
    }
}


