/* used for quoteing messages to textarea */
var raw_messages = Array();
var formValidateFieldsCssQuery = 'dt.required + dd input, dt.required + dd textarea, dt.required + dd select, input.validate-email, input.validate-integer, input.validate-sofinummer, input.validate-nickname, input.validate-url';

function focusFirstFormField()
{
	var elements = cssQuery('input.focusable, textarea.focusable');

	if(elements.length > 0)
		elements[0].focus();
};
function validateForms()
{
	var items = document.getElementsByTagName('form');

	if(items.length == 0)
		return;

	for(var i = 0; i < items.length;i++)
	{
		items[i].onsubmit = function(){ return validateForm(this);};
	}

	items = cssQuery(formValidateFieldsCssQuery);
	if(items.length > 0)
	{
		var text = cssQuery('div#action-header p'), p;

		if(text.length > 0)
		{
			p = text[0];
			text[0].appendChild(document.createElement('br'));
		}
		else
		{
			p = document.createElement('p');
		}

		p.appendChild(document.createElement('span').appendChild(document.createTextNode(getText('forms', 'marked_fields'))));

		var star = document.createElement('span');
		star.appendChild(document.createTextNode('*'));
		jscss('add', star, ' required', '');
		p.appendChild(star);

		p.appendChild(document.createElement('span').appendChild(document.createTextNode(getText('forms', 'required'))));

		if(text.length == 0)
		{
			var h2 = cssQuery('div#action-header h2');
			if(h2[0])
				h2[0].parentNode.insertBefore(p, h2[0]);
		}

		for(var j = 0; j < items.length;j++)
		{
			addEvent(items[j], 'change', validateField);
		}
	}

	// Sjon: uitgeschakelt na overleg met Michiel; dit voldoet niet voldoende
	/*items = cssQuery('dd input[maxlength]');

	if(items.length > 0)
	{
		addEvent(document, 'keyup', validateMaxLength);
	}*/
};


function toggleAdvancedOptions(ev, ob)
{
	var x = getObj(ev, ob);

	if(x.display == 'none')
	{
		x.display = 'block';
		x.replaceChild(document.createTextNode(getText('forms', 'hide_advanced')), x.firstChild);
	}
	else
	{
		x.display = 'none';
		x.replaceChild(document.createTextNode(getText('forms', 'show_advanced')), x.firstChild);
	}

	items = cssQuery('dt.advanced, dt.advanced + dd, dt.advanced + dd + dd');

	for(var i = 0; i < items.length;i++)
	{
		items[i].style.display = x.display;
	}
};


function validateMaxLength(ev, ob)
{
	// Sjon: uitgeschakelt na overleg met Michiel; dit voldoet niet voldoende
	return false;

	var x = getObj(ev, ob);

	if(x.tagName.toLowerCase() == 'input' && typeof x.maxLength != 'undefined' && x.maxLength > 0)
	{
		if(x.value.length == x.maxLength)
		{
			alertUser(x, getText('forms', 'max_chars', x.maxLength));
		}
		else
		{
			unAlertUser(x);
		}
	}
}

function validateForm(form)
{
	var items = cssQuery(formValidateFieldsCssQuery, form);
	var errors = false;

	for(var i = 0; i < items.length;i++)
	{
		errors = validateField(null, items[i], true) || errors;
	}

	if(errors)
	{
		var fields = cssQuery('dt.required-empty + dd input');

		if(fields.length > 0)
		{
			fields[0].focus();
		}
	}

	return !errors;
};

