var BLCMS=new Class({
	Implements: Events,
	
	options: {
		language: null,
		editlanguage: null,
		languages: []
	},
	
	initialize: function() {
		window.addEvent('domready', function() {
			this.updateDOM();
		}.bind(this));
	},
	
	initLanguages: function(lang, editlang, langs) {
		this.setLocale(lang);

		this.options.languages=langs;
		this.options.editlanguage=editlang;
		
		if (langs.length<=1) {
			$$('.language sub').setStyle('display', 'none');
		}
	},
	
	setEditLanguage: function(lang) {
		this.options.editlanguage=lang;
		this.updateDOM();
		
		new Request().get({view: 'blcms-languages', action: 'seteditlang', id: lang});
		
		this.fireEvent('setEditLanguage', lang);
	},
	
	setLanguage: function(lang) {
		this.options.language=lang;
		this.setLocale(lang);
	},

	setLocale: function(lang) {
		var l;

		switch(lang) {
			case 'pl': l='pl-PL'; break; 
			case 'en': l='en-GB'; break; 
			case 'ru': l='ru-RU'; break; 
		}
		
		Locale.use(l);
	},
	
	updateDOM: function() {
		$$('.language').setStyle('display', 'none');
		$$('.language-'+this.options.editlanguage).setStyle('display', null);
	},
	
	redirect: function(url) {
		document.location=url;
	}
});

BLCMS.Request=new Class({
	Implements: [Events, Options],

	options: {
		url: null,
		vars: {},
		update: null,
		execScripts: true
	},
	
	initialize: function(options) {
		this.setOptions(options);
		
		this.req=new Request({
			url: this.options.url
		});
		
		this.req.addEvent('success', function(result) {
			try {
				var json=JSON.decode(result);

				var html=json.html;
			
				if (html!=undefined) {
					var scripts=null;
					html=html.stripScripts(function(script){
						scripts=script;
					});
				}
				
				this.fireEvent('success', [html, scripts, json]);
	
				if (!json.redirect) {
					if (html!=undefined && this.options.update) {
						this.options.update.empty();
						this.options.update.set('html', html);
					}
					
					if (json.update) {
						Object.each(json.update, function(val, key) {
							var el=$(key);
							
							if (el) el.set('html', val);
						});
					}
				}
				
				if (scripts && this.options.execScripts) Browser.exec(scripts);
				
				this.fireEvent('complete');
				
				if (json.redirect) window.location=json.redirect;
			} catch (e) {
				this.fireEvent('error', {
					error: 'parse',
					result: result
				});
			}
		}.bind(this));
	},
	
	send: function(vars) {
		this.fireEvent('request');

		vars=Object.merge(this.options.vars, vars, {'___blcmsrequest___': blcms.rid});
		this.req.send({data: vars});	
	}
});

var blcms=new BLCMS();
