Object.extend(Event, (function() {var cache = {}; return {delegate: function(element, eventName){if (arguments[3]){var rules={}; rules[arguments[2]]=arguments[3];}else{var rules=Object.extend({}, arguments[2]);}var el=$(element),ev=eventName,id=el.identify?el.identify():'document';if(!cache[id]){cache[id]={'$observer':function(event){var el=event.element();if(cache[id][event.type]) for(var i=0,len=cache[id][event.type].length;i<len;i++) for(var selector in cache[id][event.type][i]) if(cache[id][event.type][i][selector][1].match(el)) cache[id][event.type][i][selector][0](event);}};} if (!cache[id][ev]){cache[id][ev]=[]; el.observe(ev, cache[id]['$observer']);} for(var selectorStr in rules) rules[selectorStr]=[rules[selectorStr], new Selector(selectorStr)]; cache[id][ev].push(rules); return el;},	stopDelegating:function(element, eventName){if(element===undefined){for(var id in cache) Event.stopDelegating(id == '$document'?document:id);cache={};return true;} if(Object.isString(arguments[2])){var rules={};rules[arguments[2]]=true;}else if(arguments[2]){var rules=arguments[2];}else{var rules=false;}var el=$(element),ev=eventName,id=el.identify?el.identify():'$document';if(cache[id]){if(ev&&cache[id][ev]){for(var i=0,len=cache[id][ev].length;i<len;i++){if(rules){for(var selector in rules) delete cache[id][ev][i][selector];}if(!rules||$H(cache[id][ev][i]).size()==0){el.stopObserving(ev,cache[id]['$observer']);cache[id][ev][i] = 'r';}}cache[id][ev]=cache[id][ev].without('r');}else{for(var evName in cache[id]) if(evName!='$observer') el.stopObserving(evName,cache[id]['$observer']); delete cache[id];}} return el;}};})());
Element.addMethods({delegate: Event.delegate, stopDelegating: Event.stopDelegating}); document.delegate = Event.delegate.curry(document); document.stopDelegating = Event.stopDelegating.curry(document); Event.observe(window, 'unload', Event.stopDelegating);

/*ajaxUpload : function (url, sendData, callback) {
    var req = new JsHttpRequest();

    req.onreadystatechange = function() {
        if (req.readyState == 4 && callback) {
            callback.apply(callback, req);
        }
    }
    req.open(null, url, true);
    req.send({'ajaxData' : sendData});
}*/

var Application = {
    options : {
        baseRoot    : '',
        baseUrl     : '',
        ajaxRoot    : '/ajax',
        returnTo    : ''
    },

    init : function() {
        Object.extend(this.options, {
            baseUrl     : 'http://' + document.domain,
            ajaxRoot    : '/ajax'
        });
    },

    initObservers : function(params) {
        Object.extend(this.options, params || {});

        try {
            $('more-vip').observe('click', function(event) {
                new Ajax.Updater('vip-results', '/get-more-vip/', {method : 'get'})
            })
        } catch(e) {};

        try {
            $('buy-escort-points').onclick = function() {
                this.goToURL('/buy-escort-points/');
                return false;
            }.bind(this)
        } catch(e) {};

        try {
            $('loginForm').onsubmit = function() {
                if (!($('loginForm').login_email.value) || !($('loginForm').login_password.value)) {
                    return false;
                }
                ['login_email', 'login_password'].each(function(_e) {
                    $(_e).setStyle({
                        color       : "#000",
                        background  : '#fff'
                    });
                })

                new Ajax.Request('/login/', {
                    method: 'post',
                    parameters: $('loginForm').serialize(),
                    onComplete : function(transport) {
                        var _r = transport.responseJSON;

                        if(_r == 'success') {
                            if (this.options.returnTo && this.options.returnTo.indexOf('join') == -1) {
                                location.href = this.options.returnTo;
                            } else {
                                location.href = location.href;
                            }
                        } else if (_r == 'success-new') {
                            location.href = '/my-profile';
                        } else if (_r == 'locked') {
                            location.href = '/logout';
                        } else {
                            var _e = $('login_' + _r);
                            _e.setStyle({
                                color       : "RED",
                                background  : 'yellow'
                            });
                            _e.value = 'Incorrect ' + _r;
                        }
                    }.bind(this)
                });
                return false;
            }.bind(this)
        } catch(e) {};
    },

    setOptions : function(options) { Object.extend(this.options, options || {}); },

    getOptions : function() { return this.options },

    goToURL : function(url) { location.href = (url || document.URL); return false; },

    initTabs : function (target, options) {
        var options = Object.extend({
            defaultTab      : 'first',
            activeClassName : 'selected-tab'
        }, options || {});

        if (target) {
            new Control.Tabs($(target), options);
        } else {
            $$('ul.tab-navigation').each(function(i){ new Control.Tabs(i, options) });
        }
    },

    openChatWindow : function(partnerId) {
        var chatWindow = window.open('/chat/' + partnerId, '_blank', 'width=500; height=560; resizable=false');
    }
};
Application.init();