var openNode = null;

function goTo(u) {
	window.location = u;
}

function unhideNode(node) {
	node.style.display = "block";
}

function hideNode(node) {
	node.style.display = "none";
}

function showAlerts(devId) {
	if(devId != null) {
		if(openNode != null) {
			$('alerts_' + openNode).hide();
		}
		if($('alerts_' + devId) != null) {
			$('alerts_' + devId).show();
			openNode = devId;
		}
	}
}

function toggleNode(node) {
	var spanNodes = node.getElementsByTagName('span');
	var h1Nodes = node.getElementsByTagName('h1');

	var browser_name = navigator.appName;
	var browser_version = navigator.appVersion;

	// Do browser dependent switching (MSIE 6 vs. the rest)
	if(browser_version.indexOf("MSIE 6") == "-1") {
		if(spanNodes[0].className == "") {
			spanNodes[0].className = "uncollapsed";
			h1Nodes[0].className = "uncollapsed";
			spanNodes[1].className = "lowerpart uncollapsed";
		} else if (spanNodes[0].className == "uncollapsed") {
			spanNodes[0].className = '';
			h1Nodes[0].className = '';
			spanNodes[1].className = '';
		}
	} else {
		if(spanNodes[0].style.display == "none" || spanNodes[0].style.display == "") {
			spanNodes[0].style.display = "block";
			h1Nodes[0].style.background = "url(../shared/images/background/controlpanel-3part-upper.jpg)";	
			spanNodes[1].style.display = "block";
		} else {
			spanNodes[0].style.display = "none";
			h1Nodes[0].style.background = "url(../shared/images/settings/settings-togglebox-disabled.gif)";
			spanNodes[1].style.display = "none";
		}
	}
	
}

function toggleHelp(node) {
	var spanNodes = node.getElementsByTagName('span');
	var plusDiv = node.getElementsByTagName('div');
	for(var i = 0; i < spanNodes.length; i++) {
		if(spanNodes[i].style.display == "none" || spanNodes[i].style.display == "") {
			spanNodes[i].style.display = "block";
			plusDiv[0].innerHTML = ' - ';
		} else {
			spanNodes[i].style.display = "none";
			plusDiv[0].innerHTML = ' + ';
		}
	}
}

function toggleButton(node, notify) {
	if(notify == undefined)
		notify = false;
	var dbody = document.getElementsByTagName('body')[0];
	Element.extend(dbody);
	Element.extend(node);
	node.addClassName('busy');
	dbody.setStyle({cursor:"progress"});
	new Ajax.Request(node.href, {
	method:'get',
	requestHeaders: {Accept: 'application/json'},
	onSuccess: function(transport){
		var json = transport.responseText.evalJSON();
		if(json.response.code < 0) {
			alert(json.response.text);
		} else {
			if(node.hasClassName('enabled')) {
				node.addClassName('disabled');
				node.removeClassName('enabled');
				node.removeClassName('busy');
				if(notify)
					SafelinQ.notify(json.response.text);
			} else {
				node.addClassName('enabled');
				node.removeClassName('disabled');
				node.removeClassName('busy');
				if(notify)
					SafelinQ.notify(json.response.text);
			}
		}
		dbody.setStyle({cursor:"default"});
	},
	onFailure: function(){ alert('Something went wrong...') }
	});
	return false;
}

/**
 * node		The element
 * type		The value of the array (e.g. deviceArray[$type] )
 * message	The message in the confirm box
 */

function toggleButtonConfirm(node, type, message) {
	if(deviceSettings[type] == 0) {
		if(confirm(message)) {
			deviceSettings[type] = 1;
			toggleButton(node);
		}
	} else {
		deviceSettings[type] = 0;
		toggleButton(node);
	}
	return false;
}

/**
 * node		The element
 */ 

function toggleLink(node, nodeself) {
	$(node).toggle();
	$(nodeself).toggle();
	return false;
}

function requestAsync(u, m) {
	new Ajax.Request(u, {
	method:'get',
	requestHeaders: {Accept: 'application/json'},
	onSuccess: function(transport){
		var json = transport.responseText.evalJSON();
		if(json.response.code < 0 || m == true) {
			alert(json.response.text);
		}
	},
	onFailure: function(){ alert('Something went wrong...') }
	});
	return false;
}

function submitForm(formId, u) {
	$(formId).action = u;
	$(formId).submit();
}

function toggleStatusDot(d) {
	new Ajax.Request(d.getAttribute('href'), {
		method: 'get',
		requestHeaders: {Accept: 'application/json'},
		onSuccess: function(transport) {
			var json = transport.responseText.evalJSON();
			if(json.response.code < 0) {
				alert(json.response.text);
			} else {
				imgs = d.getElementsByTagName('img');
				var regexp = /off/i;
				var found = imgs[0].getAttribute('src').match(regexp);
				if(found) {
					imgs[0].setAttribute('src', '../shared/images/q-icons/q-icon-on.png');
				} else {
					imgs[0].setAttribute('src', '../shared/images/q-icons/q-icon-off.png');
				}
			}
		},
		onFailure: function() { alert('An error occured while processing your request') }
	});
	return false;
}

function getServers(url, callbacks) {
	new Ajax.Request(url, {
		method: 'get',
		requestHeaders: {Accept: 'application/json'},
		onSuccess: function(transport) {
			var json = transport.responseText.evalJSON();
			if(callbacks) {
				if(callbacks.primaryhost) {
					callbacks.primaryhost.value = json.servers.primaryhost;
				}
				if(callbacks.primaryport) {
					callbacks.primaryport.value = json.servers.primaryport;
				}
				if(callbacks.secondaryhost) {
					callbacks.secondaryhost.value = json.servers.secondaryhost;
				}
				if(callbacks.secondaryport) {
					callbacks.secondaryport.value = json.servers.secondaryport;
				}
			}
		},
		onFailure: function() { alert('An error occured while processing your request') }
	});
	return false;
}

