function selected_radio_by_name(name) {
	list = document.getElementsByName(name+'[]');
	for(var i = 0; i < list.length; i++) {
		if(list[i].checked == true) {
			return list[i].value;
		}
	}
}

function toggle_active_field(id, toggle, classon, classoff) {
	if (toggle.checked == true) {
		document.getElementById(id).readOnly = false;
		document.getElementById(id).className = classon;
	} else {
		document.getElementById(id).readOnly = true;
		document.getElementById(id).className = classoff;
	}
}

function max_len_countdown(field_id, cur_len, max_len) 
{
	document.getElementById(field_id).innerHTML = cur_len+' / '+max_len;

	if(cur_len > max_len) {
		document.getElementById(field_id).style.color =  '#F00';
	} else  {
		document.getElementById(field_id).style.color =  '';
	}

}

function insert_at_cursor2(field, val) {
	if (document.selection) {					//IE
		field.focus();
		if(opener) {
			sel = opener.document.selection.createRange();	//Pop Up
		} else { 
			sel = document.selection.createRange();
	 	}
		sel.text = val;
	}
	else if (field.selectionStart || field.selectionStart == '0') {	//Moz
		var startPos = field.selectionStart;
		var endPos = field.selectionEnd;
		field.value = field.value.substring(0, startPos)+val+field.value.substring(endPos, field.value.length);
	} else {
		field.value += val;
	}

  	field.focus(startPos);
	return true;
}


function insert_at_cursor(field,value){
  //IE support
  if (document.selection) {
    field.focus();
    if(opener == null){
      sel = document.selection.createRange();
    }else{
      sel = opener.document.selection.createRange();
    }
    sel.text = value;
  //MOZILLA/NETSCAPE support
  }else if (field.selectionStart || field.selectionStart == '0') {
    var startPos  = field.selectionStart;
    var endPos    = field.selectionEnd;
    var scrollTop = field.scrollTop;
    field.value = field.value.substring(0, startPos)
                  + value
                  + field.value.substring(endPos, field.value.length);

    field.focus();
    var cPos=startPos+(value.length);
    field.selectionStart=cPos;
    field.selectionEnd=cPos;
    field.scrollTop=scrollTop;
  } else {
    field.value += "\n"+value;
  }
  // reposition cursor if possible
  if (field.createTextRange) field.caretPos = document.selection.createRange().duplicate();
}


function insert_bold(form)
{
	var val = window.prompt('Enter text to bold:', '');
	if(val != null && val.length > 0) {
		field = document.getElementById(form);
		insert_at_cursor(field, '*'+val+'*');
	}
}

function insert_html(form)
{
	var val = window.prompt('Enter HTML Embed Code:', '');
	if(val != null && val.length > 0) {
		field = document.getElementById(form);
		insert_at_cursor(field, '<html'+val+'</html>');
	}
}

function insert_newline(form)
{
	field = document.getElementById(form);
	insert_at_cursor(field, "<br>\n");
}

function insert_italic(form)
{
	var val = window.prompt('Enter text to be italic:', '');
	if(val != null && val.length > 0) {
		field = document.getElementById(form);
		insert_at_cursor(field, '_'+val+'_');
	}
}

function insert_underline(form)
{
	var val = window.prompt('Enter text to be underlined:', '');
	if(val != null && val.length > 0) {
		field = document.getElementById(form);
		insert_at_cursor(field, '<u>'+val+'</u>');
	}
}

function insert_strikethrough(form)
{
	var val = window.prompt('Enter text to be strikethrough:', '');
	if(val != null && val.length > 0) {
		field = document.getElementById(form);
		insert_at_cursor(field, '<s>'+val+'</s>');
	}
}

function insert_header(field, count)
{
	var val = window.prompt('Enter H'+count+' text:', '');
	if(val != null && val.length > 0) {
		for(var x=0; x<count; x++) {
			val = '='+val+'=';
		}
		field = document.getElementById(field);
		insert_at_cursor(field, '\n'+val+'\n');
	}
}

