/**
 * Basic AJAX-class for the AJAX-frontend
 *
 * @author maj <martin.jahn@communardo.de>
 * @since 2007-07-10
 * @access public
 */
var AjaxBox = new Class({
	options: {
	},
	initialize: function(sysid, options) {

		this.setOptions(this.options, options);

		this.status = '';
		this.sysid = sysid;
		this.waiting = '<p class="center"><img src="templates/layout_pn/img/icons/loading-bar.gif" alt="" /></p>'
		this.box = $(sysid);
		this.meta = this.box.getElements('.'+this.options.ajaxboxmeta);
		this.content = this.box.getElements('.'+this.options.ajaxboxcontent);
		this.classname = ''+this.content.getProperty('id');
		this.classname = this.classname.replace('/', '%2F');
		this.url = document.URL+'&handler=AjaxBoxHandler&sysid='+sysid+'&class='+this.classname;
		if(this.box.hasClass('module')) {
			this.url = this.url + '&module=1';
		} else {
			if(this.box.getProperty('rel') && this.box.getProperty('rel') == 'module') {
				this.url = this.url + '&module=1';
			}
		}
		this.url = this.url.replace('index.php', 'ajax.php');
		
		this.metabuttons = { 'min': false, 'max': false, 'close': false };
		if($(sysid).getElementsBySelector('.ajaxboxmeta-min') != '') this.metabuttons.min = $(sysid).getElementsBySelector('.ajaxboxmeta-min');
		if($(sysid).getElementsBySelector('.ajaxboxmeta-max') != '') this.metabuttons.max = $(sysid).getElementsBySelector('.ajaxboxmeta-max');
		if($(sysid).getElementsBySelector('.ajaxboxmeta-close') != '') this.metabuttons.close = $(sysid).getElementsBySelector('.ajaxboxmeta-close');

		if(this.metabuttons.min) {
			if(this.metabuttons.min.getParent().getTag() == 'a') {
				img = this.metabuttons.min.clone();
				paren = this.metabuttons.min.getParent().getParent();
				paren.empty();
				paren.adopt(img);
				this.metabuttons.min = $(sysid).getElementsBySelector('.ajaxboxmeta-min')
			}
			this.metabuttons.min.addEvent('click', function () {this.minimizebox();}.bind(this));
		}
		if(this.metabuttons.max) {
			if(this.metabuttons.max.getParent().getTag() == 'a') {
				img = this.metabuttons.max.clone();
				paren = this.metabuttons.max.getParent().getParent();
				paren.empty();
				paren.adopt(img);
				this.metabuttons.max = $(sysid).getElementsBySelector('.ajaxboxmeta-max')
			}
			this.metabuttons.max.addEvent('click', function () {this.maximizebox();}.bind(this));
		}
		if(this.metabuttons.close) {
			if(this.metabuttons.close.getParent().getTag() == 'a') {
				img = this.metabuttons.close.clone();
				paren = this.metabuttons.close.getParent().getParent();
				paren.empty();
				paren.adopt(img);
				this.metabuttons.close = $(sysid).getElementsBySelector('.ajaxboxmeta-close')
			}
			this.metabuttons.close.addEvent('click', function () {this.closebox();}.bind(this));
		}
		if(this.options.autoupdate.active) {
//			this.autoupdate = this.hasClass('autoupdate');
			this.load.periodical(this.options.autoupdate.refreshtime*1000, this);
		}
	},
	closebox: function(event) {
		if(this.status != 'close') {
			this.close();
			userProfile.updateServer(this.sysid);
		}
		
	},
	minimizebox: function(event) {
		if(this.status != 'min') {
			this.content.setHTML(this.waiting); 
			this.minimize(false);
			userProfile.updateServer(this.sysid);
		}
	},
	maximizebox: function(event) {
		if(this.status != 'max') {
			this.content.setHTML(this.waiting); 
			this.maximize(false);
			userProfile.updateServer(this.sysid);
		}
	},
	close: function() {
		this.content.addClass('hidden');
		this.status = 'close';
		this.setButtonActive('max');
		this.setButtonActive('min');
		this.setButtonInActive('close');
	},
	minimize: function(visible) {
		if(visible) this.content.removeClass('hidden');
		this.status = 'min';
		this.setButtonInActive('min');
		this.setButtonActive('max');
		this.setButtonActive('close');
		if(!visible) this.content.removeClass('hidden');
	},
	maximize: function(visible) {
		if(visible) this.content.removeClass('hidden');
		this.status = 'max';
		this.setButtonActive('min');
		this.setButtonInActive('max');
		this.setButtonActive('close');
		if(!visible) this.content.removeClass('hidden');
	},
	reload: function() {
		this.load();
	},
	load: function () {
		if(this.status == 'close') {
			return true;
		}
		this.ajax = new Ajax (this.url, {
			onComplete: function (responseText, responseXML) {
				this.content.setHTML(responseText); 
				this.options.onLoadReady(this.sysid);
				}.bind(this),
			onFailure: function () {
				}.bind(this),
			method: 'get'
			}).request();
	},
	store: function() {
		this.ajax = new Ajax (this.url, {
			onComplete: function (responseText, responseXML) {
				}.bind(this),
			onFailure: function () {
				}.bind(this),
			method: 'get'
			}).request();
	},
	setButtonInActive: function(button_class) {
		switch (button_class) {
			case 'min':
				if(this.metabuttons.min && this.metabuttons.min != false) {
					this.setImgInActive(this.metabuttons.min);
				}
				break;
			case 'max':
				if(this.metabuttons.max && this.metabuttons.max != false) {
					this.setImgInActive(this.metabuttons.max);
				}
				break;
			case 'close':
				if(this.metabuttons.close && this.metabuttons.close != false) {
					this.setImgInActive(this.metabuttons.close);
				}
				break;
		}
	},
	setButtonActive: function(button_class) {
		switch (button_class) {
			case 'min':
				if(this.metabuttons.min && this.metabuttons.min && this.metabuttons.min != false) {
					this.setImgActive(this.metabuttons.min);
				}
				break;
			case 'max':
				if(this.metabuttons.max && this.metabuttons.max != false) {
					this.setImgActive(this.metabuttons.max);
				}
				break;
			case 'close':
				if(this.metabuttons.close && this.metabuttons.close != false) {
					this.setImgActive(this.metabuttons.close);
				}
				break;
		}
	},
	setImgInActive: function(img) {
		temp = '' + img.getProperty('src');
		img.setProperty('src', temp.replace('_h', '_n'));
	},
	setImgActive: function(img) {
		temp = '' + img.getProperty('src');
		img.setProperty('src', temp.replace('_n', '_h'));
	}
	
});
AjaxBox.implement(new Options);
