/* Dynamic images, change class */
// MooTools
window
    .addEvent('domready', function()
    {

	    $$('*.dynamic_img').addEvents(
	    {
	        'mouseenter': function()
	        {
		        this.addClass('over');
	        },
	        'mouseleave': function()
	        {
		        this.removeClass('over');
		        this.removeClass('clicked');
	        },
	        'mousedown': function()
	        {
		        this.removeClass('over');
		        this.addClass('clicked');
	        }
	    });

	    $$('img.tSwitch')
	        .addEvents(
	        {
		        'mousedown': function()
		        {
			        var tbody = this.getParent('thead').getNext('tbody');
			        tbody.toggleClass('hide');
			        if (tbody.hasClass('hide'))
			        {
				        document.cookie = 't3' + this.getParent('table')
				            .getProperty('id') + '=1; expires=Wed, 1 Jan 2020 00:00:00 GMT';
				        this.removeClass('opened');
				        this.addClass('closed');
			        }
			        else
			        {
				        document.cookie = 't3' + this.getParent('table')
				            .getProperty('id') + '=1; expires=Thu, 01-Jan-1970 00:00:01 GMT';
				        this.removeClass('closed');
				        this.addClass('opened');
			        }
		        }
	        });

	    $$('table.row_table_data tbody tr').addEvents(
	    {
	        'mouseenter': function()
	        {
		        this.addClass('hlight');
	        },
	        'mouseleave': function()
	        {
		        this.removeClass('hlight');
	        },
	        'mousedown': function()
	        {
		        this.toggleClass('marked');
	        }
	    });

    });
    
    
var BBEditor = new Class ({
	preview: null,
	textArea: null,
	id: null,

	Binds: ['fetchPreview', 'showToolbarWindow', 'insertTag', 'insertSingleTag', 'insertSmilieTag', 'hideToolbarWindow', 'showPreview', 'hidePreview'],

	/**
	 * Initialisiert den Editor
	 */
	initialize: function(textAreaId) {

		//connect elements
		this.id = textAreaId;
		this.textArea = $(textAreaId);
		this.toolbar = $(textAreaId + '_toolbar');
		this.preview = $(textAreaId + '_preview');

		//init elements
		this.preview.setStyle('display', 'none');

		//add Events
		$(textAreaId + '_previewButton').addEvent('click', this.fetchPreview);
		$(textAreaId + '_resourceButton').addEvent('click', this.showToolbarWindow);
		$(textAreaId + '_smilieButton').addEvent('click', this.showToolbarWindow);
		$(textAreaId + '_troopButton').addEvent('click', this.showToolbarWindow);
		$(textAreaId).addEvent('click', this.hideToolbarWindow);
		this.addEvent($(textAreaId + '_toolbar'), this.insertTag);
		this.addEvent($(textAreaId + '_resources'), this.insertTag);
		this.addEvent($(textAreaId + '_smilies'), this.insertTag);
		this.addEvent($(textAreaId + '_troops'), this.insertTag);
	},

	/**
	 * Fügt den klickbaren Objekten die Events hinzu
	 *
	 * @param object containerObjekt
	 * @param string callback
	 */
	addEvent: function(div, call) {
		var childen =  div.getChildren();
		for (i = 0; i < childen.length; i++) {
			if ($(childen[i]).get('bbTag')) {
				$(childen[i]).addEvent('click', call);
			}
		}
	},

	/**
	 * Fügt einen ausgewählten Tag in die
	 * Textarea ein
	 *
	 * @param Object
	 */
	insertTag: function(Event) {
		this.hidePreview();
		var link = $(Event.target.parentNode);
		var tag = link.get('bbTag');

		switch (link.get('bbType')) {
			//double tag
			case 'd':
				this.textArea.insertAroundCursor({before: '[' + tag + ']', after: '[/' + tag + ']'});
				break;
			//smilie
			case 's':
				this.textArea.insertAtCursor(tag, false);
				break;
			//once
			case 'o':
				this.textArea.insertAtCursor('[' + link.get('bbTag') + ']', false);
				break;
		}
	},

	/**
	 * Zeigt ein Unterfenster der Toolbar
	 * an
	 *
	 * @param Object
	 */
	showToolbarWindow: function(Event) {
		var targetDiv = Event.target.parentNode;
		var window = $(this.id + '_' +  targetDiv.get('bbWin'));

		var show = true;
		if (window.getStyle('display') == 'block') {
			show = false;
		}

		this.hideToolbarWindow();

		if (show) {
			window.fade('hide').fade('in');
			window.setStyle('display', 'block');
		}
	},

	/**
	 * Versteckt die Fenster der Toolbar
	 *
	 * @param Object
	 */
	hideToolbarWindow: function() {
		var childen =  $(this.id + '_toolbarWindows').getChildren();
		for (i = 0; i < childen.length; i++) {
			$(childen[i]).setStyle('display', 'none');
		}
	},

	/**
	 * Holt die Vorschau vom Server
	 *
	 * @param Object
	 */
	fetchPreview: function(Event) {
		if (this.textArea.getStyle('display') == 'none' || this.textArea.value.length < 1) {
			this.hidePreview();
			return;
		}

		var jsonRequest = new Request.JSON({
			method: 'post',
			url: 'ajax.php?f=bb',
			data:
			{
				nl2br:	1,
				target:	this.id,
				text:	this.textArea.value
			},
			onSuccess: this.showPreview
		});
		jsonRequest.post();
	},

	/**
	 * Zeigt die Vorschau
	 *
	 * @param string textAreaId
	 */
	showPreview: function(data) {
		if (data.error == true) {
			alert(data.errorMsg);
			return;
		} else {
			this.preview.innerHTML = data.text;
			this.preview.setStyle('display','block');
			this.textArea.setStyle('display','none');
		}
	},

	/**
	 * Versteckt die Vorschau
	 *
	 * @param string textAreaId
	 */
	hidePreview: function() {
		this.preview.setStyle('display','none');
		this.textArea.setStyle('display','inline');
	}
});