/*
	return false is field is valid
	return true is field is not valid
*/
function validateField(ev, ob, ret)
{
	var field = getObj(ev, ob);
	var empty = false;

	unAlertUser(field);

	if ( jscss('check', field, 'not-required') )
		return false;

	switch(field.type)
	{
		case 'select-one':
		case 'select-multiple':
			empty = (field.selectedIndex == -1)  || (field.value == '') ;
			break;
		case 'checkbox':
			empty = !field.checked;
			break;
		default:
			empty = (field.value == '' ? true : false);
			break;
	}

	if(!empty)
	{
		switch(board_action)
		{
			case 'create_user':

				switch(field.id)
				{
					case 'pwd2':
						validatePassword(field);
					break;
					case 'nickname':
						if(field.value.length < 3)
							alertUser(field, getText('forms', 'name_too_short'));
						else
							validateNickname(null, field);
					break;
					case 'email':
						validateEmail(null, field);
						validateEmailDomain(null, field);
					break;
				}
			default :
				var reg, res, i;

				if(jscss('check', field, 'validate-email', ''))
				{
					reg = /^[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-zA-Z]{2,7}$/;
					res = reg.test(field.value);
					if(!res)
					{
						alertUser(field, getText('forms', 'email_incorrect'));
						return true;
					}
				}
				if(jscss('check', field, 'validate-url', ''))
				{
					reg = /\s/;
					res = reg.test(field.value);
					if(res)
					{
						alertUser(field, getText('forms', 'url_incorrect'));
						return true;
					}
				}
				if(jscss('check', field, 'validate-integer', '') || jscss('check', field, 'validate-sofinummer', ''))
				{
					reg = /^[0-9]*$/;
					res = reg.test(field.value);
					if(!res)
					{
						alertUser(field, getText('forms', 'numeric_only'));
						return true;
					}
				}
				if(jscss('check', field, 'validate-sofinummer', ''))
				{
					if(field.value.length != 9)
					{
						alertUser(field, getText('forms', 'length_not_9'));
						return true;
					}
					/* source: http://cgi.dit.nl/sofi.cgi */
					var total = 0;
					for (i=1; i<=8; i++)
					{
						total += (10-i) * field.value[i-1];
					}
					total += (-1) * field.value[8];

					if ((total % 11) > 0)
					{
						alertUser(field, getText('forms', 'sofinummer_mismatch'));
						return true;
					}
				}

				// If you want custom-field validation, create functions and add functionnames to array 'extraValidateFields'
				if(typeof extraValidateFields == 'object')
				{
					for(i=0; i<extraValidateFields.length; i++)
					{
						extraValidateFields[i](field);
					}
				}
				break;
		}
	}

	if(empty && jscss('check', field.parentNode.previousSibling, 'required', ''))
	{
		alertUser(field, getText('forms','required_field'));
	}
	else if(empty && !jscss('check', field.parentNode.previousSibling, 'required'))
	{
		return false;
	}

	if(ret)
		return empty;
};


function alertUser(inputfield, str)
{
	if(!inputfield.parentNode.nextSibling || !jscss('check',inputfield.parentNode.nextSibling,'dd-sequence required-empty',''))
	{
		jscss('add',inputfield.parentNode.previousSibling,'required-empty','');

		var x = document.createElement('dd');
		x.appendChild(document.createTextNode(str));
		jscss('add',x,'dd-sequence required-empty','');

		inputfield.parentNode.parentNode.insertBefore(x, inputfield.parentNode.nextSibling);
	}
};


function unAlertUser(inputfield)
{
	if(inputfield.parentNode.nextSibling && jscss('check',inputfield.parentNode.nextSibling,'dd-sequence required-empty',''))
	{
		inputfield.parentNode.parentNode.removeChild(inputfield.parentNode.nextSibling);
		jscss('remove',inputfield.parentNode.previousSibling,'required-empty','');
	}
};


function validatePassword(x)
{
	var pwd1 = document.getElementById('pwd1');

	if(pwd1.value != x.value)
	{
		alertUser(x, getText('forms', 'password_no_match'));
		x.value = '';
	}
};


function validateNickname(ev, ob)
{
	var x = getObj(ev, ob);
	nicknamereq = null;
	var request = '<data><action>custom</action><template>validate_nickname</template><nickname>'+x.value+'</nickname></data>';
	nicknamereq = xmlreq(request, '_validateNickname');
};


function _validateNickname()
{
	if(typeof nicknamereq != 'undefined' && nicknamereq != null && nicknamereq.readyState == 4 )
	{
		var res = nicknamereq.responseXML.documentElement.childNodes[0].nodeValue;

		if(res && res == '1')
		{
			alertUser(document.getElementById('nickname'), getText('forms', 'username_taken'));
		}

		nicknamereq = null;
	}
};


function validateEmailDomain(ev, ob)
{
	var x = getObj(ev, ob);
	emaildomainreq = null;
	var request = '<data><action>custom</action><template>validate_emaildomain</template><email>'+x.value+'</email></data>';
	emaildomainreq = xmlreq(request, '_validateEmailDomain');
};


function _validateEmailDomain()
{
	if(typeof emaildomainreq != 'undefined' && emaildomainreq != null && emaildomainreq.readyState == 4 )
	{
		var res = emaildomainreq.responseXML.documentElement.childNodes[0].nodeValue;

		if(res && res == '1')
		{
			alertUser(document.getElementById('email'), getText('forms', 'invalid_domain'));
		}

		emaildomainreq = null;
	}
};


