var WYSIWYG = function() {}

WYSIWYG.prototype.insertText = function(id, type)
{
	var element = document.getElementById(id);
	var value = String(element.value).slice(element.selectionStart, element.selectionEnd);

	if (type == 'link')
	{
		var label = prompt('What text would you like to use for the link?', value);

		if (label != null)
		{
			var href = prompt('What url would you like to use for the link?', value);

			if (href != null && href.length > 0)
			{
				if (label.length == 0) label = href;
				this.setText(id, type, new Array(label, href))
			}
		}
	}
	else
	{
		var text = prompt('What text would you like to make ' + type + '?', value);
		if (text != null && text.length > 0) this.setText(id, type, new Array(text));
	}
}


WYSIWYG.prototype.setText = function(id, type, input)
{
	var tag;

	switch(type)
	{
		case 'link': tag = '<a href="' + input[1] + '" target="_blank">' + input[0] + '</a>'; break    
		case 'bold': tag = '<b>' + input[0] + '</b>'; break
		case 'italic': tag = '<i>' + input[0] + '</i>'; break
	}

	var element = document.getElementById(id);
	var startIndex = element.selectionStart;
	var endIndex = element.selectionEnd;
	var value = element.value;

	if (element.hasFocus == undefined) startIndex = endIndex = value.length;
	element.value = value.substr(0, startIndex) + tag + value.substr(endIndex);
}


WYSIWYG.prototype.onSetFocus = function(element)
{
	element.hasFocus = true;
	element.className = element.type + '-focus';
	this.hasFocus = element;
}


WYSIWYG.prototype.onKillFocus = function(element)
{
	element.className = element.oldClassName;
}


var wysiwyg = new WYSIWYG();


// -----------------------------------------------------

var DataGrid = function() {}

DataGrid.prototype.selectAll = function(element)
{
	var form = element.form;
	var checked = element.checked;

	for (var i = 0; i <  form.length; i++)
	{
		element = form[i];

		if (element.type == 'checkbox' && element.name == 'id[]')
		{
			element.checked = checked;
		}
	}
}


DataGrid.prototype.removeItem = function(url)
{	
	if (confirm("Removing this item is undoable.\r\nAre you sure you wish to proceed?"))
	{
		document.location = url;
	}
}


DataGrid.prototype.removeItems = function(form)
{	
	if (confirm("Removing these items is undoable.\r\nAre you sure you wish to proceed?"))
	{
		form.submit();
	}
}


var datagrid = new DataGrid();


// -----------------------------------------------------

var InputArea = function()
{
	this.forms = new Object();
}


InputArea.prototype.reset = function(field)
{
	var form = field.form;
	var field;

	for (var i = 0; i < form.length; i++)
	{
		field = form[i];

		switch (field.type)
		{
			case 'text': field.value = ''; break;
			case 'textarea': field.value = ''; break;
			case 'select-one': field.selectedIndex = 0; break;
		}
	}
}


InputArea.prototype.onUploadStart = function(form, name)
{
	if (this.forms[form] == undefined)
	{
		this.forms[form] = new Object();
		this.forms[form].uploadQue = new Object();
	}

	this.forms[form].uploadQue[name] = true;
	document[form].button.disabled = true;
}


InputArea.prototype.onUploadComplete = function(form, name, value)
{
	this.forms[form].uploadQue[name] = false;
	document[form][name].value = value;

	for (var i in this.forms[form].uploadQue)
	{
		if (this.forms[form].uploadQue[i])
		{
			document[form].button.disabled = true;
			return;
		}
	}

	document[form].button.disabled = false;
}


var inputarea = new InputArea();



function getHTTPObject()
{
	return window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');
}


var Calendar = function()
{
	this.items = new Object();	
}


Calendar.prototype.createItem = function(id)
{
	if (this.items[id] == undefined) this.items[id] = new Object();
}


Calendar.prototype.update = function(id, month, year, offset)
{
	var http = getHTTPObject();

	http.onreadystatechange = function()
	{
		if (http.readyState == 4 && http.status == 200)
		{
			var div;

			div = document.getElementById(id);
			div.innerHTML = http.responseText;
		}
	}

	var url = 'assets/php/calendar.php?id=' + id + '&month=' + month + '&year=' + year;
	if (offset != undefined) url += '&offset=' + offset;

	this.createItem(id);
	if (this.items[id].date != undefined)
	{
		url += '&selected=' + this.items[id].date;
	}

	http.open('GET', url);
	http.send(null);
}


Calendar.prototype.lastMonth = function(id, month, year)
{
	this.update(id, month, year, -1);	
}


Calendar.prototype.nextMonth = function(id, month, year)
{
	this.update(id, month, year, 1);	
}


Calendar.prototype.selectDate = function(id, date, hyperlink)
{
	this.createItem(id);

	var table = document.getElementById(id + '_table');

	var row;
	var cell;

	for (var i = 0; i < table.rows.length; i++)
	{
		row = table.rows[i];

		for (var j = 0; j < row.cells.length; j++)
		{
			cell = row.cells[j];
			if (cell.className == 'selected') cell.className = '';
		}
	}

	document.getElementById(id.split('_')[0]).value = date;

	this.items[id].date = date;
	hyperlink.parentNode.className = 'selected';
	hyperlink.blur();
}


var calendar = new Calendar();



// -----------------------------------------------------

function initializeForms()
{
	var input = new Array();
	var elements = document.getElementsByTagName('input');
	var element;

	for (var i = 0; i < elements.length; i++)
	{
		element = elements[i];
		if (element.type == 'text' || element.type == 'password') input.push(element);	
	}

	elements = document.getElementsByTagName('textarea');

	for (var i = 0; i < elements.length; i++)
	{
		input.push(elements[i]);
	}

	var field;

	for (var i = 0; i < input.length; i++)
	{
		field = input[i];
		field.oldClassName = field.className;
		field.onfocus = function() { window.wysiwyg.onSetFocus(this); }
		field.onblur = function() { window.wysiwyg.onKillFocus(this); }
	}
}


function init()
{
	initializeForms();
}


window.onload = init;