var mousemove_action = '';
var tooltip_id = '';

var contextobject = null;
var hidecontext = null;
var contexttimer = null;

var is_gecko = false;
var is_opera = false;
var is_ie = false;
if (navigator.userAgent.indexOf("Gecko") >= 0) {
	is_gecko = true;
} else if (navigator.userAgent.indexOf("Opera") >= 0) {
	is_opera = true;
} else {
	is_ie = true;
}

function createUUID() {
	var jetzt = new Date();
	return jetzt.getTime();
}

// Basic Trim Function
String.prototype.basicTrim = function () {
	return (this.replace(/\s+$/,"").replace(/^\s+/,""));
}
// Return Array Pos of exact center of Window
function centerScreen() {
	var Pos = new Array();
	if (document.all) {
		Pos[0] = (document.body.offsetWidth / 2);
		Pos[1] = document.body.scrollTop + (document.body.offsetHeight / 2);
	} else {
		Pos[0] = (window.innerWidth / 2);
		Pos[1] = window.pageYOffset + (window.innerHeight / 2);
	}
	return Pos;
}

function jump_entry(link, oldid, newid) {
	var url = "edit.cfm?id=" + newid;
	// url += "&unlock=" + oldid + ";
	var el = document.getElementById('idfield');
	if (el) {
		url += "&unlock=" + el.value;
	} else {
		url += "&unlock=" + oldid;
	}
	el = document.getElementById('whcms_tab');
	if (el) {
		url += "&whcms_tab=" + el.value;
	}
	el = document.getElementById('whcms_tabinfo');
	if (el) {
		url += "&whcms_tabinfo=" + el.value;
	}
	link.href = url;
}

function toggle_item (id) {
	el = document.getElementById(id);
	el2 = document.getElementById(id + '_cont');
	if (el2.style.display == 'block') {
		el.className = 'toggle_expand';
		el2.style.display = 'none';
	} else {
		el.className = 'toggle_collapse';
		el2.style.display = 'block';
	}
}

function popup_revisions (id, structure) {
	var l = (screen.width - 700) / 2;
	var t = (screen.height - 350) / 2;
	window.open ('popup_revisions.cfm?id=' + id + '&structure=' + structure, 'revisions', 'width=700, height=350, left=' + l + ', top=' + t + ', scrollbars=yes');
}
function popup_join (id, structure, field) {
	var width = 550; //430
	var height = 480; //370
	var l = (screen.width - width) / 2;
	var t = (screen.height - height) / 2;
	var params = '';
	if (field) {
		params += "&field=" + field;
	}
	window.open ('popup_join.cfm?id=' + id + '&structure=' + structure + params, 'revisions', 'width='+width+', height='+height+', left=' + l + ', top=' + t + ', scrollbars=yes');
}
/* join in Thickbox - DK, 09.04.2009 */
function popup_join_tb (id, structure, field) {
	var params = '';
	if (field) {
		params += "&field=" + field;
	}
	var url = 'popup_join.cfm?id=' + id + '&structure=' + structure + params + '&tb=1&TB_iframe=true&height=400&width=500';
	tb_show('', url, false);
}

function popup_dbselect (structure, field) {
	var l = (screen.width - 400) / 2;
	var t = (screen.height - 350) / 2;
	window.open ('popup_dbselect.cfm?structure=' + structure + '&field=' + field, 'dbselect', 'width=400, height=350, left=' + l + ', top=' + t + ', scrollbars=yes');
}
function clear_join (fn) {
	document.getElementById(fn).value = 0;
	document.getElementById(fn + '_view').innerHTML = '';
}
function change_to_revision (field, structure, rev) {
	var f = parent.opener.document.getElementById('field_' + field);
	if (f) {
		f.value = revisions[rev];
		self.close();
		parent.opener.mark_changes(structure);
	} else {
		alert ('Das Eigabefeld wurde nicht gefunden.');
	}
}

function popup_relations (id, structure, sortable, field) {
	var l = (screen.width - 750) / 2;
	var t = (screen.height - 400) / 2;
	if (typeof field == 'undefined' || field == 'none') {
		field = 'rel_' + structure;
	}
	/*alert('popup_relations.cfm?id=' + id + '&structure=' + structure + '&field=' + field);*/
	window.open ('popup_relations.cfm?id=' + id + '&structure=' + structure + '&sortable=' + sortable + '&field=' + field, 'revisions', 'width=750, height=400, left=' + l + ', top=' + t + ', scrollbars=yes');
}

