var g_locales = null;
var g_cookie_name = 'cc';

jQuery( document ).bind( 'ready', function() {
    var options = {
            href : '/?fuseaction=main.chooseLocale',
            opacity: '0.7',
            overlayClose: false,
            escKey: false,
		    scrolling: false,
            onComplete: onChooseLocaleLoad
        };

    if( !jQuery.cookie( g_cookie_name ) )
        jQuery.colorbox( options );
    else {
        jQuery( '.user_locale .change' ).show();
        jQuery( '.user_locale .change a' ).colorbox( options );
    }
});

function onChooseLocaleLoad() {
    // First, disable the form while we load the locale data
    jQuery( '#choose_locale_country, #choose_locale_proceed, #choose_locale_remember' ).attr( 'disabled', 'disabled' );

    jQuery.ajax( {
        type: "GET",
        url: "/?fuseaction=main.getLocales",
        contentType: "application/json",
        dataType: "json",
        success: onChooseLocalesReceived,
        error: function (XMLHttpRequest, textStatus, errorThrown) { alert( errorThrown); }
    } );
}

function onChooseLocalesReceived( locales ) { 
    g_locales = locales;

    jQuery("#choose_locale_country").val( locales.defaultCountry );
    var src = jQuery.map( locales.countries, function(label, i) { return { label: label, value: locales.codes[i] } } );

    jQuery("#choose_locale_country").autocomplete({
        source: src,
        minLength: 0,
        open: function() { jQuery( '.ui-autocomplete' ).width( jQuery( "#choose_locale_country" ).width() ); },
        select: function(e,ui) { jQuery( '#choose_locale_country' ).val( ui.item.label ); jQuery( '#choose_locale_proceed' ).removeAttr( 'disabled' ); return false; }
    });

    jQuery( '#choose_locale_search' ).click( function() { jQuery('#choose_locale_country').autocomplete( 'search', '' ).focus(); } );
    jQuery( '#choose_locale_country' ).bind( 'keyup change blur', validateLocale ).keyup( onChooseLocaleCountryKeyUp );
    jQuery( '#choose_locale_proceed' ).bind( 'click', chooseLocaleSetCookie );

    jQuery( '#choose_locale_remember' ).val( 'remember' );

    // Enable the form
    jQuery( '#choose_locale_country, #choose_locale_proceed, #choose_locale_remember' ).removeAttr( 'disabled' );
}


// The enter key will trigger pressing the button
function onChooseLocaleCountryKeyUp( event ) {
    if( event.keyCode == 13 && !jQuery( '#choose_locale_proceed' ).is(':disabled') )
        chooseLocaleSetCookie();
}

// If the country in the box matches what we have, then enable the proceed button
function validateLocale() {
    if( jQuery.inArray( jQuery( '#choose_locale_country' ).val(), g_locales.countries ) > -1 && jQuery('#choose_locale_country').val() != '-------' )
        jQuery( '#choose_locale_proceed' ).removeAttr( 'disabled' );
    else
        jQuery( '#choose_locale_proceed' ).attr( 'disabled', 'disabled' );
}

function chooseLocaleSetCookie() {
    // if 'remember selection' is checked, set cookie expiration for 40 days
    var options = jQuery( '#choose_locale_remember' ).is( ':checked' ) ? { expires : 40 } : {};
    var country = jQuery( '#choose_locale_country' ).val();
    var code    = g_locales.codes[jQuery.inArray( country, g_locales.countries )];

    jQuery.cookie( g_cookie_name, code, options );
    location.reload( true );
}