var attackSysbolState = new Array();

function getAttackSymbolState(id)
{
	var state = attackSysbolState[id];

	if (!state)
	{
		state = new Object();

		var type = 0;

		var imgClass = $('markSybol_'+id).get('class');

		var color = imgClass.substr(imgClass.lastIndexOf('_')+1, 11);

		switch (color)
		{
			case 'green':
				type = 1;
				break;
			case 'yellow':
				type = 2;
				break;
			case 'red':
				type = 3;
				break;
			default:
				type = 0;
				break;
		}
		state.type = type;
		state.oldType = type;


		attackSysbolState[id] = state;
	}

	return state;
}

function drawAttackSymbol(id)
{
	var state = getAttackSymbolState(id);

	if (state.type == 4)
	{
		state.type = 0;
	}

	switch (state.type)
	{
		case 1:
			img = 'img/green.gif';
			color = 'green';
			break;
		case 2:
			img = 'img/yellow.gif';
			color = 'yellow';
			break;
		case 3:
			img = 'img/red.gif';
			color = 'red';
			break;
		default:
			img = 'img/grey.gif';
			color = 'grey';
			break;
	}
	$('markSybol_'+id).set('class', 'attack_symbol_'+color);
}

function markAttackSymbol(id)
{

	var state = getAttackSymbolState(id);
	state.type ++ ;

	drawAttackSymbol(id);

	if (state.isSaving != true)
	{
		state.isSaving = true;

		(function()
		{
			if (state.type != state.oldType)
			{
				var jsonRequest = new Request.JSON(
				{
				   method: 'post',
				   url: 'ajax.php?f=vp&id='+id+'&state='+state.type,
				   onSuccess: function(data)
				   {
						var state = getAttackSymbolState(data.id);

						state.isSaving = false;

						state.type = data.type;
						state.oldType = data.type;

						drawAttackSymbol(data.id);
				   }
				});
				jsonRequest.post();
			}
			else
			{
				state.isSaving = false;

			}

		 }).delay(1000);
	}

}