/* tool_relation in Thickbox - DK, 09.04.2009 */
function popup_relations_tb (id, structure, sortable, field, width, height) {
    var w = 750;
    var h = 400;
    if (typeof width  != 'undefined' && width  > 0) { w = width;  }
    if (typeof height != 'undefined' && height > 0) { h = height; }
	if (typeof field == 'undefined' || field == 'none') {
		field = 'rel_' + structure;
    } 
	var url = 'popup_relations.cfm?id=' + id + '&structure=' + structure + '&sortable=' + sortable + '&field=' + field + '&tb=1&TB_iframe=true&height=' + h + '&width=' + w;
	tb_show('Elemente zuweisen', url, false);
}

function tooltip_toggle (id) {
	with (document.getElementById('tooltip_' + id).style) {
		if (display == 'block') {
			display = 'none';
		} else {
			display = 'block';
		}
	}
}

function check_length (evt, id, maxlen) {
	var e = document.getElementById('field_' + id);
	var l = e.value.length;
	var key = 0;
	try {
		key = window.event.keyCode;
	} catch(ex){
		key = evt.which;
	}
	if (l + 1 > maxlen && key != 2 && key != 3 && key != 8 && (key < 37 || key > 40)) {
		return false;
	}
}
function view_length (id, maxlen) {
	var e = document.getElementById('field_' + id);
	var l = e.value.length;
	var c = maxlen - l;
	document.getElementById('chars_' + id).innerHTML = c + ' Zeichen verbleibend.';
}

function view_count (id) {
	var e = document.getElementById('field_' + id);
	var l = e.value.length;
	document.getElementById('chars_' + id).innerHTML = l + ' Zeichen';
}

function config_move_up (type, ssid) {
	var id1 = 'tr_' + ssid + '_' + type;
	var id2 = '';
	var idx1 = -1;
	var idx2 = -1;
	var elements = document.getElementById('entries_' + type).value.split(',');
	var par = document.getElementById(id1).parentNode;
	for (var i = 1; i < elements.length; i++) {
		if (elements[i] == ssid) {
			id2 = 'tr_' + elements[i - 1] + '_' + type;
			idx1 = i;
			idx2 = i - 1;
		}
	}
	if (id2 != '') {
		var tmp_obj = document.getElementById(id1).cloneNode(true);
		par.removeChild(document.getElementById(id1));
		par.insertBefore(tmp_obj, document.getElementById(id2));
		var tmp_id = elements[idx1];
		elements[idx1] = elements[idx2];
		elements[idx2] = tmp_id;
		document.getElementById('entries_' + type).value = elements.join(',');
	}
	config_refresh(type);
}

function config_move_down (type, ssid) {
	var id1 = 'tr_' + ssid + '_' + type;
	var id2 = '';
	var idx1 = -1;
	var idx2 = -1;
	var elements = document.getElementById('entries_' + type).value.split(',');
	var par = document.getElementById(id1).parentNode;
	for (var i = 0; i < elements.length - 1; i++) {
		if (elements[i] == ssid) {
			id2 = 'tr_' + elements[i + 1] + '_' + type;
			idx1 = i;
			idx2 = i + 1;
		}
	}
	if (idx1 > -1 && idx2 > -1) {
		var tmp_obj = document.getElementById(id2).cloneNode(true);
		par.removeChild(document.getElementById(id2));
		par.insertBefore(tmp_obj, document.getElementById(id1));
		var tmp_id = elements[idx1];
		elements[idx1] = elements[idx2];
		elements[idx2] = tmp_id;
		document.getElementById('entries_' + type).value = elements.join(',');
	}
	config_refresh(type);
}

function config_refresh (type) {
	var tr = 1;
	var elements = document.getElementById('entries_' + type).value.split(',');
	for (var i = 0; i < elements.length; i++) {
		tr = 1 - tr;
		var el = document.getElementById('tr_' + elements[i] + '_' + type);
		if (el) {
			el.className = 'tr' + tr;
		}
		var el_pos = document.getElementById('pos_' + elements[i] + '_' + type);
		var el_up = document.getElementById('up_' + elements[i] + '_' + type);
		var el_down = document.getElementById('down_' + elements[i] + '_' + type);
		el_up.style.display = (i == 0) ? 'none' : 'inline';
		el_down.style.display = (i == elements.length - 1) ? 'none' : 'inline';
		el_pos.value = i + 1;
	}
}