function insert_intlink(form)
{
	var val = window.prompt('Enter page name:', '');
	if(val != null && val.length > 0) {
		var display = window.prompt('Enter text to display (leave blank to show just the name):', '');
		if(display != '') {
			val += '|'+display;
		}
		field = document.getElementById(form);
		insert_at_cursor(field, '[['+val+']]');
	}	
}

function insert_extlink(form)
{
	var val = window.prompt('Enter link address:', '');
	if(val != null && val.length > 0) {
		var display = window.prompt('Enter text to display (leave blank to show just the link):', '');
		if(display != '') {
			val += ' '+display;
		}
		field = document.getElementById(form);
		insert_at_cursor(field, '['+val+']');
	}
}

function insert_quote(form)
{
	var val = window.prompt('Enter quote:', '');
	if(val != null && val.length > 0) {
		field = document.getElementById(form);
		insert_at_cursor(field, '<quote>'+val+'</quote>');
	}
}

function insert_username(form)
{
	var val = window.prompt('Enter username:', '');
	if(val != null && val.length > 0) {
		field = document.getElementById(form);
		insert_at_cursor(field, '[[user:'+val+']]');
	}
}

function insert_text(form, val)
{
	if(val != null && val.length > 0) {
		field = document.getElementById(form);
		insert_at_cursor(field, val);
	}
}


function textarea_insert(id, field, form_id)
{
	to_insert = document.getElementById(id).value;
	switch(to_insert) {
		case 'hr':
			insert_text(field, "\n-----\n");
			break;
		case 'break':
			insert_text(field, "\n#####\n");
			break;
		case 'toc':
			insert_text(field, "!toc");
			break;
		default :
			eval('insert_'+to_insert+'(\''+field+'\');');
	}
	document.getElementById(id).value = '';
}

function popup(p, textarea_id, mode, height, width) {
	if(!p.form) {	 return false; 	}
	if(!width) {
		width = 500;
	}
	if(!height) {
		height = 400;
	}
	var win = window.open('helpers/popup.php',mode,'width='+width+',height='+height+',scrollbars=yes,status=yes,resizable=yes,modal=yes,dialog=yes');
	if(!win) { 
		window.alert("Preview window has been blocked.");
		return false;
	}
	p.form.setAttribute("target", mode);
	p.form.setAttribute("action", '/helpers/popup.php?id='+textarea_id+'&mode='+mode);
	p.form.submit();
	p.form.setAttribute("target", "");
	p.form.setAttribute("action", "");
	win.focus();
	return true;
}


function enable_field(id)
{
	field = document.getElementById(id);
	field.readOnly = false;
	field.className = 't';
}

function disable_field(id)
{
	field = document.getElementById(id);
	field.readOnly = true;
	field.className = 'disabled';

}

function disable_toggle(id)
{
	field = document.getElementById(id);
	if(field.readOnly == false) {
		disable_field(id);
	} else {
		enable_field(id);
	}

}

function form_verify_regexp(pattern, element, error)
{
	if(!element.value) {
		return true;
	}
	var re = new RegExp(pattern);
	if(!re) {
		return true;
	}
	var ret = re.test(element.value);
	if(!ret) {
		element.style.color = '#FF0000';
		/*if(error) {
			window.alert('Error.');
		}*/
		return false;
	}
	element.style.color = '';
	return true;
}

function form_combobox_change(object)
{
	if(object.value == '!other') {
		var newval = window.prompt('Enter value:', '');
		var option = document.createElement('option');
		option.value = newval;
		var text = document.createTextNode(newval);
		option.appendChild(text);
		object.appendChild(option);
		object.value = newval;
	}
}

function user_exists_handler()
{
	if(http.readyState != 4) {
		return;
	}
	if(http.status != 200) {
		return;
	}
	if(http.responseText != 'true') {
		http.element.style.color = 'red';
		window.alert(http.responseText);
	} else {
		http.element.style.color = '';
	}
}

