var IE = false;
if(navigator.appName == "Microsoft Internet Explorer") IE = true;

function getById(_id) {
	
	return document.getElementById(_id);
	
}

function posX(_element) {
	
	var x = _element.offsetLeft;
	var element = _element;
	
	while(element.offsetParent) {
		element = element.offsetParent;
		x += element.offsetLeft;
	}
	
	return x;
	
}

function posY(_element) {
	
	var y = _element.offsetTop;
	var element = _element;
	var bodyOffset = 0;

	while(element.offsetParent) {
		
		element = element.offsetParent;
		y += element.offsetTop;
	}
		
	return y;
	
}

function delegate(_object, _method) {

	return function(_e) {
		return _method.call(_object, _e);
	}

}

function checkDate(_nDay, _nMonth, _nYear) {
	_nDay = Math.round(_nDay);
	_nMonth = Math.round(_nMonth);
	_nYear = Math.round(_nYear);
	var aLengths = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
	if(_nDay <= aLengths[_nMonth] || (_nMonth == 1 && _nDay == 29 && _nYear % 4 == 0)) {
		return true;
	} else {
		return false;
	}
}

// Saving user settings via AJAX

function saveUserSetting(_setting, _value) {
	
	var request = new AjaxRequest(pathPrefix + "/Ajax/sysSaveUserSetting" + firstSeperator + "setting=" + _setting + "&value=" + _value + sid2);
	request.doRequest();
	
}


// Shows or hides a specific element

function showHide(_id) {
	if(getById(_id) == null)
		return false;
	
	if(getById(_id).style.display == "")
		getById(_id).style.display = "none";
	else
		getById(_id).style.display = "";
		
	return false;
}


// Send KeepAlive package

function sendKeepAlive(_acp) {
	
	var request = new AjaxRequest(pathPrefix + "/Ajax/sysKeepAlive" + (_acp ? firstSeperator + "acp=true" : ""));
	request.doRequest();
	
	keepAliveTimeout = window.setTimeout("sendKeepAlive(" + (_acp ? "true" : "false") + ")", 300000);
	
}


// For DEBUG 2 only

function addLangVar(_code, _var, _element) {
	
	var div = document.createElement("div");
	div.id = "lang_" + _code + _var;
	div.style.padding = "10px";
	div.style.backgroundColor = "red";
	div.style.position = "absolute";
	div.style.top = posY(_element) + "px";
	div.style.left = posX(_element) + "px";
	div.innerHTML = "<form onsubmit='return addLangVar2(\"" + _code + "\", \"" + _var + "\", this.elements[0].value)'><textarea rows=5 cols=50></textarea><br><input type=submit><input type=button value=close onclick=this.offsetParent.style.display='none'></form>";
	
	document.body.appendChild(div);
	
	div.childNodes[0].elements[0].focus();
	
}

function addLangVar2(_code, _var, _value) {

	getById("lang_" + _code + _var).style.display = "none";
	if(getById("lang_" + _code + "_" + _var) != null)
		getById("lang_" + _code + "_" + _var).innerHTML = _value;
		
	var request = new AjaxRequest(pathPrefix + "/Ajax/lngAddVar", false, true);
	request.setPostvars("code=" + _code + "&var=" + _var + "&value=" + _value);
	request.doRequest();
	
	return false;
	
}

// Toggle for lots of checkboxes
function toggleEventHandler(_formId, _elementNames, _sender) {
	
	var checkBoxes = getById(_formId).elements[_elementNames];
	var checked = 0;
	var count = 0;
	
	if(!checkBoxes)
		return;
	
	if(checkBoxes.type == "checkbox")
		count = 1;
	else
		count = checkBoxes.length;
	
	if(count == 1) {
		if(_sender.id != "ALL")
			getById('ALL').checked = checkBoxes.checked;
		else
			checkBoxes.checked = _sender.checked;
		return true;
	}
	
	for(var i = 0; i < count; i++) {
		if(checkBoxes[i].checked)
			checked++;
	} 

	if(_sender.id != 'ALL') {
		if(checked == 0)
			getById('ALL').checked = false;
		if(checked == count)
			getById('ALL').checked = true;
	}
	
	if(_sender) {
		if(_sender.id == "ALL") {
			for(var i = 0; i < count; i++)
				checkBoxes[i].checked = _sender.checked;
		}
		else
			if(!_sender.checked)
				getById('ALL').checked = false;
	}
	
	return true;
	
}

function textCounter(_field, _counter, _max) {
	
	var length = _field.value.length
	
	if (length > _max)
		_field.value = _field.value.substring(0, _max);
	
	else {
		if(_max -length == 0)
			_counter.style.fontWeight = "bold";
		else
			_counter.style.fontWeight = "normal";
		
		_counter.innerHTML = _max - length;
	}
}


// Internal links

function showInternalLinkSelection(_input) {
	window.open(pathPrefix + "/DirectCall/wysInternalLinks" + firstSeperator + "targetInput=" + _input + sid2, "internalLinkSelection", "width=365, height=320");
}


// File selection

function showFileSelection(_input, _path) {
	window.open(pathPrefix + "/DirectCall/wysFileManager" + firstSeperator + "targetInput=" + _input + (_path == null ? "" : "&forcedDirectory=" + _path) + sid2, "internalLinkSelection", "width=640, height=465");
}


// Confirm message

function confirmMessage(_id) {
	
	var request = new AjaxRequest(pathPrefix + "/Ajax/sysConfirmMessage" + firstSeperator + "id=" + _id + sid2);
	request.doRequest();
	
	getById("message_" + _id).style.display = "none";
	
	if(getVisibleRows(getById("messagetable")) == 0)
		getById("messagebox").style.display = "none";
	
	return false;
	
}

function getVisibleRows(_table) {
	var count = 0;
	for(var i = 0; i < _table.rows.length; i++) {
		if(_table.rows[i].style.display != "none")
			count++;
	}
	return count;
}

//Toggle for checkboxes to disable input fields

function toggleInput(_input) {

	if(getById(_input).disabled == true) getById(_input).disabled = false;
	else getById(_input).disabled = true;
	
}

// Debuging Function (Similar to print_r in PHP)
function print_r(input, _indent) {
	if(typeof(_indent) == 'string') {
		var indent = _indent + ' ';
		var paren_indent = _indent + ' ';
	} else {
		var indent = ' ';
		var paren_indent = '';
	}
	
	switch(typeof(input)) {
		case 'boolean':
			var output = (input ? 'true' : 'false') + "\n";
			break;
			
		case 'object':
			if ( input===null ) {
				var output = "null\n";
				break;
			}
			var output = ((input.reverse) ? 'Array' : 'Object') + " (\n";
	
			for(var i in input) {
				output += indent + "[" + i + "] => " + print_r(input[i], indent);
			}
			output += paren_indent + ")\n";
			break;
			
		case 'number':
		case 'string':
		default:
		var output = "" + input + "\n";
	}
	return output;
}


// This function executes all javascript found in string object
function evalJS(_content) {
	
	var container = document.createElement('div');
	container.innerHTML = _content;
	
	var code = "";
	
	for(var i = 0; i < container.getElementsByTagName('script').length; i++) {
		
		code += container.getElementsByTagName('script')[i].innerHTML;
	
	}
	
	eval(code);
	
	delete container;
}

function in_array(_needle, _haystack) {
	
	var count = _needle.length;
	
	for(var i = 0; i < count; i++) {
		
		if(_needle == _haystack[i])
			return true;
	}
	
	return false;
}

function getNextSibling(_element) {
	
	if(IE)
		return _element.nextSibling;
	else
		return _element.nextSibling.nextSibling;
	
}