function tab_change (id) {
	for (i = 0; i < tabs.length; i++) {
		if (document.getElementById('tab_cont_' + tabs[i])) {
			document.getElementById('tab_cont_' + tabs[i]).style.display = 'none';
		}
		document.getElementById('tab_' + tabs[i]).className = 'tab_n';
	}
	if (document.getElementById('tab_cont_' + id)) {
		if (navigator.product == "Gecko") {
			document.getElementById('tab_cont_' + id).style.display = 'table';
		} else {
			document.getElementById('tab_cont_' + id).style.display = 'block';
		}
	}
	document.getElementById('tab_' + id).className = 'tab_h';
	document.getElementById('whcms_tab').value = id;
	document.getElementById('whcms_tabinfo').value = '';
	if (typeof onTabChange != 'undefined') {
		onTabChange();
	}
}

// FCK-Editor
// ==========

function activateFCK (field, basepath, height, toolbar, configs) {
	document.getElementById('fck_d_' + field).style.display = 'none';
	document.getElementById('fck_e_' + field).style.display = 'block';
	var oFCKeditor = new FCKeditor(field);
	oFCKeditor.BasePath = basepath;
	oFCKeditor.Height = height || '200';
	oFCKeditor.ToolbarSet = toolbar || 'Default';
	for (i = 0; i < configs.length; i = i + 2) {
		oFCKeditor.Config[configs[i]] = configs[i + 1];
	}
	oFCKeditor.ReplaceTextarea();
}

// Änderungen-Event
// ================

var changes = false;

function mark_changes(field) {
	var cf = document.getElementById('changes');
	if (cf && isFinite(field) && cf.value.indexOf(',' + field + ',') == -1) {
		if (cf.value == '') {
			cf.value = ',' + field + ',';
		} else {
			cf.value += field + ',';
		}
	}
	changes = true;
}

function check_changes() {
	if (changes == true) {
		return confirm ('Wollen Sie den Datensatz wirklich ohne zu speichern verlassen?');
	}
}

// Datensätze highlighten
// ======================

function highlight_record (id, check) {
	var cn = document.getElementById(id).className;
	cn = cn.replace(/_hl/, '');
	if (document.getElementById(id + '_cb').checked) {
		cn = cn + '_hl';
	}
	document.getElementById(id).className = cn;
	if (check == true) {
		all_checked();
	}
}

function check_record (id) {
	with (document.getElementById(id + '_cb')) {
		checked = !checked;
	}
	highlight_record(id, true);
}

// Boxen
// =====
var boxes = new Array();

function toggle (id) {
	if (boxes) {
		for (var i = 0; i < boxes.length; i++) {
			if (boxes[i] != id) {
				document.getElementById(boxes[i]).style.display = 'none';
			}
		}
	}
	with (document.getElementById(id).style) {
		if (display == 'block') {
			display = 'none';
		} else {
			display = 'block';
			// Layer unten, rechts zur Mausposi platzieren
			left = mouseX + 5;
			top = mouseY + 15;
		}
	}
}

// Formular absenden
// =================

function submit_form (form, action) {
	document.forms[form].action = action;
	document.forms[form].submit();
}
function change_form_page (form, action, page) {
	document.forms[form].action = action;
	document.forms[form].method = 'GET';
	document.forms[form].page.value = page;
	document.forms[form].submit();
}

function check_all (checked) {
	var el = document.getElementsByName('id');
	var id = '';
	for (i = 0; i < el.length; i++) {
		if (el[i].type == "checkbox") {
			el[i].checked = checked;
			id = el[i].id;
			highlight_record(id.substr(0, id.length - 3), false);
		}
	}
}
function all_checked () {
	var el = document.getElementsByName('id');
	var c = true;
	for (i = 0; i < el.length; i++) {
		if (el[i].type == "checkbox") {
			if (el[i].checked == false) {
				c = false;
			}
		}
	}
	document.getElementById('id_all').checked = c;
}

// Maus-Position
// =============

var mouseX = 0;
var mouseY = 0;

function getmouseposition(evt) {
	if (evt) {
		mouseX = evt.pageX;
		mouseY = evt.pageY;
	} else if (window.event.clientX) {
		mouseX = window.document.body.scrollLeft+window.event.clientX;
		mouseY = window.document.body.scrollTop+window.event.clientY;
	}
	if (mousemove_action == 'tooltip_view' && tooltip_id != '') {
		tooltip_view(tooltip_id);
	}
	// verschiebe Elemente
	if(dragobjekt != null) {
		if(mouseY > 20) {
			dragobjekt.style.top = (mouseY - dragy) + "px";
		}
		if (mouseX > 20) {
			dragobjekt.style.left = (mouseX - dragx) + "px";
		}
		return false;
	}
}