function user_exists(element)
{
	http = get_http();
	if(!http) {
		return true;
	}
	if(!element.value) {
		element.style.color = '';
		return true;
	}
	http.open("GET", '/helpers/formhttp.php?user_exists='+escape(element.value), true);
	http.element = element;
	http.onreadystatechange = user_exists_handler;
	http.send(null);
	return true;
}

function help_toggle(id)
{
	help = document.getElementById(id+'_help');
	if(!help) {
		return false;
	}
	if(help.style.display == 'none') {
		help_in(id);
	} else {
		help_out(id);
	}
	return true;
}

function help_in(id)
{
	help = document.getElementById(id+'_help');
	if(!help) {
		return false;
	}
	help.style.display = '';
	return true;
}
function help_out(id)
{
	help = document.getElementById(id+'_help');
	if(!help) {
		return false;
	}
	help.style.display = 'none';
	return true;
}
function img_change(i_id, imgid, img_src)
{
	preview = document.getElementById(i_id+'_preview');
	preview.style.display = 'none';
	if(imgid >= 0) {
		if(preview && imgid > 0) {
			preview.innerHTML = '<img src="'+img_src+'" />';
			preview.style.display = 'block';
		}
	}
}

function textarea_edit()
{
	// kill the preview and show the form again
	this.preview.style.display = 'none';
	this.textarea.style.display = '';
	this.onclick = _textarea_preview;
	this.value = 'Preview';
}

function _textarea_preview()
{
	textarea_preview(this.textarea.id);
}

function textarea_expand(textarea_id)
{
	var ta = document.getElementById(textarea_id);
	ta.rows += 5;
}

function textarea_contract(textarea_id)
{
	var ta = document.getElementById(textarea_id);
	ta.rows -= 5;
	if(ta.rows < 1) {
		ta.rows = 1;
	}
}

function textarea_set_wrapping(ta_id, wrapping)
{
	var ta = document.getElementById(ta_id);
	if(wrapping) {
		ta.wrap = 'soft';
	} else {
		ta.wrap = 'off';
	}
}
function textarea_preview(textareaid)
{
	function handle_response(http, textarea)
	{
		if(http.readyState != 4) {
			return;
		}
		if(http.status != 200) {
			window.alert('Error previewing: '+http.statusText);
			textarea.value = http.responseText;
			textarea.button.disabled = false;
			textarea.button.value = 'Preview';
			return false;
		}
		var parea = document.getElementById(textarea.id + '_preview');
		if(!parea) {
			return;
		}
		parea.innerHTML = http.responseText;
		parea.style.display = 'block';
		textarea.parentNode.insertBefore(parea, textarea);
		textarea.style.display = 'none';
		var button = document.getElementById(textarea.id+'_preview_button');
		button.value = 'Edit';
		button.preview = parea;
		button.textarea = textarea;
		button.onclick = textarea_edit;
		button.disabled = false;
	} 
	var textarea = document.getElementById(textareaid);
	var button = document.getElementById(textareaid+'_preview_button');
	textarea.button = button;

	if(!ajax_call('wiki2_preview',handle_response,{text: textarea.value}, textarea)) {
		window.alert('Your browser does not support this function.');
		return false;
	}
	button.value = 'Loading preview...';
	button.disabled = true;
	return true;
}

function form_combobox_insert(o)
{
	if(o.value == '_NEW_VALUE_') {
		var val = window.prompt("Enter new value: ");
		var newopt = document.createElement('option');
		newopt.value = val;
		var text = document.createTextNode(val);
		newopt.appendChild(text);
		o.appendChild(newopt);
		o.value = val;
	}
}



