
(function ($, $x, $p) {

	$p.lang = new function () {
		var self = this;

		self.load = function () {
			$('[' + self.conf['attr.set'] + '], [class*=xwpage_lang_flag]')
				.bind('click', self.onclick)
				.each(function () {
					$(this).attr('data-xwpage-href', '?lang=' + self.findLang(this));
				});
		};

		self.set = function (lang) {
			var ids = '';
			
			// Generate new lang-id 's
			$('[' + self.conf['attr.id'] + ']').each(function () {
				ids += ',' + $(this).attr(self.conf['attr.id']);
			});

			// Make request for new texts
			$p.ajax.internal('type=plugin&plugin=lang&do=ajax_update&lang=' + lang + '&ids=' + ids.substr(1), { eval: true });
			
			// While waiting for ajax reply make some page update ...
			
			// Set new flag
			$('.xwpage_lang_set').removeClass('xwpage_lang_set').addClass('xwpage_lang_unset');
			$('.xwpage_lang_' + lang).removeClass('xwpage_lang_unset').addClass('xwpage_lang_set');
			
			// Update url
			$p.href.set('?lang=' + lang);
				
			// Notify others
			self.doEvent('langChanged', lang);
			
			return false;
		};
		
		self.findLang = function (obj) {
			var lang = jQuery(obj).attr(self.conf['attr.set']);
			if (!lang)
				lang = /xwpage_lang_(..) /.exec(obj.className)[1];
			return lang;
		};
		
		self.onclick = function () {
			return self.set(self.findLang(this));
		};
		
		self.unpackAjaxUpdate = function (data) {
			var val, elms = jQuery('[' + self.conf['attr.id'] + ']').get();
			for (var k in elms) {
				val = data[elms[k].getAttribute(self.conf['attr.id'])];
				if (elms[k].innerHTML)
					elms[k].innerHTML = val;
				if (elms[k].title)
					elms[k].title = val;
			}
		};
		
	};

})(jQuery, xwp.xwpage, xwp.xwpage.plugins);