var MM_LOCALE_LIST = {
    'zh-cn' : 'Simplified Chinese (China)',
    'da-dk' : 'Danish (Denmark)',
    'nl-nl' : 'Dutch (Netherlands)',
    'en-gb' : 'English (United Kingdom)',
    'en-us' : 'English (United States)',
    'fr-fr' : 'French (France)',
    'de-de' : 'German (Germany)',
    'it-it' : 'Italian (Italy)',
    'nb-no' : 'Norwegian (Norway)',
    'pl-pl' : 'Polish (Poland)',
    'pt-pt' : 'Portugese (Portugal)',
    'ru-ru' : 'Russian (Russia)',
    'es-es' : 'Spanish (Spain)',
    'sv-se' : 'Swedish (Sweden)'
};

var MM_LOCALE_OPTIONS = (function() {
    var options = document.createDocumentFragment();

    for (var locale in MM_LOCALE_LIST) {
        var current = document.createElement( 'option' );
        current.setAttribute( 'value', locale );
        current.innerHTML = MM_LOCALE_LIST[locale];

        options.appendChild(current);
    }

    return options;

})();

var MM_WINDOW_PARAMS = (function() {
    var query_params = {};

    try {
        var query_string = window.location.search.split('?')[1].split('&');
        for (var i = 0, j = query_string.length; i < j; i++) {
            var current = query_string[i].split('=');
            if (!query_params[current[0]])
                query_params[current[0]] = current[1];
        }
    } catch(err) {};

    if (!query_params['locale'])
        query_params['locale'] = 'en-us';

    return query_params;
})();

function reloadWithLocale( locale ) {
    window.location = '?locale=' + locale;
}

(function () {
    if (typeof MMAttachEvent === 'undefined') {
        document.write(
            '<script type="text/javascript" src="/API/maps/1.2/demo?locale=' + MM_WINDOW_PARAMS['locale'] + '"></script>'
        );
    }

    function createLocaleField() {
        var outer_div = document.createElement( 'div' );
        var inner_div = document.createElement( 'div' );

        inner_div.innerHTML = '<span>Change mapviewer locale: </span>';
        inner_div.className = 'MMlocalediv';

        outer_div.className = 'MMlocaleform';
        outer_div.appendChild( inner_div );

        var select = document.createElement( 'select' );
        inner_div.appendChild( select );

        if (!document.body.className)
            document.body.className = 'MMlocaleEnabled';

        document.body.appendChild( outer_div );

        return select;
    }

    function loadLocales() {
        var locale_field = document.getElementById('locale_field');

        if (locale_field === null) {
            locale_field = createLocaleField();
            MMAttachEvent(locale_field, 'change', function() {
                if (locale_field.value != window.MM_LOCALE)
                    reloadWithLocale( locale_field.value );
            });
        } else if (locale_field && locale_field.form) {
            locale_field.form.onsubmit = function() {
                if (locale_field.value != window.MM_LOCALE)
                    reloadWithLocale( locale_field.value );

                return false;
            };
        }

        locale_field.appendChild( MM_LOCALE_OPTIONS );
        locale_field.value = window.MM_LOCALE;

        viewCode();
    }

    if (document.addEventListener) {
        window.addEventListener( 'load', loadLocales, false );
    } else if (document.attachEvent) {
        window.attachEvent( 'onload', loadLocales );
    }
})();

// -----------------------------
function viewCode() {
    var els = document.getElementsByTagName('div');
    for (i=0; i < els.length; i++) {
        var el = els[i];
        var prefix = 'source_';
        var id = els[i].id;
        if (el.id && el.id.indexOf (prefix == 0)) {
            var source_id = id.substring(prefix.length, els[i].id.length);
            if (document.getElementById(source_id)) {
                el.innerHTML = '<pre><tt>' + document.getElementById(source_id).innerHTML.replace(/</g, '&lt;') + '</tt></pre>';
           } 
        }
    }
}