function getPosX(obj) {
	var ret=0;
	if (typeof obj != 'object') {
		obj = document.getElementById(obj);
	}
	if (obj.offsetParent) {
		while (obj.offsetParent) {
			ret += obj.offsetLeft;
			obj = obj.offsetParent;
		}
	} else if (obj.x) {
		ret += obj.x;
	}
	return ret;
}
function getPosY(obj) {
	var ret=0;
	if (typeof obj != 'object') {
		obj = document.getElementById(obj);
	}
	if (obj.offsetParent) {
		while (obj.offsetParent) {
			ret += obj.offsetTop;
			obj = obj.offsetParent;
		}
	} else if (obj.y) {
		ret += obj.y;
	}
	return ret;
}
function getHeight(obj) {
	var ret=0;
	if (typeof obj != 'object') {
		obj = document.getElementById(obj);
	}
	if (obj.offsetHeight) {
		return obj.offsetHeight;
	}
}
function getWidth(obj) {
	var ret=0;
	if (typeof obj != 'object') {
		obj = document.getElementById(obj);
	}
	if (obj.offsetWidth) {
		return obj.offsetWidth;
	}
}

// any Mousedown Action
function md_action(evt) {
	if (!evt) evt = window.event;
	// hide any context menu
	if (contexttimer != null) {
		contextoff();
		return false;
	}
	// dont mark other objects while dragging objects
	if (dragobjekt != null) {
		return false;
	}
}

// Creat Context ID - clear any possible timeout
function opencontext(element,element2,menu) {
	if (!element2) element2 = '-1';
	if (!menu) menu = 'list';
	contextobject = new Array(element, element2, menu);
}
function closecontext() {
	contextobject = null;
}
// Hide Context Menu - clear any possible timeout
function contextoff() {
	if (contexttimer != null) {
		window.clearTimeout(contexttimer);
		contexttimer = null;
	}
	if (document.getElementById('context_div')) document.getElementById('context_div').style.display = 'none';
}
// Context Timeout
function context_to(to) {
	if (!to) to = 600;
	contexttimer = window.setTimeout("contextoff()",to);
}
// Clear Timeout
function context_clrto() {
	if (contexttimer != null) {
		window.clearTimeout(contexttimer);
		contexttimer = null;
	}
}
// display Context Menu
function showcontext(evt) {
	if (!evt) evt = window.event;
	if (contexttimer != null) {
		window.clearTimeout(contexttimer);
		contexttimer = null;
	}
	if (contextobject != null && document.getElementById('context_div') != null) {
		var contextElm = document.getElementById('context_div');
		if (contextobject[2] == 'edit') {
			if (contextobject[0] == 0 || contextobject[1] == -1) var contextsrc = '<div class="context_edit" style="text-indent:25px;">Bearbeiten</div>';
				else var contextsrc = '<a href="edit.cfm?id=' + contextobject[0] + '" onclick="return check_changes();" title="Bearbeiten" class="context_edit" style="text-indent:25px;">Bearbeiten</a>';
			contextsrc = contextsrc + '<a href="#" onclick="tree_additem(' + contextobject[0] + ',' + contextobject[1] + '); return false;" title="';
			if (contextobject[1] == -1) contextsrc = contextsrc + 'Element hier einf&uuml;gen" class="context_add" style="text-indent:25px; border-bottom:0px;">Element hier einf&uuml;gen</a>';
				else contextsrc = contextsrc + 'Element verschieben" class="context_add" style="text-indent:25px; border-bottom:0px;">Element verschieben</a>';
			contextElm.innerHTML = contextsrc;
		} else {
			var contextsrc = '<a href="edit.cfm?id=' + contextobject[0] + '" title="Bearbeiten" class="context_edit" style="text-indent:25px;">Bearbeiten</a>';
			if (typeof view_export == 'undefined' || view_export == true) {
				contextsrc = contextsrc + '<a href="popup_exportwin.cfm?id=' + contextobject[0] + '" onclick="window.open(this,\'exportWin\',\'width=600,height=400\'); contextoff(); return false;" title="Exportieren" class="context_export" style="text-indent:25px;">Exportieren</a>';
			}
			if (typeof view_delete == 'undefined' || view_delete == true) {
				contextsrc = contextsrc + '<a href="delete.cfm?id=' + contextobject[0] + '" title="L&ouml;schen" class="context_delete" style="text-indent:25px;">L&ouml;schen</a>';
			}
			contextElm.innerHTML = contextsrc;
		}
		with (contextElm.style) {
			display = 'block';
			// Layer an Mausposi platzieren
			left = mouseX;
			top = mouseY;
		}
		context_to(2000);
		contextobject = null;
		return false;
	}
}