function validateEmail(ev, ob)
{
	var x = getObj(ev, ob);
	emailreq = null;
	var request = '<data><action>custom</action><template>validate_email</template><email>'+x.value+'</email></data>';
	emailreq = xmlreq(request, '_validateEmail');
};


function _validateEmail()
{
	if(typeof emailreq != 'undefined' && emailreq != null && emailreq.readyState == 4 )
	{
		var res = emailreq.responseXML.documentElement.childNodes[0].nodeValue;

		if(res && res == '1')
		{
			alertUser(document.getElementById('email'), getText('forms', 'email_taken'));
		}

		emailreq = null;
	}
};


/*function attachRMLToolbar()
{
	if(document.getElementById)
	{
		var rmltextarea = document.getElementById('rml_textarea');

		if(rmltextarea)
			rmltextarea.parentNode.insertBefore(getToolbar(true, true), rmltextarea);
	}
};*/


var jsLoaded = false;

function attachCalendarSelector()
{
	var items = cssQuery('input.date');
	var item;

	if(items.length > 0 && !jsLoaded)
	{
		loadScript('js/calendar-p.js', true);
		jsLoaded = true;

		window.setTimeout('attachCalendarSelector();', 1000);
		return;
	}
	else if(jsLoaded && typeof Calendar  == 'undefined')
	{
		return;
	}
	else
	{
		for(var i = 0; i < items.length;i++)
		{
			item = items[i];

			if(item.id != '')
			{
				Calendar.setup({
					inputField			:		item.id,
					ifFormat			:		"%d/%m/%Y",
					showsTime			:		false,
					align				:		"Tl",
					step				:		1,
					electric			:		false,
					firstDay			:		1
				});
			}
		}
	}
};

function selectAllRows()
{
	var checkboxes = cssQuery('div#content form table input[TYPE="checkbox"]');

	if(checkboxes.length == 0)
		return;

	var tablefooter = cssQuery("div#content form tfoot")[0];

	var td_first = document.createElement('td');
	var tr = document.createElement('tr');
	td_first.className = 'select';
	tr.appendChild(td_first);
	tr.className = 'footer-form';

	td = document.createElement('td');
	td.colSpan = 5;

	var checkbox = document.createElement('input');
	checkbox.type = 'checkbox';
	checkbox.id = 'selectAllRows';
	checkbox.name = 'selectAllRows';
	jscss('add',checkbox,'checkbox','');
	addEvent( checkbox, 'click', _selectAllRows);
	addEvent( checkbox, 'change', _selectAllRows);

	td_first.appendChild(checkbox);

	var label = document.createElement('label');
	label.htmlFor = 'selectAllRows';

	label.appendChild(document.createTextNode(getText('forms', 'select_all_rows')));
	td.appendChild(label);
	tr.appendChild(td);

	tablefooter.appendChild(tr);

	if(navigator.userAgent.indexOf('Gecko') != -1)
	{
		jscss('add',document.body,'display-none','');
		jscss('remove',document.body,'display-none','');
	}
};

function _selectAllRows(ev, ob)
{
	var x = getObj(ev, ob);
	var items = cssQuery('tbody input[TYPE="checkbox"]', x.parentNode.parentNode.parentNode.parentNode);
	for(var i = 0; i < items.length;i++)
	{
		items[i].checked = x.checked;
	}
};

function rewriteQuoteLinks()
{
	if(raw_messages.length > 0)
	{
		for(var i = 0; i < raw_messages.length;i++)
		{
			var links = cssQuery("li#message-"+raw_messages[i][0]+" ul.message-links li.message-quote a");

			if(links.length > 0)
			{
				link = links[0];
				link.onclick = function(){return copyQuoteToRML(this);};
			}
		}

	}
};

function copyQuoteToRML(x)
{
	var path = board_script_url + '/quote_message/';
	var temp = x.href.substring( path.length );
	var reg = /^([0-9]+)/;
	var res = temp.match(reg);
	var messageid = res[1];

	for(var i = 0; i < raw_messages.length;i++)
	{
		if(raw_messages[i][0] == messageid)
		{
			putStr(raw_messages[i][1]);
			return false;
		}
	}

	return true;
};

/* helper function for raw messages */
function q()
{
	return '"';
};

function privateMessagingCopyContact()
{
	var select = cssQuery('body.pm_new_message dd select');

	if(select.length > 0)
		addEvent(select[0], 'change', _privateMessagingCopyContact);
};

