var CAttach = Class.create(CUpload, {
	initialize: function() {
		this.file = null;
		this.target = 'attach';
	},

	upload: function(level, id, file)
	{
		this.file = file;
		this.post(this.target, file, 'file.php', 'AZIONE=add&LEVEL='+level+'&ID='+id);
	},

	add: function(id, level, context)
	{
		this.file.value = '';
		var pars = '';

		switch(level.toUpperCase()) {
		case 'MATCH':
			new Ajax.Request(
				'file.php',
				{ 
					method: 'get'
					,parameters: 'AZIONE=mostra_riga&MODE=RW&ID='+id+'&FILE=hp/gaming/match-attach.xml'
					,onComplete: function(request) {
						if ((k = request.responseText.indexOf('+KO')) != -1) {
							Ubk.error(request.responseText.substr(k + 3));
						} else {
							$('match-body').insert({bottom: request.responseText});
						}
					}
				}
			);
			break;
		case 'GAMEZOO':
			new Ajax.Request(
				'file.php',
				{ 
					method: 'get'
					,parameters: 'AZIONE=mostra_riga&MODE=RW&ID='+id+'&FILE=hp/user/details/gamezoo-attach.xml'
					,onComplete: function(request) {
						if ((k = request.responseText.indexOf('+KO')) != -1) {
							Ubk.error(request.responseText.substr(k + 3));
						} else {
							$('gamezoo-body').insert({bottom: request.responseText});
						}
					}
				}
			);
			break;
		default:
			new Ajax.Request(
				'file.php',
				{ 
					method: 'get'
					,parameters: 'AZIONE=mostra_riga&MODE=RW&ID='+id+'&FILE=hp/forum/inside/attach.xml&LEVEL='+level
					,onComplete: function(request) {
						if ((k = request.responseText.indexOf('+KO')) != -1) {
							Ubk.error(request.responseText.substr(k + 3));
						} else {
							$('new_attach_'+context).insert({after: request.responseText});
						}
					}
				}
			);
		}
		
	},

	reset: function(msg)
	{
		Ubk.error(Locale.string(3007) + msg);
		this.file.value = '';
	}
});


var CEmoFrontEnd = Class.create({
	initialize: function() {
		this.container = this.target = null;
		this.loading = false;
		this.fit = false;

		var setup = function() {
			this.container = $('emoticons');
			if (this.container) this.load();
		};
		Event.observe(document, 'dom:loaded', setup.bindAsEventListener(this));
	},

	position: function()
	{
		var e = $(this.target);
		if (!this.container.hasAttribute('dragged')) {
			var pos = e.cumulativeOffset();
			var width = e.getWidth();
			var cWidth = this.container.getWidth();
			this.container.setStyle({ top: (pos.top + 5)+'px', left: (pos.left + width - cWidth - 5)+'px' });
		} else {
			var pos = this.container.cumulativeOffset();
			var scroll = document.body.cumulativeScrollOffset();
			if (pos.top < scroll.top)
				this.container.setStyle({ top: (scroll.top + 15)+'px' });
		}
	},

	onOut: function (event) {
//		new Effect.Fade(this.container, {from: 0.85, to: 0.45, duration: 0.3});
		if (event.element() != this.container && !event.element().ancestors().include(this.container))
			this.container.setOpacity(0.6);
	},
	onOver: function (event) {
//		new Effect.Appear(this.container, {to: 0.85, from: 0.45, duration: 0.1});
		this.container.setOpacity(0.85);
	},

	load: function ()
	{
		if (!this.container.hasAttribute('loaded') && !this.loading) {
			this.loading = true;
			var onComplete = function(r) { 
				this.container.update(r.responseText);
				this.container.observe('mouseover', this.onOver.bindAsEventListener(this));
				this.container.writeAttribute('loaded');
				this.loading = false;
			};
			var params = 'FILE=hp/forum/links/emoticons.xml&AZIONE=mostra&ORDINE=i_order&TABELLA=t_r_emoticon&MODE=R&PAGE-SIZE=0';
			Ubk.follow(null, 'general.php', params, false, true, onComplete.bind(this));
		}
	},

	show: function()
	{
		while (!this.container.hasAttribute('loaded'))
			this.show.bind(this).defer();

		this.position();

		if (this.fit) {
			Ubk.show(this.container.id);
		} else {
			var after = function() {
				new Draggable(this.container, {
					handle: '.btn'
					,zindex: 1100
					,onStart: function(d, evt) { d.element.focus(); d.element.setStyle({ cursor: 'move' }).writeAttribute('dragged'); }
					,onEnd: function(d, evt) { d.element.setStyle({ cursor: 'default' }); }
					,starteffect: null
					,endeffect: null
				});
				this.fitContainers.bind(this).defer();
				Element.observe(document, 'click', this.onOut.bindAsEventListener(this));
			};
			Ubk.show(this.container.id, after.bind(this));
		}
	},

	hide: function(resetDragState)
	{
		Ubk.hide(this.container.id);
		Element.stopObserving(document, 'click', this.onOut.bindAsEventListener(this));

		if (resetDragState) this.container.removeAttribute('dragged');
	},
	
	toggle: function(target)
	{
		this.target = target;

		if (Ubk.isVisible(this.container.id)) {
			this.hide();
		} else {
// 			this.load();
			this.show();
		}
	},

	fitContainers: function()
	{
		this.fit = true;

		var container = $('emo-list');
		var imgs = container.select('img');

		var update = function(row) {
			var maxHeight = row.max(function(img) { return img.getHeight(); });

			var rowDiv = new Element('div');
			container.appendChild(rowDiv);
			row.each(function(img) {
				img.setStyle({marginBottom: (Math.floor((maxHeight - img.getHeight()) / 2) + 10) + 'px'});
				rowDiv.appendChild(img);
			});
		}

		var rowWidth = container.getWidth() - 10 - 25 ; // + 25 per la scrollbar

		var row = [];
		var curWidth = 0;
		for(var i = 0; i < imgs.length; i++) {
			curWidth += imgs[i].getWidth() + 10;
			if (curWidth > rowWidth)
			{
				update(row);
				row = [];
				curWidth = imgs[i].getWidth();
			}
			row.push(imgs[i]);
		}

		if (row.length)
			update(row);
	}
});