function hide_others(current, id)
{
	var id_array=current.split(".");
	var selects = document.getElementsByTagName('select');
	var rel;

	var x;
	for(x = 0; x < selects.length; x++) {
		if((rel = selects[x].getAttribute('rel'))) {
			myRE = new RegExp(id+":")
			results = rel.match(myRE)
			if(results) {	// match to our select
				var hide = true;
				var string = '';
				for(y = 0; y < id_array.length; y++) {
					if(string.length == 0) {
						string = id_array[y]
					} else {
						string = string+'.'+id_array[y]
					}

					if(id+':'+string == rel) {
						hide = false;
						// if its set to be shown and it has a selected child, show its selected
						if(y < id_array.length-1) {
							selects[x].value = string+'.'+id_array[y+1];
						}
					}
				}

				if(hide && rel != id+':0') {	// don't ever hide root
					selects[x].value = '0';
					selects[x].style.display = 'none';
				} else {
					selects[x].style.display = 'block';
				}
			}
		}
	}
}

function show_select_child(val, id)
{
	if(select = document.getElementById(id+':'+val.value)) {	// if there are children
		select.style.display = 'block';
		var current = val.value;
	} else {
		rel = val.getAttribute('rel').split(":")[1];
		var current = rel;
	}
	hide_others(current, id);
}

function i_text_def_dclick()
{
	this.check.checked = false;
	this.disabled = false;
	input.className = 't';
}

function i_text_def_check_change()
{
	this.target.disabled = this.checked ? true : false;	
	if(this.target.disabled)
		this.target.className = 't disabled';
	else
		this.target.className = 't';

	if(this.checked) {
		var def_val = this.target.getAttribute("defvalue");
		this.target.value = def_val;
	}
}

function i_text_def_init(id)
{
	var input = document.getElementById(id);
	var check = document.getElementById(id+'_default');
	check.target = input;
	input.check = check;
	if(check.checked) {
		input.disabled = true;
		input.className = 't disabled';
	}
	check.onchange = i_text_def_check_change;
	input.ondoubleclick = i_text_def_dclick;
}