function _privateMessagingCopyContact(ev, ob)
{
	var x = getObj(ev, ob);

	if(x.options[x.selectedIndex].value == '')
		return;

	if(document.getElementById)
	{
		var input = document.getElementById('recipients');

		var username = x.options[x.selectedIndex].value;

		if ( username.match("'") )
			username = '"'+ username + '"';
		else if ( username.match(/^[0-9]+$/) || username.match('"') )
			username = "'"+ username + "'";

		input.value += (input.value != '' ? ', ' : '') + username;
	}
};

function toggleChangeCheckboxTopicAdmin()
{
	var topicAdmin = document.getElementById('topic-admin');

	if(!topicAdmin)
		return;

	var items = cssQuery('input[type="text"], textarea, select', topicAdmin);

	for(var i = 0; i < items.length;i++)
	{
		addEvent(items[i], 'change', _toggleChangeCheckboxTopicAdmin);
	}

	var input = document.getElementById('delmessages');
	if(input)
	{
		addEvent(input, 'change', selectMessagesForDeletion);
	}

	input = document.getElementById('splitmessages');
	if(input)
	{
		addEvent(input, 'change', selectMessagesForSplit);
	}
};

function _toggleChangeCheckboxTopicAdmin(ev, ob)
{
	var x = getObj(ev, ob);

	var items = cssQuery('input[type="checkbox"]', x.parentNode);
	if(items.length > 0)
	{
		items[0].checked=true;
	}
};

var callbackOnMessageToggledSelected = null;
function _selectMessages(unsetCurrentMessages)
{
	var items = cssQuery('li.message');

	for(var i=0;i < items.length;i++)
	{
		addEvent(items[i], 'click', _selectMessage);
		if(unsetCurrentMessages)
		{
			jscss('remove', items[i], 'selected', '');
		}
	}
};

function _selectMessage(ev, ob)
{
	if(callbackOnMessageToggledSelected)
	{
		var x = getObj(ev, ob);
		while(x.tagName.toLowerCase() != 'li' && x.parentNode && x.tagName.toLowerCase() != 'body')
		{
			x = x.parentNode;
		}

		jscss('toggle', x, 'selected', '');
		callbackOnMessageToggledSelected(x, jscss('check', x, 'selected', ''));
	}
};

function _messageToggledForDeletion(listitem, selected)
{
	var del_messageids = document.getElementById('del_messageids');
	if(del_messageids)
	{
		var reg = /^message\-([0-9]+)$/;
		var res = listitem.id.match(reg);
		var messageid = res[1];

		var ids = del_messageids.value.split(',');

		if(selected)
		{
			ids[ids.length] = messageid;
		}
		else
		{
			for(var i=0; i < ids.length;i++)
			{
				if(ids[i] == messageid)
					delete ids[i];
			}
		}

		del_messageids.value = ids.join(',');
	}
};

function selectMessagesForDeletion(ev, ob)
{
	var x = getObj(ev, ob);

	var del_messageids = document.getElementById('del_messageids');
	if(del_messageids)
	{
		del_messageids.value = '';

		_selectMessages(!x.checked);
		if(!x.checked)
			callbackOnMessageToggledSelected = null;
		else
			callbackOnMessageToggledSelected = _messageToggledForDeletion;

		if(x.checked)
			alert(getText('forms', 'select_messages'));
	}
};

function _messageToggledForSplit(listitem, selected)
{
	var split_messageids = document.getElementById('split_messageids');
	if(split_messageids)
	{
		var reg = /^message\-([0-9]+)$/;
		var res = listitem.id.match(reg);
		var messageid = res[1];

		var ids = split_messageids.value.split(',');

		if(selected)
		{
			ids[ids.length] = messageid;
		}
		else
		{
			for(var i=0; i < ids.length;i++)
			{
				if(ids[i] == messageid)
					delete ids[i];
			}
		}

		split_messageids.value = ids.join(',');
	}
};

function selectMessagesForSplit(ev, ob)
{
	var x = getObj(ev, ob);

	var split_messageids = document.getElementById('split_messageids');
	if(split_messageids)
	{
		split_messageids.value = '';

		_selectMessages(!x.checked);
		if(!x.checked)
			callbackOnMessageToggledSelected = null;
		else
			callbackOnMessageToggledSelected = _messageToggledForSplit;

		if(x.checked)
			alert(getText('forms', 'select_messages'));
	}
};
