_onload = window.onload;

function setFormValue(id, value) {
    var elem = $(id);
    if (!elem) return;

    if (elem.tagName == 'INPUT' && elem.value == '') {
        elem.value = value;
    } else if (elem.tagName == 'SELECT') {
        // set the options
        var options = elem.select('option');
        for (var i = 0; i < options.length; i++) {
            var option = options[i];
            if (option.innerHTML == value) {
                elem.selectedIndex = i;
                break;
            }
        }
    }
}

window.onload = function() {
    _onload();

    var openidLink = $('openid-link');
    if (openidLink) {
        $('openid-link').observe('click', function(event) {
            event.stop();
            $('openid-login').show();
            $('openid-url').activate();
        });
    }

    // check for fbuid
    var fbuidInput = $('signupForm').down("input[name='fbuid']");
    if (fbuidInput && fbuidInput.value != '') {
        var fbuid = fbuidInput.value;
        FB.ensureInit(function() {
            FB.Facebook.apiClient.users_getInfo(fbuid, ['contact_email', 'current_location', 'first_name', 'last_name', 'sex', 'username'], function(obj) {
                if (!obj) return; 

                var result = obj[0];
                setFormValue('first_name', result.first_name);
                setFormValue('last_name', result.last_name);
                setFormValue('username', result.username);
                setFormValue('email', result.contact_email);
                setFormValue('country', result.current_location.country);
                setFormValue('zipcode', result.current_location.zip);
            });
            FB.Facebook.apiClient.users_hasAppPermission('email', function(result) {
                if (!result) {
                    FB.Connect.showPermissionDialog('email', onPermissionCallback);
                }
            });
        });
    }

    $('username').activate();

    var signupForm = $('signupForm');
    signupForm.observe('submit', function(event) {
        if (!signupForm['agree'].checked) {
            event.stop();
            alert('Please read and accept the Terms of Service before continuing.');
        }
    });

    var country = $('country');
    if (country) {
        country.observe('change', function(event) {
            var value = $('country').value;
            if (value == "840") {
                signupForm.select('.zip-code-row').each(function(elem) {
                    elem.appear();
                });
            } else {
                signupForm.select('.zip-code-row').each(function(elem) {
                    elem.value = '';
                    if (elem.visible()) {
                        elem.fade();
                    }
                });
            }
        });
    }

    var associateIdentityLink = $('associate-identity-link');
    if (associateIdentityLink) {
        associateIdentityLink.observe('click', function(event) {
            $('signupForm').hide();
            $('associate-identity-callout').hide();
            $('associate-identity-form').show();
        });
    }

    var signupLink = $('signup-link');
    if (signupLink) {
        signupLink.observe('click', function(event) {
            $('associate-identity-form').hide();
            $('signupForm').show();
            $('associate-identity-callout').show();
        });
    }

    // generate gmt offset string
    var tzo = new Date().getTimezoneOffset();
    var tzh = tzo / 60 * -1;
    var tzm = tzo % 60 + '';
    if (tzm.length == 1) tzm = '0' + tzm;
    var tz = tzh;
    if (tzh > -10 && tzh < 0) {
        tz = '-0' + (tzh * -1);
    } else if (tzh > 0 && tzh < 10) {
        tz = '+0' + tzh;
    } else if (tzh >= 10) {
        tz = '+' + tzh;
    }
    tz += ':' + tzm;

    signupForm.insert(new Element('input', {'type': 'hidden', 'name': 'timezone', 'value': tz}));
}

function onPermissionCallback(param) {
    if (param.indexOf('email') == -1) {
        $$('.email-row').invoke('show');
    } else {
        var fbuidInput = $('signupForm').down("input[name='fbuid']");
        if (!fbuidInput || fbuidInput.value == '') return;
        var fbuid = fbuidInput.value;
        FB.Facebook.apiClient.users_getInfo(fbuid, ['contact_email'], function(obj) {
            var result = obj[0];
            setFormValue('email', result.contact_email);
        });
    }
}

function facebook_onlogin() {
    // get the fbuid and pass to facebook authenticate
    var fbuid = FB.Connect.get_loggedInUser()
    if (!fbuid) return;
    location.href = '/auth/fblogin?uid=' + fbuid;
}