// Verschiebe Objekt (eingebaut von Cornelius)
// =================

var dragobjekt = null;
// Position, an der das Objekt angeklickt wurde.
var dragx = 0;
var dragy = 0;
// Mausposition -> use mouseX / mouseY

// Wird aufgerufen, wenn ein Objekt bewegt werden soll.
function dragstart(element) {
	dragobjekt = element;
	dragx = mouseX - dragobjekt.offsetLeft;
	dragy = mouseY - dragobjekt.offsetTop;
}
// Wird aufgerufen, wenn ein Objekt nicht mehr bewegt werden soll.
function dragstop() {
	dragobjekt=null;
}

// Farbauswahl (Christian, 01.08.2007)
function color_reset (fn, hex, r, g, b) {
	document.getElementById('field_' + fn + '_hex').value = hex;
	document.getElementById('field_' + fn + '_r').value = r;
	document.getElementById('field_' + fn + '_g').value = g;
	document.getElementById('field_' + fn + '_b').value = b;
	color_preview (fn);
	document.getElementById('field_' + fn + '_reset').style.visibility = 'hidden';
}
function color_preview (fn) {
	if (document.getElementById('field_' + fn + '_option_hex').checked == true && document.getElementById('field_' + fn + '_hex').value.length == 6) {
		var hex = document.getElementById('field_' + fn + '_hex').value;
		document.getElementById('field_' + fn + '_preview').style.backgroundColor = '#' + hex;
		document.getElementById('field_' + fn + '_r').value = color_dec(hex.substr(0,2));
		document.getElementById('field_' + fn + '_g').value = color_dec(hex.substr(2,2));
		document.getElementById('field_' + fn + '_b').value = color_dec(hex.substr(4,2));
		document.getElementById('field_' + fn + '_reset').style.display = 'block';
	} else if (document.getElementById('field_' + fn + '_option_rgb').checked == true) {
		var r = color_hex (fn, 'r');
		var g = color_hex (fn, 'g');
		var b = color_hex (fn, 'b');
		if (r == -1 | g == -1 | b == -1) {
			document.getElementById('field_' + fn + '_preview').style.backgroundColor = 'transparent';
			document.getElementById('field_' + fn + '_reset').style.visibility = 'visible';
			document.getElementById('field_' + fn + '_hex').value = '';
		} else {
			document.getElementById('field_' + fn + '_preview').style.backgroundColor = '#' + r + g + b;
			document.getElementById('field_' + fn + '_reset').style.visibility = 'visible';
			document.getElementById('field_' + fn + '_hex').value = r + g + b;
		}
	} else {
		document.getElementById('field_' + fn + '_preview').style.backgroundColor = 'transparent';
			document.getElementById('field_' + fn + '_reset').style.visibility = 'visible';
	}
}
function color_hex (fn, col) {
	var dec = document.getElementById('field_' + fn + '_' + col).value;
	var hex = '';
	var hexpool = Array ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f');
	var decpart = '';
	if (dec < 0 || dec > 255) {
		return -1;
	}
	if (dec < 16) {
		hex = '0';
	} else {
		decpart = Math.floor(dec / 16);
		dec = dec - 16 * decpart;
		hex = hexpool[decpart];
	}
	hex += hexpool[dec];
	return hex;
}
function color_dec (hex) {
	var dec = 0;
	var hexpool = '0123456789abcdef';
	var pos = 0;
	for (var i = hex.length - 1; i >= 0; i--) {
		dec += hexpool.indexOf(hex.substr(hex.length - i - 1, 1).toLowerCase()) * Math.pow(16, i);
	}
	return dec;
}

function $ (id) {
	return document.getElementById(id);
}

function toggleAllCheckboxes(className) {
    var aTag = document.getElementById("config_toggle");
    var allInputs = document.getElementsByTagName("input");

    if(aTag.rel == "show") {
        aTag.rel = "hide";
        var boolCheckbox = true;
    }
    else {
        aTag.rel = "show";
        var boolCheckbox = false;
    }
    for(var i=0;i<allInputs.length;i++) {
        var currentInput = allInputs[i];
        if(currentInput.className == className && currentInput.type == "checkbox") {
            currentInput.checked  = boolCheckbox;
        }
    }
}

// Initiere Mouseposition + optional DragStart
document.onmousemove = getmouseposition;
// Initiere DragStop Listener
document.onmouseup = dragstop;
// Initiere Mousedown Actions
document.onmousedown = md_action;
// Initiere Contextmenu Listener
document.oncontextmenu = showcontext;
