/**
* extends mooTools Object
*
*
**/

var Launcher = new Class({
    Extends: Object,

    initialize: function(type, tabID) { // dbID is the server side uniqueID, used to reference the params
        this.type = type;		       // keep a reference to this
	this.tabID = tabID;

        var src = 'apps/' + this.type + '/';
        this.el = new Element('div', {		// create the schmidget <div> container
            'id': this.id,					// assigns the ID
            'class': 'launcher'
        });

        // load template
        this.el.set('load', {'async': false})
        this.el.load(src + 'index.html')


        // probably want to move this to post init??  or at least the fade
        this.el.setOpacity(0.0);
        
        var horizon = $('horizon');
        this.el.injectInside(horizon); 	// injects new schmidget <div> into the current desktop

        // not sure why schmidget style is not obeyed but force this.
//        this.el.setStyles({'top': '100px', 'left': '100px'});

	this.requests = new Array();

        var self = this;

        this.el.addEvent('mouseenter', function(e) {
            e = new Event(e).stop();
            self.showClose();
        });
        
        this.el.addEvent('mouseleave', function(e) {
            e = new Event(e).stop();
            self.hideClose();

            var minmax = this.getElement('img.widgetMinMax');
            if (minmax) self.hideMinMax();
        });

        // dynamically attach close button
        this.closeButton = new Element('img', {
            'class': 'dialogClose',
            'src': 'css/img/dialogClose.png',
            'alt': 'Close'
        })
        .setOpacity(0.0)
        .addEvent('click', function(ev){ new Event(ev).stop(); self.close(); })
        .addEvent('mousedown', function(ev){ var evt = new Event(ev);  evt.stop()})
        .addEvent('mouseup', function(ev){ var evt = new Event(ev);  evt.stop()})
        .inject(this.el);

        schmedley.fade('in', this.el);
        
    },

    postInit: function(){
	this.getInitParams();
        schmedley.launchers[this.type] = this; // let the App now we've got a launcher of this type
        
    },

    showClose: function() {
        this.closeButton.setOpacity(1.0);
    },

    hideClose: function() {
        this.closeButton.setOpacity(0.0);
    },

    positionClose: function(left, top){
        this.closeButton.setStyles({'top': top, 'left': left});
    },

    close: function() { // used to remove the supporting CSS and JS files for a schmidget after the last instance has been closed/removed
        schmedley.removeLauncher(this.type);
        this.el.destroy();
    },

    createUploader: function(id) {
        if (!id){
	    var id = 'target_' + this.dbID;
        }

        var objs = $('objects');
	// IE fucking sucks
        if (Browser.Engine.trident){
            var html = '<iframe name="' + id + '" src="#" id="' + id + '" height=0 width=0 class="uploadObject">';
            var uploadObject = document.createElement(html); 
            objs.appendChild(uploadObject);
            return $(uploadObject);
        }
        else {
            var uploadObject = new Element('iframe');

            uploadObject.set({
                'id' : id,
                'name' : id,
                'src' : '#',
                'class' : 'uploadObject'
            })
            .setStyles({'height': 0, 'width': 0})

        }

        uploadObject.inject($('objects'));
	return uploadObject;
    },

    updateParams: function(params) {
        var self = this;
        
        var req = new Request.JSON({
            url: "updateLauncherParams.php", 'async': true, onComplete: function(response) {
                if (response && response.status == 'success') {
                }
                else {
                    schmedley.alert("Unable to update Launcher Params");
                }
                self.requests.erase(req);
            }
        });
        req.post({'n': this.type, 'p': JSON.encode(params)});
        this.requests.push(req);
    },

    getInitParams: function(){
	var self = this;

	var req = new Request.JSON({
            url: "getInitParams.php", onComplete: function(response){
                if (response && response.status == 'success') {
                    self.parseParams(response.data);
                }
                else {
                    schmedley.alert(gls('lauA'));
                }
		self.getParams();
            }
        });
        req.post({'n': this.type, 't': this.tabID });

    },


    // this will get user specific launcher parameters
    getParams: function(){
        var self = this;

        var req = new Request.JSON({
            url: "getLauncherParams.php", onComplete: function(response){
                if (response && response.status == 'success') {
                    self.parseParams(response.data);
                }
                else {
                    schmedley.alert(gls('lauA'));
                }
            }
        });
        req.post({'n': this.type});
//        this.requests.push(req);
    },

    // override this method
    parseParams: function(params){
    }

    // don't leave any trailing commas
});

