/*
* multilang_mot_cles
*
* Copyright (c) 2006 Renato Formato (renatoformato@virgilio.it)
* Licensed under the GPL License:
* http://www.gnu.org/licenses/gpl.html
*
*/
var multilang_containers={},forms_fields={},multilang_forms,multilang_menu_lang;
var match_multi = /(?:\[([a-z_]+)\]|^[\s\n]*)((?:.|\n)*?)(?=\[[a-z_]+\]|$)/ig;
var multilang_css_link,multilang_css_cur_link={},multilang_root,multilang_fields_selector,multilang_menu_selector,multilang_forms_selector;
multilang_css_link = {"cursor":"pointer","margin":"2px 5px","float":"left"};
$.extend(multilang_css_cur_link,multilang_css_link);
$.extend(multilang_css_cur_link,{fontWeight:"bold"});
/* options is a hash having the following values:
* - fields (mandatory): a jQuery selector to set the fields that have to be internationalized.
* - page (optional): a string to be searched in the current url. if found the plugin is applied.
* - root (optional): the root element of all processing. Default value is 'document'. To speed up search
* - forms (optional): a jQuery selector to set the forms that have to be internationalized. Default value is 'form'.
* - main_menu (optional): a jQuery selector to set the container for the main menu to control all the selected forms.
* - form_menu (optional): a jQuery selector to set the container for the form menus.
*/
function multilang_init_lang(options) {
//Detect if we're on the right page and if multilinguism is activated. If not return.
if((options.page && window.location.search.indexOf(options.page)==-1) || multilang_avail_langs.length<=1) return;
//set the root element of all processing
var root = options.root || document;
multilang_root = $(root);
//set the main menu element
multilang_containers = options.main_menu ? $(options.main_menu,multilang_root) : $("empty");
//create menu lang template
multilang_menu_lang =$("
");
$.each(multilang_avail_langs,function() {
multilang_menu_lang.append($("
").html("["+this+"]").css(this==multilang_def_lang?multilang_css_cur_link:multilang_css_link)[0]);
});
//store all the internationalized forms
multilang_forms_selector = options.forms || "form";
multilang_forms = $(multilang_forms_selector,multilang_root);
//create menu lang for the global form
if(multilang_containers.size()) forms_make_menu_lang(multilang_containers);
//init fields
multilang_fields_selector = options.fields;
multilang_menu_selector = options.form_menu;
forms_init_multi();
}
function forms_make_menu_lang(container,target) {
target = target || multilang_forms;
$(multilang_menu_lang).clone().find("a").click(function() {forms_change_lang(this,container,target)}).end().
append("").appendTo(container);
}
function forms_change_lang(el,container,target) {
var lang = el.innerHTML;
container = container || multilang_containers;
//update lang menu with current selection
container.find("a").each(function(){
$(this).css("fontWeight",lang==this.innerHTML?"bold":"normal");
}).end();
lang = lang.slice(1,-1);
//store the fields inputs for later use (usefull for select)
var target_name = target!=multilang_forms?target[0].hash.value:"undefined";
if(!forms_fields[target_name]) forms_fields[target_name] = $(multilang_fields_selector,target);
//save the current values
forms_fields[target_name].each(function(){
forms_save_lang(this,this.form.form_lang);
});
//change current lang
target.each(function(){this.form_lang = lang});
//reinit fields to current lang
forms_fields[target_name].each(function(){forms_set_lang(this,lang)});
}
function forms_init_multi(options) {
var target = options?options.target:null;
var init_forms;
//Update the list of form if this is an update
if(target) {
//Verify the target is really a form to be internationalized (in case of an ajax request fired by onAjaxLoad)
if(target==document) return;
init_forms = $(target).find('form').in_set($(multilang_forms_selector,multilang_root));
if(!init_forms.length) return;
multilang_forms.add(init_forms.each(forms_attach_submit).get());
} else {
//attach multi processing to submit event
init_forms = multilang_forms;
multilang_forms.each(forms_attach_submit);
}
forms_fields = {};
forms_fields["undefined"] = $(multilang_fields_selector,multilang_forms);
//init the value of the field to current lang
//add a container for the language menu inside the form
init_forms.each(function() {
this.form_lang = multilang_def_lang;
var container = multilang_menu_selector ? $(multilang_menu_selector,this) : $(this);
container.prepend("