text: /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
  *     http://www.apache.org/licenses/LICENSE-2.0
  *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
  var toggledRows = new Array();
  var toggledCols = new Array();
  var mouseX = 0;
  var mouseY = 0;
  var passvar = 0;
  
  var browser = "";
  function setBrowser() {
  	browser = navigator.appName;
  	if(navigator.appName == 'Netscape') {
  		var regex = new RegExp('Safari');
  		if(navigator.appVersion.match(regex)) {
  			browser = 'Safari';
  		}
  	}
  	else if(navigator.appName == 'Microsoft Internet Explorer') {
  		browser = 'IE';
  	}
  }
  setBrowser();
  
  function init() {
  	if(typeof(dojo) == 'undefined') {
  		setTimeout(init, 250);
  		return;
  	}
  	if(typeof(tzoffset) != undefined && tzoffset == 'unset') {
  		var now = new Date();
  		var data = {mode: 'AJsetTZoffset',
  		            offset: now.getTimezoneOffset()};
  		RPCwrapper(data, null, 0);
  	}
  }
  
  function _(str) {
  	if(typeof usenls == 'undefined' ||
  	   typeof nlsmessages == 'undefined' ||
  	   ! (str in nlsmessages) ||
  	   nlsmessages[str] == '')
  		return str;
  	return nlsmessages[str];
  }
  
  Date.prototype.getDayName = function() {
  	return [_('Sunday'), _('Monday'), _('Tuesday'), _('Wednesday'), _('Thursday'), _('Friday'), _('Saturday')][this.getDay()];
  }
  
  function testJS() {
  	if(document.getElementById('testjavascript'))
  		document.getElementById('testjavascript').value = '1';
  }
  
  function RPCwrapper(data, CB, dojson, timeout) {
  	if(typeof timeout === 'undefined')
  		timeout = 15000;
  	if(dojson) {
  		return dojo.xhrPost({
  			url: 'index.php',
  			load: function(data, ioArgs) {returnCheck(CB, data, ioArgs);},
  			//load: CB,
  			//handleAs: "json",
  			error: errorHandler,
  			content: data,
  			timeout: timeout
  		});
  	}
  	else {
  		return dojo.xhrPost({
  			url: 'index.php',
  			load: CB,
  			error: errorHandler,
  			content: data,
  			timeout: timeout
  		});
  	}
  }
  
  function returnCheck(CB, data, ioArgs) {
  	try {
  		var json = dojo.fromJson(data);
  	}
  	catch(error) {
  		if((! data.match(/-- continuationserror --/)) &&
  		   (data.match(/<html/) || ! error.message.match(/syntax error/))) {
  			alert(_('Error encountered:') + " " + _('Please try again later'));
  			return;
  		}
  		else if(data.match(/-- continuationserror --/)) {
  			var i = data.indexOf('<div id="continuationserrormessage');
  			i = data.indexOf('>', i) + 2;
  			var j = data.indexOf('</div>', i);
  			data = data.slice(i, j);
  		}
  		var div = document.createElement('div');
  		div.innerHTML = data;
  		var msg = div.textContent || div.innerText || "";
  		alert(_('Error encountered:') + '\n\n' + msg);
  		return;
  	}
  	CB(json, ioArgs);
  }
  
  Array.prototype.inArray = function(data) {
  	for(var i = 0; i < this.length; i++) {
  		if(this[i] === data) {
  			return true;
  		}
  	}
  	return false;
  }
  
  Array.prototype.search = function(data) {
  	for (var i = 0; i < this.length; i++) {
  		if(this[i] === data) {
  			return i;
  		}
  	}
  	return false;
  }
  
  function generalCB(data, ioArgs) {
  	unsetLoading();
  	var regex = new RegExp('^<!DOCTYPE html');
  	if(data.match(regex)) {
  		var mesg = 'A minor error has occurred. It is probably safe to ' +
  		           'ignore. However, if you keep getting this message and ' +
  		           'are unable to use VCL, you may contact the ' +
  		           'administrators of this site for further assistance.';
  		alert(mesg);
  		var d = {mode: 'errorrpt',
  		         data: data};
  		RPCwrapper(d, function(data, ioArgs) {});
  		return;
  	}
  	eval(data);
  }
  
  var errorHandler = function(error, ioArgs) {
  	/*if(error.name == 'cancel')
  		return;
  	alert('AJAX Error: ' + error.message + '\nLine ' + error.lineNumber + ' in ' + error.fileName);*/
  	//console.log(error);
  }
  
  function errorHandler(data, ioArgs) {
  	alert('Error encountered while processing AJAX callback');
  }
  
  function AJdojoCreate(objid) {
  	if(dojo.byId(objid)) {
  		dojo.parser.parse(document.getElementById(objid));
  	}
  }
  
  function setLoading() {
     document.body.style.cursor = 'wait';
  	if(dijit.byId('workingDialog'))
  		dijit.byId('workingDialog').show();
  }
  
  function unsetLoading() {
  	document.body.style.cursor = 'default';
  	if(dijit.byId('workingDialog'))
  		dijit.byId('workingDialog').hide();
  }
  
  function updateMouseXY(e) {
  	if(e) {
  		mouseX = e.pageX;
  		mouseY = e.pageY;
  	}
  	else if(event) {
  		mouseX = event.clientX + document.documentElement.scrollLeft;
  		mouseY = event.clientY + document.documentElement.scrollTop;
  	}
  }
  
  function findPosX(obj) {
  	var curleft = 0;
  	if(obj.offsetParent)
  		while(1) {
  			curleft += obj.offsetLeft;
  			 if(!obj.offsetParent)
  				break;
  			obj = obj.offsetParent;
  		}
  	else if(obj.x)
  		curleft += obj.x;
  	return curleft;
  }
  
  function findPosY(obj) {
  	var curtop = 0;
  	if(obj.offsetParent)
  		while(1) {
  			curtop += obj.offsetTop;
  			if(!obj.offsetParent)
  				break;
  			obj = obj.offsetParent;
  		}
  	else if(obj.y)
  		curtop += obj.y;
  	return curtop;
  }
  
  function showScriptOnly() {
  	if(!document.styleSheets)
  		return;
  	var cssobj = new Array();
  	if(document.styleSheets[0].cssRules)  // Standards Compliant
  		cssobj = document.styleSheets[0].cssRules;
  	else
  		cssobj = document.styleSheets[0].rules;  // IE
  	var stop = 0;
  	for(var i = 0; i < cssobj.length; i++) {
  		if(cssobj[i].selectorText) {
  			if(cssobj[i].selectorText.toLowerCase() == '.scriptonly') {
  				//cssobj[i].style.display = "inline";
  				cssobj[i].style.cssText = "display: inline;";
  				stop++;
  			}
  			if(cssobj[i].selectorText.toLowerCase() == '.scriptoff') {
  				cssobj[i].style.cssText = "display: none;";
  				stop++;
  			}
  			if(stop > 1)
  				return;
  		}
  	}
  }
  
  function showGroupInfo(data, ioArgs) {
     var members = data.items.members;
     var mx = data.items.x;
     var my = data.items.y;
     var text = "";
     for(var i = 0; i < members.length; i++) {
        text = text + members[i] + '<br>';
     }
     var obj = document.getElementById('content');
     var x = findPosX(obj);
     var y = findPosY(obj);
     obj = document.getElementById('listitems');
     obj.innerHTML = text;
     obj.style.left = mx - x - obj.clientWidth;
     obj.style.top = my - y - obj.clientWidth;
     obj.style.zIndex = 10;
  }
  
  function checkNewLocalPassword() {
  	var pwd1 = document.getElementById('newpassword');
  	var pwd2 = document.getElementById('confirmpassword');
  	var stat = document.getElementById('pwdstatus');
  	if(pwd1.value == "" && pwd2.value == "") {
  		stat.innerHTML = '';
  	}
  	else if(pwd1.value == pwd2.value) {
  		stat.innerHTML = '<font color="#008000">' + _('match') + '</font>';
  	}
  	else {
  		stat.innerHTML = '<font color="red">' + _('no match') + '</font>';
  	}
  }
  
  function sortSelect(selobj) {
  	var values = new Array();
  	var texts = new Array();
  	for(var i = 0; i < selobj.options.length; i++) {
  		values[selobj.options[i].text] = selobj.options[i].value;
  		texts[i] = selobj.options[i].text;
  	}
  	texts.sort(ignoreCaseSort);
  	for(var i = 0; i < selobj.options.length; i++) {
  		selobj.options[i].text = texts[i];
  		selobj.options[i].value = values[texts[i]];
  	}
  }
  
  function ignoreCaseSort(a, b) {
  	a = a.toLowerCase();
  	b = b.toLowerCase();
  	if(a > b)
  		return 1;
  	if(a < b)
  		return -1;
  	return 0;
  }
  
  function getSelectText(objid) {
  	if(dijit.byId(objid))
  		return dijit.byId(objid).textbox.value;
  	var obj = dojo.byId(objid);
  	return obj.options[obj.selectedIndex].text;
  }
  
  function getSelectValue(objid) {
  	if(dijit.byId(objid))
  		return dijit.byId(objid).value;
  	return dojo.byId(objid).value;
  }
  
  function get12from24(hour) {
  	if(hour == 0)
  		return {hour: 12, meridian: 'am'};
  	if(hour < 12)
  		return {hour: hour, meridian: 'am'};
  	if(hour == 12)
  		return {hour: hour, meridian: 'pm'};
  	return {hour: hour - 12, meridian: 'pm'};
  }
  
  function hideDijitButton(id) {
  	dojo.style(dijit.byId(id).domNode, {
  		display: 'none'
  	});
  }
  
  function showDijitButton(id) {
  	dojo.style(dijit.byId(id).domNode, {
  		display: 'inline'
  	});
  }
  
  function recenterDijitDialog(id) {
  	if(dijit.byId(id)._relativePosition)
  		delete dijit.byId(id)._relativePosition;
  	dijit.byId(id)._position();
  }
  
  function resizeRecenterDijitDialog(id) {
  	// taken from Dialog.js _size function
  	/*var d = dijit.byId(id);
  	var mb = dojo._getMarginSize(d.domNode);
  	var viewport = dojo.window.getBox();
  	if(mb.h >= viewport.h) {
  		// Reduce size of dialog contents so that dialog fits in viewport
  		var h = Math.min(mb.h, Math.floor(viewport.h * 0.75));
  		dojo.style(d.containerNode, {
  			height: h + "px",
  			overflow: "auto",
  			position: "relative"	// workaround IE bug moving scrollbar or dragging dialog
  		});
  	}*/
  	dijit.byId(id)._size();
  	recenterDijitDialog(id);
  }
  
  function checkValidatedObj(objid, errobj) {
  	if(dijit.byId(objid) && ! dijit.byId(objid).get('disabled') &&
  	   'isValid' in dijit.byId(objid) && ! dijit.byId(objid).isValid()) {
  		dijit.byId(objid)._hasBeenBlurred = true;
  		dijit.byId(objid).validate();
  		//dijit.byId(objid).focus();
  		if(typeof errobj == 'string') {
  			if(dijit.byId(errobj))
  				dijit.byId(errobj).set('value', '');
  			else if(dojo.byId(errobj))
  				dojo.byId(errobj).innerHTML = '';
  			else
  				errobj = null;
  		}
  		if(errobj !== null && typeof errobj != 'undefined')
  			errobj.innerHTML = '';
  		return 0;
  	}
  	return 1;
  }
  
  function resetSelect(objid) {
  	if(dijit.byId(objid)) {
  		dijit.byId(objid).reset();
  		return;
  	}
  	var obj = dojo.byId(objid);
  	var found = 0;
  	for(var i = 0; i < obj.options.length; i++) {
  		if(obj.options[i].defaultSelected) {
  			obj.selectedIndex = i;
  			found = 1;
  		}
  	}
  	if(! found)
  		obj.selectedIndex = 0;
  }
  