function i_list(id)
{
	var _this = this;

	// check that there are no other items with this value
	function check_unique(value)
	{
		for(var i = 0; i < _this.list.childNodes.length; i++) {
			if(_this.list.childNodes[i].firstChild.innerHTML == value) {
				return false;
			}
		}
		return true;
	}

	// create the li
	this.add = function(value) {

		if(_this.unique && !check_unique(value)) return false;

		var o = document.createElement('li');
		var t = document.createElement('span');
		t.innerHTML = value;
		if(_this.allow_rename) {
			t.className = 'editable';
			t.title = 'Double-click to Edit';
			t.ondblclick = this.rename_handler;
		}
		o.appendChild(t);

		var hidden = document.createElement('input');
		hidden.type = 'hidden';
		hidden.name = id + '[]';
		hidden.value = value;
		o.appendChild(hidden);

		// link to remove item
		if(this.allow_remove) {
			o.appendChild(document.createTextNode(' '));

			var l = document.createElement('a');
			l.innerHTML = 'x';
			l.href = '#remove';
			l.title = 'Remove this item';
			l.onclick = this.remove_handler;
			l.list = list;
			o.appendChild(l);
		}


		if(this.allow_reorder) {
			o.appendChild(document.createTextNode(' '));

			// link to move item up
			var l = document.createElement('a');
			l.innerHTML = 'up';
			l.href = '#up';
			l.title = 'Move this item up';
			l.onclick = this.move_up_handler;
			o.appendChild(l);

			o.appendChild(document.createTextNode(' '));

			// link to move item down
			var l = document.createElement('a');
			l.innerHTML = 'down';
			l.title = 'Move this item down';
			l.href = '#down';
			l.onclick = this.move_down_handler;
			o.appendChild(l);
		}

		this.list.insertBefore(o, this.list.lastChild);
		return true;
	}

	this.rename_complete_handler = function(e) {
		if(!e) e = window.event;
		if(e.type == 'blur' || (e.type == 'keydown' && e.keyCode == 13)) {
			if(this.value == '') {
				this.parentNode.parentNode.removeChild(this.parentNode);
				return false;
			}
			if(_this.unique && !check_unique(this.value)) {
				return false;
			}
			var span = document.createElement('span');
			span.innerHTML = this.value;
			if(_this.unique) {
				span.ondblclick = _this.rename_handler;
				span.className = 'editable';
				span.title = 'Double-click this to Edit';
			}
			this.nextSibling.value = this.value;
			this.parentNode.replaceChild(span, this);
			return false;
		}
	}

	this.rename_handler = function(e) {
		var i = document.createElement('input');
		i.type = 'text';
		i.className = 'editable';
		i.value = this.innerHTML;
		i.onkeydown = _this.rename_complete_handler;
		i.onblur = _this.rename_complete_handler;
		this.parentNode.replaceChild(i, this);
		i.focus();
	}

	this.remove_handler = function(e) {
		if(!e)
			e = window.event;
		this.parentNode.parentNode.removeChild(this.parentNode);
	}

	this.move_up_handler = function(e) {
		if(!e)
			e = window.event;
		var list = this.parentNode.parentNode;
		var item = this.parentNode;
		var psib = item.previousSibling;
		if(!psib)
			return;
		list.removeChild(item);
		list.insertBefore(item, psib);
	}

	this.move_down_handler = function(e) {
		if(!e)
			e = window.event;
		var list = this.parentNode.parentNode;
		var item = this.parentNode;
		if(!item.nextSibling.nextSibling)
			return;
		var nsib = item.nextSibling.nextSibling;
		list.removeChild(item);
		list.insertBefore(item, nsib);
	}

	this.id = id;
	this.allow_reorder	= true;
	this.allow_add		= true;
	this.allow_remove	= true;
	this.unique			= true;

	// create list
	this.container = document.getElementById(id+'_i_list');
	if(!this.container)
		return false;

	this.list = document.createElement('ul');
	this.list.id = id;

	var nojs = document.getElementById(id+'_nojs');
	if(!nojs)
		return false;

	this.unique = nojs.getAttribute("unique") == 'on' ? true : false;
	this.allow_reorder = nojs.getAttribute("reorder") == 'on' ? true : false;
	this.allow_add = nojs.getAttribute("add") == 'on' ? true : false;
	this.allow_remove = nojs.getAttribute("remove") == 'on' ? true : false;
	this.allow_rename = nojs.getAttribute("rename") == 'on' ? true : false;

	var items;
	if(nojs.value == '') {
		items = new Array();
	} else {
		items = nojs.value.split(/\n/);
	}
	nojs.parentNode.removeChild(nojs);

	// populate the list with items
	for(var i = 0; i < items.length; i++) {
		this.add(items[i]);
	}
	var o = document.createElement('li');
	var input = document.createElement('input');
	input.type = 'text';
	input.value = 'add item...';
	input.className = 'editable replace';
	input.onfocus = function(e) {
		this.className = 'editable';
		this.value = '';
	};
	input.onkeydown = function(e) {
		if(!e) e = window.event;
		if(e.keyCode == 13) {
			if(this.value !== '' && _this.add(this.value)) {
				this.value = '';
			}
			return false;
		}
	}
	input.onblur = function(e) {
		if(this.value !== '') {
			if(_this.add(this.value)) {
				this.value = '';
			}
		}
		this.className = 'editable replace';
		this.value = 'add item...';
	}
	o.appendChild(input);
	this.list.appendChild(o);

	this.container.appendChild(this.list);
}

var list = new i_list();

function i_list_init()
{
	var divs = document.getElementsByTagName('div');
	for(var i = 0; i < divs.length; i++) {
		if(divs[i].id.search(/_i_list$/) != -1) {
			var m = divs[i].id.match(/^(.*)_i_list$/);
			if(m && m[1]) {
				new i_list(m[1]);
			}
		}
	}
}
function form_init()
{
	var inputs = document.getElementsByTagName("input");
	for(var i = 0; i < inputs.length; i++) {
		var m;
		if(m = inputs[i].id.match(/^(.*)_default$/)) {
			i_text_def_init(m[1]);
		}
	}
	i_list_init();
}

add_event(window, "load", form_init);
