(function(jQuery) {

    /**
     *
     * Select Country and Language
     *
     * @param Object options An object literal containing key/value pairs to provide optional attributes.
     *
     * clObject - JSON Object with Country and Language definitions
     *
     *
     */

    /*
     var fileref = document.createElement('script')
     fileref.setAttribute("type", "text/javascript")
     fileref.setAttribute("src", "js/jquery.countryLanguageMenu.inputValues.js")
     document.getElementsByTagName("head")[0].appendChild(fileref)
     */

    jQuery.fn.countryLanguageMenu = function(options, callbackFnk) {

        var defaults = {
            clObject: countryLanguageMenu.inputValues
        }

        /* Set options */
        var opts = jQuery.extend(defaults, options);

        var selectedCountry = null;
        var CountryChanged = 'false';


        /* toggle Country and Language dropdowns */
        $inputCountry = jQuery(this).find('#dropdown_ls_country');
        $inputLanguage = jQuery(this).find('#dropdown_ls_language');

        $inputCountry.click(function() {
            jQuery(this).next().toggle();
            $inputLanguage.next().hide();
            return false;
        })
        
        $inputLanguage.click(function() {
            jQuery(this).next().toggle();
            $inputCountry.next().hide();
            return false;
        })

        $language_layer = jQuery(this);

        jQuery(this).find(":submit").click(function() {
            if (typeof callbackFnk == 'function') {
                $language_layer.fadeOut("fast");
                //callbackFnk.call(this, $inputCountry.children().attr('name'), $inputLanguage.children().attr('name'));     
                callbackFnk.call(this, CountryChanged, $inputLanguage.children().attr('name'));     
            }
        })

        jQuery(this).find('.close').click(function() {
            $language_layer.fadeOut("fast");
            return false;
        })

        jQuery('.selectGlobal').click(function() {
            $language_layer.fadeIn("fast");
            return false;
        })


        // Add all Countries to HTML Page
        var $countryBox = jQuery('#dropdown_ls_country_links .middle')
        jQuery.each(opts.clObject, function(key, value) {

            if (value.more) {
                var $more = jQuery("<div style='display:none'></div>");
                $countryBox.append($more);
                jQuery.each(value.more, function(ikey, ivalue) {
                    addCountry(ikey, ivalue, $more);
                });
            }

            addCountry(key, value, $countryBox);


        });
        $countryBox.append("<br class='clear' />");

        // Add a single Country
        function addCountry(key, value, obj, js) {

            /* set initial country*/
            if (value.selected) {
                initLanguages(key, value);
            }

            /* generate country html element */
            var $country = jQuery("<a style='background-image: url(" + value.flag + ")' href='#'>" + value.value + "</a>");
            obj.append($country);

            if (value.more) {
                $country.click(function() {
                    jQuery(this).prev().toggle();
                    return false;
                })
            } else {
                $country.click(function() {
                	  if (value.parameter == selectedCountry){
                      CountryChanged = 'false';
                    }else{                    	
                      CountryChanged = 'true';
                    }
                    selectedCountry = value.parameter;
                    
                    initLanguages(key, value);
                    jQuery('#dropdown_ls_country_links').toggle();
                    return false;
                })
            }
        }


        function initLanguages(key, value) {
            jQuery('#dropdown_ls_country input').val(value.value).css('background-image', "url(" + value.flag + ")").attr('name', value.parameter);          // init Language
            var $languageBox = jQuery('#dropdown_ls_language_links .middle')
            $languageBox.empty();
            jQuery.each(value.languages, function(key, value) {
                addLanguage(key, value, $languageBox);
            })
            $languageBox.append("<br class='clear' />");
        }


        // Add Languages depending on Country
        function addLanguage(key, value, obj) {

            if (value.selected) {
                jQuery('#dropdown_ls_language input').val(value.value).attr('name', value.parameter);
            }

            /* generate language html element */
            var $language = jQuery("<a href='#'>" + value.value + "</a>");

            obj.append($language)
            $language.click(function() {           	
                jQuery('#dropdown_ls_language input').val(value.value).attr('name', value.parameter);
                jQuery('#dropdown_ls_language_links').toggle();
                return false;
            })
        }


    }
})(jQuery);