function getPincode(url, callbacks) {
	new Ajax.Request(url, {
		method: 'get',
		requestHeaders: {Accept: 'application/json'},
		onSuccess: function(transport) {
			var json = transport.responseText.evalJSON();
			if(json.status == 1) {
				if(callbacks) {
					if(callbacks.pincode) {
						callbacks.pincode.value = json.pincode;
					}
				}
			}
		},
		onFailure: function() { alert('An error occured while processing your request') }
	});
	return false;
}

function getFormSelectOptionsAsync(url, element, parameters, method, script) {
    if(method == undefined) {
        method = 'get';
    }
    if(script == undefined) {
        script = '/shared/json.php';
    }
    if(parameters == undefined) {
        parameters = {};
    }
    Object.extend(parameters, url.toQueryParams());
    SafelinQ.Ajax.exec(method, url.toQueryParams().module, url.toQueryParams().task, parameters, {
        success: function(response, element) {
            if(element != undefined) {
                element.options.length = 0;
                response.choices.each(function(choice) {
                    var opt = document.createElement("OPTION");
                    opt.value = choice.id;
                    opt.text = choice.name;
                    element.options.add(opt);
                });
            }
        }},
        element,
        script
    );
}

function ifContentDisable(c, d) {
	if(c.value.length > 0) {
		d.disabled = true;
	} else {
		d.disabled = false;
	}
}

var prevContent = '';

function displayHelp(c) {
	if(prevContent == '') {
		prevContent = $('leftPanel').innerHTML;
		new Ajax.Updater('leftPanel', 'index.php?module=help&context=' + c, { method: 'get'});
	} else {
		$('leftPanel').innerHTML = prevContent;
		prevContent = '';
	}
	return false;
}

function triggerAsyncSubmit(form) {
	dbody = document.getElementsByTagName('body')[0];
	Element.extend(dbody);
	dbody.setStyle({cursor:"progress"});
	new Ajax.Request(form.action, {
	method:'post',
	parameters: form.serialize(true),
	requestHeaders: {Accept: 'application/json'},
	onSuccess: function(transport){
		var json = transport.responseText.evalJSON();
		SafelinQ.notify(json.response.text);
		dbody.setStyle({cursor:"default"});
	},
	onFailure: function(){ alert('Something went wrong...') }
	});
	return false;
}

/**
 * Display a default text in input type=text and type=password elements.
 * Dependency: Works only in conjuction with Prototype.
 *
 * Removes the default text on focus and on blur when the value is empty.
 * @param	e				The input element that should be displaying a default text
 * @param	defaulttext		The text to show in the input field
 * @todo 					Move to the SafelinQ namespace
 */
function defaultText(e, default_text) {

	/* IE needs to have the element */
	if(e == undefined) {
		return false;
	}

	var is_password = (e.getAttribute('type') == 'password');

	if(is_password) {
		/* type="password" */
		/* initialise, create a faux field */
		e.insert({after: '<input type="text" id="faux_' + e.id + '" name="faux_' + e.name + '" value="' + default_text + '" class="defaulttext" style="display: none;" />'});
		if(e.value == '' || e.value == default_text) {
			e.hide();
			$('faux_' + e.id).show();
		}
		/* focus handeling */
		Event.observe($('faux_' + e.id), 'focus', function() {
			$('faux_' + e.id).hide();
			e.show().focus();
		});
		/* blur handeling */
		Event.observe(e, 'blur', function() {
			/* when empt, show faux field */
			if(e.value == '') {
				e.hide();
				$('faux_' + e.id).show();
			}
		});
		/* submit handling */
		Event.observe(e, 'submit', function() {
			$('faux_' + e.id).remove();
			e.show();
			/* stop observing */
			e.stopObserving('focus');
			e.stopObserving('blur');
			e.stopObserving('submit');
		});
	} else {
		/* fields other than type="password" */
		/* (re)set value */
		e.value = default_text;
		/* add classname */
		e.addClassName('defaulttext');
		/* focus handeling */
		Event.observe(e, 'focus', function() {
			/* when still default text, empty it */
			if(e.value == default_text) {
				e.value = '';
			}
			/* remove classname */
			e.removeClassName('defaulttext');
		});
		/* blur handeling */
		Event.observe(e, 'blur', function() {
			/* when empt, set default text */
			if(e.value == '') {
				e.value = default_text;
				/* remove classname */
				e.addClassName('defaulttext');
			}
		});
		/* submit handling */
		Event.observe(e, 'submit', function() {
			/* when still default text, empty it */
			if(e.value == default_text) {
				e.value = '';
			}
			/* remove classname */
			e.removeClassName('defaulttext');
			/* stop observing */
			e.stopObserving('focus');
			e.stopObserving('blur');
			e.stopObserving('submit');
		});
	}
}

function URLencode(input) {
	input = escape(input);
	input = input.replace(/\+/g, '%2B');
	return input;
}

/**
 * Return boolean wether or not the given event was an enter key
 */
function isEnter(e) {
	var key;
	if(window.event)
		key = window.event.keyCode;
	else
		key = e.which;
	return(key == 13);
}

/**
 * Return boolean wether or not the event should be blocked because there was an enter (invert isEnter function)
 */
function blockEnter(e) {
	return !isEnter(e);
}

