/**
* @package WOW Framework
* @subpackage GUI Controls Library
* @version 2.3 (27/09/2007)
* @license disjunctive tri-license : choose one of the open source licensing terms below
* @license Mozilla Public License, version 1.1 or later : http://www.mozilla.org/MPL/MPL-1.1.html
* @license GNU General Public License, version 2.0 or later : http://www.gnu.org/licenses/gpl-2.0.html
* @license GNU Lesser General Public License, version 2.1 or later : http://www.gnu.org/licenses/lgpl-2.1.html
* @copyright (C) 2003 - 2007 Horia Traian
* @author Horia Traian <realricu@yahoo.com>
*/

var gui_field_id = 0;
var gui_container_id = 'gui_list_container';
var gui_container_obj = null;
var gui_control_id = 'gui_element_source';
var gui_control_html = null;

function gui_add(field_id, source_elem_id, container_id) {

	if(field_id != null && gui_field_id == 0) {
		gui_field_id = field_id;
	}

	if(source_elem_id == null) {
		source_elem_id = gui_control_id;
	}

	if(container_id == null) {
		container_id = gui_container_id;
	}

	gui_container_obj = document.getElementById(container_id);
	gui_source_elem = document.getElementById(source_elem_id);
	gui_control_html = gui_source_elem.innerHTML;

	var new_gui_control = document.createElement(gui_source_elem.tagName);
	new_gui_control.innerHTML = gui_control_html.replace(/field_id/g, gui_field_id);

	gui_container_obj.appendChild(new_gui_control);
	document.location = '#' + gui_field_id;
	gui_field_id ++;
	
	return new_gui_control;
}

function gui_remove(field_id, hard_delete, confirm_dlg, msg) {

	do_hard_delete = (hard_delete == null || hard_delete == false) ? false : true;
	msg = (msg == null) ? "Are you sure you want to delete this item?" : msg;
	confirmed = (confirm_dlg == null || confirm_dlg == true) ? confirm(msg) : true;

	if(confirmed) {

		var node = document.getElementById(field_id);

		if(do_hard_delete) {
			
			node.parentNode.removeChild(node);
			
		} else {

			var delete_flag = document.getElementById('delete_' + field_id);
			node.style.display = 'none';
			if(delete_flag != null) {
				delete_flag.value = 1;
			}
		}

		return true;
	} else {
		return false;
	}
}

try{
	Node.prototype.swapNode = function (node) {
		var nextSibling = this.nextSibling;
		var parentNode = this.parentNode;
		node.parentNode.replaceChild(this, node);
		parentNode.insertBefore(node, nextSibling);
	}
} catch(e) {

}


function getSibling(parent, elem, key) // key -1 or 1
{
	var elems = parent.getElementsByTagName(elem.tagName);

	for (var i = 0; i < elems.length; i++) {

		if(elems[i] == elem) {
			var sibling = elems[i + key];
			break;
		}
	}

	return sibling;
}

function gui_move_up(elem_id, parent_id)
{
	var elem = id(elem_id);
	var parent = (parent_id == null) ? gui_container_obj : id(parent_id);
	var prev = getSibling(parent, elem, -1);

	if(prev != null) {
		elem.swapNode(prev);
	}
	
	return true;
}

function gui_move_down(elem_id, parent_id)
{
	var elem = id(elem_id);
	var parent = (parent_id == null) ? gui_container_obj : id(parent_id);
	var next = getSibling(parent, elem, +1);

	if(next != null) {
		elem.swapNode(next);
	}
	
	return true;
}