var agt = navigator.userAgent.toLowerCase();
var is_ie = agt.indexOf("msie") != -1;

function getXMLRequest() {
	var req = null;
	if (typeof XMLHttpRequest != 'undefined') {
		req = new XMLHttpRequest();
	} else if (typeof ActiveXObject != 'undefined') {
		var XMLObjects = ["MSXML2.XMLHttp", "MSXML3.XMLHttp", "MSXML.XMLHttp", "Microsoft.XMLHttp"];
		for (var i=0; i<XMLObjects.length; i++) {
			try {
				req = new ActiveXObject(XMLObjects[i]);
			} catch (e) {}
		}
	}
	return req;
}
function rmEvent(el, ev, func, buble) {
	if (typeof(el) == "string")
		el = document.getElementById(el);

	if (is_ie) {
		el.detachEvent("on" + ev, func);
	} else {
		el.removeEventListener(ev, func, buble);
	}
}
function addEvent(el, ev, func, buble) {
	if (typeof(el) == "string")
		el = document.getElementById(el);

	if (!el) return;

	if (is_ie) {
		el.attachEvent("on" + ev, func);
	} else {
		el.addEventListener(ev, func, buble);
	}
}
function stopEvents(ev) {
	var ev = getEvent(ev);
	ev.cancelBubble = true;
	ev.returnValue = false;
	if (ev.stopPropagation) ev.stopPropagation();
	if (ev.preventDefault)  ev.preventDefault();
	return ev;
}
function cleanElement(el) {
	while (el.lastChild)
		el.removeChild(el.lastChild);
}
function getSrcElement(el) {
	if (el.event) {// IE -> window.event.srcElement
		return el.event.srcElement;
	}
	return el;
}
function getEvent(ev) {
	if (!ev) return window.event;
	return ev;
}
function HTMLSpecialChars(str) {
	return str.replace(/&/g,"&amp;").replace(/\"/g,"&quot;").replace(/\'/g,"&#039;").replace(/</g,"&lt;").replace(/>/g,"&gt;");
}

function C4_repaintForm(id) {
	var table = document.getElementById(id);
	if (typeof table == "undefined") return;
	if (table.nodeName.toLowerCase() != "table") return;

	var c = 2;
	for (var i=0; i<table.rows.length; i++) {
		var row = table.rows.item(i);
		if (row.style.display != "none" && row.cells.item(0).className != "formbuttons") {
			row.className = "formrow" + (c = c % 2 + 1);
		}
	}
}


function C4_editor(area) {
  Dialog("/Admin/wysiwyg/area.htm",
		function(txt) { document.getElementById(area).value=txt; },
		document.getElementById(area).value, true);
}

function C4_changeLocal(id) {
	var local = document.getElementById(id + "_local");
	if (local.value == 1) {
		local.value = 0;
		document.getElementById(id + "_c").style.display = "block";
		document.getElementById(id + "_l").style.display = "none";
	} else {
		local.value = 1;
		document.getElementById(id + "_c").style.display = "none";
		document.getElementById(id + "_l").style.display = "block";
	}
}

function C4_dateStatus() {
	var el = document.getElementById(this.id + "_day");
	if (el) el.disabled = !this.checked;
	el = document.getElementById(this.id + "_month");
	if (el) el.disabled = !this.checked;
	el = document.getElementById(this.id + "_year");
	if (el) el.disabled = !this.checked;
}
function C4_calendarStatus(id) {
/*
	if (document.getElementById(id).checked) {
		document.getElementById("cal_" + id).style.display = "";
	} else {
		document.getElementById("cal_" + id).style.display = "none";
	}
*/
	var disabled = !document.getElementById(id).checked;
	var fd = document.getElementById("cal_" + id);
	var sel = fd.getElementsByTagName("select");
	for (var i=0; i<sel.length; i++) {
		sel[i].disabled = disabled;
	}
	var inp = fd.getElementsByTagName("input");
	for (var i=0; i<inp.length; i++) {
		inp[i].disabled = disabled;
	}
	var ta = fd.getElementsByTagName("textarea");
	for (var i=0; i<ta.length; i++) {
		ta[i].disabled = disabled;
	}
}

/*
 * C4 Dinamic MuliSelect functions
 * Author: Martins Kalvans
 */
function C4_DMS_replaceSelect(id) {
		// remove select
	var select = document.getElementById(id);
		// create table
	var table = document.createElement("table");
	table.className = "formdms";
		// create row
	var tr = table.insertRow(-1);
	tr.className = select.parentNode.parentNode.className;
		// create first column
	var td1 = tr.insertCell(-1);
		// create first select ("chose" group)
	var all = document.createElement("select");
	all.className = "formdms";
	all.multiple = true;
	all.id = "all_" + select.name;
	all.ondblclick = function() {C4_DMS_moveToSel(select.name);};
	all.onkeydown = function(ev) {
		ev = getEvent(ev);
		if (ev.keyCode == 13) {
			C4_DMS_moveToSel(select.name);
			stopEvents(ev);
		}
	};
	td1.appendChild(all);
		// optgroup
	var og = document.createElement("optgroup");
	og.label = "Chose " + select.title + ":";
	all.appendChild(og);
		// create second column
	var td2 = tr.insertCell(-1);
	td2.className = "formdms_btns";
		// create buttons
			//move to sel
	var div = document.createElement("div");
	td2.appendChild(div);
	var button = document.createElement("button");
	button.onclick = function() {this.blur(); return C4_DMS_moveToSel(select.name)};
	div.appendChild(button);
	var img = new Image();
	img.src = "/Admin/ico/moveright.gif";
	button.appendChild(img);
			//move all to sel
	var div = document.createElement("div");
	td2.appendChild(div);
	var button = document.createElement("button");
	button.onclick = function() {this.blur(); return C4_DMS_moveAllToSel(select.name)};
	div.appendChild(button);
	var img = new Image();
	img.src = "/Admin/ico/moverightall.gif";
	button.appendChild(img);
			//move to sel
	var div = document.createElement("div");
	td2.appendChild(div);
	var button = document.createElement("button");
	button.onclick = function() {this.blur(); return C4_DMS_moveAllToAll(select.name)};
	div.appendChild(button);
	var img = new Image();
	img.src = "/Admin/ico/moveleftall.gif";
	button.appendChild(img);
			//move to sel
	var div = document.createElement("div");
	td2.appendChild(div);
	var button = document.createElement("button");
	button.onclick = function() {this.blur(); return C4_DMS_moveToAll(select.name)};
	div.appendChild(button);
	var img = new Image();
	img.src = "/Admin/ico/moveleft.gif";
	button.appendChild(img);
		// create third column
	var td3 = tr.insertCell(-1);
		// create first select ("chose" group)
	var sel = document.createElement("select");
	sel.name = select.name;
	sel.className = "formdms";
	sel.multiple = true;
	sel.id = "sel_" + select.name;
	sel.ondblclick = function() {C4_DMS_moveToAll(select.name);};
	sel.onkeydown = function(ev) {
		ev = getEvent(ev);
		if (ev.keyCode == 13 || ev.keyCode == 46) {
			C4_DMS_moveToAll(select.name);
			stopEvents(ev);
		}
	};
	td3.appendChild(sel);
		// optgroup
	var og = document.createElement("optgroup");
	og.label = "Selected " + select.title + ":";
	sel.appendChild(og);

		// options
	for (var option = select.options[0], i=0; option!=null; option = select.options[0], i++) {
		option.setAttribute("order", i);
		if (option.selected || option.defaultSelected) {
			option.selected = false;
			sel.appendChild(option);
		} else {
			all.appendChild(option);
		}
	}

	addEvent(select.form, "submit", function() {
		for (var i=0; i<sel.options.length; i++) {
			sel.options[i].selected = true;
		}
		for (var i=0; i<all.options.length; i++) {
			all.options[i].selected = false;
		}
	});

	select.parentNode.replaceChild(table, select);
		// IE sux, as usually..
	sel.selectedIndex = -1;
	all.selectedIndex = -1;

	return true;
}

function C4_DMS_appendOrdered(select, option) {
	if (option.nodeName.toLowerCase() != "option") return;

	option.selected = false;
	try {
		for (var child = select.firstChild; child != null; child = child.nextSibling) {
			if (child.nodeName.toLowerCase() != "option") continue;
			if (option.getAttribute("order") < child.getAttribute("order")) {
				select.insertBefore(option, child);
				return;
			}
		}
	} catch (e) {}
	select.appendChild(option);
}

function C4_DMS_moveAllToAll(name) {
	var sel = document.getElementById("sel_" + name);
	var opts = sel.getElementsByTagName('option');
	var all = document.getElementById("all_" + name);
	for (var i=opts.length-1; i>=0; i--) {
		if (!opts[i].disabled) {
			C4_DMS_appendOrdered(all, sel.removeChild(opts[i]));
		}
	}
	return false;
}
function C4_DMS_moveToAll(name) {
	var sel = document.getElementById("sel_" + name);
	var opts = sel.getElementsByTagName('option');
	var all = document.getElementById("all_" + name);
	for (var i=opts.length-1; i>=0; i--) {
		if (opts[i].selected && !opts[i].disabled)
			C4_DMS_appendOrdered(all, sel.removeChild(opts[i]));
	}
	return false;
}

function C4_DMS_moveAllToSel(name) {
	var all = document.getElementById("all_" + name);
	var opts = all.getElementsByTagName('option');
	var sel = document.getElementById("sel_" + name);
	for (var i=opts.length-1; i>=0; i--) {
		if (!opts[i].disabled) {
			C4_DMS_appendOrdered(sel, all.removeChild(opts[i]));
		}
	}
	return false;
}
function C4_DMS_moveToSel(name) {
	var all = document.getElementById("all_" + name);
	var opts = all.getElementsByTagName('option');
	var sel = document.getElementById("sel_" + name);
	for (var i=opts.length-1; i>=0; i--) {
		if (opts[i].selected && !opts[i].disabled)
			C4_DMS_appendOrdered(sel, all.removeChild(opts[i]));
	}
	return false;
}

function C4_DMS_selectAll() {
	alert("remove me!");
}

/**
 * C4 dynamic selects functions.
 * Author: Martins Kalvans
 */
var dynamicSelects = new Array();

function DynamicSelect(el) {
	this.element = el;
	this.options = new Array();
		// put options in array
	for (var i=el.options.length-1; i>=0; i--) {
		this.options[this.options.length] = el.options[i];
	}

	this.dependences = new Array();
}
DynamicSelect.prototype.addDependence = function(el, att, val) {
	var dep = new Object();
	dep.element = el;
	dep.attribute = att;
	dep.allValue = val;
	this.dependences[this.dependences.length] = dep;
}
DynamicSelect.prototype.onchange = function(ev) {
		// clean current options
	cleanElement(this.element);
	for (var i=this.options.length-1; i>=0; i--) {
		var opt = this.options[i];
		var append = true;
		for (var j=this.dependences.length-1; j>=0; j--) {
			var dep = this.dependences[j];
				// master element value is allValue
			if (dep.element.value == dep.allValue) {
				continue;
			}
			var val = opt.getAttribute(dep.attribute);
			if (val != dep.element.value) {// master value not equal dependence attribute value
				if (val != null) {// dependence attribute is set
					append = false;
					break;
				}
			}
		}
			// append
		if (append) {
			this.element.appendChild(opt);
		}
	}

		// hide or show
	var el = document.getElementById("container_" + this.element.id);
	if (el) {
		var show = false;
		for (var i=this.element.options.length-1; i>=0; i--) {
			for (var j=this.dependences.length-1; j>=0; j--) {
				if (this.element.options[i].getAttribute(this.dependences[j].attribute) != null) {
					show = true;
					break;
				}
			}
			if (show) break;
		}
		if (show) {
			el.style.display = "";
		} else {
			el.style.display = "none";
		}
	}
}

function registerDynamicSelect(master, slave, attrib, allValue) {
		// get elements
	var masterElement = document.getElementById(master);
	if (!masterElement) return false;
	var slaveElement = document.getElementById(slave);
	if (!slaveElement) return false;

		// get DynamicSelect
	var select = dynamicSelects[slave];
	if (typeof(select) == "undefined") {
		select = new DynamicSelect(slaveElement);
		dynamicSelects[slave] = select;
	}

		// add parent dependences
	select.addDependence(masterElement, attrib, allValue);

		// attach event listener
	addEvent(masterElement, "change", function() {select.onchange();}, false);

		// call function
	select.onchange();
}

function infoMessage(msg) {
	var width = 350;
	var height = 200;
	var left = screen.availWidth / 2 - width / 2;
	var top = screen.availHeight / 2 - height / 2;
	var win = document.open(
		"about:blank",
		"_info",
		"dialog=1,modal=1,dependent=1,directories=0,height="+height+",width="+width+",top="+top+",left="+left+",location=0,menubar=0,status=0,toolbar=0"
	);
	win.document.open();
	win.document.write(msg);
	win.document.close();
	addEvent(win.document, "click", function() {win.close();});
	addEvent(win, "blur", function() {win.close();});
}
