function popUp(page,PWidth,PHeight,id) {
	eval("designerwiz"+id+"=window.open('"+page+"','designerwiz1','toolbar=0,scrollbars=0,location=0,status=0,menubars=0,resizable=0,width="+PWidth+",height="+PHeight+"')")
}

function submitForm(f) {
	var page = window.location.pathname.split(/\//).pop();
	f.action = page;
	if (f.onsubmit) f.onsubmit();
	f.submit();
}

function clearDefaults(f, def) {
	for (field in def) {
		if (f.elements[field]) { 
			if (f.elements[field].length) {
				for (var i = 0; i < f.elements[field].length; ++i)
					if (f.elements[field][i].value == def[field])
						f.elements[field][i].value = null;
			} else if (f.elements[field].value == def[field]) {
				f.elements[field].value = null;
			}
		}
	}
}
function addSymbolCallback(containerid, name) {
	var container = $(containerid);
	return function(symbol, desc) {
		if (!symbol.length || symbol == 'Symbol') return;
		var symbols = typeof(symbol) == 'object' ? symbol : Array(symbol);
		if (!desc) desc = symbol;
		var descs = typeof(desc) == 'object' ? desc : Array(desc);
		for (var i = 0; i < symbols.length; ++i) {
			var id = 'symbolinput_' + container.childNodes.length;

			var symcont = document.createElement('li');
			symcont.id = id + '_cont';
			setSortableItemBehavior(symcont, null);

			var input = document.createElement('input');
			input.type = 'hidden';
			input.name = name;
			input.id = id;
			input.value = symbols[i];

			var label = document.createElement('label');
			label.htmlFor = id;
			label.id = id + '_label';
			label.innerHTML = '<a href="#" onclick="$(\'' + id + '_cont\').remove(); return false;"><img src="/images/red_delete.gif" style="vertical-align:middle;" /></a> ' + descs[i] + ' (' + symbols[i] + ')';

			symcont.appendChild(input);
			symcont.appendChild(label);
			symcont.appendChild(document.createElement('br'));

			container.appendChild(symcont);
		}

		// Rebuild sortable <ul> - messy
		/* And apparently doesn't work.
		var lastChanged = null;
		Sortable.create(container, {
			onChange: function(item) { lastChanged = item; },
			onUpdate: highlightChildren
			});
		*/
	}
}

function highlightChildren(elt) {
	for (var i = 0; i < elt.childNodes.length; ++i)
		new Effect.Highlight(elt.childNodes[i]);
}

function setSortableItemBehavior(elt, editPage) {
	var objId = elt.id.substring(elt.id.indexOf('_') + 1);
	Event.observe(elt, 'mousedown', function() {
			elt.style.backgroundColor = '#FFFF99';
		});
	Event.observe(elt, 'mouseup', function() {
			elt.style.backgroundColor = '#EEEEEE';
		});
	if (editPage)
		Event.observe(elt, 'dblclick', function() {
				window.location = editPage + '?id=' + objId;
			});
}

// Set element behaviors
document.on('dom:loaded', function() {
	$$('#menubar .menu').each(function(elt) {
		elt.onmouseover = function() {
			var items;
			for (i = 0; i < elt.childNodes.length; ++i) {
				if (elt.childNodes[i].nodeType == '1' && elt.childNodes[i].className.indexOf('menuitems') > -1) {
					items = elt.childNodes[i];
					break;
				}
			}
			if (items)
				items.style.display = 'block';
		};
		elt.onmouseout = function() {
			var items;
			for (i = 0; i < elt.childNodes.length; ++i) {
				if (elt.childNodes[i].nodeType == '1' && elt.childNodes[i].className.indexOf('menuitems') > -1) {
					items = elt.childNodes[i];
					break;
				}
			}
			if (items)
				items.style.display = 'none';
		};
	});
	$$('#menubar .menuitem a').each(function(elt) {
		elt.onmouseover = function() {
			addClass(elt, 'highlight_color');
			};
		elt.onmouseout = function() {
			removeClass(elt, 'highlight_color');
			};
	});
	$$('#sidebar li a').each(function(elt) {
		elt.onmouseover = function() {
			addClass(elt, 'sidehighlight_color');
			};
		elt.onmouseout = function() {
			removeClass(elt, 'sidehighlight_color');
			};
	});
	$$('ul.collapsible li a.selectable').each(function(elt) {
		elt.onclick = function() {
				var list = null;
				for (var i = 0; i < elt.parentNode.childNodes.length; ++i) {
					if (elt.parentNode.childNodes[i].nodeName == 'UL') {
						list = elt.parentNode.childNodes[i];
						break;
					}
				}
				if (list) {
					if (list.style.display) list.style.display = '';
					else list.style.display = 'block';
					return false;
				}
			};
	});
	$$('.symbolpicker').each(function(s) {
		new SymbolPicker(s, '/data/symbol_autocomplete.php?type=Futures', {
			autoSelect: true,
			multiple: s.hasClassName('symbolpicker_multi')
		});
	});
	$$('.symbolpicker_root').each(function(s) {
		new SymbolPicker(s, '/data/symbol_autocomplete.php?type=Futures&root=1', {
			autoSelect: true,
			multiple: s.hasClassName('symbolpicker_multi')
		});
	});
	$$('.submitnext').each(function(f) {
		f.on('keydown', function(e) {
			if (e.keyCode == Event.KEY_RETURN) {
				var button = f.next('input[type=button],button,submit');
				if (button) {
					if (button.click) button.click();
					else if (button.onclick) button.onclick();
					else if (f.form) f.form.submit();
					else return;
					Event.stop(e);
				}
			}
		}.bindAsEventListener(this));
	});
	$$('.expander').each(function(e) {

		var hover = false;
		var title = e.childElements()[0];
		var content = title.next();
		content.hide();
		var arrow = new Element('img', {'src': '/images/right_arrow_outline.png',
			'style': 'vertical-align: middle'});
		title.insertBefore(arrow, title.firstChild);

		var update = function() {
			if (content.visible())
				arrow.src = '/images/down_arrow_' + (hover ? 'filled' : 'outline') + '.png';
			else
				arrow.src = '/images/right_arrow_' + (hover ? 'filled' : 'outline') + '.png';
		}

		var toggle = function() {
			if (content.visible())
				content.hide();
			else
				content.show();
			update();
		}

		title.style.cursor = 'pointer';
		title.on('click', toggle);
		title.on('mouseover', function() { hover = true; update(); });
		title.on('mouseout', function() { hover = false; update(); });
	});
	$$('form.focusonload').each(function(elt) {
		Form.focusFirstElement(elt);
	});
	$$('input.datepicker').each(function(elt) {
		new Control.DatePicker(elt, { icon: '/images/calendar.png', locale: 'en_iso8601' });
	});
	$$('input.colorpicker').each(function(elt) {
		new Control.ColorPicker(elt, { icon: '/images/blank.gif' });
	});
	$$('ul.sortable').each(function(elt) {
		Sortable.create(elt);
	});
});

/* Backwards compatibility - Prototype wrappers */
function hasClass(elt, classname) {
	elt = $(elt);
	if (elt) return elt.hasClassName(classname);
	return false;
}

function addClass(elt, classname) {
	elt = $(elt);
	if (elt) elt.addClassName(classname);
}

function removeClass(elt, classname) {
	elt = $(elt);
	if (elt) elt.removeClassName(classname);
}

function replaceClass(elt, oldClass, newClass) {
	removeClass(elt, oldClass);
	addClass(elt, newClass);
}

function hide(elId) {
	elt = $(elId);
	if (elt) elt.hide();
}

function removeElementById(id) {
	var elt = $(id);
	if (elt) elt.remove();
}

function isArray(obj) {
	return Object.isArray(obj);
}

function sendHTTPRequest(url, callback, method) {
	new Ajax.Request(url, {
		method: method,
		onComplete: callback
		});
}

function sendJSONRequest(url, callback, method) {
	sendHTTPRequest(url, function(request) {
			callback(eval(request.responseText));
		}, method);
}

function sendXMLRequest(url, callback, method) {
	sendHTTPRequest(url, function(request) {
			callback(request.responseXML);
		}, method);
}
/* End backwords compatibility */

// Debug stuff
function replaceLink(link, text) {
	var textNode = document.createTextNode(text);
	link.parentNode.replaceChild(textNode, link);
}


