function language_Engine() {
	this.langs = new Array ();
	this.def = null;
	this.fields = {};
	this.HTMLfields = {};
	this.initalized = 0;
}

language_Engine.prototype = {

	set: function () {
		this.fields['GENERAL'] = new Array ();

		for (var i = 0; i<language.set.arguments.length; i++) {
			this.langs[i] = language.set.arguments[i]
			this.fields[language.set.arguments[i]] = new Array ();
		}
		this.def = this.langs[0];
	},

	change: function(lang) {
		textAreaDettach();

        this.divs = document.getElementsByTagName('DIV');

        for ( var k in this.divs ) {

			if (this.hasClass(this.divs[k], 'field'))
			{
				var l = 0;
				l += this.fillFields(this.divs[k], 'INPUT');
				l += this.fillFields(this.divs[k], 'TEXTAREA');
				l += this.fillFields(this.divs[k], 'SELECT');
				l += this.fillFields(this.divs[k], 'DFN');

				if (l == 0) this.addField(this.divs[k], 'GENERAL')
			}
		}


		this.toggleTabs(lang);

		textAreaAutoAttach();
	},

	hasClass: function(o, cls) {
		if (!o.className || typeof(o) != 'object') return false;
		var l = o.className.split(' ');
		for ( var k in l ) if (l[k] == cls) return true;
		return false;
	},

	toggleTabs: function(lang) {
		if (lang == this.def) {
			this.showFields('GENERAL')
		} else {
			this.hideFields('GENERAL')
		}

		for (var i=0; i<this.langs.length; i++) {
			$('language_change_' + this.langs[i]).className = '';
			
			if (lang == this.langs[i]) {
				this.showFields(this.langs[i])
			} else {
				this.hideFields(this.langs[i])
			}
		}
		$('language_change_' + lang).className = 'current';
	},

	fillFields: function(o, type) {
		var lang_found = 0;
		var fields = o.getElementsByTagName(type);
		for ( var k in fields ) {
			if ( typeof(fields[k]) != 'object' ) continue;
			if ( this.hasClass(fields[k], 'fbutton') ) {
				lang_found++;
				continue;
			}

			var lang = false;
			var html = false;

            if ( fields[k].className ) {
                var l = fields[k].className.split(' ');
                for (var j in l)
                {
                    var p = l[j].split(':');

                    if (p[0] == 'mceEditor') html = true;
                    if (p[0] == 'lang' && p[1] != '') lang = p[1];
                }
            }
		
			if ( html == true) {
				lang_found++;
				this.addField(this.HTMLfields[fields[k].id], lang)
			} else if ( lang != false) {
				lang_found++;
				this.addField(fields[k], lang)
			}

		}

		return lang_found;
	},

	addField: function(o, lang) {
		l = this.fields[lang].length
		this.fields[lang][l] = o;
	},

	showFields: function(lang) {
		for (var i=0; i<this.fields[lang].length; i++) {
			this.fields[lang][i].style.display = '';
		}
	},

	hideFields: function(lang) {
		for (var i=0; i<this.fields[lang].length; i++)
			this.fields[lang][i].style.display = 'none';
	},

	addHTMLfield: function(id, span) {
		this.HTMLfields[id] = span
	}
}

var language = new language_Engine();
