Element.addMethods({
    'find': function(element, selector){
        return element.getElementsBySelector(selector);
    },

    'fireEvt': function(element, event){
        var evt;
        if(document.createEvent)
        {
            // dispatch for firefox + others
            evt = document.createEvent('HTMLEvents');
            evt.initEvent(event, true, true ); // event type,bubbling,cancelable
            return !element.dispatchEvent(evt);
        }
        else
        {
            // dispatch for IE
            evt = document.createEventObject();
            return element.fireEvent('on'+event , evt)
        }
    }
})

String.prototype.hash = function(separator){
    var out = new Hash();
    var array = this.split(separator);
    array.each(function(item){
        if (item) out.set(item, item);
    })
    return out;
};

var Client = Class.create({});
Object.extend(Client, {
    messagebox: null,
	get: function(path)
	{
		document.location = Client.getUrl(path);
	},

    open: function(path, windowName)
    {
        var url = Client.getUrl(path);
        window.open(url, windowName);
    },

    openFront: function(path, windowName)
    {
        var url = url_front + '/' + path;
        window.open(url, windowName);
    },

    ajax: function(url, options)
    {
        $$('.'+options.messagebox).invoke('update', '<div class="ajax_loader"></div>');
        var callback = options.onComplete;
        options.onComplete = function(transport){
            callback(Client.log(transport, options));
        }
        new Ajax.Request(url, options);
    },

    getUrl: function(path)
    {
        return url_subapp + '/' + path;
    },

    log: function(transport, options)
    {
        var response = transport.responseText.split('<!-- debug-info -->');

        if (response.length>1 && $$('.log').length>0)
            $$('.log').first().insert({before:response[1]});

        $$('.'+options.messagebox).invoke('update', response[0]);
        return response[0];
    }
})
