if (typeof eBuddy == 'undefined') {
    var eBuddy = {};
}
if (typeof eBuddy.Website == 'undefined') {
    eBuddy.Website = {};
}

var sessionStarted = false;
eBuddy.Website.LoginBox = new function() {
    var default_loginbox_class = document.getElementById('loginbox').className;
    var popup;
    var serviceUrl;
    var default_values;
    var username_labels = {
        MASTER   : 'eBuddy ID',
        MSN      : 'Passport',
        YAHOO    : 'Yahoo ID',
        AIM      : 'Screen name',
        GTALK    : 'Email address',    
        FACEBOOK : 'Email address',    
        MYSPACE  : 'Email address',
        HYVES    : 'Username',    
        ICQ      : 'ICQ Number'    
    };
    
    function selectNetwork(network) {
        var networks = '-' + ['ebuddyid', 'msn', 'yahoo', 'aim', 'gtalk', 'facebook', 'icq', 'hyves', 'myspace'].join('-') + '-';
        if (networks.indexOf(network) > -1) {
            document.getElementById('loginbox').className = default_loginbox_class + ' selected-' + network;
            
            var networkSelected = network.toUpperCase();
            if (network == 'ebuddyid') {
                networkSelected = 'MASTER';
            }
            if (default_values && typeof default_values[networkSelected.toLowerCase()] != 'undefined') {
                jQuery('#login-form-username').val(default_values[networkSelected.toLowerCase()]);    
            }
            jQuery('#login-error-message').text(""); 
            jQuery('#login-form-password').val("");
            jQuery('#login-username-label').text(username_labels[networkSelected] || "Username");
            jQuery('#selected-network').val(networkSelected);
            jQuery('#remember-username-label').text(username_labels[networkSelected]);
        }
    };
    
        
    function openWindow(url){
        try {
            popup = window.open(url, 'ebuddy_beta', 'width=723,height=639,location=no,status=no,menubar=no, toolbar=no,scrollbars=no, statusbar=no, resizable=yes, titlebar=no', true);
        } catch (e) {
        
        }
    }


    function submitToOberon(){
        var username = jQuery('#login-form-username').val();
        var network = jQuery('#selected-network').val().toLowerCase();
        var status = jQuery('#appear-offline').is(':checked') ? 'HDN' : 'NLN';
        
        if (username && network && status) {
            jQuery('#ie6_e_username').val(username);
            jQuery('#ie6_e_network').val(network);
            
            
            jQuery('#ie6_e_status').val(status);
            
            jQuery('#ie6_login_form').submit();
        }
    }


    function bindEvents(options) {
        jQuery('#loginbox-network-list').bind('click', function(e) {
            var network = (e.originalTarget || e.srcElement).parentNode.id.replace('loginbox-network-', '');
            selectNetwork(network);            
        });
        
        
        if (jQuery.browser.msie && parseInt(jQuery.browser.version, 10) < 7) {
            jQuery('#login-form').bind('submit', function(e) {
                var isValid = validate();
                if (!isValid) {
                    return false;
                }
                
                var password = jQuery('#login-form-password').val();
                if (!password) {
                    return;
                }
                
                jQuery('#ie6_e_password').val(password);
                jQuery('#ie6_e_encoding').val('');
                
                // First open the popup to thwart popup blockers
                openWindow('');
                
                try {
                    jQuery.ajax({
                        url:options.oberon_url + '/secure_js.jsp',
                        dataType:'script',
                        error: submitToOberon,
                        success: function() {
                            if (typeof EBUDDY_RSA_E !== 'undefined' && typeof EBUDDY_RSA_M !== 'undefined') {
                                Crypt.BigInt.setMaxDigits(77);
                                
                                var keyPair = new Crypt.RSA.getKeyPair(
                                    EBUDDY_RSA_E, '',
                                    EBUDDY_RSA_M
                                );
                                
                                var encrypted = Crypt.RSA.encrypt(keyPair, password);
                                
                                jQuery('#ie6_e_password').val(encrypted);
                                jQuery('#ie6_e_encoding').val('rsa');
                            }
                            
                            submitToOberon();
                        }
                    });
                } catch(e) {
                    // Skip encryption and go straight to submit
                    submitToOberon();
                }
                    
                return false;
            });
        } else {
            jQuery('#login-form').bind('submit', function(e) {
                sessionStarted = false;
                e.preventDefault();
                
                var isValid = validate();
                if (!isValid) {
                    return false;
                }
                openWindow(serviceUrl + '?startsession=1');
                
                if (popup) {
                    popup.focus();
                } else {
                    alert("Your current browser settings prevented the eBuddy Web Messenger window from beeing launched. Please disable your pop-up blocker or add ebuddy.com to allowed websites.");
                }
                          
            });
        }

    };
    
    function validate() {
        jQuery('#login-error-message').text("");
        var username = document.getElementById('login-form-username');  
        var password = document.getElementById('login-form-password');
          
        if (isEmpty(username) || isEmpty(password)) {
            jQuery('#login-error-message').text(error_mess);
            return false;                    
        }
        
        if (!isValid(username)) {
            jQuery('#login-error-message').text(error_mess);
            return false;                    
        }
        
        return true;
    }
    
    function setServer(server, version) {
        if (server) {
            jQuery('#default-server').val(server);
        }
        
        if (version) {
            jQuery('#default-server-version').val(version);
        }
    }
    
    function check() {
        jQuery.ajax({
            method : 'GET',
            url    : 'check.php',
            dataType: 'json',
            success : function(response) {
                if (response && response.server && response.version) {
                    setServer(response.server, response.version);    
                }
            }
        });
    }
    
    function init(options) {
        serviceUrl = options.service_url;
        
        if (options.username_keys) {
            username_labels = options.username_keys;
        }
        
        if (options.default_values) {
            default_values = options.default_values;
        }
        
        //check();
        
        
        if (location.hash) {
            selectNetwork(location.hash.substr(1));
        } else {
            if (options.default_network) {
                if (options.default_network == 'master') {
                    options.default_network = 'ebuddyid';
                }
                selectNetwork(options.default_network);    
            } else {
                selectNetwork('msn');    
            }
        }     
        bindEvents(options);   
    }
    
    return {
        init : init,
        openWindow: openWindow
    }
};


