/* vconsole.js file V4.5-5.

This file contains all the javascript that is needed to run VConsole.

We would like to give credit where credit is due. 
Some of the functions below were not programmed by us. 
Those function have the proper headers to give the authors proper credit.
Those functions have also been modified to work with our software so please
go to the proper website if you want to use the code. Do not use the customized
code from this file.

Any part of this file that is not properly credited is the property of VSource Web Solutions
and may not be used in whole or in part by anyone unless you have purchased a license for the
software that uses this file or you have written consent from VSource Web Solutions to do so.

Copyright 2009 VSource Web Solutions. All rights reserved.

*/
var G = new Array(); // Global array of variables.

// basic variables.
G['NOAJAX'] = "Your browser does not support AJAX! Please use Firefox 3.0 or above or Internet Explorer 7.0 or above. (Make sure that javascript is enabled.)";
G['opt_no_frames'] = false;
G['startrange'] = -1;
G['checkname'] = '';
G['shiftdown'] = 0;
G['checkstate'] = 0;
G['datamanagerSelected'] = new Object();
G['colorField'] = false;
G['shColorField'] = false;
G['colorBlock'] = false;
G['selColorCallback'] = false;
G['curDMRowIndex'] = false;
G['xmlHttp'] = false;
G['noProcessEnterKey'] = false;

// datamanager variables.
G['sHL'] = false;
G['sHT'] = 'h';
G['EditField'] = false;
G['EditID'] = false;
G['dataTableIsDoneLoading'] = false;
G['gotDMAction'] = false;
G['PromptResponse'] = false;
G['cbmouseover'] = false;
G['DPcallback'] = '';
G['DPvalue'] = '';
G['DPnovalue'] = false;

// Float Title variables
G['floatTitleTimer'] = new Array();

// movecol variables.
G['coldrag'] = false;
G['movecol'] = false;
G['dropTargets'] = false;
G['isTarget'] = false;

// rightclick variables.
G['rightclicked'] = false;

// wizardmanager variables.
G['WizardManagerFileFields'] = false;
G['WizardManagerFileCancel'] = false;
G['WMRefresh'] = false;
G['rid'] = 0;
G['CBMaxChoices'] = new Array();
G['CBMinChoices'] = new Array();
G['CBOptNum'] = new Array();
G['CBFieldName'] = new Array();
G['currentTinyMCEInstances'] = new Array();
G['isSelectorDM'] = false;
G['selectorSHFLD'] = false;
G['selectorVALFLD'] = false;
G['selectorMODULE'] = false;
G['selectorSH'] = false;
G['selectorVAL'] = false;
G['signCanvas'] = false;
G['SELECTORID'] = false;
G['updateWizardFileQryString'] = false;
G['vf'] = false;
G['WMqryString'] = '';

// calendar variables
G['MONTH_NAMES']=new Array('January','February','March','April','May','June','July','August','September','October','November','December','Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
G['DAY_NAMES']=new Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sun','Mon','Tue','Wed','Thu','Fri','Sat');
G['SET'] = "Set";
G['TODAY'] = "Today";
G['CLOSE'] = "Close";
G['HOUR'] = "Hour";
G['MINUTE'] = "Minute";
G['AMORPM'] = "AM or PM";
G['AM'] = "AM";
G['PM'] = "PM";
G['DISP_YEAR'] = 0;		// Year to display in calendar
G['DISP_MONTH'] = 0;	// Month to display in calendar
G['DISP_DAY'] = 0;		// Day to display in calendar
G['DISP_HOUR'] = 0;		// Hour to display in calendar
G['DISP_MIN'] = 0;		// Minute to display in calendar
G['DISP_AP'] = G['AM'];	// AM or PM to display in calendar
G['SEL_YEAR'] = 0;		// Year to display as selected in calendar
G['SEL_MONTH'] = 0;		// Month to display as selected in calendar
G['SEL_DAY'] = 0;		// Day to display as selected in calendar
G['NOW_YEAR'] = 0;		// Year to show as now in calendar
G['NOW_MONTH'] = 0;		// Month to show as now in calendar
G['NOW_DAY'] = 0;		// Day to show as now in calendar
G['SHOW_OBJ'] = '';		// The show object text input field
G['INPUT_OBJ'] = ''; 	// The input object input field
G['CALLBACK'] = '';		// The callback function to execute when the calendar is set
G['CALOVER'] = 0;		// Variable that detects when the mouse is over the calendar.
G['SHOW_YEAR'] = 0; 	// Variable that keeps the shown year.
G['SHOW_TIME'] = 0;		// Variable that tells us wether to show the time along with the date
G['SHOW_SEL'] = '';		// Variable that tells us which selector is currently displayed on the left side

// Help variables
G['posX'] = false;
G['posY'] = false;
G['dragOffsetY'] = false;
G['dragOffsetX'] = false;
G['dragOBJ'] = false;
G['tst'] = false;
G['IE'] = document.all?true:false;
G['ns6'] = document.getElementById&&!document.all;
G['tooltipTimeout'] = false;
G['ajaxHelpUpdateTimeout'] = false;

// JsColor variables
G['SCManualInputHasFocus'] = false;
G['JSCOVER'] = 0;

// Movecol variables
G['ShowMoveCol'] = false;

// Resizecols variables
G['markerHTML'] = "|";
G['minWidth'] = 10;
G['dragingColumn'] = null;
G['startingX'] = 0;
G['currentX'] = 0;
G['startingY'] = 0;
G['currentY'] = 0;
G['startingWidth'] = 0;
G['ColPadding'] = 0; // The amount of padding that results. If, when resizing columns or sorting, they auto grow or shrink, set this variable accordingly.
G['isCurrentNoSelect'] = false;

// vsmenu variables
G['vsMenuOffsetTop'] = -2; 			// The number of pixels to lower (or negative to raise) the menu below the target
G['vsMenuOffsetLeft'] = 1; 			// The number of pixels to move to the right (or negative to move to the left) the menu in respect to the left side of the target
G['vsMenuOffsetSubTop'] = 3;		// The number of pixels to lower (or negative to raise) the menu below the target (sub menus only)
G['vsMenuOffsetSubLeft'] = -2;		// The number of pixels to move to the right (or negative to move to the left) the menu in respect to the left side of the target (sub menus only)
G['vsMenuRightOffsetTop'] = -4;		// The number of pixels to lower (or negative to raise) the right click menu below the mouse.
G['vsMenuRightOffsetLeft'] = -11;	// The number of pixels to move to the right (or negative to move to the left) the right click menu in respect to the left side of the mouse.
G['vsMenuTimeout'] = 500;			// The number of miliseconds to wait before closing a menu once the mouse has left it.
G['vsMenuStartMenu'] = '';
G['vsMenuTimeoutHolder'] = '';

// Google Maps variables
G['map'] = false;
G['infowindow'] = false;
G['markers'] = new Array();
G['GMsz'] = false;
G['GMst'] = false;
G['geocoder'] = false;
G['GCAddress'] = '';
G['GMapMarkers'] = new Array();
G['maptypes'] = new Array();
G['maptypes']['map'] = 'ROADMAP';
G['maptypes']['satellite'] = 'SATELLITE';
G['maptypes']['hybrid'] = 'HYBRID';
G['GMcurrentRecord'] = '';
G['polyPoints'] = new Array();
G['bmap'] = false;
G['bmarkers'] = new Array();
G['GMBcurrentRecord'] = '';
G['GMBcurrentIndex'] = '';
G['bpolyPoints'] = new Array();
G['GMdblclick'] = false;
G['GMclick'] = false;
G['currentPolygon'] = new Array();
G['currentPolygonObject'] = false;
G['bpolygons'] = new Array;
G['currentOverlay'] = false;
G['editPolygon'] = false;


/*----------------------- loadJS --------------------------*/
function loadJS() { 
	// Document.onevents
	document.onmousemove = on_mouse_move;
	document.onkeydown = shift_down;
	document.onkeyup = shift_up;
	document.onmouseup = columnMouseUp;
	document.onmousedown = enableSelect;

	// Update the data table.
	try{ if (document.getElementById('dataContainer')) { lon(); updateDataTable(); } else { loff(); } } catch(err) { loff(); return; }	
}
function includeJS(filename) {
	var head = document.getElementsByTagName('head')[0];
	
	var script = document.createElement('script');
	script.src = filename;
	script.type = 'text/javascript';
	
	head.appendChild(script);
}


/*----------------------- basic --------------------------*/
function addtofav() {
	lon();
	G['xmlHttp'] = createAjaxObject();
	if (!G['xmlHttp']) { loff(); return false; }
	G['xmlHttp'].onreadystatechange=function() {
		if(G['xmlHttp'].readyState==1) { set_progress(25); }
		if(G['xmlHttp'].readyState==2) { set_progress(50); }
		if(G['xmlHttp'].readyState==3) { set_progress(75); }
		if(G['xmlHttp'].readyState==4) {
			set_progress(100);
			if (G['xmlHttp'].responseText == 'logout') { document.location.href='?'; return; }
			var mySplit = G['xmlHttp'].responseText.split("<<>>");
			var myDetails = mySplit[1];
			var myHeader = mySplit[0];
			dmsdetailsShow(myHeader, myDetails);
			loff();
		}
	}
	var parameters = "task=addtofav";
	G['xmlHttp'].open("POST","?",true);
	G['xmlHttp'].setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    G['xmlHttp'].setRequestHeader("Content-length", parameters.length);
    G['xmlHttp'].setRequestHeader("Connection", "close");
    G['xmlHttp'].send(parameters);
}
function rand( min, max ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Leslie Hoare
    if( max ) { return Math.floor(Math.random() * (max - min + 1)) + min; } else { return Math.floor(Math.random() * (min + 1)); }
}
function GetModule(module, action, extra) {
	G['xmlHttp'] = createAjaxObject();
	if (!G['xmlHttp']) { loff(); return false; }
	wmdivClose();
	lon();
	var cacheaction = action;
	G['xmlHttp'].onreadystatechange=function() {
		if(G['xmlHttp'].readyState==1) { set_progress(25); }
		if(G['xmlHttp'].readyState==2) { set_progress(50); }
		if(G['xmlHttp'].readyState==3) { set_progress(75); }
		if(G['xmlHttp'].readyState==4) {
			set_progress(100);
			if (G['xmlHttp'].responseText == 'logout') { document.location.href='?'; return; }
			var mySplit = G['xmlHttp'].responseText.split("<<>>");
			
			if (mySplit[0]) { document.getElementById('CP_content').innerHTML = mySplit[0]; }
			if (mySplit[1]) { document.getElementById('MENUSYSTEM').innerHTML = mySplit[1]; }
			if (mySplit[2]) { document.getElementById('TOPMENU').innerHTML = mySplit[2]; }
			if (mySplit[5]) { document.getElementById('displays').innerHTML = mySplit[5]; }
			if (mySplit[6]) { document.getElementById('MODULES').innerHTML = mySplit[6]; }
			if (mySplit[7]) { document.getElementById('SCREENTITLE').innerHTML = mySplit[7]; }
			
			loff();
			if (mySplit[9]) { eval(mySplit[9]); }
			
			if (cacheaction) { groupop('', cacheaction); }
			
			// Google Analytics Tracking Code
			try{ 
				if (pageTracker) {
					var pTurl = G['GAPAGE']+'?module='+module;
					if (extra) { pTurl += '&extra='+extra; }
					pageTracker._trackPageview(pTurl); 
				} 
			} catch(err) {}
		}
	}
	if (module) { module = '&module='+module; } else { module = '&module='; }
	if (extra) { extra = '&extra='+extra; } else { extra = ''; }
	var parameters = 'ajax=getmodule'+module+extra;
	G['xmlHttp'].open("POST","?",true);
	G['xmlHttp'].setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    G['xmlHttp'].setRequestHeader("Content-length", parameters.length);
    G['xmlHttp'].setRequestHeader("Connection", "close");
    G['xmlHttp'].send(parameters);
}
function RP_confirm(uRl,fOrm,mSg) {
	var agree=confirm(mSg);
	if (agree) {
		lon();
		if (uRl) { window.document.location.href=uRl; } else { fOrm.submit(); }
	} else { loff(); }
}
function RP_getwindow(uRl, width, height) {
	var screenW = screen.width;
	var screenH = screen.height;
	var left = (screenW - width)/2;
	var top = (screenH - height)/2;
	if ((document.topwindow)&&(!document.topwindow.closed)) { document.topwindow.close(); }
	document.topwindow=window.open(uRl,'newWindow'+Math.round(1000*Math.random()),'width='+width+',height='+height+',toolbar=no,menubar=yes,scrollbars=yes,status=yes,resizable=yes,location=no,top='+top+',left='+left+',screenX='+left+',screenY='+top);
}
function RP_getindwindow(uRl, width, height) {
	var screenW = screen.width;
	var screenH = screen.height;
	var left = (screenW - width)/2;
	var top = (screenH - height)/2;
	document.indwindow=window.open(uRl,'indWindow'+Math.round(1000*Math.random()),'width='+width+',height='+height+',toolbar=no,menubar=yes,scrollbars=yes,status=yes,resizable=yes,location=no,top='+top+',left='+left+',screenX='+left+',screenY='+top);
}
function Toggle(sHow, trName) {
	if (sHow) {
		ShowRows(trName);
	} else {
		HideRows(trName);
	}
}
function ShowRows(trID) {
	var oRow = document.getElementById(trID);
	oRow.style.display = '';
}
function HideRows(trID) {
	var oRow = document.getElementById(trID);
	oRow.style.display = "none";
}
function checkone(id) {
	var trID = document.getElementById('tr_'+id);
	checknone();
	startHighlight(trID);
	endHighlight(trID);
	shift_check(trID);
}
function check(form, box) {
	var cbdiv = document.getElementById('maincbDiv');
	var cbdivf = document.getElementById('maincbDiv_float');
	if (cbdiv.className == 'unchecked') { 
		box.checked = true;
		cbdiv.className = 'checked';
		cbdivf.className = 'checked';
	} else {
		box.checked = false;
		cbdiv.className = 'unchecked';
		cbdivf.className = 'unchecked';
	}
	
	var trs = form.getElementsByTagName('tr');
	for (var i=0;i<trs.length;i++) { 
		var ids = trs[i].id.split('_');
		if (ids[0] != 'tr') { continue; }
		if (box.checked) { rowHighlight(trs[i]); } else { rowUnhighlight(trs[i]); }
	}
	if (!box.checked) { G['datamanagerSelected'] = new Object(); }
}
function scheck(form, box) {
	for (var i=0;i<form.length;i++) {
		if (form.elements[i].type == 'checkbox') { form.elements[i].checked = box.checked; }
	}
}
function checkall() { 
	G['datamanagerSelected'] = new Object();
	var cbdiv = document.getElementById('maincbDiv');
	var cbdivf = document.getElementById('maincbDiv_float');
	var form = document.form1;
	if (cbdiv) { 
		cbdiv.className = 'checked';
		cbdivf.className = 'checked';
		form.maincb.checked = true;
	}
	
	var trs = form.getElementsByTagName('tr');
	for (var i=0;i<trs.length;i++) { 
		var ids = trs[i].id.split('_');
		if (ids[0] != 'tr') { continue; }
		rowHighlight(trs[i]);
	}
}
function checkoneselector(id) {
	var trID = document.getElementById('trs_'+id);
	if (G['SELECTORID']) { document.getElementById('cbdivs_'+G['SELECTORID']).className = 'unchecked'; }
	G['SELECTORID'] = id;
	document.getElementById('cbdivs_'+id).className = 'checked';
}
function checknone() { 
	G['datamanagerSelected'] = new Object();
	var cbdiv = document.getElementById('maincbDiv');
	var cbdivf = document.getElementById('maincbDiv_float');
	if (cbdiv) { 
		cbdiv.className = 'unchecked';
		cbdivf.className = 'unchecked';
		document.form1.maincb.checked = false;
	}
	try { 
		var form = document.form1;
		var trs = form.getElementsByTagName('tr');
		for (var i=0;i<trs.length;i++) { 
			var ids = trs[i].id.split('_');
			if (ids[0] != 'tr') { continue; }
			rowUnhighlight(trs[i]);
		}
	} catch(err) { }
}
function invertselection() { 
	var selectall = true;
	var form = document.form1;
	var trs = form.getElementsByTagName('tr');
	for (var i=0;i<trs.length;i++) { 
		var ids = trs[i].id.split('_');
		if (ids[0] != 'tr') { continue; }
		var selected = rowToggleHighlight(trs[i]); if (selected == 0) { selectall = false; }
	}
	var cbdiv = document.getElementById('maincbDiv');
	var cbdivf = document.getElementById('maincbDiv_float');
	if (cbdiv) { 
		if (!selectall) { 
			cbdiv.className = 'unchecked';
			cbdivf.className = 'unchecked';
			document.form1.maincb.checked = false;
		} else {
			cbdiv.className = 'checked';
			cbdivf.className = 'checked';
			document.form1.maincb.checked = true;
		}
	}
}
function getIndexByElement(elem) {
    for (var i = 0; i < elem.form.elements.length; i++) {
        if (elem == elem.form.elements[i]) return i;
    }
    return null;
}
function shift_check(tr) {
	var st;
	var en;
	var ids = tr.id.split('_');
	var boxischecked = G['datamanagerSelected'][ids[1]];
	if (G['startrange'] >= 0 && G['shiftdown']) { // Start the range selection
		var chk = G['checkstate'];
		var endrange = getDMRowIndex(tr);
		if (endrange > G['startrange']) { 
			st = G['startrange'];
			en = endrange;
		} else {
			st = endrange;
			en = G['startrange'];
		}
		for(var i=st;i<=en;i++) { 
			var bx = getDMRowAtIndex(i);
			if (chk) { rowHighlight(bx); } else { rowUnhighlight(bx); } 
		}
		G['startrange'] = -1;
	} 
	else if (boxischecked) { G['checkname'] = tr.id; G['startrange'] = getDMRowIndex(tr); G['checkstate'] = 1; } 
	else if (!boxischecked) { G['checkname'] = tr.id; G['startrange'] = getDMRowIndex(tr); G['checkstate'] = 0; }
}
function cbMouseOver() { 
	G['cbmouseover'] = true;
}
function cbMouseOut() { 
	G['cbmouseover'] = false; 
}
function getDMRowAtIndex(index) {
	var fs = document.getElementById('ri_'+index);
	return fs.parentNode;
}
function getDMRowIndex(tr) { 
	var ids = tr.firstChild.id.split('_');
	return parseInt(ids[1]);
}
function shift_down(e) {
	var e = e || window.event;
	if (e.shiftKey) { noSelect(); G['shiftdown'] = 1; } else { G['shiftdown'] = 0; }
	
	// Enter Key Capture and Handling
	if ((e)&&(e.keyCode == 13)&&(!G['noProcessEnterKey'])) { 
		
		// For maps integration
		if (G['currentPolygonObject']) { GMsavePolygon(); return false; }
		if (G['editPolygon']) { GMpolyDragUpdate(); return false; }
		
		// For doPrompt
		if (document.getElementById('textPrompt').style.display == '') { doPromptReturn(); return false; }
		
		// For wizard manager
		if ((document.getElementById('wmFormExists'))&&(document.getElementById('wmFormExists').innerHTML == 'wmFormExists')) { updateWizardManager(); return false; }
	
		// For inline edit
		if ((document.getElementById('inLineEditFieldExists'))&&(document.getElementById('inLineEditFieldExists').value == 'inLineEditFieldExists')) { updateEditField(); return false; }
	}
}
function shift_up(e) {
	var e = e || window.event;
	G['shiftdown'] = 0;
	reSelect();
}
function set_progress(done, msg) {
	done = parseInt(done);
	if (done < 0) { done = 0; }
	if (done > 100) { done = 100; }
	var pb = document.getElementById('progress_bar');
	var start = -6;
	var end = 280;
	var range = end - start;
	var mult = parseInt(done) * .01;
	var pos = start + (mult * range);
	pos = Math.round(pos);
	pb.style.backgroundPosition = pos+'px 0px';
	
	var t = document.getElementById('progressTitle');
	if (msg) { 
		t.innerHTML = msg;
	} else {
		t.innerHTML = 'Please wait. Loading ...';
	}
}
function createAjaxObject(nosetprog) {
	mouse_move();
	var xmlHttp;
  	try { // Firefox, Opera 8.0+, Safari
   		xmlHttp=new XMLHttpRequest();
    } catch (e) { // Internet Explorer
    	try {
      		xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
      	} catch (e) {
      		try	{
        		xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
        	} catch (e)  {
        		alert(G['NOAJAX']);
        		return false;
        	}
      	}
    }
	if (!nosetprog) { set_progress(0); }
	return xmlHttp;
}
function printScreen() {
	setTimeout('window.print()', 1500);
}
function startHighlight(tr) {
	rowToggleHighlight(tr);
	G['sHL'] = true;
}
function endHighlight(tr) { 
	G['sHL'] = false;
}
function doHighlight(tr) {
	if (tr) {
		if (G['sHL']) { 
			if (G['sHT'] == 'h') { rowHighlight(tr); }
			else if (G['sHT'] == 'u') { rowUnhighlight(tr); }
		}
	}
}
function idHighlight(id) { 
	var tr = document.getElementById('tr_'+id);
	if (tr) { rowHighlight(tr); return true; }
	return false; 
}
function idUnhighlight(id) { 
	var tr = document.getElementById('tr_'+id);
	if (tr) { rowUnhighlight(tr); return true; }
	return false;
}
function rowToggleHighlight(tr) {
	var ids = tr.id.split('_');
	if (G['datamanagerSelected'][ids[1]]) { 
		rowUnhighlight(tr);
		return(0);
	} else {
		rowHighlight(tr);
		return(1);
	}
}
function rowHighlight(tr) { 
	var ids = tr.id.split('_');
	G['sHT'] = 'h';
	document.getElementById('cbdiv_'+ids[1]).className = 'checked';
	G['datamanagerSelected'][ids[1]] = 1;
}
function rowUnhighlight(tr) {
	var ids = tr.id.split('_');
	G['sHT'] = 'u';
	document.getElementById('cbdiv_'+ids[1]).className = 'unchecked';
	delete G['datamanagerSelected'][ids[1]];	
}
function dmsdetailsClose(SL) {
	// V3 api
	// if (G['map']) { GMsetProperty(G['map'].get_zoom(), G['map'].get_mapTypeId()); }
	// V2 api
	if (G['map']) { GMsetProperty(G['map'].getZoom(), G['map'].getCurrentMapType().getName()); }
	G['map'] = false;
	G['markers'] = false;
	G['GMcurrentRecord'] = false; 
	var ddiv = document.getElementById('dmsdetails');
	ddiv.style.display = 'none';
	var cdiv = document.getElementById('calendar');
	cdiv.style.display = 'none';
	if (!SL) { loff(); }
}
function dmsdetailsShow(h, m) { 
	document.getElementById('dmsdetailsHeaderCell').innerHTML = h;
	document.getElementById('dmsdetailsContent').innerHTML = m;
	var ddiv = document.getElementById('dmsdetails');
	if (ddiv.style.display != '') {
		ddiv.style.visibility = 'hidden';
		ddiv.style.display = '';
		var left = G['posX'] - 10;
		var top = G['posY'] - 10;
		if (left < 0) { left = 0; }
		if (top < 0) { top = 0; }
		ddiv.style.left = left + 'px';
		ddiv.style.top = top + 'px';
		ddiv.style.visibility = '';
	}
	loff();
}
function getRandomChar() {
	var chars = "0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ";
	return chars.substr( rand(1, 62), 1 );
}
function randomID(size) {
	var str = "";
	for(var i = 0; i < size; i++) {
		str += getRandomChar();
	}
	return str;
}
function selColor(shfield, field, type, callback) { 
	G['colorField'] = field;
	G['shColorField'] = shfield;
	G['selColorCallback'] = callback;
	G['colorBlock'] = document.getElementById(G['colorField'].name+'_colorblock');
	var template = false;
	if (type == 'websafe') { 
		template = 'websafe.php';
	} else {
		template = 'smoothcolor.php';
	}
	
	if (type == 'websafe') { 
		G['xmlHttp'] = createAjaxObject();
		if (!G['xmlHttp']) { alert('ERROR: Could not generate color picker.'); return false; }
		G['xmlHttp'].onreadystatechange=function() {
			if(G['xmlHttp'].readyState==1) { set_progress(25); }
			if(G['xmlHttp'].readyState==2) { set_progress(50); }
			if(G['xmlHttp'].readyState==3) { set_progress(75); }
			if(G['xmlHttp'].readyState==4) {
				set_progress(100);
				if (G['xmlHttp'].responseText == 'logout') { document.location.href='?'; return; }
				var colorDIV = document.getElementById('calendar');
				colorDIV.innerHTML = G['xmlHttp'].responseText;
				calendarSetCalPos(colorDIV, G['shColorField']);
				colorDIV.style.display = '';
			}
		}
		var parameters = '';
		G['xmlHttp'].open("POST","templates/"+template,true);
		G['xmlHttp'].setRequestHeader("Content-type", "application/x-www-form-urlencoded");
   		G['xmlHttp'].setRequestHeader("Content-length", parameters.length);
  		G['xmlHttp'].setRequestHeader("Connection", "close");
   		G['xmlHttp'].send(parameters);
	} else { 
		jscolor_init();
	}
}
function setColor(hval) {
	var tmp = hval.toUpperCase();
	hval = '';
	// validate the color code.
	for (var i=0;i<=5;i++) { 
		if (!(tmp.substr(i,1).match(/\d/))) { 
			if (!(tmp.substr(i,1).match(/[A-F]/))) { 
				hval = hval+'0';
				continue;
			}
		}
		hval = hval+tmp.substr(i,1);
	}
	G['colorField'].value=hval;
	G['shColorField'].value = 'Red: '+hval.substr(0,2)+', Green: '+hval.substr(2,2)+', Blue: '+hval.substr(4,2);
	G['colorBlock'].style.background = '#'+hval;
	
	try { 
		var manualColorCode = document.getElementById('scManualColorField');
		if (manualColorCode.name) { manualColorCode.value = hval; }
	} catch(err) { }
	
	var cdiv = document.getElementById('calendar');
	cdiv.style.display = 'none';
	if (G['selColorCallback']) { eval(G['selColorCallback']); }
}
function GetAbout() { 
	wmdivClose();
	G['xmlHttp'] = createAjaxObject();
	if (!G['xmlHttp']) { loff(); return false; }
	G['xmlHttp'].onreadystatechange=function() {
		if(G['xmlHttp'].readyState==1) { set_progress(25); }
		if(G['xmlHttp'].readyState==2) { set_progress(50); }
		if(G['xmlHttp'].readyState==3) { set_progress(75); }
		if(G['xmlHttp'].readyState==4) {
			set_progress(100);
			if (G['xmlHttp'].responseText == 'logout') { document.location.href='?'; return; }
			mySplit = G['xmlHttp'].responseText.split("<<>>");
			document.getElementById('wmdivContent').innerHTML = mySplit[1];
			document.getElementById('wmdivHeaderCell').innerHTML = mySplit[0];
			var wmdiv = document.getElementById('wmdiv');
			if (wmdiv.style.display == 'none') { 
				var width = 100;
				var height = 100;
				var sc = RP_getScroll();
				width += sc[0];
				height += sc[1];
				var left = width + 'px';
				var top = height + 'px';
				wmdiv.style.left = left;
				wmdiv.style.top = top;
			}
			wmdiv.style.display = '';
			loff();
		}
	}
	
	var parameters = "ajax=getabout";
	G['xmlHttp'].open("POST","?",true);
	G['xmlHttp'].setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    G['xmlHttp'].setRequestHeader("Content-length", parameters.length);
    G['xmlHttp'].setRequestHeader("Connection", "close");
    G['xmlHttp'].send(parameters);
}
function objFindPos(obj) {
	if (obj == null) return [0,0];
	var curleft = obj.offsetLeft;
	var curtop = obj.offsetTop;
	if (obj.offsetParent) {
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;
		}
	}
	return [curleft,curtop];
}

/*----------------------- calendar --------------------------*/

function calendarTimeSelect(showOBJ, inputOBJ, showTime, callback, nclear) { // This function is called when a calendar is to be displayed
	calendarStartOver();
	// Set the initial times
	if (!nclear) { calendarClearTimes(); calendarSetInitialTimes(inputOBJ.value); }
	
	if (callback) { G['CALLBACK'] = callback; }
	if (showTime) { G['SHOW_TIME'] = showTime - 0; } // 0 for no time, 1 for show time, 2 for no time and no day, just month, year, 3 for just time, no calendar.
	if ((!showOBJ)||(!inputOBJ)) { 
		showOBJ = G['SHOW_OBJ'];
		inputOBJ = G['INPUT_OBJ'];
	}
	G['SHOW_OBJ'] = showOBJ;
	G['INPUT_OBJ'] = inputOBJ;
	
	var calDIV = document.getElementById('calendar');
	calDIV.innerHTML = '';

	if (G['SHOW_TIME'] < 2)  {
		var start_day = calendarGetStartDay(G['DISP_YEAR'], G['DISP_MONTH']);
		var days_in_month = calendarGetDaysInMonth(G['DISP_YEAR'], G['DISP_MONTH']);
	}
	var finalHTML = "<table class=\"calendarOutterTable\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><table cellspacing=\"0\" cellpadding=\"0\"><tr><td class=\"calendarGeneralSelectorHidden\" id=\"calendarGeneralSelector\">&nbsp;</td><td class=\"calendarCalendarTable\"><table class=\"calendarInnerTable\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">";
	if (G['SHOW_TIME'] < 3) { 
		finalHTML += "<tr class=\"calendarTopRow\"><td class=\"calendarMonthCell\" onClick=\"calendarShowMonthSelector();\">\n";
		finalHTML += "<img src=\"skins/"+SKIN+"/icons/arrow_left.png\"> "+G['MONTH_NAMES'][G['DISP_MONTH']-1]+"</td><td class=\"calendarYearCell\" onclick=\"calendarDisplayYears();\">"+G['DISP_YEAR']+" <img src=\"skins/"+SKIN+"/icons/arrow_right.png\"></td></tr>";
	}
	finalHTML += "<tr><td colspan=\"2\">\n";
	if (G['SHOW_TIME'] < 2) { 
		finalHTML += "<table cellspacing=\"0\" cellpadding=\"0\" width=\"100%\"><tr>";
		for(var i=0;i<=6;i++){
			finalHTML += "<th abbr=\"" + G['DAY_NAMES'][i].substr(0,1) + "\">" + G['DAY_NAMES'][i].substr(0,1) + "</th>";
		}
		finalHTML += "</tr><tr>\n";
	} 
	
	var classname = '';
	if (G['SHOW_TIME'] < 2) { 
		// Format the blank calendar cells
		if (start_day > 0) { 
			for (var i=1;i<=start_day;i++) { 
				finalHTML += "<td class=\"calendarBlankCell\">&nbsp;</td>";
			}
		}
	
		// Format all the non blank calendar cells
		for(var x=1;x<=days_in_month;x++){
			if(((x-0)+(start_day-0)-1)%7==0){
				finalHTML += "</tr>\n<tr>";
			}
			// Format today's date
			classname = '';
			if ((G['NOW_YEAR'] == G['DISP_YEAR'])&&(G['NOW_MONTH'] == G['DISP_MONTH'])&&(G['NOW_DAY'] == x)) { classname = 'calendarDayCellNow'; } else { classname = 'calendarDayCell'; }
			// Format the date if it is selected
			if ((G['DISP_YEAR'] == G['SEL_YEAR'])&&(G['DISP_MONTH'] == G['SEL_MONTH'])&&(G['SEL_DAY'] == x)) { classname = 'calendarDayCellSelected'; }
			finalHTML += "<td class=\""+classname+"\" onMouseOver=\"this.className='calendarDayCellOver';\" onMouseOut=\"this.className='"+classname+"';\" onClick=\"calendarSetDateTime("+x+");\">"+x+"</td>";
		}
		while((((days_in_month-0)+(start_day-0))%7)!=0){
			finalHTML += "<td class=\"calendarBlankCell\">&nbsp;</td>";
			days_in_month++;
		}
		finalHTML += "</tr></table></td></tr>";
		if (G['SHOW_TIME']) { 
			finalHTML += "<tr><td colspan=\"2\" class=\"calendarTimeRow\" id=\"calendarTimeRow\"><span class=\"calendarTimeSpan\" onClick=\"calendarDisplayHour();\" onMouseOver=\"this.className='calendarTimeSpanOver';\" onMouseOut=\"this.className='calendarTimeSpan';\">"+G['DISP_HOUR']+"</span>";
			finalHTML += "&nbsp;&nbsp;:&nbsp;&nbsp;<span class=\"calendarTimeSpan\" onClick=\"calendarDisplayMinute();\" onMouseOver=\"this.className='calendarTimeSpanOver';\" onMouseOut=\"this.className='calendarTimeSpan';\">"+calendarFormatMinute(G['DISP_MIN']-0)+"</span>\n";
			finalHTML += "&nbsp;&nbsp;<span class=\"calendarTimeSpan\" onClick=\"calendarDisplayAP();\" onMouseOver=\"this.className='calendarTimeSpanOver';\" onMouseOut=\"this.className='calendarTimeSpan';\">"+G['DISP_AP']+"</span></td></tr>";
		}
	} else {
		finalHTML += "&nbsp;</td></tr>";
	}
	
	if (G['SHOW_TIME'] == 3) { 
		finalHTML += "<tr><td colspan=\"2\" class=\"calendarTimeRow\" id=\"calendarTimeRow\"><span class=\"calendarTimeSpan\" onClick=\"calendarDisplayHour();\" onMouseOver=\"this.className='calendarTimeSpanOver';\" onMouseOut=\"this.className='calendarTimeSpan';\">"+G['DISP_HOUR']+"</span>";
		finalHTML += "&nbsp;&nbsp;:&nbsp;&nbsp;<span class=\"calendarTimeSpan\" onClick=\"calendarDisplayMinute();\" onMouseOver=\"this.className='calendarTimeSpanOver';\" onMouseOut=\"this.className='calendarTimeSpan';\">"+calendarFormatMinute(G['DISP_MIN']-0)+"</span>\n";
		finalHTML += "&nbsp;&nbsp;<span class=\"calendarTimeSpan\" onClick=\"calendarDisplayAP();\" onMouseOver=\"this.className='calendarTimeSpanOver';\" onMouseOut=\"this.className='calendarTimeSpan';\">"+G['DISP_AP']+"</span></td></tr>";
	}
	
	var year;
	finalHTML += "<tr><td colspan=\"2\" class=\"calendarButtonRow\"><span class=\"calendarSetButton\" onMouseOver=\"this.className = 'calendarSetButtonOver';\" onMouseOut=\"this.className = 'calendarSetButton';\" onClick=\"calendarSetDateTime();\">"+G['SET']+"</span> ";
	if (G['SHOW_TIME'] < 3) { finalHTML += "<span class=\"calendarSetButton\" onMouseOver=\"this.className = 'calendarSetButtonOver';\" onMouseOut=\"this.className = 'calendarSetButton';\" onClick=\"calendarSetToday();calendarSetDateTime();\">"+G['TODAY']+"</span> "; }
	finalHTML += "<span class=\"calendarSetButton\" onMouseOver=\"this.className = 'calendarSetButtonOver';\" onMouseOut=\"this.className = 'calendarSetButton';\" onClick=\"calendarClearCalendar();\">"+G['CLOSE']+"</span>\n";
	if (G['SHOW_TIME'] < 3) { finalHTML += "</td></tr></table></td><td class=\"calendarYearCellHidden\" id=\"calendarYearSelector\"><table cellspacing=\"0\" cellpadding=\"0\" class=\"calendarYearSelector\"><tr><td class=\"calendarUpArrow\" onMouseOver=\"this.className='calendarUpArrowOver';\" onMouseOut=\"this.className='calendarUpArrow';\" onClick=\"calendarGetUpYears();\"><div>&nbsp;</div></td></tr>\n"; 
		for (var i=0;i<=9;i++) {
			year = (G['DISP_YEAR']-0) + i;
			if (!i) { classname = 'calendarSelectorCellSelected'; } else { classname = 'calendarSelectorCell'; }
			finalHTML += "<tr><td class=\""+classname+"\" onMouseOver=\"this.className='calendarSelectorCellOver';\" onMouseOut=\"this.className='"+classname+"';\" onClick=\"calendarSetYear("+year+");\">"+year+"</td></tr>\n";
		}
		finalHTML += "<tr><td class=\"calendarDownArrow\" onMouseOver=\"this.className='calendarDownArrowOver';\" onMouseOut=\"this.className='calendarDownArrow';\" onClick=\"calendarGetDownYears();\"><div>&nbsp;</div></td></tr></table>\n";
		finalHTML += "</td></tr></table></td></tr></table>";
	} else { finalHTML += "</td></tr></table></td></tr></table></td></tr></table>"; }
	calDIV.innerHTML = finalHTML;
	calendarSetCalPos(calDIV, showOBJ);
	calDIV.style.display = '';
	
}
function calendarFormatMinute(minute) {
	minute -= 0;
	if (minute < 10) { return "0"+minute; } else { return minute; }
}
function calendarSetToday() {
	G['DISP_YEAR'] = G['NOW_YEAR'];
	G['DISP_MONTH'] = G['NOW_MONTH'];
	G['DISP_DAY'] = G['NOW_DAY'];
}
function calendarClearTimes() {
	G['DISP_YEAR'] = 0;		
	G['DISP_MONTH'] = 0;		
	G['DISP_DAY'] = 0;		
	G['DISP_HOUR'] = 0;		
	G['DISP_MIN'] = 0;		
	G['DISP_AP'] = G['AM'];		
	G['SEL_YEAR'] = 0;		
	G['SEL_MONTH'] = 0;		
	G['SEL_DAY'] = 0;		
	G['NOW_YEAR'] = 0;		
	G['NOW_MONTH'] = 0;		
	G['NOW_DAY'] = 0;
	G['SHOW_OBJ'] = '';
	G['INPUT_OBJ'] = '';
	G['CALLBACK'] = '';
	G['CALOVER'] = 0;
	G['SHOW_YEAR'] = 0;
	G['SHOW_TIME'] = 0;
	G['SHOW_SEL'] = '';
}
function calendarSetInitialTimes(val) {
	if (!val) { 
		// Set the values from now
		var date = new Date();
		G['DISP_YEAR'] = date.getFullYear();
		G['DISP_MONTH'] = (date.getMonth()-0) + 1;
		G['DISP_DAY'] = date.getDate();
		G['DISP_HOUR'] = date.getHours();
		if (G['DISP_HOUR'] < 12) { G['DISP_AP'] = G['AM']; } else { G['DISP_AP'] = G['PM']; }
		if (G['DISP_HOUR'] == 0) { G['DISP_HOUR'] = 12; }
		if (G['DISP_HOUR'] > 12) { G['DISP_HOUR'] -= 12; }
		G['DISP_MIN'] = date.getMinutes();
		G['SEL_YEAR'] = G['DISP_YEAR'];
		G['SEL_MONTH'] = G['DISP_MONTH'];
		G['SEL_DAY'] = G['DISP_DAY'];
		G['NOW_YEAR'] = G['DISP_YEAR'];
		G['NOW_MONTH'] = G['DISP_MONTH'];
		G['NOW_DAY'] = G['DISP_DAY'];
	} else {
		// Set the values from the value given
		var dt = val.split(" ");
		if (dt[0].match(':')) { dt[1] = dt[0]; dt[0] = ''; }
		var d = dt[0].split("-");
		if (dt[1]) { var t = dt[1].split(":"); } else { var t = new Array('00', '00', '00'); }
		G['DISP_YEAR'] = d[0] - 0;
		G['DISP_MONTH'] = d[1] - 0;
		G['DISP_DAY'] = d[2] - 0;
		G['DISP_HOUR'] = t[0] - 0;
		if (G['DISP_HOUR'] < 12) { G['DISP_AP'] = G['AM']; } else { G['DISP_AP'] = G['PM']; }
		if (G['DISP_HOUR'] == 0) { G['DISP_HOUR'] = 12; }
		if (G['DISP_HOUR'] > 12) { G['DISP_HOUR'] -= 12; }
		G['DISP_MIN'] = t[1] - 0;
		G['SEL_YEAR'] = G['DISP_YEAR'];
		G['SEL_MONTH'] = G['DISP_MONTH'];
		G['SEL_DAY'] = G['DISP_DAY'];
		var date = new Date();
		G['NOW_YEAR'] = date.getFullYear();
		G['NOW_MONTH'] = (date.getMonth()-0) + 1;
		G['NOW_DAY'] = date.getDate()-0;
	}
}
function calendarGetStartDay(year, month) {
	return new Date(year, (month-1), 1).getDay();
}
function calendarGetDaysInMonth(year, month) {
	return 32 - new Date(year, (month-1), 32).getDate();
}
function calendarSetCalPos(div, parent) { // Sets the calendar position to just under the parent object
	var parentPOS = objFindPos(parent);
	div.style.left = parentPOS[0] + 'px';
	var top = parentPOS[1] + parent.offsetHeight;
	div.style.top = top + 'px';
}
function calendarSetMonth(month) { 
	G['DISP_MONTH'] = month - 0;
	G['SHOW_SEL'] = '';
	calendarTimeSelect('', '', '', '', 1);
}
function calendarSetDateTime(day) {
	if (!day) { day = G['DISP_DAY']; }
	day -= 0;
	G['DISP_MONTH'] -= 0;
	G['DISP_HOUR'] -= 0;
	G['DISP_MIN'] -= 0;
	var display = ''; var input = '';
	if (G['SHOW_TIME'] < 2) { display = G['MONTH_NAMES'][(G['DISP_MONTH']-0)+11]+" "+day+calendarGetSuffix(day)+", "+G['DISP_YEAR']; }
	else if (G['SHOW_TIME'] == 2) { display = G['MONTH_NAMES'][(G['DISP_MONTH']-0)+11]+" "+G['DISP_YEAR']; }
	if (G['SHOW_TIME'] == 1) { display += " at "+G['DISP_HOUR']+":"+calendarFormatMinute(G['DISP_MIN'])+" "+G['DISP_AP']; }
	if (G['SHOW_TIME'] == 3) { display = G['DISP_HOUR']+":"+calendarFormatMinute(G['DISP_MIN'])+" "+G['DISP_AP']; }
	var hour = G['DISP_HOUR']-0;
	if (G['DISP_AP'] == G['PM']) { if (hour < 12) { hour += 12; } }
	if (G['DISP_AP'] == G['AM']) { if (hour == 12) { hour = 0; } }
	if (G['SHOW_TIME'] < 2) { input = G['DISP_YEAR']+'-'+calendarFormatMinute(G['DISP_MONTH'])+'-'+calendarFormatMinute(day); }
	else if (G['SHOW_TIME'] == 2) { input = G['DISP_YEAR']+'-'+calendarFormatMinute(G['DISP_MONTH'])+'-01'; }
	if (G['SHOW_TIME'] == 1) { input += ' '+calendarFormatMinute(hour)+':'+calendarFormatMinute(G['DISP_MIN'])+':00'; }
	if (G['SHOW_TIME'] == 3) { input = calendarFormatMinute(hour)+':'+calendarFormatMinute(G['DISP_MIN'])+':00'; }
	G['SHOW_OBJ'].value = display;
	G['INPUT_OBJ'].value = input;
	var calDIV = document.getElementById('calendar');
	calDIV.innerHTML = '';
	calDIV.style.display = 'none';
	if (G['CALLBACK']) { eval(G['CALLBACK']); }
}
function calendarGetSuffix(day) {
	day = day - 0;
	if ((day == 1)||(day == 21)||(day == 31)) { return 'st'; }
	if ((day == 2)||(day == 22)) { return 'nd'; }
	if ((day == 3)||(day == 23)) { return 'rd'; }
	return 'th';
}
function calendarSetMinute(minute) { 
	G['DISP_MIN'] = minute - 0;
	G['SHOW_SEL'] = '';
	calendarTimeSelect('', '', '', '', 1);
}
function calendarSetHour(hour) { 
	G['DISP_HOUR'] = hour - 0;
	G['SHOW_SEL'] = '';
	calendarTimeSelect('', '', '', '', 1);
}
function calendarSetAP(ap) { 
	G['DISP_AP'] = ap;
	G['SHOW_SEL'] = '';
	calendarTimeSelect('', '', '', '', 1);
}
function calendarStartOver() {
	if (G['CALOVER']) { clearTimeout(G['CALOVER']); }
	G['CALOVER'] = 0;
}
function calendarStartClose() {
	G['CALOVER'] = setTimeout('calendarClearCalendar()', 1000);
}
function calendarClearCalendar() {
	var calDIV = document.getElementById('calendar');
	calDIV.innerHTML = '';
	calDIV.style.display = 'none';
}
function calendarDisplayYears() {
	var calyeartd = document.getElementById('calendarYearSelector');
	if (calyeartd.className == 'calendarYearCellShown') { calyeartd.className = 'calendarYearCellHidden'; }
	else { calyeartd.className = 'calendarYearCellShown'; }
}
function calendarGetUpYears() {
	if (!G['SHOW_YEAR']) { G['SHOW_YEAR'] = G['DISP_YEAR']; }
	G['SHOW_YEAR'] -= 10;
	var finalHTML = '';
	finalHTML += "<table cellspacing=\"0\" cellpadding=\"0\" class=\"calendarYearSelector\"><tr><td class=\"calendarUpArrow\" onMouseOver=\"this.className='calendarUpArrowOver';\" onMouseOut=\"this.className='calendarUpArrow';\" onClick=\"calendarGetUpYears();\"><div>&nbsp;</div></td></tr>\n";
	for (var i=0;i<=9;i++) {
		var classname = false;
		var year = (G['SHOW_YEAR']-0) + i;
		if (year == G['DISP_YEAR']) { classname = 'calendarSelectorCellSelected'; } else { classname = 'calendarSelectorCell'; }
		finalHTML += "<tr><td class=\""+classname+"\" onMouseOver=\"this.className='calendarSelectorCellOver';\" onMouseOut=\"this.className='"+classname+"';\" onClick=\"calendarSetYear("+year+");\">"+year+"</td></tr>\n";
	}
	finalHTML += "<tr><td class=\"calendarDownArrow\" onMouseOver=\"this.className='calendarDownArrowOver';\" onMouseOut=\"this.className='calendarDownArrow';\" onClick=\"calendarGetDownYears();\"><div>&nbsp;</div></td></tr></table>\n";
	document.getElementById('calendarYearSelector').innerHTML = finalHTML;
}
function calendarGetDownYears() {
	if (!G['SHOW_YEAR']) { G['SHOW_YEAR'] = G['DISP_YEAR']; }
	G['SHOW_YEAR'] -= 0;
	G['SHOW_YEAR'] += 10;
	var finalHTML = '';
	finalHTML += "<table cellspacing=\"0\" cellpadding=\"0\" class=\"calendarYearSelector\"><tr><td class=\"calendarUpArrow\" onMouseOver=\"this.className='calendarUpArrowOver';\" onMouseOut=\"this.className='calendarUpArrow';\" onClick=\"calendarGetUpYears();\"><div>&nbsp;</div></td></tr>\n";
	for (var i=0;i<=9;i++) {
		var classname = false;
		var year = (G['SHOW_YEAR']-0) + i;
		if (year == G['DISP_YEAR']) { classname = 'calendarSelectorCellSelected'; } else { classname = 'calendarSelectorCell'; }
		finalHTML += "<tr><td class=\""+classname+"\" onMouseOver=\"this.className='calendarSelectorCellOver';\" onMouseOut=\"this.className='"+classname+"';\" onClick=\"calendarSetYear("+year+");\">"+year+"</td></tr>\n";
	}
	finalHTML += "<tr><td class=\"calendarDownArrow\" onMouseOver=\"this.className='calendarDownArrowOver';\" onMouseOut=\"this.className='calendarDownArrow';\" onClick=\"calendarGetDownYears();\"><div>&nbsp;</div></td></tr></table>\n";
	document.getElementById('calendarYearSelector').innerHTML = finalHTML;
}
function calendarSetYear(year) { 
	G['DISP_YEAR'] = year;
	G['SHOW_YEAR'] = 0;
	calendarTimeSelect('', '', '', '', 1);
}
function calendarShowMonthSelector() {
	var classname = false;
	if ((G['SHOW_SEL'])&&(G['SHOW_SEL'] != 'MONTH')) { calendarTimeSelect('', '', '', '', 1); }
	var calmonthtd = document.getElementById('calendarGeneralSelector');
	if ((calmonthtd.className == 'calendarGeneralSelectorShown')&&(G['SHOW_SEL'] == 'MONTH')) { 
		calmonthtd.innerHTML = '&nbsp;';
		var calDIV = document.getElementById('calendar');
		calmonthtd.className = 'calendarGeneralSelectorHidden';
		calendarSetCalPos(calDIV, G['SHOW_OBJ']);
		G['SHOW_SEL'] = '';
		calendarSetTimeContent();
	} else { 
		var finalHTML = "<table cellspacing=\"0\" cellpadding=\"0\" class=\"calendarMonthSelector\">\n";
		for (var i=1;i<=12;i++) {
			if (i == G['DISP_MONTH']) { classname = 'calendarSelectorCellSelected'; } else { classname = 'calendarSelectorCell'; }
			finalHTML += "<tr><td class=\""+classname+"\" onMouseOver=\"this.className='calendarSelectorCellOver';\" onMouseOut=\"this.className='"+classname+"';\" onClick=\"calendarSetMonth("+i+");\">"+G['MONTH_NAMES'][i+11]+"</td></tr>\n";
		}
		finalHTML += "</table>";
		calmonthtd.innerHTML = finalHTML;
		calmonthtd.className = 'calendarGeneralSelectorShown';
		var calDIV = document.getElementById('calendar');
		var leftSet = parseInt(calDIV.style.left) - parseInt(calmonthtd.offsetWidth);
		calDIV.style.left = leftSet + 'px';
		G['SHOW_SEL'] = 'MONTH';
		calendarSetTimeContent();
	}
}
function calendarDisplayHour() {
	var classname = false;
	if ((G['SHOW_SEL'])&&(G['SHOW_SEL'] != 'HOUR')) { calendarTimeSelect('', '', '', '', 1); }
	var calselect = document.getElementById('calendarGeneralSelector');
	if ((calselect.className == 'calendarGeneralSelectorShown') &&(G['SHOW_SEL'] == 'HOUR')) { 
		calselect.innerHTML = '&nbsp;';
		var calDIV = document.getElementById('calendar');
		calselect.className = 'calendarGeneralSelectorHidden';
		calendarSetCalPos(calDIV, G['SHOW_OBJ']);
		G['SHOW_SEL'] = '';
		calendarSetTimeContent();
	} else {
		var finalHTML = "<table cellspacing=\"0\" cellpadding=\"0\" class=\"calendarHourSelector\">\n";
		for (var i=1;i<=12;i++) {
			if (i == G['DISP_HOUR']) { classname = 'calendarSelectorCellSelected'; } else { classname = 'calendarSelectorCell'; }
			finalHTML += "<tr><td class=\""+classname+"\" onMouseOver=\"this.className='calendarSelectorCellOver';\" onMouseOut=\"this.className='"+classname+"';\" onClick=\"calendarSetHour("+i+");\">"+i+"</td></tr>\n";
		}
		finalHTML += "</table>";
		calselect.innerHTML = finalHTML;
		calselect.className = 'calendarGeneralSelectorShown';
		var calDIV = document.getElementById('calendar');
		var leftSet = parseInt(calDIV.style.left) - parseInt(calselect.offsetWidth);
		calDIV.style.left = leftSet + 'px';
		G['SHOW_SEL'] = 'HOUR';
		calendarSetTimeContent();
	}
}
function calendarDisplayMinute(start) {
	var classname = '';
	if ((G['SHOW_SEL'])&&(G['SHOW_SEL'] != 'MINUTE')) { calendarTimeSelect('', '', '', '', 1); }
	if ((start)||(start == 0)) { calendarTimeSelect('', '', '', '', 1); }
	var calselect = document.getElementById('calendarGeneralSelector');
	if ((calselect.className == 'calendarGeneralSelectorShown')&&(G['SHOW_SEL'] == 'MINUTE')&&(!start)&&(start != 0)) { 
		calselect.innerHTML = '&nbsp;';
		var calDIV = document.getElementById('calendar');
		calselect.className = 'calendarGeneralSelectorHidden';
		calendarSetCalPos(calDIV, G['SHOW_OBJ']);
		G['SHOW_SEL'] = '';
		calendarSetTimeContent();
	} else {
		if ((!start)&&(start != 0)) { start = G['DISP_MIN'] - 5; }
		if (start < 0) { start = 0; }
		while ((start + 9) > 59) { start--; }
		var end = start + 9;
		
		var pstart = start - 10;
		var nstart = start + 10;
		
		var upArrow = '';
		if (start > 0) { upArrow += "<tr><td class=\"calendarUpArrow\" onMouseOver=\"this.className='calendarUpArrowOver';\" onMouseOut=\"this.className='calendarUpArrow';\" onClick=\"calendarDisplayMinute("+pstart+");\"><div>&nbsp;</div></td></tr>"; }
		else { end++; }
		var dnArrow = '';
		if (end < 59) { dnArrow += "<tr><td class=\"calendarDownArrow\" onMouseOver=\"this.className='calendarDownArrowOver';\" onMouseOut=\"this.className='calendarDownArrow';\" onClick=\"calendarDisplayMinute("+nstart+");\"><div>&nbsp;</div></td></tr>"; }
		else { start--; }
		
		var finalHTML = "<table cellspacing=\"0\" cellpadding=\"0\" class=\"calendarMinuteSelector\">"+upArrow+"\n";
		for (var i=start;i<=end;i++) {
			if (i == G['DISP_MIN']) { classname = 'calendarSelectorCellSelected'; } else { classname = 'calendarSelectorCell'; }
			finalHTML += "<tr><td class=\""+classname+"\" onMouseOver=\"this.className='calendarSelectorCellOver';\" onMouseOut=\"this.className='"+classname+"';\" onClick=\"calendarSetMinute("+i+");\">"+calendarFormatMinute(i)+"</td></tr>\n";
		}
		finalHTML += dnArrow+"</table>";
		calselect.innerHTML = finalHTML;
		calselect.className = 'calendarGeneralSelectorShown';
		var calDIV = document.getElementById('calendar');
		var leftSet = parseInt(calDIV.style.left) - parseInt(calselect.offsetWidth);
		calDIV.style.left = leftSet + 'px';
		G['SHOW_SEL'] = 'MINUTE';
		calendarSetTimeContent();
	}
}
function calendarDisplayAP() {
	if ((G['SHOW_SEL'])&&(G['SHOW_SEL'] != 'AP')) { calendarTimeSelect('', '', '', '', 1); }
	var calselect = document.getElementById('calendarGeneralSelector');
	if ((calselect.className == 'calendarGeneralSelectorShown') &&(G['SHOW_SEL'] == 'AP')) { 
		calselect.innerHTML = '&nbsp;';
		var calDIV = document.getElementById('calendar');
		calselect.className = 'calendarGeneralSelectorHidden';
		calendarSetCalPos(calDIV, G['SHOW_OBJ']);
		G['SHOW_SEL'] = '';
		calendarSetTimeContent();
	} else {
		var finalHTML = "<table cellspacing=\"0\" cellpadding=\"0\" class=\"calendarAPSelector\">\n";
		var asel = 'calendarSelectorCell';
		var psel = 'calendarSelectorCell';
		if (G['DISP_AP'] == G['AM']) { asel = 'calendarSelectorCellSelected'; }
		if (G['DISP_AP'] == G['PM']) { psel = 'calendarSelectorCellSelected'; }
		for (var i=1;i<=10;i++) { finalHTML += "<tr><td class=\"calendarSelectorBlankCell\">&nbsp;</td></tr>\n"; }
		finalHTML += "<tr><td class=\""+asel+"\" onMouseOver=\"this.className='calendarSelectorCellOver';\" onMouseOut=\"this.className='"+asel+"';\" onClick=\"calendarSetAP('"+G['AM']+"');\">"+G['AM']+"</td></tr>\n";
		finalHTML += "<tr><td class=\""+psel+"\" onMouseOver=\"this.className='calendarSelectorCellOver';\" onMouseOut=\"this.className='"+psel+"';\" onClick=\"calendarSetAP('"+G['PM']+"');\">"+G['PM']+"</td></tr>\n";
		finalHTML += "</table>";
		calselect.innerHTML = finalHTML;
		calselect.className = 'calendarGeneralSelectorShown';
		var calDIV = document.getElementById('calendar');
		var leftSet = parseInt(calDIV.style.left) - parseInt(calselect.offsetWidth);
		calDIV.style.left = leftSet + 'px';
		G['SHOW_SEL'] = 'AP';
		calendarSetTimeContent();
	}
}
function calendarSetTimeContent() {
	caltime = document.getElementById('calendarTimeRow');
	var finalHTML = "";
	var classname = 'calendarTimeRowSelector';
	if (G['SHOW_SEL'] == 'HOUR') { 
		finalHTML += "<span onClick=\"calendarDisplayHour();\" class=\"calendarTimeSpan\" onMouseOver=\"this.className='calendarTimeSpanOver';\" onMouseOut=\"this.className='calendarTimeSpan';\"><img src=\"skins/"+SKIN+"/icons/arrow_left.png\"> "+G['HOUR']+"</span>";
	} else if (G['SHOW_SEL'] == 'MINUTE') { 
		finalHTML += "<span onClick=\"calendarDisplayMinute();\" class=\"calendarTimeSpan\" onMouseOver=\"this.className='calendarTimeSpanOver';\" onMouseOut=\"this.className='calendarTimeSpan';\"><img src=\"skins/"+SKIN+"/icons/arrow_left.png\"> "+G['MINUTE']+"</span>";
	} else if (G['SHOW_SEL'] == 'AP') { 
		finalHTML += "<span onClick=\"calendarDisplayAP();\" class=\"calendarTimeSpan\" onMouseOver=\"this.className='calendarTimeSpanOver';\" onMouseOut=\"this.className='calendarTimeSpan';\"><img src=\"skins/"+SKIN+"/icons/arrow_left.png\"> "+G['AMORPM']+"</span>";
	} else {
		classname = 'calendarTimeRow';
		finalHTML = "<span class=\"calendarTimeSpan\" onClick=\"calendarDisplayHour();\" onMouseOver=\"this.className='calendarTimeSpanOver';\" onMouseOut=\"this.className='calendarTimeSpan';\">"+G['DISP_HOUR']+"</span>";
		finalHTML += "&nbsp;&nbsp;:&nbsp;&nbsp;<span class=\"calendarTimeSpan\" onClick=\"calendarDisplayMinute();\" onMouseOver=\"this.className='calendarTimeSpanOver';\" onMouseOut=\"this.className='calendarTimeSpan';\">"+calendarFormatMinute(G['DISP_MIN']-0)+"</span>\n";
		finalHTML += "&nbsp;&nbsp;<span class=\"calendarTimeSpan\" onClick=\"calendarDisplayAP();\" onMouseOver=\"this.className='calendarTimeSpanOver';\" onMouseOut=\"this.className='calendarTimeSpan';\">"+G['DISP_AP']+"</span>";
	}
	if (caltime) { 
		caltime.innerHTML = finalHTML;
		caltime.className = classname;
	}
}

/*----------------------- common --------------------------*/
function lon() { 
	mouse_move(); 
	set_progress(0); 
	var lc = document.getElementById('loaderContainer');
	disableConsole(lc); 
	lc.style.display=''; 
}
function loff() { 
	mouse_move(); 
	document.getElementById('loaderContainer').style.display='none';
	var divs = new Array('textPrompt', 'dmsdetails', 'selectordiv', 'wmdiv');
	var isdis = false;
	for (var i=0;i<divs.length;i++) {
		var obj = document.getElementById(divs[i]);
		if (obj.style.display == '') { disableConsole(obj); isdis = true; break; }
	}
	if (!isdis) { enableConsole(); }
}
function disableConsole(obj) { 
	var dis = document.getElementById('disableConsole');
	var level = obj.style.zIndex - 1;
	dis.style.zIndex = level;
	dis.style.display = '';
}
function enableConsole() { 
	var dis = document.getElementById('disableConsole');
	dis.style.display = 'none';
}

/*----------------------- datamanager --------------------------*/

function doPrompt(msg, def, callback) { 
	if ((G['DPvalue'])||(G['DPnovalue'])) { var tmp = G['DPvalue']; G['DPvalue'] = ''; G['DPcallbck'] = ''; return tmp; }
	var ddiv = document.getElementById('textPrompt');
	ddiv.style.visibility = 'hidden';
	ddiv.style.display = '';
	var ddivb = document.getElementById('textPromptBox');
	var tb = document.getElementById('textPromptResponse');
	tb.value = def;
	document.getElementById('textPromptContent').innerHTML = msg;
	
	ddivb.style.left = parseInt(ddiv.offsetWidth / 2) - parseInt(ddivb.offsetWidth / 2);
	ddivb.style.top = parseInt(ddiv.offsetHeight / 2) - parseInt(ddivb.offsetHeight / 2);
	
	ddiv.style.visibility = '';
	tb.focus();
	loff();
	
	G['DPcallback'] = callback;
	G['DPvalue'] = '';
	return false;
}
function doPromptReturn(cl) { 
	var tb = document.getElementById('textPromptResponse');
	var tbc = document.getElementById('textPromptContent')
	var ddiv = document.getElementById('textPrompt');
	if (cl) { 
		tb.value = '';
		tbc.innerHTML = '';
		ddiv.style.display = 'none';
		G['DPvalue'] = '';
		G['DPcallback'] = '';
		loff();
		return;
	}
	G['DPvalue'] = tb.value;
	if (!G['DPvalue']) { G['DPnovalue'] = true; }
	tb.value = '';
	tbc.innerHTML = '';
	ddiv.style.display = 'none';
	loff();
	if (G['DPcallback']) { eval(G['DPcallback']); }
}
function setDefaultViewLayout() {
	var newLayout = doPrompt("If you want to create a new view using the default layout, enter the name of the new view here.", '', 'setDefaultViewLayout()');
	if ((newLayout == false)&&(G['DPnovalue'] == false)) { return; } else { G['DPnovalue'] = false; }
	if (!newLayout) { 
		if (!confirm("You are about to overwrite the current view\nwith the settings from the default layout.\n\nAre you sure you want to continue?")) {
			return;
		}
	}
	try{ 
		document.form1.extra.value = newLayout;
		document.form1.extra2.value = 'setDefaultLayout';
	} catch(err) { }
	document.form_selector.extra.value = newLayout;
	document.form_selector.extra2.value = 'setDefaultLayout';
	updateDataTable();
	try{
		document.form1.extra.value = '';
		document.form1.extra2.value = '';
	} catch(err) { }
	document.form_selector.extra.value = '';
	document.form_selector.extra2.value = '';
}
function setViewLayout(layout) {
	var newLayout = doPrompt("If you want to create a new view using the selected layout, enter the name of the new view here.", '', "setViewLayout('"+layout+"')");
	if ((newLayout == false)&&(G['DPnovalue'] == false)) { return; } else { G['DPnovalue'] = false; }
	if (!newLayout) { 
		if (!confirm("You are about to overwrite the current view\nwith the settings from the selected layout.\n\nAre you sure you want to continue?")) {
			return;
		}
	}
	try{
		document.form1.extra2.value = 'setLayout';
		document.form1.extra.value = layout+':'+newLayout;
	} catch(err) { }
	document.form_selector.extra2.value = 'setLayout';
	document.form_selector.extra.value = layout+':'+newLayout;
	updateDataTable();
	try{
		document.form1.extra2.value = '';
		document.form1.extra.value = '';
	} catch(err) { }
	document.form_selector.extra2.value = '';
	document.form_selector.extra.value = '';
}

// Search Functions
function DelSavedSearch(id, conf) { 
	if (!confirm(conf)) { return; }
	document.form1.extra2.value = 'delSavedSearch';
	document.form1.extra.value = id;
	document.form_selector.extra2.value = 'delSavedSearch';
	document.form_selector.extra.value = id;
	updateDataTable();
	document.form1.extra2.value = '';
	document.form1.extra.value = '';
	document.form_selector.extra2.value = '';
	document.form_selector.extra.value = '';
}
function DelAllSavedSearch(conf) {
	if (!confirm(conf)) { return; }
	document.form1.extra2.value = 'delAllSavedSearch';
	document.form_selector.extra2.value = 'delAllSavedSearch';
	updateDataTable();
	document.form1.extra2.value = '';
	document.form_selector.extra2.value = '';
}
function ApplySearch(id) { 
	var sTable = false; 
	
	G['xmlHttp'] = createAjaxObject();
	if (!G['xmlHttp']) { loff(); return false; }
	G['xmlHttp'].onreadystatechange=function() {
		if(G['xmlHttp'].readyState==1) { set_progress(25); }
		if(G['xmlHttp'].readyState==2) { set_progress(50); }
		if(G['xmlHttp'].readyState==3) { set_progress(75); }
		if(G['xmlHttp'].readyState==4) {
			set_progress(100);
			if (G['xmlHttp'].responseText == 'logout') { document.location.href='?'; return; }
			var mySplit = G['xmlHttp'].responseText.split("<<>>");
			if (G['isSelectorDM']) { sTable = document.getElementById('selector_SearchBuilder'); }
			else { sTable = document.getElementById('SearchBuilder'); }
			
			// Delete all the rows.
			var cl = sTable.rows.length;
			for (var i=0;i<cl;i++) { sTable.deleteRow(0); }
			
			var dummy = "<table id=\"dmsdummytable\">" + mySplit[0] + "</table>";
			var ddiv = document.getElementById('dmsdummydiv');
			ddiv.innerHTML = dummy;
			var dummytable = document.getElementById('dmsdummytable');
			for (var i=0; i<dummytable.rows.length; i++) { 
				var searchHTML = dummytable.rows[i].cells[0].innerHTML;
				var row=sTable.insertRow(-1);
				var cell=row.insertCell(0);
				cell.className='searchBox';
				cell.innerHTML = searchHTML;
			}
			ddiv.innerHTML = '';
			updateDataTable();
		}
	}
	
	var parameters = "ajax=applySearch&sid="+id;
	if (G['isSelectorDM']) { parameters += "&getselector=1&selectormodule="+G['selectorMODULE']; }
	G['xmlHttp'].open("POST","?",true);
	G['xmlHttp'].setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    G['xmlHttp'].setRequestHeader("Content-length", parameters.length);
    G['xmlHttp'].setRequestHeader("Connection", "close");
    G['xmlHttp'].send(parameters);
}
function SaveSearchAs(msg, nomsg) {
	var sTable = false;
	if (G['isSelectorDM']) { 
		sTable = document.getElementById('selector_SearchBuilder');
	} else {
		sTable = document.getElementById('SearchBuilder');
	}
	if (sTable.rows.length <= 0) {
		alert(nomsg);
		return;
	}
	
	var searchname = doPrompt(msg, '', "SaveSearchAs()");
	if ((searchname == false)&&(G['DPnovalue'] == false)) { return; } else { G['DPnovalue'] = false; }
	if (searchname) { 
		document.form1.extra2.value = 'savesearch';
		document.form1.extra.value = searchname;
		document.form_selector.extra2.value = 'savesearch';
		document.form_selector.extra.value = searchname;
		updateDataTable();
		document.form1.extra2.value = '';
		document.form1.extra.value = '';
		document.form_selector.extra2.value = '';
		document.form_selector.extra.value = '';
	}
}
function AddSearch(type) { 
	var sTable = false;
	G['xmlHttp'] = createAjaxObject();
	if (!G['xmlHttp']) { loff(); return false; }
	G['xmlHttp'].onreadystatechange=function() {
		if(G['xmlHttp'].readyState==1) { set_progress(25); }
		if(G['xmlHttp'].readyState==2) { set_progress(50); }
		if(G['xmlHttp'].readyState==3) { set_progress(75); }
		if(G['xmlHttp'].readyState==4) {
			set_progress(100);
			if (G['xmlHttp'].responseText == 'logout') { document.location.href='?'; return; }
			var mySplit = G['xmlHttp'].responseText.split("<<>>");
			if (G['isSelectorDM']) { sTable = document.getElementById('selector_SearchBuilder'); }
			else { sTable = document.getElementById('SearchBuilder'); }
			var row=sTable.insertRow(0);
			var cell=row.insertCell(0);
			cell.className='searchBox';
			cell.innerHTML = mySplit[0];
			loff();
		}
	}
	
	var parameters = "ajax=addSearch&type="+type;
	if (G['isSelectorDM']) { parameters += "&getselector=1&selectormodule="+G['selectorMODULE']; }
	G['xmlHttp'].open("POST","?",true);
	G['xmlHttp'].setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    G['xmlHttp'].setRequestHeader("Content-length", parameters.length);
    G['xmlHttp'].setRequestHeader("Connection", "close");
    G['xmlHttp'].send(parameters);
}
function RemSearch(obj, searchid) { 
	var i=obj.parentNode.parentNode.rowIndex;
	var sb;
	if (G['isSelectorDM']) { sb = document.getElementById('selector_SearchBuilder'); }
	else { sb = document.getElementById('SearchBuilder'); }
	sb.deleteRow(i);

	G['xmlHttp'] = createAjaxObject();
	if (!G['xmlHttp']) { loff(); return false; }
	G['xmlHttp'].onreadystatechange=function() {
		if(G['xmlHttp'].readyState==1) { set_progress(25); }
		if(G['xmlHttp'].readyState==2) { set_progress(50); }
		if(G['xmlHttp'].readyState==3) { set_progress(75); }
		if(G['xmlHttp'].readyState==4) {
			set_progress(100);
			if (G['xmlHttp'].responseText == 'logout') { document.location.href='?'; return; }
			updateDataTable();
		}
	}
	
	var parameters = "ajax=delSearch&searchid="+searchid;
	if (G['isSelectorDM']) { parameters += "&getselector=1&selectormodule="+G['selectorMODULE']; }
	G['xmlHttp'].open("POST","?",true);
	G['xmlHttp'].setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    G['xmlHttp'].setRequestHeader("Content-length", parameters.length);
    G['xmlHttp'].setRequestHeader("Connection", "close");
    G['xmlHttp'].send(parameters);
}
function doSearch(e, key) {
	if (key) { 
		var e = e || window.event;
		if (e.keyCode == 13) { updateDataTable(); return true; }
		return false;
	}
	updateDataTable();
}

// Reporting Functions
function DelSavedReport(id, conf) { 
	if (!confirm(conf)) { return; }
	document.form1.extra2.value = 'delSavedReport';
	document.form1.extra.value = id;
	document.form_selector.extra2.value = 'delSavedReport';
	document.form_selector.extra.value = id;
	updateDataTable();
	document.form1.extra2.value = '';
	document.form1.extra.value = '';
	document.form_selector.extra2.value = '';
	document.form_selector.extra.value = '';
}
function DelAllSavedReports(conf) {
	if (!confirm(conf)) { return; }
	document.form1.extra2.value = 'delAllSavedReports';
	document.form_selector.extra2.value = 'delAllSavedReports';
	updateDataTable();
	document.form1.extra2.value = '';
	document.form_selector.extra2.value = '';
}
function ApplyReport(id) { 
	document.form1.display.value = 3;
	document.form1.extra2.value = 'applyReport';
	document.form1.extra.value = id;
	document.form_selector.extra2.value = 'applyReport';
	document.form_selector.extra.value = id;
	updateDataTable();
	document.form1.extra2.value = '';
	document.form1.extra.value = '';
	document.form_selector.extra2.value = '';
	document.form_selector.extra.value = '';
}
function SaveReportAs(msg, nomsg) {
	var sTable = document.getElementById('chartdata');
	if (!sTable) { 
		alert(nomsg);
		return;
	}
	
	var reportname = doPrompt(msg, '', "SaveReportAs()");
	if ((reportname == false)&&(G['DPnovalue'] == false)) { return; } else { G['DPnovalue'] = false; }
	if (reportname) { 
		document.form1.extra2.value = 'savereport';
		document.form1.extra.value = reportname;
		document.form_selector.extra2.value = 'savereport';
		document.form_selector.extra.value = reportname;
		updateDataTable();
		document.form1.extra2.value = '';
		document.form1.extra.value = '';
		document.form_selector.extra2.value = '';
		document.form_selector.extra.value = '';
	}
}
function setDateUpdate(id,se) { 
	var t; 
	if (se == 's') { t = 'datesearchstart_'; } else { t = 'datesearchend_'; }
	var f = document.getElementById(t+id+'_shown');
	if (f) { 
		f.style.backgroundColor = '#FFFFCC';
	}
	document.getElementById('searchlink_'+id).style.display = '';
}
function updateDataTable(updatemenus) {
	lon();
	G['dataTableIsDoneLoading'] = false;
	G['SELECTORID'] = false;
	
	// Added for Selector functionality
	if (G['isSelectorDM']) { 
		selectorSHOW(G['selectorSHFLD'],	G['selectorVALFLD'],	G['selectorMODULE'],	G['selectorSH'],	G['selectorVAL']);
		G['dataTableIsDoneLoading'] = true;
		return;
	}
	
	var fields = new Array();
	var inputFields = document.form1.getElementsByTagName('input');
	for (var i=0;i<inputFields.length;i++) { fields.push(inputFields[i]); }
	var selectFields = document.form1.getElementsByTagName('select');
	for (var i=0;i<selectFields.length;i++) { fields.push(selectFields[i]); }
	var textFields = document.form1.getElementsByTagName('textarea');
	for (var i=0;i<textFields.length;i++) { fields.push(textFields[i]); }
	var qrystring = '';
	for (var i=0;i<fields.length;i++) {
		if (fields[i].name == 'totals') { continue; }
		qrystring += "&"+fields[i].name+"="+fields[i].value;
	}
	var selected = datamanagerGetSelected();
	for (var i=0;i<selected.length;i++) { 
		qrystring += "&item_"+selected[i]+"=1";
	}
	
	G['xmlHttp'] = createAjaxObject();
	if (!G['xmlHttp']) { loff(); G['dataTableIsDoneLoading'] = true; return false; }
	G['xmlHttp'].onreadystatechange=function() {
		if(G['xmlHttp'].readyState==1) { set_progress(25); }
		if(G['xmlHttp'].readyState==2) { set_progress(50); }
		if(G['xmlHttp'].readyState==3) { set_progress(75); }
		if(G['xmlHttp'].readyState==4) {
			set_progress(100);
			if (G['xmlHttp'].responseText == 'logout') { document.location.href='?'; G['dataTableIsDoneLoading'] = true; return; }
			var mySplit = G['xmlHttp'].responseText.split("<<>>");
			if (mySplit[0]) { document.getElementById('CP_content').innerHTML = mySplit[0]; }
			if (mySplit[1]) { document.getElementById('MENUSYSTEM').innerHTML = mySplit[1]; }
			if (mySplit[2]) { document.getElementById('TOPMENU').innerHTML = mySplit[2]; }
			if (mySplit[3]) { 
				document.getElementById('pagestop').innerHTML = mySplit[3]; 
				var records = mySplit[3].replace(/^.*Currently displaying (\d+) records.*$/, "$1");
				records -= 0;
				if (records > 10) {  
					document.getElementById('pagesbot').innerHTML = mySplit[3]; 
				} else {
					document.getElementById('pagesbot').innerHTML = '&nbsp;';
				}
			}
			if (mySplit[4]) { document.getElementById('linesperpage').innerHTML = mySplit[4]; }
			if (mySplit[5]) { document.getElementById('displays').innerHTML = mySplit[5]; }
			if (mySplit[6]) { document.getElementById('MODULES').innerHTML = mySplit[6]; }
			if (mySplit[7]) { document.getElementById('SCREENTITLE').innerHTML = mySplit[7]; }
			if (mySplit[8]) { document.getElementById('dataContainer').innerHTML = mySplit[8]; G['datamanagerSelected'] = new Object(); }		
			var did = document.form1.bcol.value;
			if (did) { 
				var Column = document.getElementById(did);
				if (Column) { 
					var nrw = Column.offsetWidth;
					var line = Column.getAttribute('line');
					setColWidth(line, nrw);
					updateColWidth(did, nrw);
				}
				document.form1.bcol.value = '';
			}
			G['isTarget'] = false;
			G['dataTableIsDoneLoading'] = true;
			set_progress(100);
			loff();
			try{ startFloatTitle(); } catch(err) { }
			
			// Now the wizard manager and properties managers load in the wmdiv div and the datamanager stays loaded. (New in 4.5)
			if ((mySplit[10])||(mySplit[11])) { 
				document.getElementById('wmdivContent').innerHTML = mySplit[11];
				document.getElementById('wmdivHeaderCell').innerHTML = mySplit[10];
				var wmdiv = document.getElementById('wmdiv');
				if (wmdiv.style.display == 'none') { 
					var width = 100;
					var height = 100;
					var sc = RP_getScroll();
					width += sc[0];
					height += sc[1];
					var left = width + 'px';
					var top = height + 'px';
					wmdiv.style.left = left;
					wmdiv.style.top = top;
				}
				wmdiv.style.display = '';
			}
			if (mySplit[9]) { eval(mySplit[9]); }
			loff();
			
		}
	}
	
	var parameters = "ajax=updatetable&updatemenus="+updatemenus+qrystring;
	G['xmlHttp'].open("POST","?",true);
	G['xmlHttp'].setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    G['xmlHttp'].setRequestHeader("Content-length", parameters.length);
    G['xmlHttp'].setRequestHeader("Connection", "close");
    G['xmlHttp'].send(parameters);
}

function DMGetAdditionalChunks(startrec, selector) {
	
	// Added for Selector functionality
	if (G['isSelectorDM']) { 
		selectorGetAdditionalChunks(startrec, selector, G['selectorSHFLD'], G['selectorVALFLD'], G['selectorMODULE'], G['selectorSH'], G['selectorVAL']);
		return;
	}
	G['dataTableIsDoneLoading'] = false;
	lon();
	G['xmlHttp'] = createAjaxObject();
	if (!G['xmlHttp']) { G['dataTableIsDoneLoading'] = true; loff(); return false; }
	G['xmlHttp'].onreadystatechange=function() {
		if(G['xmlHttp'].readyState==1) { set_progress(25); }
		if(G['xmlHttp'].readyState==2) { set_progress(50); }
		if(G['xmlHttp'].readyState==3) { set_progress(75); }
		if(G['xmlHttp'].readyState==4) {
			set_progress(100);
			if (G['xmlHttp'].responseText == 'logout') { G['dataTableIsDoneLoading'] = true; document.location.href='?'; return; }
			if (G['xmlHttp'].responseText) { 
				var dtable = document.getElementById('data_table_body');
		
				// Totals.
				var trow = document.getElementById('totalrow');
				if (trow) { 
					var tp = document.getElementById('totalrowpad');
					dtable.deleteRow(trow.rowIndex);
					dtable.deleteRow(tp.rowIndex);
				}
				var spantotals = document.getElementById('SPANTOTALS');
				if (spantotals) { spantotals.id = ''; spantotals.innerHTML = ''; }
				
				var mySplit = G['xmlHttp'].responseText.split("<<>>");
				if (dtable.nodeName.toLowerCase() == 'td') { 
					dtable.innerHTML += mySplit[0];
				} else { 
					var dummy = "<table id=\"dmsdummytable\">" + mySplit[0] + "</table>";
					var ddiv = document.getElementById('dmsdummydiv');
					ddiv.innerHTML = dummy;
					var dummytable = document.getElementById('dmsdummytable');
					for (var i=0; i<dummytable.rows.length; i++) { 
						var rowobj = dummytable.rows[i].cloneNode(true);
						dtable.appendChild(rowobj);
					}
					ddiv.innerHTML = '';
				}
				document.getElementById('linesperpage').innerHTML = mySplit[1];
				document.getElementById('pagestop').innerHTML = mySplit[2]; document.getElementById('pagesbot').innerHTML = mySplit[2];
				loff();
				G['dataTableIsDoneLoading'] = true;
			}
		}
	}
	
	// Load the totals
	var spantotals = document.getElementById('SPANTOTALS');
	if (spantotals) { 
		document.form1.totals.value = spantotals.innerHTML;
	}
	
	fields = new Array();
	var inputFields = document.form1.getElementsByTagName('input');
	for (var i=0;i<inputFields.length;i++) { fields.push(inputFields[i]); }
	var selectFields = document.form1.getElementsByTagName('select');
	for (var i=0;i<selectFields.length;i++) { fields.push(selectFields[i]); }
	var textFields = document.form1.getElementsByTagName('textarea');
	for (var i=0;i<textFields.length;i++) { fields.push(textFields[i]); }
	var qrystring = '';
	for (var i=0;i<fields.length;i++) {
		qrystring += "&"+fields[i].name+"="+fields[i].value;
	}
	
	var lines = selector.options[selector.selectedIndex].value;
	selector.selectedIndex = 0;
	var parameters = "ajax=updatetable&updatemenus=&startrec="+startrec+"&recstoget="+lines+qrystring;
	G['xmlHttp'].open("POST","?",true);
	G['xmlHttp'].setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    G['xmlHttp'].setRequestHeader("Content-length", parameters.length);
    G['xmlHttp'].setRequestHeader("Connection", "close");
    G['xmlHttp'].send(parameters);
	
}
function setDisplay(num) { 
	try{ 
		document.form1.display.value = num;
		document.form1.extra2.value = 'setdisplay';
	} catch(err) { } 
	document.form_selector.display.value = num;
	document.form_selector.extra2.value = 'setdisplay';
	updateDataTable();
	try{ 
		document.form1.display.value = '';
		document.form1.extra2.value = '';
	} catch(err) { }
	document.form_selector.display.value = '';
	document.form_selector.extra2.value = '';
}
	

function getDMAction(action) { 
	if (G['gotDMAction']) { return; }
	if (G['dataTableIsDoneLoading']) { 
		groupop('', action);
		G['gotDMAction'] = true;
	} else {
		setTimeout("getDMAction('"+action+"');", 200);
	}
}
function groupop(conf, action, extra, extraval, conftype, ofunction, submitform, ue) { 
	if (ue) { 
		conf = unescape(conf); 
		action = unescape(action); 
		extra = unescape(extra); 
		extraval = unescape(extraval); 
		conftype = unescape(conftype); 
		ofuncion = unescape(ofunction); 
		submitform = unescape(submitform);
	}
	var dP = "groupop('"+escape(conf)+"', '"+escape(action)+"', '"+escape(extra)+"', '"+escape(extraval)+"', '"+escape(conftype)+"', '"+escape(ofunction)+"', '"+escape(submitform)+"', 1);";
	var dP2 = "groupop('', '"+escape(action)+"', '"+escape(extra)+"', '"+escape(extraval)+"', '', '"+escape(ofunction)+"', '"+escape(submitform)+"', 1);";
	if (!document.form1) { 
		nonDMAction(conf, action, extra, extraval, conftype, ofunction);
		return;
	}
	if (conf) { 
		if (conftype) {
			var isconf = doPrompt(conf, '', dP);
			if ((isconf == false)&&(G['DPnovalue'] == false)) { return; } else { G['DPnovalue'] = false; }
			var ct = eval(conftype);
			if (!isconf.match(ct)) { alert("Operation cancelled.\nYour response did not match what was asked for."); return; }
		} else {
			if (!confirm(conf)) { return; }
		}
	}
	if (extra) { 
		var xtra = doPrompt(extra, extraval, dP2);
		if ((xtra == false)&&(G['DPnovalue'] == false)) { return; } else { G['DPnovalue'] = false; }
		if (!xtra) { return; } 
	}
	wmdivClose();
	document.form1.action.value = action;
	if (xtra) { document.form1.extra.value = xtra; }
	if (ofunction) { eval(ofunction+'('+"'"+conf+"', '"+action+"', '"+extra+"', '"+extraval+"', '"+conftype+"');"); return; }
	lon();
	if (submitform) { document.form1.submit(); } else {
		updateDataTable();
		document.form1.action.value = '';
		document.form1.extra.value = '';
	}
}
function nonDMAction(conf, action, extra, extraval, conftype, ofunction, ue) {
	if (ue) { 
		conf = unescape(conf); 
		action = unescape(action); 
		extra = unescape(extra); 
		extraval = unescape(extraval); 
		conftype = unescape(conftype); 
		ofuncion = unescape(ofunction);
	}
	var dP = "nonDMAction('"+escape(conf)+"', '"+escape(action)+"', '"+escape(extra)+"', '"+escape(extraval)+"', '"+escape(conftype)+"', '"+escape(ofunction)+"', 1);";
	var dP2 = "nonDMAction('', '"+escape(action)+"', '"+escape(extra)+"', '"+escape(extraval)+"', '', '"+escape(ofunction)+"', 1);";
	
	if (conf) { 
		if (conftype) {
			var isconf = doPrompt(conf, '', dP);
			if ((isconf == false)&&(G['DPnovalue'] == false)) { return; } else { G['DPnovalue'] = false; }
			var ct = eval(conftype);
			if (!isconf.match(ct)) { alert("Operation cancelled.\nYour response did not match what was asked for."); return; }
		} else {
			if (!confirm(conf)) { return; }
		}
	}
	if (extra) { 
		var xtra = doPrompt(extra, extraval, dP2);
		if ((xtra == false)&&(G['DPnovalue'] == false)) { return; } else { G['DPnovalue'] = false; }
		if (!xtra) { return; } 
	}
	wmdivClose();
	if (ofunction) { eval(ofunction+'('+"'"+conf+"', '"+action+"', '"+extra+"', '"+extraval+"', '"+conftype+"');"); return; }
	lon();
	
	G['xmlHttp'] = createAjaxObject();
	if (!G['xmlHttp']) { loff(); return false; }
	G['dataTableIsDoneLoading'] = false;
	G['xmlHttp'].onreadystatechange=function() {
		if(G['xmlHttp'].readyState==1) { set_progress(25); }
		if(G['xmlHttp'].readyState==2) { set_progress(50); }
		if(G['xmlHttp'].readyState==3) { set_progress(75); }
		if(G['xmlHttp'].readyState==4) {
			set_progress(100);
			if (G['xmlHttp'].responseText == 'logout') { G['dataTableIsDoneLoading'] = true; document.location.href='?'; return; }
			var mySplit = G['xmlHttp'].responseText.split("<<>>");
			try{ if (mySplit[0]) { document.getElementById('CP_content').innerHTML = mySplit[0]; } } catch(err) { }
			try{ if (mySplit[1]) { document.getElementById('MENUSYSTEM').innerHTML = mySplit[1]; } } catch(err) { }
			try{ if (mySplit[2]) { document.getElementById('TOPMENU').innerHTML = mySplit[2]; } } catch(err) { }
			try{ if (mySplit[3]) { document.getElementById('pagestop').innerHTML = mySplit[3]; document.getElementById('pagesbot').innerHTML = mySplit[3]; } } catch(err) { }
			try{ if (mySplit[4]) { document.getElementById('linesperpage').innerHTML = mySplit[4]; } } catch(err) { }
			try{ if (mySplit[5]) { document.getElementById('displays').innerHTML = mySplit[5]; } } catch(err) { }
			try{ if (mySplit[6]) { document.getElementById('MODULES').innerHTML = mySplit[6]; } } catch(err) { }
			try{ if (mySplit[7]) { document.getElementById('SCREENTITLE').innerHTML = mySplit[7]; } } catch(err) { }
			try{ if (mySplit[8]) { document.getElementById('dataContainer').innerHTML = mySplit[8]; G['datamanagerSelected'] = new Object(); } } catch(err) { }
			// Now the wizard manager and properties managers load in the wmdiv div and the datamanager stays loaded. (New in 4.5)
			if ((mySplit[10])||(mySplit[11])) { 
				document.getElementById('wmdivContent').innerHTML = mySplit[11];
				document.getElementById('wmdivHeaderCell').innerHTML = mySplit[10];
				var wmdiv = document.getElementById('wmdiv');
				if (wmdiv.style.display == 'none') { 
					var width = 100;
					var height = 100;
					var sc = RP_getScroll();
					width += sc[0];
					height += sc[1];
					var left = width + 'px';
					var top = height + 'px';
					wmdiv.style.left = left;
					wmdiv.style.top = top;
				}
				wmdiv.style.display = '';
			}
			loff();
			if (mySplit[9]) { eval(mySplit[9]); }	
			G['dataTableIsDoneLoading'] = true;
		}
	}
	var parameters = "ajax=updatetable&action="+action+"&extra="+xtra;
	G['xmlHttp'].open("POST","?",true);
	G['xmlHttp'].setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    G['xmlHttp'].setRequestHeader("Content-length", parameters.length);
    G['xmlHttp'].setRequestHeader("Connection", "close");
    G['xmlHttp'].send(parameters);	
	
}
function selectview(vid) {
	try{ 
		document.form1.extra2.value = 'selview';
		document.form1.extra.value = vid;
	} catch(err) { }
	document.form_selector.extra2.value = 'selview';
	document.form_selector.extra.value = vid;
	updateDataTable();
	try{ 
		document.form1.extra2.value = '';
		document.form1.extra.value = '';
	} catch(err) { }
	document.form_selector.extra2.value = '';
	document.form_selector.extra.value = '';
}
function dosort(st, rv) { 
	if (G['isTarget']) { return; }
	if (document.filterover != 1) { 
		try { 
			document.form1.sort.value=st;
			document.form1.rev.value=rv;
		} catch(err) { }
		document.form_selector.sort.value=st;
		document.form_selector.rev.value=rv;
		updateDataTable();
	}
}
function reindex(msg) { 
	if (confirm(msg)) { 
		lon();
		
		var xmlHttpT = createAjaxObject();
		if (!xmlHttpT) { loff(); return false; }
		xmlHttpT.onreadystatechange=function() {
			if(xmlHttpT.readyState==4) {
				if (xmlHttpT.responseText == 'logout') { document.location.href='?'; return; }
				reindexprogress();
			}
		}
	
		var parameters = "ajax=reindex";
		if (G['isSelectorDM']) { parameters += "&getselector=1&selectormodule="+G['selectorMODULE']; }
		xmlHttpT.open("POST","?",true);
		xmlHttpT.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    	xmlHttpT.setRequestHeader("Content-length", parameters.length);
    	xmlHttpT.setRequestHeader("Connection", "close");
    	xmlHttpT.send(parameters);
	}
}
function reindexprogress() {
	// Get the progress
	G['xmlHttp'] = createAjaxObject();
	if (!G['xmlHttp']) { loff(); return false; }
	G['xmlHttp'].onreadystatechange=function() {
		if(G['xmlHttp'].readyState==4) {
			if (G['xmlHttp'].responseText == 'logout') { document.location.href='?'; return; }
			var mySplit = G['xmlHttp'].responseText.split("<<>>");
			var myHeader = mySplit[0];
			var myDetails = mySplit[1];
			var myFinished = mySplit[2];
			if (myFinished) {

			} else {
				setTimeout('reindexprogress()', 1000);
			}
			dmsdetailsShow(myHeader, myDetails);
		}
	}
	
	var parameters = "ajax=indexprogress";
	if (G['isSelectorDM']) { parameters += "&getselector=1&selectormodule="+G['selectorMODULE']; }
	G['xmlHttp'].open("POST","?",true);
	G['xmlHttp'].setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    G['xmlHttp'].setRequestHeader("Content-length", parameters.length);
    G['xmlHttp'].setRequestHeader("Connection", "close");
    G['xmlHttp'].send(parameters);

}
function CancelReindex() {
	G['WMqryString'] += '&cancelreindex=1';
	lon();
	set_progress(0, 'Please wait. Cancelling reindex operation.');
}
function searchTips() {
	G['xmlHttp'] = createAjaxObject();
	if (!G['xmlHttp']) { loff(); return false; }
	G['xmlHttp'].onreadystatechange=function() {
		if(G['xmlHttp'].readyState==4) {
			if (G['xmlHttp'].responseText == 'logout') { document.location.href='?'; return; }
			var mySplit = G['xmlHttp'].responseText.split("<<>>");
			var myDetails = mySplit[1];
			var myHeader = mySplit[0];
			dmsdetailsShow(myHeader, myDetails);
		}
	}
	
	var parameters = "ajax=searchTips";
	G['xmlHttp'].open("POST","?",true);
	G['xmlHttp'].setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    G['xmlHttp'].setRequestHeader("Content-length", parameters.length);
    G['xmlHttp'].setRequestHeader("Connection", "close");
    G['xmlHttp'].send(parameters);
}
function datamanagerGetSelected() {
	var selected = new Array();
	for (var i in G['datamanagerSelected']) { 
		if (G['datamanagerSelected'][i]) { selected[selected.length] = i; }
	}
	if (selected.length) { return selected; } else { return false; }
}
function labelItem(color) { 
	var action = document.form1.action.value;
	var extra = document.form1.extra.value;
	document.form1.action.value = 'data_label';
	document.form1.extra.value = color;
	updateDataTable();
	document.form1.action.value = action;
	document.form1.extra.value = extra;
	vsMenuHideAll();
}
function showDetails() {
	lon();
	if (!G['isSelectorDM']) { 
		var selected = datamanagerGetSelected();
		if (selected) { 
			if (selected.length > 1) { return false; }
		} else { return false; }
		var id = selected[0];
	} else {
		if (!G['SELECTORID']) { return false; }
		var id = G['SELECTORID'];
	}
	
	G['xmlHttp'] = createAjaxObject();
	if (!G['xmlHttp']) { loff(); return false; }
	G['xmlHttp'].onreadystatechange=function() {
		if(G['xmlHttp'].readyState==1) { set_progress(25); }
		if(G['xmlHttp'].readyState==2) { set_progress(50); }
		if(G['xmlHttp'].readyState==3) { set_progress(75); }
		if(G['xmlHttp'].readyState==4) {
			set_progress(100);
			if (G['xmlHttp'].responseText == 'logout') { document.location.href='?'; return; }
			var mySplit = G['xmlHttp'].responseText.split("<<>>");
			var myDetails = mySplit[1];
			var myHeader = mySplit[0];
			dmsdetailsShow(myHeader, myDetails);
		}
	}
	
	var parameters = "ajax=getDetails&id="+id;
	if (G['isSelectorDM']) { parameters += "&getselector=1&selectormodule="+G['selectorMODULE']; }
	G['xmlHttp'].open("POST","?",true);
	G['xmlHttp'].setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    G['xmlHttp'].setRequestHeader("Content-length", parameters.length);
    G['xmlHttp'].setRequestHeader("Connection", "close");
    G['xmlHttp'].send(parameters);
}
function calShowDate(day) {
	if (!day) { return false; }
	
	G['xmlHttp'] = createAjaxObject();
	if (!G['xmlHttp']) { loff(); return false; }
	G['xmlHttp'].onreadystatechange=function() {
		if(G['xmlHttp'].readyState==1) { set_progress(25); }
		if(G['xmlHttp'].readyState==2) { set_progress(50); }
		if(G['xmlHttp'].readyState==3) { set_progress(75); }
		if(G['xmlHttp'].readyState==4) {
			set_progress(100);
			if (G['xmlHttp'].responseText == 'logout') { document.location.href='?'; return; }
			var mySplit = G['xmlHttp'].responseText.split("<<>>");
			var myDetails = mySplit[1];
			var myHeader = mySplit[0];
			dmsdetailsShow(myHeader, myDetails);
		}
	}
	
	var parameters = "myData=1&ajax=getCalDate&day="+day;
	G['xmlHttp'].open("POST","?",true);
	G['xmlHttp'].setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    G['xmlHttp'].setRequestHeader("Content-length", parameters.length);
    G['xmlHttp'].setRequestHeader("Connection", "close");
    G['xmlHttp'].send(parameters);
}
function expandColumn(col) { 
	document.form1.bcol.value = col.id;
	updateColumn('E');
}
function delview() {
	document.form1.action.value = 'delview';
	updateDataTable();
	document.form1.action.value = '';
}
function saveview(msg) {
	var viewname = doPrompt(msg, '', "saveview();");
	if ((viewname == false)&&(G['DPnovalue'] == false)) { return; } else { G['DPnovalue'] = false; }
	if (viewname) { 
		document.form1.action.value = 'saveview';
		document.form1.extra.value = viewname;
		updateDataTable();
		document.form1.action.value = '';
		document.form1.extra.value = '';
	}
}
function selLabel(color) { 
	var clr;
	if (color) { clr = 'vccolor'+color; } else { clr = 'vccolorundefined'; }
	var selectall = true;
	var form = document.form1;
	var trs = form.getElementsByTagName('tr');
	for (var i=0;i<trs.length;i++) { 
		var ids = trs[i].id.split('_');
		if (ids[0] != 'tr') { continue; }
		if (trs[i].getAttribute('rowclass') == clr) { rowHighlight(trs[i]); }
		else { rowUnhighlight(trs[i]); selectall = false; }
	}
	var cbdiv = document.getElementById('maincbDiv');
	var cbdivf = document.getElementById('maincbDiv_float');
	if (cbdiv) { 
		if (!selectall) { 
			cbdiv.className = 'unchecked';
			cbdivf.className = 'unchecked';
			document.form1.maincb.checked = false;
		} else {
			cbdiv.className = 'checked';
			cbdivf.className = 'checked';
			document.form1.maincb.checked = true;
		}
	}
	vsMenuHideAll();
}
function dofilter(filter, custom) { 
	if (custom) {
		var ftext = doPrompt("Enter Your Filter Text", '', "dofilter('"+filter+"', 1);");
		if ((ftext == false)&&(G['DPnovalue'] == false)) { return; } else { G['DPnovalue'] = false; }
		if (!ftext) { return; }
		try { document.form1.extra.value = filter+'|'+ftext; } catch(err) { }
		document.form_selector.extra.value = filter+'|'+ftext;
	} else {
		try { document.form1.extra.value = filter; } catch(err) { }
		document.form_selector.extra.value = filter;
	}
	try { document.form1.extra2.value = 'dofilter'; } catch(err) { }
	document.form_selector.extra2.value = 'dofilter';
	updateDataTable();
	try { 
		document.form1.extra2.value = '';
		document.form1.extra.value = '';
		document.form1.fcol.value = '';
	} catch(err) { }
	document.form_selector.extra2.value = '';
	document.form_selector.extra.value = '';
	document.form_selector.fcol.value = '';
}
function dofilterinvert(filter, invert) { 
	try { document.form1.extra.value = filter; } catch(err) { }
	document.form_selector.extra.value = filter;
	try { document.form1.extra2.value = 'dofilterinvert'+invert; } catch(err) { }
	document.form_selector.extra2.value = 'dofilterinvert'+invert;
	updateDataTable();
	try { 
		document.form1.extra2.value = '';
		document.form1.extra.value = '';
		document.form1.fcol.value = '';
	} catch(err) { }
	document.form_selector.extra2.value = '';
	document.form_selector.extra.value = '';
	document.form_selector.fcol.value = '';
}
function dofilterandor(filter, andor) { 
	try { document.form1.extra.value = filter; } catch(err) { }
	document.form_selector.extra.value = filter;
	try { document.form1.extra2.value = 'dofilterandor'+andor; } catch(err) { }
	document.form_selector.extra2.value = 'dofilterandor'+andor;
	updateDataTable();
	try { 
		document.form1.extra2.value = '';
		document.form1.extra.value = '';
		document.form1.fcol.value = '';
	} catch(err) { }
	document.form_selector.extra2.value = '';
	document.form_selector.extra.value = '';
	document.form_selector.fcol.value = '';
}
function calviewNext() {
	document.form1.action.value = 'calnext';
	updateDataTable();
	document.form1.action.value = '';
}
function calviewLast() {
	document.form1.action.value = 'callast';
	updateDataTable();
	document.form1.action.value = '';
}
function calviewMonth(month) {
	document.form1.action.value = 'calmonth';
	document.form1.extra.value = month;
	updateDataTable();
	document.form1.action.value = '';
	document.form1.extra.value = '';
}
function calviewYear(year) {
	document.form1.action.value = 'calyear';
	document.form1.extra.value = year;
	updateDataTable();
	document.form1.action.value = '';
	document.form1.extra.value = '';
}
function calfield(field) {
	document.form1.action.value = 'calfield';
	document.form1.extra.value = field;
	updateDataTable();
	document.form1.action.value = '';
	document.form1.extra.value = '';
}
function calListDate(start, end, sstart, send, calfield) { 
	G['xmlHttp'] = createAjaxObject();
	if (!G['xmlHttp']) { loff(); return false; }
	G['xmlHttp'].onreadystatechange=function() {
		if(G['xmlHttp'].readyState==1) { set_progress(25); }
		if(G['xmlHttp'].readyState==2) { set_progress(50); }
		if(G['xmlHttp'].readyState==3) { set_progress(75); }
		if(G['xmlHttp'].readyState==4) {
			set_progress(100);
			if (G['xmlHttp'].responseText == 'logout') { document.location.href='?'; return; }
			var mySplit = G['xmlHttp'].responseText.split("<<>>");
			var sTable = document.getElementById('SearchBuilder');
			var row=sTable.insertRow(0);
			var cell=row.insertCell(0);
			cell.className='searchBox';
			cell.innerHTML = mySplit[0];
			
			// Set the date values
			document.getElementById('datesearchstart_'+mySplit[1]).value = start;
			document.getElementById('datesearchend_'+mySplit[1]).value = end;
			document.getElementById('datesearchstart_'+mySplit[1]+'_shown').value = sstart;
			document.getElementById('datesearchend_'+mySplit[1]+'_shown').value = send;
			document.getElementById('datesearchfield_'+mySplit[1]).value = calfield;
			setDisplay(0);										
		}
	}
	
	var parameters = "ajax=addSearch&type=date";
	G['xmlHttp'].open("POST","?",true);
	G['xmlHttp'].setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    G['xmlHttp'].setRequestHeader("Content-length", parameters.length);
    G['xmlHttp'].setRequestHeader("Connection", "close");
    G['xmlHttp'].send(parameters);

}
function FilterMenu(event, filter) {
	G['coldrag'] = false; G['movecol'] = false;
	
	var fname = filter.getAttribute('filter');
	try { document.form1.fcol.value = fname; } catch(err) { }
	document.form_selector.fcol.value = fname;
	vsMenuShowRightClickMenu('filter_'+fname);
	return false;
}
function addExtraCol() {
	document.form1.action.value = 'addExtraCol';
	document.form1.movecol.value = '';
	document.form1.dropcol.value = '';
	updateDataTable();
	document.form1.bcol.value = '';
	document.form1.bcolaction.value = '';
	document.form1.action.value = '';
}
function manExtraCols() { 
	document.form1.action.value = 'manExtraCols';
	document.form1.movecol.value = '';
	document.form1.dropcol.value = '';
	updateDataTable();
	document.form1.bcol.value = '';
	document.form1.bcolaction.value = '';
	document.form1.action.value = '';
}
function manageColumns() { 
	document.form1.action.value = 'MANAGECOLUMNS';
	document.form1.movecol.value = '';
	document.form1.dropcol.value = '';
	updateDataTable();
	document.form1.bcol.value = '';
	document.form1.bcolaction.value = '';
	document.form1.action.value = '';
}
function editField(field, id) {
	lon();
	G['xmlHttp'] = createAjaxObject();
	if (!G['xmlHttp']) { loff(); return false; }
	G['xmlHttp'].onreadystatechange=function() {
		if(G['xmlHttp'].readyState==1) { set_progress(25); }
		if(G['xmlHttp'].readyState==2) { set_progress(50); }
		if(G['xmlHttp'].readyState==3) { set_progress(75); }
		if(G['xmlHttp'].readyState==4) {
			set_progress(100);
			if (G['xmlHttp'].responseText == 'logout') { document.location.href='?'; return; }
			var mySplit = G['xmlHttp'].responseText.split("<<>>");
			var myHeader = mySplit[0];
			var myDetails = mySplit[1];
			var myJS = mySplit[2];
			document.getElementById('wmdivContent').innerHTML = "<div id=\"dynamicErrorDiv\" style=\"display:none;\"><div class=\"error\"><div id=\"dynamicErrorContentDiv\"></div></div></div>" + myDetails;
			document.getElementById('wmdivHeaderCell').innerHTML = myHeader;
			var ddiv = document.getElementById('wmdiv');
			var left = G['posX'] - 10;
			var top = G['posY'] - 10;
			if (ddiv.style.display != '') { 
				ddiv.style.left = left;
				ddiv.style.top = top;
				ddiv.style.display = '';
			}
			if (myJS) { eval(myJS); }
			loff();
		}
	}
	G['EditField'] = field;
	G['EditID'] = id;
	
	var parameters = "ajax=geteditfield&field="+field+'&item_'+id+'=1';
	G['xmlHttp'].open("POST","?",true);
	G['xmlHttp'].setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    G['xmlHttp'].setRequestHeader("Content-length", parameters.length);
    G['xmlHttp'].setRequestHeader("Connection", "close");
    G['xmlHttp'].send(parameters);
}
function updateEditField() {
	if (G['currentTinyMCEInstances'].length > 0) { tinyMCE.triggerSave(); }
	var newvalue = '';
	var quickfield = document.getElementById('quickedit');
	if (quickfield.getAttribute('fieldtype') == 'select') { 
		newvalue = quickfield.options[quickfield.selectedIndex].value;
	} else if (quickfield.getAttribute('fieldtype') == 'checkbox') { 
		newvalue = quickfield.checked?1:0;
	} else {
		newvalue = quickfield.value;
	}
	lon();
	
	G['xmlHttp'] = createAjaxObject();
	if (!G['xmlHttp']) { loff(); alert('could not update the field.'); return false; }
	G['xmlHttp'].onreadystatechange=function() {
		if(G['xmlHttp'].readyState==1) { set_progress(25); }
		if(G['xmlHttp'].readyState==2) { set_progress(50); }
		if(G['xmlHttp'].readyState==3) { set_progress(75); }
		if(G['xmlHttp'].readyState==4) {
			set_progress(100);
			if (G['xmlHttp'].responseText == 'logout') { document.location.href='?'; return; }
			var done = G['xmlHttp'].responseText;
			if (done == '1') { 
				wmdivClose();
				G['EditField'] = false;
				G['EditID'] = false;
				updateDataTable();
			} else {
				var errordiv = document.getElementById('dynamicErrorDiv');
				var errorcdiv = document.getElementById('dynamicErrorContentDiv');
				errorcdiv.innerHTML = done;
				errordiv.style.display = '';
				loff();
			}
		}
	}
	
	
	var parameters = "ajax=saveeditfield&field="+G['EditField']+'&item_'+G['EditID']+'=1&value='+escape(newvalue).replace('+', '%2B');
	G['xmlHttp'].open("POST","?",true);
	G['xmlHttp'].setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    G['xmlHttp'].setRequestHeader("Content-length", parameters.length);
    G['xmlHttp'].setRequestHeader("Connection", "close");
    G['xmlHttp'].send(parameters);
}

// Chart View (Requires Fusion Charts)
function charttype(type) { 
	document.form1.action.value = 'set_charttype';
	document.form1.extra.value = type;
	updateDataTable();
	document.form1.action.value = '';
	document.form1.extra.value = '';
}
function chartfilter(filter) { 
	document.form1.action.value = 'set_chartfilter';
	document.form1.extra.value = filter;
	updateDataTable();
	document.form1.action.value = '';
	document.form1.extra.value = '';
}
function chartpietype(type) {
	document.form1.action.value = 'set_chartpietype';
	document.form1.extra.value = type;
	updateDataTable();
	document.form1.action.value = '';
	document.form1.extra.value = '';
}
function chartvertical(field) {
	document.form1.action.value = 'set_chartvertical';
	document.form1.extra.value = field;
	updateDataTable();
	document.form1.action.value = '';
	document.form1.extra.value = '';
}
function charthorizontal(field) {
	document.form1.action.value = 'set_charthorizontal';
	document.form1.extra.value = field;
	updateDataTable();
	document.form1.action.value = '';
	document.form1.extra.value = '';
}
function chartdatestart(showdate, image) { 
	document.getElementById('chart_datestart_span').innerHTML=showdate+' '+image;
	document.form1.action.value = 'set_chartdatestart';
	document.form1.extra.value = document.form1.chart_datestart.value;
	updateDataTable();
	document.form1.action.value = '';
	document.form1.extra.value = '';
}
function chartnumcols(value) {
	document.form1.action.value = 'set_chartnumcols';
	document.form1.extra.value = value;
	updateDataTable();
	document.form1.action.value = '';
	document.form1.extra.value = '';
}
function chartdateinterval(interval) { 
	document.form1.action.value = 'set_dateinterval';
	document.form1.extra.value = interval;
	updateDataTable();
	document.form1.action.value = '';
	document.form1.extra.value = '';
}
function chartcfilter(filter) { 
	document.form1.action.value = 'set_chartcfilter';
	document.form1.extra.value = filter;
	updateDataTable();
	document.form1.action.value = '';
	document.form1.extra.value = '';
}
function chartvaltype(type) { 
	document.form1.action.value = 'set_chartvaltype';
	document.form1.extra.value = type;
	updateDataTable();
	document.form1.action.value = '';
	document.form1.extra.value = '';
}
function chartfliptype(type) {
	document.form1.action.value = 'set_chartfliptype';
	document.form1.extra.value = type;
	updateDataTable();
	document.form1.action.value = '';
	document.form1.extra.value = '';
}
function genChart() { 
	document.form1.action.value = 'genChart';
	updateDataTable();
	document.form1.action.value = ''; 
}

// Forms
function addNewForm() {
	document.form1.action.value = 'addNewForm';
	updateDataTable();
	document.form1.action.value = '';
}
function modForm() {
	document.form1.action.value = 'modForm';
	updateDataTable();
	document.form1.action.value = '';
}
function delForms() {
	document.form1.action.value = 'delForms';
	updateDataTable();
	document.form1.action.value = '';
}
function insertField(sel) {
	var img = '<img alt="'+sel.options[sel.selectedIndex].text+'" id="'+sel.options[sel.selectedIndex].value+'" name="VCFormField" src="images/formfield.png" style="border: 0pt none; vertical-align: middle;" title="'+sel.options[sel.selectedIndex].text+'" />';
	tinyMCE.execCommand('mceInsertContent',false,img);
	sel.selectedIndex = 0;
}

// Customize Toolbar
function customizeToolbar() { 
	document.form1.action.value = 'customizetoolbar';
	updateDataTable();
	document.form1.action.value = '';
}

// *****************************************************************************
// ** TableFloaterTitle.js
// **
// ** Unobtrusive JavaScript function which will keep the titles of a table on 
// ** screen as the user scrolls down.  The titles will 'float' keeping in view
// ** as long as any part of the table remains in view.
// **
// ** Author: Stan Slaughter
// ** Date: 07/23/2008
// ** E-mail: Stan_Slaughter@Yahoo.Com
// ** Web: http://www.StanSight.Com/
// *****************************************************************************
function startFloatTitle() {
	if (G['isSelectorDM']) { 
		floatTitle('selector_dataTable',0);
	} else {
		floatTitle('dataTable',1);
	}
}
function floatTitle(tableID,cnt) {
    // Stop any old Loops
    if (typeof(G['floatTitleTimer'][cnt])== 'undefined') G['floatTitleTimer'][cnt] = 0;
    clearTimeout(G['floatTitleTimer'][cnt]);

    // Create title object then start float loop
    var titleID = createTitleObj(tableID);   
    floatTitleLoop(tableID,titleID,cnt);
  
}
function createTitleObj (tableID) {
    var titleWrapperID = tableID + "Title";
    var titleTableID = tableID + "TitleTable";
	
    var tableObj = document.getElementById(tableID);
    var titleTableObj = document.getElementById(titleTableID);
      	
    // Set Title width to be the same as Table
    var titleWrapperObj = document.getElementById(titleWrapperID);
    titleWrapperObj.style.width = tableObj.offsetWidth + 'px';
    
    // Set widths of Title TD's to same as Table TD's
    var tableCells = tableObj.tHead.rows[0].cells;
    var titleTableCells = titleTableObj.tHead.rows[0].cells;
    
    for (var i=0; i != tableCells.length; i++) {
	  if (titleTableCells[i].nodeName.toLowerCase() == 'th') {
		tableCells[i].style.paddingLeft = '3px';
		tableCells[i].style.paddingRight = '3px';
		titleTableCells[i].style.paddingLeft = '3px';
		titleTableCells[i].style.paddingRight = '3px';
      	titleTableCells[i].style.width = (tableCells[i].clientWidth-6)+ 'px';
		titleTableCells[i].id = tableCells[i].id+'_float';
		
		// Main Checkbox
		if (tableCells[i].id == 'checkAllTH') { 
			titleTableCells[i].childNodes[0].id = tableCells[i].childNodes[0].id+'_float';
			titleTableCells[i].childNodes[0].childNodes[0].id = tableCells[i].childNodes[0].childNodes[0].id+'_float';
			titleTableCells[i].childNodes[0].childNodes[0].name = tableCells[i].childNodes[0].childNodes[0].name+'_float';
		}
	  } else {
		tableCells[i].style.padding = '0px;';
		titleTableCells[i].style.padding = '0px';
		titleTableCells[i].style.width = (tableCells[i].clientWidth)+ 'px';
	  }
		  
    }
    
    return titleWrapperID;
}
function floatTitleLoop(tableID,titleID,cnt) {
  	
    // If Table and Title objects exist
    if (document.getElementById(tableID) !=null && document.getElementById(titleID) !=null) {

      // Set value to be number of pixels from screen top that you wish
      // scrolling to start at. 0=top, 10=10 pixels down from top, etc..
      // Useful for those who happen to have top screen banners
      var	startOffsetTop = 0;

      // Get start and stop float positions from table
      var tableObj = document.getElementById(tableID);
      var tablePos = objFindPos(tableObj);
      var startTop = tablePos[1] - startOffsetTop;
      var endTop = startTop + tableObj.clientHeight;		
    
      // Get new positon of body scroll top and keep it in bounds
      var newTop =(document.documentElement.scrollTop>0) ? document.documentElement.scrollTop : document.body.scrollTop;
      if (newTop < startTop) newTop = startTop;		
      if (newTop > endTop) newTop = endTop;
      
      // Move the title to new postion
      var titleObj = document.getElementById(titleID);
      if (newTop > startTop && newTop < endTop) {
		newTop = newTop - tablePos[1];
      
        // Display "Title" if it is not all ready being displayed
        if (titleObj.style.display != 'block') titleObj.style.display='block';
        
        // Apply offset to get newTop position
        newTop = newTop + startOffsetTop;

      	// Move to new top position
      	if (newTop < 0) newTop = 0;
      	titleObj.style.top = newTop + "px";
      } else {
        // Else hide "Title" if it is not all ready hidden
        if (titleObj.style.display != 'none') {
          titleObj.style.display='none';
          titleObj.style.top = "0px";
          titleObj.style.zIndex="1";	
        }
      }
    
	  // Execute this function again in 500 milliseconds (thousandths of a second)
      var cmd = "floatTitleLoop('" + tableID + "','" + titleID + "','" + cnt + "')";
      G['floatTitleTimer'][cnt] = window.setTimeout(cmd, 500); 
	
    }
}

/*----------------------- help --------------------------*/

function RP_getScroll() {
  var scrX = 0
  var scrY = 0;
  if( typeof( window.pageYOffset ) == 'number' ) {
    //Netscape compliant
    scrY = window.pageYOffset;
    scrX = window.pageXOffset;
  } else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
    //DOM compliant
    scrY = document.body.scrollTop;
    scrX = document.body.scrollLeft; 
  } else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
    //IE6 standards compliant mode
    scrY = document.documentElement.scrollTop;
    scrX = document.documentElement.scrollLeft; 
  } 
  return [ scrX, scrY ];
}
function on_mouse_move(e) {
  G['posX'] = getMouseXPos(e)
  G['posY'] = getMouseYPos(e)
  moveHelp(G['posX'],G['posY'])
  columnMouseMove(e);
}
// Get the horizontal position of the mouse
function getMouseXPos(e) {
  if (document.layers||G['ns6']) {
    return parseInt(e.pageX+10)
  } else {
    return (parseInt(event.clientX+10) + parseInt(document.body.scrollLeft))
  }
}
// Get the vartical position of the mouse
function getMouseYPos(e) {
  if (document.layers||G['ns6']) {
    return parseInt(e.pageY)
  } else {
    return (parseInt(event.clientY) + parseInt(document.body.scrollTop))
  }
}
//Move divs to mouse position
function moveHelp(x,y) {
	var processedx = false;
	if (G['dragOBJ']) {
		var processedx = x;
		var winScroll = new Array(); winScroll = RP_getScroll();
		if (G['IE']) { processedx += winScroll[0]; y += winScroll[1]; }
		processedx += 10; y += 10;

		dragX = processedx - G['dragOffsetX'];
		dragY = G['posY'] - G['dragOffsetY'];
		G['dragOBJ'].style.left = dragX;
		G['dragOBJ'].style.top = dragY;
	}
	
	if (G['ShowMoveCol']) { 
		if (!processedx) { 
			var processedx = x;
			var winScroll = new Array(); winScroll = RP_getScroll();
			if (G['IE']) { processedx += winScroll[0]; y += winScroll[1]; }
			processedx += 10; y += 10;
			var mcx = processedx -50;
			var mcy = y - 15;
			var mc = document.getElementById('movecolicon');
			mc.style.left = mcx;
			mc.style.top = mcy;
			mc.style.display = '';
		}
	}
	
	if (document.getElementById('tooltip2').style.display == '') { mouse_move(); }
}
function updateToolTipPos(X, Y) {
	var winScroll = new Array(); winScroll = RP_getScroll();
	var winDim = new Array(); winDim = getInnerWindow();
	if (!X) { 
		var processedx = G['posX'];
		if (G['IE']) { processedx += winScroll[0]; }
		processedx += 10;
		X = processedx;
	}
	if (!Y) { 
		var y = G['posY'];
		if (G['IE']) { y += winScroll[1]; }
		y += 10;
		Y = y;
	}
	// Get the tooltip object
	var tt = document.getElementById('tooltip2');
	
	// Set some variables
	var ttStartX; var ttStartY;
	
	// Set the starting position of the tooltip
	if (!X) { ttStartX = parseInt(tt.style.left); } else { ttStartX = X; }
	if (!Y) { ttStartY = parseInt(tt.style.top); } else { ttStartY = Y; }
	
	// Set the end position
	var ttEndX = ttStartX + tt.offsetWidth;
	var ttEndY = ttStartY + tt.offsetHeight;
	
	// Set the End of Screen based on screen width and scroll position
	var ttEndScreenX = winDim[0] + winScroll[0];
	var ttEndScreenY = winDim[1] + winScroll[1];
	
	// Set the X position
	if (ttEndX > ttEndScreenX) { 
		var newX = ttStartX - (ttEndX - ttEndScreenX);
		tt.style.left = newX + 'px';
	} else {
		tt.style.left = ttStartX + 'px';
	}
	
	// Set the Y position
	if (ttEndY > ttEndScreenY) { 
		var newY = ttStartY - (ttEndY - ttEndScreenY);
		tt.style.top = newY + 'px';
	} else {
		tt.style.top = ttStartY + 'px';
	}
}

function getInnerWindow() { 
	var myWidth = 0
	var myHeight = 0;
	if( typeof( window.innerWidth ) == 'number' ) {
    	//Non-IE
    	myWidth = window.innerWidth - 20;
    	myHeight = window.innerHeight - 20;
	} else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
    	//IE 6+ in 'standards compliant mode'
    	myWidth = document.documentElement.clientWidth;
    	myHeight = document.documentElement.clientHeight;
	} else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
    	//IE 4 compatible
    	myWidth = document.body.clientWidth;
    	myHeight = document.body.clientHeight;
	}
	return [ myWidth, myHeight ];
}
function mouse_move(context, width, wait) {
	if (!wait) { wait = 500; }
	if (G['ajaxHelpUpdateTimeout']) { clearTimeout(G['ajaxHelpUpdateTimeout']); }
	if (context) {
		if (context.match(/^ajax\(/)) { setTimeout(context, wait); } else {
			var tt = document.getElementById('tooltip2');
			tt.style.display = 'none';
			if (width) { var wdth = ' width="'+width+'"'; } else { var wdth = ''; }
			var IH = '<table style="border:1px solid black" class="evenrowbg"'+wdth+'><tr><td style="white-space:nowrap;">'+context+'</td></tr></table>';
			document.getElementById('tooltip2').innerHTML = IH;
			G['tooltipTimeout'] = setTimeout("show_tooltip();", wait); 
		}
	} else {
		if (G['tooltipTimeout']) { clearTimeout(G['tooltipTimeout']); }
		document.getElementById('tooltip2').innerHTML = '';
		document.getElementById('tooltip2').style.display = 'none';
	}
}
function show_tooltip() {
	var tt = document.getElementById('tooltip2');
	tt.style.visibility = 'hidden';
	tt.style.display = '';
	updateToolTipPos();
	tt.style.visibility = '';
}
function ajax(context, updatecontext, width) {
	if (context) { 
		if (width) { var wdth = ' width="'+width+'"'; } else { var wdth = ''; }
		var IH = '<table style="border:1px solid black" class="evenrowbg"'+wdth+'><tr><td style="white-space:nowrap;"><img src=skins/vsource/icons/working.gif align=absmiddle> '+context+'</td></tr></table>';
		var tt = document.getElementById('tooltip2');
		tt.innerHTML = IH;
		tt.style.visibility = 'hidden';
		tt.style.display = '';
		updateToolTipPos();
		tt.style.visibility = '';
	} else { 
		document.getElementById('tooltip2').innerHTML = '';
		document.getElementById('tooltip2').style.display = 'none';
		return;
	}
	
	if (!width) { width = ''; }
	G['ajaxHelpUpdateTimeout'] = setTimeout("getAjaxUpdate('"+updatecontext+"', '"+width+"');", 2000);
}

function getAjaxUpdate(updatecontext, width) {

	G['xmlHttp'] = createAjaxObject();
	if (!G['xmlHttp']) { 
		if (width) { var wdth = ' width="'+width+'"'; } else { var wdth = ''; }
		var IH = '<table style="border:1px solid black" class="evenrowbg"'+wdth+'><tr><td style="white-space:nowrap;"><img src=skins/vsource/icons/red_att.gif align=absmiddle> '+context+'</td></tr></table>';
		var tt = document.getElementById('tooltip2')
		tt.innerHTML = IH;
		tt.style.visibility = 'hidden';
		tt.style.display = '';
		updateToolTipPos();
		tt.style.visibility = '';
		return false; 
	}
	G['xmlHttp'].onreadystatechange=function() {
		if(G['xmlHttp'].readyState==1) { set_progress(25); }
		if(G['xmlHttp'].readyState==2) { set_progress(50); }
		if(G['xmlHttp'].readyState==3) { set_progress(75); }
		if(G['xmlHttp'].readyState==4) {
			set_progress(100);
			if (G['xmlHttp'].responseText == 'logout') { document.location.href='?'; return; }
			var mySplit = G['xmlHttp'].responseText.split("<<>>");
			if (width) { var wdth = ' width="'+width+'"'; } else { var wdth = ''; }
			var IH = '<table style="border:1px solid black" class="evenrowbg"'+wdth+'><tr><td style="white-space:nowrap;">'+mySplit[0]+'</td></tr></table>';
			var tt = document.getElementById('tooltip2')
			tt.innerHTML = IH;
			tt.style.visibility = 'hidden';
			tt.style.display = '';
			updateToolTipPos();
			tt.style.visibility = '';
			return true; 
		}
	}
	var parameters = "ajax=updatehelp&"+updatecontext;
	G['xmlHttp'].open("POST","?",true);
	G['xmlHttp'].setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    G['xmlHttp'].setRequestHeader("Content-length", parameters.length);
    G['xmlHttp'].setRequestHeader("Connection", "close");
    G['xmlHttp'].send(parameters);
}

// Show Hide Password Span
function SwitchPass(idnum) {
  var obj1=document.getElementById(idnum);
  var obj2=document.getElementById('r-'+idnum);
  obj1.style.display=(obj1.style.display!="inline")? "inline" : "none";
  obj2.style.display=(obj2.style.display!="inline")? "inline" : "none";
}
function getDocHeight(doc) {
  var docHt = 0, sh, oh;
  if (doc.height) docHt = doc.height;
  else if (doc.body) { 
    if (doc.body.scrollHeight) docHt = sh = doc.body.scrollHeight;
    if (doc.body.offsetHeight) docHt = oh = doc.body.offsetHeight;
    if (sh && oh) docHt = Math.max(sh, oh);
  }
  return docHt;
}
function objStartDrag(objID) { 
	obj = document.getElementById(objID);
	if (!obj) { return false; }
	G['dragOffsetX'] = G['posX'] - obj.offsetLeft;
	G['dragOffsetY'] = G['posY'] - obj.offsetTop;
	G['dragOBJ'] = obj;
	noSelect();
	return true;
}
function objStopDrag() { 
	G['dragOBJ'] = '';
	reSelect();
}

/**
 * JavaScript Color Picker
 *
 * @author    Honza Odvarko, http://odvarko.cz
 * @copyright Honza Odvarko
 * @license   http://www.gnu.org/copyleft/gpl.html  GNU General Public License
 * @version   1.0.7
 * @link      http://jscolor.com
 * Modified by VSource Web Solutions to work with VConsole Interface.
 */
function jscolor_init() {
	// bind <input class="..."> elements
	var bindClass = 'jscolor';
	// set field's background according selected color?
	var reflectOnBackground = false;
	// prepend field's color code with #
	var leadingHash = false
	// allow an empty value in the field instead of setting it to #000000
	var allowEmpty = true;
	// spectrum's width and height
	var HVSize = [ 180, 101 ]; // normal
	//var HVSize = [ 120, 69 ] // small
	//var HVSize = [ 102, 61 ] // tiny

	var padding = 10;
	var borderWidth = 1;
	var HVCrossSize = [ 15, 15 ];
	var SSize = 22;
	var SArrowSize = [ 7, 11 ];
	var SSampleSize = 4;
	var ClientSliderSize = 18;

	var instanceId = 0;
	var instance;
	var elements = {}

	var dir = 'images/';

	function createDialog() {
		
		// dialog
		elements.dialog = document.createElement('div')
		setStyle(elements.dialog, {
			'zIndex' : '1003',
			'clear' : 'both',
			'position' : 'absolute',
			'width' : HVSize[0]+SSize+3*padding+'px',
			'height' : HVSize[1]+15+2*padding+'px',
			'border' : borderWidth+'px solid ThreeDHighlight',
			'borderRightColor' : 'ThreeDShadow', 'borderBottomColor' : 'ThreeDShadow',
			'background' : "url('"+dir+"hv"+HVSize[0]+'x'+HVSize[1]+".png') "+padding+"px "+padding+"px no-repeat ThreeDFace"
		})
		elements.dialog.onmousedown = function() {
			instance.preserve = true
		}
		elements.dialog.onmousemove = function(e) {
			if(instance.holdHV) setHV(e)
			if(instance.holdS) setS(e)
		}
		elements.dialog.onmouseup = function() {
			if(instance.holdHV || instance.holdS) {
				instance.holdHV = instance.holdS = false
				if(typeof instance.input.onchange == 'function') instance.input.onchange()
			}
			// instance.input.focus()
			updateDialogPosition();
		}
		elements.dialog.onmouseout = function() {
			jscolorStartClose();
		}
		elements.dialog.onmouseover = function() {
			jscolorStartOver();
		}
		elements.dialog.id = 'jscolorMainDiv';
		
		// Set button
		elements.ftr = document.createElement('div');
		setStyle(elements.ftr, {
			'position' : 'absolute',
			'left' : padding+'px',
			'top' : HVSize[1]+5+padding+'px',
			'width' : HVSize[0]+SSize+3*padding+'px',
			'height' : '15px'
		})
		elements.ftr.innerHTML = "Color Code: <input type=\"text\" onfocus=\"G['SCManualInputHasFocus'] = true;\" onblur=\"G['SCManualInputHasFocus'] = false;\" size=\"8\" maxlength=\"6\" name=\"scManualColorField\" id=\"scManualColorField\" style=\"text-align:center;\">&nbsp;&nbsp;&nbsp;<span class=\"calendarSetButton\" onMouseOver=\"this.className = 'calendarSetButtonOver';\" onMouseOut=\"this.className = 'calendarSetButton';\" onClick=\"jscolorClearDiv(document.getElementById('scManualColorField').value);\">"+G['SET']+"</span>&nbsp;&nbsp;&nbsp;<span class=\"calendarSetButton\" onMouseOver=\"this.className = 'calendarSetButtonOver';\" onMouseOut=\"this.className = 'calendarSetButton';\" onClick=\"jscolorClearDiv();\">"+G['CLOSE']+"</span>";
		elements.dialog.appendChild(elements.ftr);

		// hue/value spectrum
		elements.hv = document.createElement('div')
		setStyle(elements.hv, {
			'position' : 'absolute',
			'left' : '0',
			'top' : '0',
			'width' : HVSize[0]+2*padding+'px',
			'height' : HVSize[1]+2*padding+'px',
			'background' : "url('"+dir+"cross.gif') no-repeat",
			'cursor' : 'crosshair'
		})
		var setHV = function(e) {
			var p = getMousePos(e)
			var relX = p[0]<instance.posHV[0] ? 0 : (p[0]-instance.posHV[0]>HVSize[0]-1 ? HVSize[0]-1 : p[0]-instance.posHV[0])
			var relY = p[1]<instance.posHV[1] ? 0 : (p[1]-instance.posHV[1]>HVSize[1]-1 ? HVSize[1]-1 : p[1]-instance.posHV[1])
			instance.color.setHSV(6/HVSize[0]*relX, null, 1-1/(HVSize[1]-1)*relY)
			updateDialogPointers()
			updateDialogSaturation()
			updateInput(instance.input, instance.color, null)
		}
		elements.hv.onmousedown = function(e) { instance.holdHV = true; setHV(e) }
		elements.dialog.appendChild(elements.hv)

		// saturation gradient
		elements.grad = document.createElement('div')
		setStyle(elements.grad, {
			'position' : 'absolute',
			'left' : HVSize[0]+SArrowSize[0]+2*padding+'px',
			'top' : padding+'px',
			'width' : SSize-SArrowSize[0]+'px',
			'fontSize' : '1px',
			'lineHeight' : '1px'
		})
		// saturation gradient's samples
		for(var i=0; i+SSampleSize<=HVSize[1]; i+=SSampleSize) {
			var g = document.createElement('div')
			g.style.height = SSampleSize+'px'
			elements.grad.appendChild(g)
		}
		elements.dialog.appendChild(elements.grad)

		// saturation slider
		elements.s = document.createElement('div')
		setStyle(elements.s, {
			'position' : 'absolute',
			'left' : HVSize[0]+2*padding+'px',
			'top' : '0',
			'width' : SSize+padding+'px',
			'height' : HVSize[1]+2*padding+'px',
			'background' : "url('"+dir+"s.gif') no-repeat"
		})
		// IE 5 fix
		try {
			elements.s.style.cursor = 'pointer'
		} catch(eOldIE) {
			elements.s.style.cursor = 'hand'
		}
		var setS = function(e) {
			var p = getMousePos(e)
			var relY = p[1]<instance.posS[1] ? 0 : (p[1]-instance.posS[1]>HVSize[1]-1 ? HVSize[1]-1 : p[1]-instance.posS[1])
			instance.color.setHSV(null, 1-1/(HVSize[1]-1)*relY, null)
			updateDialogPointers()
			updateInput(instance.input, instance.color, null)
		}
		elements.s.onmousedown = function(e) { instance.holdS = true; setS(e) }
		elements.dialog.appendChild(elements.s)
	}
	
	var shcf = G['shColorField'];
	if (G['shColorField'].style.display == 'none') { 
		shcf = G['colorBlock'];
	}
	
	function updateDialogPosition() { 
		if (!G['shColorField'].offsetWidth) { jscolorClearDiv(); return; }
		var is = [ shcf.offsetWidth, shcf.offsetHeight ]
		var ip = getElementPos(shcf)
		var sp = getScrollPos()
		var ws = getWindowSize()
		var ds = [
			HVSize[0]+SSize+3*padding+2*borderWidth,
			HVSize[1]+2*padding+2*borderWidth
		]
		var dp = [
			-sp[0]+ip[0]+ds[0] > ws[0]-ClientSliderSize ? (-sp[0]+ip[0]+is[0]/2 > ws[0]/2 ? ip[0]+is[0]-ds[0] : ip[0]) : ip[0],
			-sp[1]+ip[1]+is[1]+ds[1] > ws[1]-ClientSliderSize ? (-sp[1]+ip[1]+is[1]/2 > ws[1]/2 ? ip[1]-ds[1] : ip[1]+is[1]) : ip[1]+is[1]
		]
		elements.dialog.style.left = dp[0]+'px'
		elements.dialog.style.top = dp[1]+'px'
	}

	function showDialog(input) {
		var is = [ shcf.offsetWidth, shcf.offsetHeight ]
		var ip = getElementPos(shcf)
		var sp = getScrollPos()
		var ws = getWindowSize()
		var ds = [
			HVSize[0]+SSize+3*padding+2*borderWidth,
			HVSize[1]+2*padding+2*borderWidth
		]
		var dp = [
			-sp[0]+ip[0]+ds[0] > ws[0]-ClientSliderSize ? (-sp[0]+ip[0]+is[0]/2 > ws[0]/2 ? ip[0]+is[0]-ds[0] : ip[0]) : ip[0],
			-sp[1]+ip[1]+is[1]+ds[1] > ws[1]-ClientSliderSize ? (-sp[1]+ip[1]+is[1]/2 > ws[1]/2 ? ip[1]-ds[1] : ip[1]+is[1]) : ip[1]+is[1]
		]

		instanceId++
		instance = {
			input : input,
			color : new color(input.value),
			preserve : false,
			holdHV : false,
			holdS : false,
			posHV : [ dp[0]+borderWidth+padding, dp[1]+borderWidth+padding ],
			posS : [ dp[0]+borderWidth+HVSize[0]+2*padding, dp[1]+borderWidth+padding ]
		}

		updateDialogPointers()
		updateDialogSaturation()

		
		elements.dialog.style.left = dp[0]+'px'
		elements.dialog.style.top = dp[1]+'px'
		document.getElementsByTagName('body')[0].appendChild(elements.dialog)
	}


	function hideDialog() {
		var b = document.getElementsByTagName('body')[0]
		b.removeChild(elements.dialog)

		instance = null
	}


	function updateDialogPointers() {
		// update hue/value cross
		var x = Math.round(instance.color.hue/6*HVSize[0])
		var y = Math.round((1-instance.color.value)*(HVSize[1]-1))
		elements.hv.style.backgroundPosition =
			(padding-Math.floor(HVCrossSize[0]/2)+x)+'px '+
			(padding-Math.floor(HVCrossSize[1]/2)+y)+'px'

		// update saturation arrow
		var y = Math.round((1-instance.color.saturation)*HVSize[1])
		elements.s.style.backgroundPosition = '0 '+(padding-Math.floor(SArrowSize[1]/2)+y)+'px'
	}


	function updateDialogSaturation() {
		// update saturation gradient
		var r, g, b, s, c = [ instance.color.value, 0, 0 ]
		var i = Math.floor(instance.color.hue)
		var f = i%2 ? instance.color.hue-i : 1-(instance.color.hue-i)
		switch(i) {
			case 6:
			case 0: r=0;g=1;b=2; break
			case 1: r=1;g=0;b=2; break
			case 2: r=2;g=0;b=1; break
			case 3: r=2;g=1;b=0; break
			case 4: r=1;g=2;b=0; break
			case 5: r=0;g=2;b=1; break
		}
		var gr = elements.grad.childNodes
		for(var i=0; i<gr.length; i++) {
			s = 1 - 1/(gr.length-1)*i
			c[1] = c[0] * (1 - s*f)
			c[2] = c[0] * (1 - s)
			gr[i].style.backgroundColor = 'rgb('+(c[r]*100)+'%,'+(c[g]*100)+'%,'+(c[b]*100)+'%)'
		}
	}


	function bindInputs() {
		var onfocus = function() {
			if(instance && instance.preserve) {
				instance.preserve = false
			} else {
				showDialog(this)
			}
		}
		var onblur = function() {
			if(instance && instance.preserve) return

			var This = this
			var Id = instanceId
			setTimeout(function() {
				if(instance && instance.preserve) return

				if(instance && instanceId == Id) hideDialog() // if dialog hasn't been already shown by another instance
				updateInput(This, new color(This.value), This.value)
			}, 0)
		}
		var setcolor = function(str) {
			var c = new color(str)
			updateInput(this, c, str)
			if(instance && instance.input == this) {
				instance.color = c
				updateDialogPointers()
				updateDialogSaturation()
			}
		}

		var e = document.getElementsByTagName('input')
		var matchClass = new RegExp('\\s'+bindClass+'\\s')

		for(var i=0; i<e.length; i++) {
			if(e[i].type == 'text' && matchClass.test(' '+e[i].className+' ')) {

				e[i].originalStyle = {
					'color' : e[i].style.color,
					'backgroundColor' : e[i].style.backgroundColor
				}
				e[i].setAttribute('autocomplete', 'off')
				e[i].onfocus = onfocus
				e[i].onblur = onblur
				e[i].setcolor = setcolor

				updateInput(e[i], new color(e[i].value), e[i].value)
			}
		}
	}


	function updateInput(e, color, realValue) {
		if(allowEmpty && realValue != null && !/^\s*#?([0-9A-F]{3}([0-9A-F]{3})?)\s*$/i.test(realValue)) {
			e.value = ''
			if(reflectOnBackground) {
				e.style.backgroundColor = e.originalStyle.backgroundColor
				e.style.color = e.originalStyle.color
			}
		} else {
			e.value = (leadingHash?'#':'')+color
			if(reflectOnBackground) {
				e.style.backgroundColor = '#'+color
				e.style.color =
					0.212671 * color.red +
					0.715160 * color.green +
					0.072169 * color.blue
					< 0.5 ? '#FFF' : '#000'
			}
		}
	}


	function setStyle(e, properties) {
		for(var p in properties) eval('e.style.'+p+' = properties[p]')
	}


	function getElementPos(e) {
		var x=0, y=0
		if(e.offsetParent) {
			do {
				x += e.offsetLeft
				y += e.offsetTop
			} while(e = e.offsetParent)
		}
		return [ x, y ]
	}


	function getMousePos(e) {
		if(!e) var e = window.event
		var x=0, y=0
		if(typeof e.pageX == 'number') {
			x = e.pageX
			y = e.pageY
		} else if(typeof e.clientX == 'number') {
			x = e.clientX+document.documentElement.scrollLeft+document.body.scrollLeft
			y = e.clientY+document.documentElement.scrollTop+document.body.scrollTop
		}
		return [ x, y ]
	}


	function getScrollPos() {
		var x=0, y=0
		if(typeof window.pageYOffset == 'number') {
			x = window.pageXOffset
			y = window.pageYOffset
		} else if(document.body && (document.body.scrollLeft || document.body.scrollTop)) {
			x = document.body.scrollLeft
			y = document.body.scrollTop
		} else if(document.documentElement && (document.documentElement.scrollLeft || document.documentElement.scrollTop)) {
			x = document.documentElement.scrollLeft
			y = document.documentElement.scrollTop
		}
		return [ x, y ]
	}


	function getWindowSize() {
		var w=0, h=0
		if(typeof window.innerWidth == 'number') {
			w = window.innerWidth
			h = window.innerHeight
		} else if(document.documentElement && (document.documentElement.clientWidth || document.documentElement.clientHeight)) {
			w = document.documentElement.clientWidth
			h = document.documentElement.clientHeight
		} else if(document.body && (document.body.clientWidth || document.body.clientHeight)) {
			w = document.body.clientWidth
			h = document.body.clientHeight
		}
		return [ w, h ]
	}


	function color(hex) {

		this.hue        = 0 // 0-6
		this.saturation = 0 // 0-1
		this.value      = 0 // 0-1

		this.red   = 0 // 0-1
		this.green = 0 // 0-1
		this.blue  = 0 // 0-1

		this.setRGB = function(r, g, b) { // null = don't change
			var hsv = RGB_HSV(
				r==null ? this.red : (this.red=r),
				g==null ? this.green : (this.green=g),
				b==null ? this.blue : (this.blue=b)
			)
			if(hsv[0] != null) {
				this.hue = hsv[0]
			}
			this.saturation = hsv[1]
			this.value = hsv[2]
		}

		this.setHSV = function(h, s, v) { // null = don't change
			var rgb = HSV_RGB(
				h==null ? this.hue : (this.hue=h),
				s==null ? this.saturation : (this.saturation=s),
				v==null ? this.value : (this.value=v)
			)
			this.red   = rgb[0]
			this.green = rgb[1]
			this.blue  = rgb[2]
		}

		function RGB_HSV(r, g, b) {
			var n = Math.min(Math.min(r,g),b)
			var v = Math.max(Math.max(r,g),b)
			var m = v - n
			if(m == 0) return [ null, 0, v ]
			var h = r==n ? 3+(b-g)/m : (g==n ? 5+(r-b)/m : 1+(g-r)/m)
			return [ h==6?0:h, m/v, v ]
		}

		function HSV_RGB(h, s, v) {
			if(h == null) return [ v, v, v ]
			var i = Math.floor(h)
			var f = i%2 ? h-i : 1-(h-i)
			var m = v * (1 - s)
			var n = v * (1 - s*f)
			switch(i) {
				case 6:
				case 0: return [ v, n, m ]
				case 1: return [ n, v, m ]
				case 2: return [ m, v, n ]
				case 3: return [ m, n, v ]
				case 4: return [ n, m, v ]
				case 5: return [ v, m, n ]
			}
		}

		this.setString = function(hex) {
			var m = hex.match(/^\s*#?([0-9A-F]{3}([0-9A-F]{3})?)\s*$/i)
			if(m) {
				if(m[1].length==6) { // 6x hex
					this.setRGB(
						parseInt(m[1].substr(0,2),16)/255,
						parseInt(m[1].substr(2,2),16)/255,
						parseInt(m[1].substr(4,2),16)/255
					)
				} else { // 3x hex
					this.setRGB(
						parseInt(m[1].charAt(0)+m[1].charAt(0),16)/255,
						parseInt(m[1].charAt(1)+m[1].charAt(1),16)/255,
						parseInt(m[1].charAt(2)+m[1].charAt(2),16)/255
					)
				}
			} else {
				this.setRGB(0,0,0)
				return false
			}
		}

		this.toString = function() {
			var r = Math.round(this.red * 255).toString(16)
			var g = Math.round(this.green * 255).toString(16)
			var b = Math.round(this.blue * 255).toString(16)
			return (
				(r.length==1 ? '0'+r : r)+
				(g.length==1 ? '0'+g : g)+
				(b.length==1 ? '0'+b : b)
			).toUpperCase()
		}

		if(hex) {
			this.setString(hex)
		}

	}


	function URI(uri) { // See RFC3986

		this.scheme    = null
		this.authority = null
		this.path      = ''
		this.query     = null
		this.fragment  = null

		this.parse = function(uri) {
			var m = uri.match(/^(([A-Za-z][0-9A-Za-z+.-]*)(:))?((\/\/)([^\/?#]*))?([^?#]*)((\?)([^#]*))?((#)(.*))?/)
			this.scheme    = m[3] ? m[2] : null
			this.authority = m[5] ? m[6] : null
			this.path      = m[7]
			this.query     = m[9] ? m[10] : null
			this.fragment  = m[12] ? m[13] : null
			return this
		}

		this.toString = function() {
			var result = ''
			if(this.scheme    != null) result = result +      this.scheme + ':'
			if(this.authority != null) result = result +'//'+ this.authority
			if(this.path      != null) result = result +      this.path
			if(this.query     != null) result = result + '?'+ this.query
			if(this.fragment  != null) result = result + '#'+ this.fragment
			return result
		}

		this.toAbsolute = function(base) {
			var base = new URI(base)
			var r = this
			var t = new URI

			if(base.scheme == null) return false

			if(r.scheme != null && r.scheme.toLowerCase() == base.scheme.toLowerCase()) {
				r.scheme = null
			}

			if(r.scheme != null) {
				t.scheme    = r.scheme
				t.authority = r.authority
				t.path      = removeDotSegments(r.path)
				t.query     = r.query
			} else {
				if(r.authority != null) {
					t.authority = r.authority
					t.path      = removeDotSegments(r.path)
					t.query     = r.query
				} else {
					if(r.path == '') {
						t.path = base.path
						if(r.query != null) {
							t.query = r.query
						} else {
							t.query = base.query
						}
					} else {
						if(r.path.substr(0,1) == '/') {
							t.path = removeDotSegments(r.path)
						} else {
							if(base.authority != null && base.path == '') {
								t.path = '/'+r.path
							} else {
								t.path = base.path.replace(/[^\/]+$/,'')+r.path
							}
							t.path = removeDotSegments(t.path)
						}
						t.query = r.query
					}
					t.authority = base.authority
				}
				t.scheme = base.scheme
			}
			t.fragment = r.fragment

			return t
		}

		function removeDotSegments(path) {
			var out = ''
			while(path) {
				if(path.substr(0,3)=='../' || path.substr(0,2)=='./') {
					path = path.replace(/^\.+/,'').substr(1)
				} else if(path.substr(0,3)=='/./' || path=='/.') {
					path = '/'+path.substr(3)
				} else if(path.substr(0,4)=='/../' || path=='/..') {
					path = '/'+path.substr(4)
					out = out.replace(/\/?[^\/]*$/, '')
				} else if(path=='.' || path=='..') {
					path = ''
				} else {
					var rm = path.match(/^\/?[^\/]*/)[0]
					path = path.substr(rm.length)
					out = out + rm
				}
			}
			return out
		}

		if(uri) {
			this.parse(uri)
		}

	}

	// init
	
	createDialog()
	bindInputs()
	cf = G['colorField'];
	cf.onchange = function() {
		setColor(this.value);	
	}
	showDialog(cf);
	document.getElementById('scManualColorField').value = cf.value;

}
function jscolorStartOver() { 
	if (G['JSCOVER']) { clearTimeout(G['JSCOVER']); }
	G['JSCOVER'] = 0;
}
function jscolorStartClose() {
	if (!G['SCManualInputHasFocus']) { 
		G['JSCOVER'] = setTimeout('jscolorClearDiv()', 1000);
	}
}
function jscolorClearDiv(val) {
	if (val) { setColor(val); }
	var b = document.getElementsByTagName('body')[0];
	
	var div = document.getElementById('jscolorMainDiv');
	if (div) { 
	while(div.nodeName.toLowerCase() == 'div') {
		try { b.removeChild(div); div = document.getElementById('jscolorMainDiv'); if (div == null) { break; } } catch(err) { break; }
	} }
}

/*----------------------- main --------------------------*/

function toggle_modules(i) { 
	var modules = document.getElementById('modules');
	if (i.className == 'expanded') { 
		i.className = 'collapsed';
		modules.className = 'mcollapsed';
		document.cookie = 'modules_collapsed=1';
	} else {
		i.className = 'expanded';
		modules.className = 'mexpanded';
		document.cookie = 'modules_collapsed=0';
	}
}

function update_permissions() {

	var fields = new Array();
	var inputFields = document.formwm.getElementsByTagName('input');
	for (var i=0;i<inputFields.length;i++) { fields.push(inputFields[i]); }
	var selectFields = document.formwm.getElementsByTagName('select');
	for (var i=0;i<selectFields.length;i++) { fields.push(selectFields[i]); }
	var qrystring = '';
	for (var i=0;i<fields.length;i++) {
		if (fields[i].type == 'file') { 
			continue; // No file handling
		}
		if ((fields[i].type == 'checkbox')&&(!fields[i].checked)) { qrystring += "&"+fields[i].name+"="; continue; }
		if ((fields[i].type == 'radio')&&(!fields[i].checked)) { continue; }
		qrystring += "&"+fields[i].name+"="+escape(fields[i].value).replace('+', '%2B');
	}
	G['xmlHttp'] = createAjaxObject();
	if (!G['xmlHttp']) { loff(); return false; }
	G['xmlHttp'].onreadystatechange=function() {
		if(G['xmlHttp'].readyState==1) { set_progress(25); }
		if(G['xmlHttp'].readyState==2) { set_progress(50); }
		if(G['xmlHttp'].readyState==3) { set_progress(75); }
		if(G['xmlHttp'].readyState==4) {
			set_progress(100);
			if (G['xmlHttp'].responseText == 'logout') { document.location.href='?'; return; }
			var mySplit = G['xmlHttp'].responseText.split('<<>>');
			for (var i=0;i<mySplit.length;i++) { 
				var j = i+1;
				var updatefield = document.getElementById('perm_'+j);
				updatefield.innerHTML = mySplit[i];
				if (mySplit[i]) { updatefield.style.display = ''; } else { updatefield.style.display = 'none'; }
			}
			loff();
		}
	}
	var parameters = "ajax=update&updateallfields=1"+qrystring;
	G['xmlHttp'].open("POST","?",true);
	G['xmlHttp'].setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    G['xmlHttp'].setRequestHeader("Content-length", parameters.length);
    G['xmlHttp'].setRequestHeader("Connection", "close");
    G['xmlHttp'].send(parameters);
}
function populate_permissions(field) { 
	var fparts = field.name.split('_');
	var updatefield = document.getElementById('perm_'+fparts[1]);

	var fields = new Array();
	var inputFields = document.formwm.getElementsByTagName('input');
	for (var i=0;i<inputFields.length;i++) { fields.push(inputFields[i]); }
	var selectFields = document.formwm.getElementsByTagName('select');
	for (var i=0;i<selectFields.length;i++) { fields.push(selectFields[i]); }
	var qrystring = '';
	for (var i=0;i<fields.length;i++) {
		if (fields[i].type == 'file') { 
			continue; // No file handling
		}
		if ((fields[i].type == 'checkbox')&&(!fields[i].checked)) { qrystring += "&"+fields[i].name+"="; continue; }
		if ((fields[i].type == 'radio')&&(!fields[i].checked)) { continue; }
		qrystring += "&"+fields[i].name+"="+escape(fields[i].value).replace('+', '%2B');
	}
	G['xmlHttp'] = createAjaxObject();
	if (!G['xmlHttp']) { loff(); return false; }
	G['xmlHttp'].onreadystatechange=function() {
		if(G['xmlHttp'].readyState==1) { set_progress(25); }
		if(G['xmlHttp'].readyState==2) { set_progress(50); }
		if(G['xmlHttp'].readyState==3) { set_progress(75); }
		if(G['xmlHttp'].readyState==4) {
			set_progress(100);
			if (G['xmlHttp'].responseText == 'logout') { document.location.href='?'; return; }
			updatefield.innerHTML = G['xmlHttp'].responseText;
			if (G['xmlHttp'].responseText) { updatefield.style.display = ''; } else { updatefield.style.display = 'none'; }
			loff();
		}
	}
	var module = field.options[field.selectedIndex].value;
	var parameters = "ajax=update&updatefieldmodule="+escape(module)+'&updatefield=1'+qrystring;
	G['xmlHttp'].open("POST","?",true);
	G['xmlHttp'].setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    G['xmlHttp'].setRequestHeader("Content-length", parameters.length);
    G['xmlHttp'].setRequestHeader("Connection", "close");
    G['xmlHttp'].send(parameters);
}
function populate_selectors(field) { 
	var updatefield = document.getElementById('selectorshow');

	var fields = new Array();
	var inputFields = document.formwm.getElementsByTagName('input');
	for (var i=0;i<inputFields.length;i++) { fields.push(inputFields[i]); }
	var selectFields = document.formwm.getElementsByTagName('select');
	for (var i=0;i<selectFields.length;i++) { fields.push(selectFields[i]); }
	var qrystring = '';
	for (var i=0;i<fields.length;i++) {
		if (fields[i].type == 'file') { 
			continue; // No file handling
		}
		if ((fields[i].type == 'checkbox')&&(!fields[i].checked)) { qrystring += "&"+fields[i].name+"="; continue; }
		if ((fields[i].type == 'radio')&&(!fields[i].checked)) { continue; }
		qrystring += "&"+fields[i].name+"="+escape(fields[i].value).replace('+', '%2B');
	}
	G['xmlHttp'] = createAjaxObject();
	if (!G['xmlHttp']) { loff(); return false; }
	G['xmlHttp'].onreadystatechange=function() {
		if(G['xmlHttp'].readyState==1) { set_progress(25); }
		if(G['xmlHttp'].readyState==2) { set_progress(50); }
		if(G['xmlHttp'].readyState==3) { set_progress(75); }
		if(G['xmlHttp'].readyState==4) {
			set_progress(100);
			if (G['xmlHttp'].responseText == 'logout') { document.location.href='?'; return; }
			updatefield.innerHTML = G['xmlHttp'].responseText;
			if (G['xmlHttp'].responseText) { updatefield.style.display = ''; } else { updatefield.style.display = 'none'; }
			loff();
		}
	}
	var module = field.options[field.selectedIndex].value;
	var parameters = "ajax=update&updatefieldmodule="+escape(module)+'&updatefield=1'+qrystring;
	G['xmlHttp'].open("POST","?",true);
	G['xmlHttp'].setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    G['xmlHttp'].setRequestHeader("Content-length", parameters.length);
    G['xmlHttp'].setRequestHeader("Connection", "close");
    G['xmlHttp'].send(parameters);
}


/*----------------------- movecol --------------------------*/

function startColDrag(col, e) { 
	if (G['isSelectorDM']) { return false; }
	var rightclick;
	if (!e) var e = window.event;
	if (e.which) rightclick = (e.which == 3);
	else if (e.button) rightclick = (e.button == 2);
	if (rightclick) { return false; }

	G['movecol'] = col; G['coldrag'] = true; 
	G['dropTargets'] = new Array();
	var elements = document.form1.getElementsByTagName('th');
	for (var i=0;i<elements.length;i++) { prid = /^\d/; if (elements[i].id.match(prid)) { G['dropTargets'].push(elements[i]); } }
	noSelect();
}
function checkColDrag(ev) { 
	if (!G['movecol']) { return; } if (!G['coldrag']) { return; }
	ev = ev || window.event;
	var mousePos = mouseCoords();
	var xshrink = 5; // number of pixels to shrink in each x direction
	var xoffset = 10; // number of pixels to offset the drop area in the x direction
	var yshrink = 2; // number of pixels to shrink in each y direction
	var yoffset = 0; // number of pixels to offset the drop area in the y direction. 
	G['isTarget'] = false;
	for (var i=0;i<G['dropTargets'].length;i++) { 
		var curTarget = G['dropTargets'][i];
		var targPos    = getDragPosition(curTarget);
		var targWidth  = parseInt(curTarget.offsetWidth);
		var targHeight = parseInt(curTarget.offsetHeight);
	
		if(
			(mousePos.x > (targPos.x + xshrink + xoffset))                &&
			(mousePos.x < ((targPos.x + targWidth) + xoffset - xshrink))  &&
			(mousePos.y > (targPos.y + yshrink + yoffset))                &&
			(mousePos.y < ((targPos.y + targHeight) + yoffset - yshrink))){
			
			if (curTarget.id == G['movecol'].id) {
				var mc = document.getElementById('movecolicon');
				mc.style.display = 'none';
				G['ShowMoveCol'] = false;
				break;	
			} else {
				// dragObject over a target!
				mouse_move();
				var mc = document.getElementById('movecolicon');
				mc.style.background = '';
				mc.innerHTML = '<table class="list"><tr><th style="border:solid 1px green;">'+G['movecol'].innerHTML+'</th></tr></table>';
				G['ShowMoveCol'] = true;
				G['isTarget'] = true;
				break;
			}	
		}
	}
	
	if (!G['isTarget']) { 
		var mc = document.getElementById('movecolicon');
		mc.style.display = 'none';
		G['ShowMoveCol'] = false;
	}
}
function endColDrag(ev) {
	if (!G['movecol']) { return; } if (!G['coldrag']) { return; }
	ev = ev || window.event;
	var mousePos = mouseCoords();
	var xshrink = 5; // number of pixels to shrink in each x direction
	var xoffset = 10; // number of pixels to offset the drop area in the x direction
	var yshrink = 2; // number of pixels to shrink in each y direction
	var yoffset = 0; // number of pixels to offset the drop area in the y direction. 
	var mc = document.getElementById('movecolicon');
	mc.style.display = 'none';
	for (var i=0;i<G['dropTargets'].length;i++) { 
		var curTarget = G['dropTargets'][i];
		var targPos    = getDragPosition(curTarget);
		var targWidth  = parseInt(curTarget.offsetWidth);
		var targHeight = parseInt(curTarget.offsetHeight);
	
		if(
			(mousePos.x > (targPos.x + xshrink + xoffset))                &&
			(mousePos.x < ((targPos.x + targWidth) + xoffset - xshrink))  &&
			(mousePos.y > (targPos.y + yshrink + yoffset))                &&
			(mousePos.y < ((targPos.y + targHeight) + yoffset - yshrink))){
			
			if (curTarget.id == G['movecol'].id) {
				break;
			} else {
				// dragObject was dropped unto a target!
				document.form1.movecol.value=G['movecol'].id;
				document.form1.dropcol.value=curTarget.id;
				updateDataTable();
				document.form1.movecol.value='';
				document.form1.dropcol.value='';
				break;
			}	
		}
	}
	
	G['coldrag'] = false;
	G['movecol'] = false;
	G['ShowMoveCol'] = false;

}
function getDragPosition(obj) {
	var curleft = curtop = 0;
	pos = objFindPos(obj);
	curleft = pos[0]; curtop = pos[1];
	if (G['IE']) { winScroll = RP_getScroll(); curleft -= winScroll[0]; curtop -= winScroll[1]; }
	
	return {x:curleft,y:curtop};
}
function mouseCoords(){
	return {x:G['posX'], y:G['posY']};
}


/*----------------------- propertiesmanager --------------------------*/

function findParentDBox (element) {
  while (element) {
    if (hasClass(element,"dBox")) return element;
    element = element.parentNode;
  }
}
function switchDBox(element) {
	var dBox = findParentDBox (element);
	if (dBox) {
		if (hasClass(dBox, "show")) { 		
			removeClass(dBox, "show");
    		addClass(dBox, "hide");
			document.cookie = dBox.id + "=0";
  		} else {
	    	removeClass(dBox, "hide");
	    	addClass(dBox, "show");
			document.cookie = dBox.id + "=1";
  		}
	}
}
function findTabs(tab) {
	return tab.parentNode;
}
function getTabId(tab) {
	return tab.getElementsByTagName("a")[0].id;
}
function showTab(o) {
	var current_tab = o.parentNode;
	var current_tabs = current_tab.parentNode.getElementsByTagName("li");
	for (var i = 0; i < current_tabs.length; i++) {
		current_tabs[i].id="";
		document.getElementById(getTabId(current_tabs[i]) + "/content").style.display="none";
	}
	current_tab.id = "current";
	document.getElementById(getTabId(current_tab) + "/content").style.display="block";
	// document.cookie = findTabs(current_tab).id + "=" + getTabId(current_tab);
	document.getElementById(findTabs(current_tab).id).value = getTabId(current_tab);
	return false;
}

/*----------------------- resizecols --------------------------*/

function getNewWidth () {
	var newWidth = G['minWidth'];
	if (G['dragingColumn'] != null) {
		newWidth = G['startingWidth'];
		newWidth += G['currentX'] - G['startingX'];
		newWidth -= 8;
		if (newWidth < G['minWidth']) { newWidth = G['minWidth']; }
	}
	return newWidth;
}
function columnMouseDown (event, id) {
	if (!event) { event = window.event; }
	G['startingX'] = event.clientX;
	G['currentX'] = G['startingX'];
	G['dragingColumn'] = document.getElementById(id);
	G['startingWidth'] = parseInt (G['dragingColumn'].offsetWidth);
	if (isNaN (G['startingWidth'])) { 
		G['startingWidth'] = parseInt (G['dragingColumn'].style.width);
		if (isNaN (G['startingWidth'])) { G['startingWidth'] = 0; }
	}
	noSelect();
	return true;
}
function columnMouseUp (event) {
	if (!event) { event = window.event; }
	if (G['dragingColumn'] != null) {
		var line = G['dragingColumn'].getAttribute('line');
		document.getElementById('resizeCol').style.display = 'none';
		var nw = getNewWidth() + G['ColPadding'];
		setColWidth(line, nw);
		var did = G['dragingColumn'].id;
		var nrw = G['dragingColumn'].offsetWidth;
		setColWidth(line, nrw);
		updateColWidth(did, nrw);
		G['dragingColumn'] = null;
		G['startingWidth'] = 0;	
	}
	reSelect();
	endColDrag(event);
	G['dragOBJ'] = '';
	if (!G['vsMenuStartMenu']) { vsMenuHideAll(); }
	G['vsMenuStartMenu'] = '';		
	return true;
}
function columnMouseMove (event) {
	if (!event) { event = window.event; }
	G['currentX'] = event.clientX;
	if (G['dragingColumn'] != null) {
		var line = G['dragingColumn'].getAttribute('line');
		var nw = getNewWidth ();
		document.getElementById('resizeCol').style.display = '';
	}
	if (G['coldrag']) { checkColDrag(event); }
	return true;
}
function setColWidth(line, width) { 
	width -= G['ColPadding'];
	if (G['isSelectorDM']) { var s = 'selector_'; } else { var s = ''; }
	var node = document.getElementById(s+"dataTable");
	var a = [];
	var re = new RegExp('\\b' + line + '\\b');
	var els = node.getElementsByTagName("*");
	for(var i=0,j=els.length; i<j; i++) {
		if(re.test(els[i].getAttribute('line'))){ a.push(els[i]); }
	}
	for (var i=0;i<a.length;i++) { a[i].style.width = width; }
	// Resize the float
	node = document.getElementById(s+"dataTableTitleTable");
	var a = [];
	var re = new RegExp('\\b' + line + '\\b');
	var els = node.getElementsByTagName("*");
	for(var i=0,j=els.length; i<j; i++) {
		if(re.test(els[i].getAttribute('line'))){ a.push(els[i]); }
	}
	for (var i=0;i<a.length;i++) { a[i].style.width = width; }
			
	try{ startFloatTitle(); } catch(err) { }
}
function disableSelect(e){ return false; }
function enableSelect(){ if (G['cbmouseover']) { return false; } else { return true; } }
function reSelect(){
	if (G['isCurrentNoSelect']) { 
		if (typeof document.onselectstart!="undefined"){
			document.onselectstart=new Function ("if (G['cbmouseover']) { return false; } else { return true }");
		} else{
			document.onmousedown=enableSelect
		}
		G['isCurrentNoSelect'] = false;
	}
}
function noSelect(){ 
	G['isCurrentNoSelect'] = true;
	if (typeof document.onselectstart!="undefined"){
		document.onselectstart=new Function ("return false");
	} else{
		document.onmousedown=disableSelect
	}
}
function updateColWidth(col, width) {
	if (!document.form1) { return; }
	width -= G['ColPadding'];
	G['xmlHttp'] = createAjaxObject();
	if (!G['xmlHttp']) { return false; }
    G['xmlHttp'].onreadystatechange=function() {
    	if(G['xmlHttp'].readyState==1) { set_progress(25); }
		if(G['xmlHttp'].readyState==2) { set_progress(50); }
		if(G['xmlHttp'].readyState==3) { set_progress(75); }
		if(G['xmlHttp'].readyState==4) {
			set_progress(100);
			if (G['xmlHttp'].responseText == 'logout') { document.location.href='?'; return; }
        	if (G['xmlHttp'].responseText != 1) { alert('Failed Column Width Update. Column width will not be saved.\n'+G['xmlHttp'].responseText); }
        }
    }
    G['xmlHttp'].open("GET","?ajax=updatecolwidth&col="+col+"&width="+width,true);
    G['xmlHttp'].send(null);
}


/*----------------------- rightclick --------------------------*/

function headerMenu(event, menu) {
	if (G['isSelectorDM']) { return; }
	G['coldrag'] = false; G['movecol'] = false; G['rightclicked'] = true;
	try { window.getSelection().collapseToStart(); } catch (e) {} 
	event.cancelBubble = true;
	if (event.stopPropagation) event.stopPropagation(); 
  	if (event.preventDefault) event.preventDefault();
	
	document.form1.bcol.value = menu.id;
	vsMenuShowRightClickMenu('r_hmenu');
	G['rightclicked'] = false;
	return false;
}
function iconHeaderMenu(event, menu) {
	if (G['isSelectorDM']) { return; }
	G['coldrag'] = false; G['movecol'] = false;
	try { window.getSelection().collapseToStart(); } catch (e) {}
	event.cancelBubble = true;
	if (event.stopPropagation) event.stopPropagation(); 
  	if (event.preventDefault) event.preventDefault();
	
	document.form1.bcol.value = menu.id;
	vsMenuShowRightClickMenu('r_icon_hmenu');
	return false;
}
function itemMenu(event, tr, sel) {
	endHighlight(tr);
	G['coldrag'] = false; G['movecol'] = false;
	try { window.getSelection().collapseToStart(); } catch (e) {}
	event.cancelBubble = true;
	if (event.stopPropagation) event.stopPropagation(); 
  	if (event.preventDefault) event.preventDefault();
	
	if (!sel) { 
		rowHighlight(tr);
	
		// Show either the single operations menu or the group operations menu depending on how many items are selected.
		var selected = datamanagerGetSelected();
		var mtype = '';
		if (!selected) { return false; }
		else if (selected.length > 1) { mtype = 'r_igmenu'; }
		else { mtype = 'r_ismenu'; }
	} else { var mtype = 'r_ismenu'; }
	vsMenuShowRightClickMenu(mtype);
	return false;
}
function checkallMenu(event) {
	G['coldrag'] = false; G['movecol'] = false;
	try { window.getSelection().collapseToStart(); } catch (e) {}
	event.cancelBubble = true;
	if (event.stopPropagation) event.stopPropagation(); 
  	if (event.preventDefault) event.preventDefault();
	
	document.form1.bcol.value = '';
	vsMenuShowRightClickMenu('tm_select');
	return false;
}
function updateColumn(action) { 
	document.form1.bcolaction.value = action;
	document.form1.movecol.value = '';
	document.form1.dropcol.value = '';
	updateDataTable();
	// document.form1.bcol.value = '';
	document.form1.bcolaction.value = '';
}
function addColumn(data) { 
	document.form1.bcolaction.value = data;
	document.form1.movecol.value = '';
	document.form1.dropcol.value = '';
	updateDataTable();
	document.form1.bcol.value = '';
	document.form1.bcolaction.value = '';
}
function delColumn() {
	document.form1.bcolaction.value = 'D';
	document.form1.movecol.value = '';
	document.form1.dropcol.value = '';
	updateDataTable();
	document.form1.bcol.value = '';
	document.form1.bcolaction.value = '';
}

/*----------------------- vsmenu --------------------------*/
function vsMenuShow(menuid, target, where, activate) {
	var pos;
	if (target) { 
		var submenuof = target.getAttribute('subMenuOf'); 
		vsMenuHideSubs(submenuof);
		vsMenuSetNotActive(submenuof);
	}
	
	if ((activate)&&(target)) { vsMenuActivate(target); }
	
	if (menuid) { 
		var menu = document.getElementById(menuid);
		vsMenuSetNotActive(menuid);
		if (target) { pos = objFindPos(target); }
		else { 
			pos = [G['posX'], G['posY']]; 
			if (G['IE']) { 
				var winScroll = new Array(); winScroll = RP_getScroll();
				pos[0] += winScroll[0]; pos[1] += winScroll[1];
			}
		}
		var shstyle = 'visible';
		if (where == 'bottom') { 
			if (menu.style.visibility == 'visible') { shstyle = 'hidden'; }
			vsMenuHideAll();
			if (target) { menu.style.left = (pos[0] + G['vsMenuOffsetLeft']) + 'px'; }
			else { menu.style.left = (pos[0] + G['vsMenuRightOffsetLeft']) + 'px'; }
			var top = '';
			if (target) { top = pos[1] + target.offsetHeight + G['vsMenuOffsetTop']; }
			else { var top = pos[1] + G['vsMenuRightOffsetTop']; }
			menu.style.top = top + 'px';
			if ((target)&&(shstyle=='visible')&&(activate)) { target.className = 'vsMenuMainMenuActive'; }
		} else if (where == 'right') { 
			var left = pos[0] + target.offsetWidth + G['vsMenuOffsetSubLeft'];
			menu.style.left = left + 'px';
			menu.style.top = (pos[1] + G['vsMenuOffsetSubTop']) + 'px';
		}
		
		menu.style.visibility = shstyle;
	}
}
function vsMenuActivate(target) {
	var isH = target.getAttribute('isHeader');
	if (isH == 1) { target.className = 'vsMenuItemHeaderActive'; } else { target.className = 'vsMenuItemActive'; }
}
function vsMenuShowRightClickMenu(menuid) { 
	G['vsMenuStartMenu'] = 1;
	vsMenuShow(menuid, '', 'bottom');
}
function vsMenuHide(menuid) {
	var x = document.getElementsByTagName('div');
	var reg = new RegExp('^'+menuid);
	for (var i=0;i<x.length;i++) {
		if (x[i].id.match(reg)) { 
			x[i].style.visibility = 'hidden';
			var mtarg = x[i].getAttribute('mainTarget');
			if (mtarg) { document.getElementById(mtarg).className = 'vsMenuMainMenu'; }
		}
	}
}
function vsMenuHideSubs(menuid) {
	var x = document.getElementsByTagName('div');
	var reg = new RegExp('^'+menuid+'.');
	for (var i=0;i<x.length;i++) {
		if (x[i].id.match(reg)) { 
			x[i].style.visibility = 'hidden';
			var mtarg = x[i].getAttribute('mainTarget');
			if (mtarg) { document.getElementById(mtarg).className = 'vsMenuMainMenu'; }
		}
	}
}
function vsMenuHideAll() {
	var x = document.getElementsByTagName('div');
	for (var i=0;i<x.length;i++) {
		var type = x[i].getAttribute('vsMenuType');
		if (type == 'menu') { 
			x[i].style.visibility = 'hidden';
			var mtarg = x[i].getAttribute('mainTarget');
			try { if (mtarg) { document.getElementById(mtarg).className = 'vsMenuMainMenu'; } }
			catch (e) { }
		}
	}
}		
function vsMenuSetNotActive(menuid) {
	var x = document.getElementsByTagName('div');
	var reg = new RegExp('^'+menuid);
	for (var i=0;i<x.length;i++) {
		if (x[i].id.match(reg)) { 
			var y = x[i].getElementsByTagName('tr');
			for (var j=0;j<y.length;j++) {
				var isA = y[j].getAttribute('isActive');
				var isH = y[j].getAttribute('isHeader');
				var cN;
				if      ((isA == 1)&&(isH == 1)) { cN = 'vsMenuItemHeaderActive'; }
				else if ((isA == 1)&&(isH == 0)) { cN = 'vsMenuItemActive'; }
				else if ((isA == 0)&&(isH == 1)) { cN = 'vsMenuItemHeader'; }
				else if ((isA == 0)&&(isH == 0)) { cN = 'vsMenuItem'; }
				else { cN = 'vsMenuItem'; }
				y[j].className =  cN;
			}
		}
	}
}
function vsMenuStartTimeout(menuid) {
	G['vsMenuTimeoutHolder'] = setTimeout("vsMenuHide('"+menuid+"')", G['vsMenuTimeout']);
}
function vsMenuCancelTimeout() {
	if (G['vsMenuTimeoutHolder']) { clearTimeout(G['vsMenuTimeoutHolder']); }
	G['vsMenuTimeoutHolder'] = '';
}
function vsUpdateMenu(menu, code) { 
	menu = document.getElementById(menu);
	menu.innerHTML = code;
}

/*----------------------- wizardmanager --------------------------*/

function updateWizardManager(nolon) {
	G['dataTableIsDoneLoading'] = false;
	// Hide buttons.
	// var buttons = document.getElementById('wmbuttons');
	// if (buttons) { buttons.style.visibility = 'hidden'; }
	
	try {
		if (document.getElementById('signcanvas')) { 
			if (document.formwm.next.value==1) {
				setsign(document.getElementById('curpage').value);
			}
		}
	} catch(e) {}
	try { tinyMCE.triggerSave(); } catch(e) {}
	removeTinyMCEControls();
	if (!nolon) { lon(); }
	var qrystring = '';
	if (document.getElementById('fieldlist')) { 
		var fields = new Array();
		var inputFields = document.formwm.getElementsByTagName('input');
		for (var i=0;i<inputFields.length;i++) { fields.push(inputFields[i]); }
		var selectFields = document.formwm.getElementsByTagName('select');
		for (var i=0;i<selectFields.length;i++) { fields.push(selectFields[i]); }
		var textFields = document.formwm.getElementsByTagName('textarea');
		for (var i=0;i<textFields.length;i++) { fields.push(textFields[i]); }
		for (var i=0;i<fields.length;i++) {
			if (fields[i].type == 'file') { 
				if (!fields[i].value) { continue; } // No file to upload
				if (G['WizardManagerFileFields']) { continue; }  // Weve already uploaded files, just don't include them
				if (document.formwm.cancel.value == '1') { continue; } // They cancelled, don't upload files
				if (document.formwm.next.value != '1') { continue; } // They hit back, don't upload files
				uploadWizardFiles(); return; // Upload files first. Once files are uploaded, This function will be recalled (but this time with WizardManagerFileFields set to true;)
			}
			if ((fields[i].type == 'checkbox')&&(!fields[i].checked)) { qrystring += "&"+fields[i].name+"="; continue; }
			if ((fields[i].type == 'radio')&&(!fields[i].checked)) { continue; }
			qrystring += "&"+fields[i].name+"="+escape(fields[i].value).replace('+', '%2B');
		}
		G['WMqryString'] = qrystring;
	} else {
		qrystring = G['WMqryString'];
	}
	G['xmlHttp'] = createAjaxObject();
	if (!G['xmlHttp']) { loff(); G['dataTableIsDoneLoading'] = true; return false; }
	G['xmlHttp'].onreadystatechange=function() {
		if(G['xmlHttp'].readyState==1) { set_progress(25); }
		if(G['xmlHttp'].readyState==2) { set_progress(50); }
		if(G['xmlHttp'].readyState==3) { set_progress(75); }
		if(G['xmlHttp'].readyState==4) {
			set_progress(100);
			if (G['xmlHttp'].responseText == 'logout') { G['dataTableIsDoneLoading'] = true; document.location.href='?'; return; }
			var mySplit = G['xmlHttp'].responseText.split("<<>>");
			try { document.getElementById('wmcontent').innerHTML = mySplit[0]; } catch(err) { }
			loff();
			G['dataTableIsDoneLoading'] = true;
			if (mySplit[1]) { eval(mySplit[1]); }
			if (mySplit[2]) { document.getElementById('wm_MENUSYSTEM').innerHTML = mySplit[2]; }
			G['WizardManagerFileFields'] = false; // Reset the file upload fields flag
			G['WizardManagerFileCancel'] = false; // Reset the file cancel upload flag
			if (document.getElementById('signdata')) { try { document.getElementById('signdata').value = ''; } catch(e) {} }
		}
	}
	document.formwm.wizard_in_progress.value = 1;
	var parameters = "ajax=update"+qrystring;
	G['xmlHttp'].open("POST","?",true);
	G['xmlHttp'].setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    G['xmlHttp'].setRequestHeader("Content-length", parameters.length);
    G['xmlHttp'].setRequestHeader("Connection", "close");
    G['xmlHttp'].send(parameters);
	
}
function uploadWizardFiles() {
	lon();
	G['WizardManagerFileFields'] = true;
	
	// Submit the file for uploading
	var formwm = document.getElementById('formwm');
	formwm.next.value = '0';
	var newAttr = document.createAttribute("action");
    newAttr.nodeValue = formwm.wmformaction.value;
    formwm.setAttributeNode(newAttr); 
	document.getElementById('formwm').submit();
	
	set_progress(0, "Uploading File(s): Waiting for upload to start");
	G['updateWizardFileQryString'] = false;
	updateWizardFileProgress();
	
}
function updateWizardFileProgress() {
	if (!G['updateWizardFileQryString']) { 
		var fields = new Array();
		var inputFields = document.formwm.getElementsByTagName('input');
		for (var i=0;i<inputFields.length;i++) { if (inputFields[i].type == 'hidden') { fields.push(inputFields[i]); } }
		var qrystring = '';
		var action = '';
		try { action = document.formwm.action.value; } catch(error) {}
		qrystring += "&action="+escape(action);
		qrystring += "&ssid="+document.formwm.vssessionid.value;
		for (var i=0;i<fields.length;i++) {
			if (fields[i].name == 'ajax') { continue; }
			if (fields[i].name == 'action') { continue; }
			if (fields[i].type == 'file') { continue; } // No files, just progress
			qrystring += "&"+fields[i].name+"="+escape(fields[i].value).replace('+', '%2B');
		}
		G['updateWizardFileQryString'] = qrystring;
	} else {
		var qrystring = G['updateWizardFileQryString'];
	}

	// Get the progress
	G['xmlHttp'] = createAjaxObject(1);
	if (!G['xmlHttp']) { loff(); return false; }
	G['xmlHttp'].onreadystatechange=function() {
		if(G['xmlHttp'].readyState==4) {
			if (G['xmlHttp'].responseText == 'logout') { document.location.href='?'; return; }
			var mySplit = G['xmlHttp'].responseText.split("<<>>");
			var myDetails = mySplit[0];
			var myProgress = parseInt(mySplit[1]);
			var myFinished = mySplit[2];
			if (!G['WizardManagerFileCancel']) { set_progress(myProgress, myDetails); }
			if (myFinished == '2') { 
				// Failure....
				G['updateWizardFileQryString'] = false;
				document.formwm.next.value = '1';
				var sessionid = document.formwm.vssessionid.value;
				window.frames['upload_frame'].document.location.href="lic.php?rid="+randomID(32)+"&sessionid="+sessionid;
				G['WizardManagerFileFields'] = false; G['WizardManagerFileCancel'] = false;
			} else if (myFinished == '1') {
				// Success
				loff();
				G['updateWizardFileQryString'] = false;
				document.formwm.next.value = '1';
				if (!G['WizardManagerFileCancel']) { updateWizardManager(); }
				else { G['WizardManagerFileFields'] = false; G['WizardManagerFileCancel'] = false; }
			} else {
				setTimeout('updateWizardFileProgress();', 1000);
			}
		}
	}
	
	var parameters = "ajax=fileprogress&rid="+randomID(32)+qrystring;
	if (G['WizardManagerFileCancel']) { parameters += "&cancelupload=1"; }
	G['xmlHttp'].open("POST","?",true);
	G['xmlHttp'].setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    G['xmlHttp'].setRequestHeader("Content-length", parameters.length);
    G['xmlHttp'].setRequestHeader("Connection", "close");
    G['xmlHttp'].send(parameters);
}
function wizardCancelFileUpload() { 
	G['WizardManagerFileCancel'] = true;
	
	// Set the status to cancelling
	set_progress(0, 'Please wait... Cancelling File Upload');
	var sessionid = document.formwm.vssessionid.value;
	window.frames['upload_frame'].document.location.href="lic.php?rid="+randomID(32)+"&sessionid="+sessionid;
}
function htmlentities (string, quote_style) {
    // Convert all applicable characters to HTML entities 
    //
    // version: 906.401
    // discuss at: http://phpjs.org/functions/htmlentities
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +    revised by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: nobbler
    // +    tweaked by: Jack
    // +   bugfixed by: Onno Marsman
    // +    revised by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +    bugfixed by: Brett Zamir (http://brett-zamir.me)
    // -    depends on: get_html_translation_table
    // *     example 1: htmlentities('Kevin & van Zonneveld');
    // *     returns 1: 'Kevin &amp; van Zonneveld'
    // *     example 2: htmlentities("foo'bar","ENT_QUOTES");
    // *     returns 2: 'foo&#039;bar'
    var histogram = {}, symbol = '', tmp_str = '', entity = '';
    tmp_str = string.toString();
     
    if (false === (histogram = this.get_html_translation_table('HTML_ENTITIES', quote_style))) {
        return false;
    }
    histogram["'"] = '&#039;';
    for (symbol in histogram) {
        entity = histogram[symbol];
        tmp_str = tmp_str.split(symbol).join(entity);
    }
     
    return tmp_str;
}
function get_html_translation_table(table, quote_style) {
    // Returns the internal translation table used by htmlspecialchars and htmlentities  
    // 
    // version: 906.401
    // discuss at: http://phpjs.org/functions/get_html_translation_table
    // +   original by: Philip Peterson
    // +    revised by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   bugfixed by: noname
    // +   bugfixed by: Alex
    // +   bugfixed by: Marco
    // +   bugfixed by: madipta
    // +   improved by: KELAN
    // +   improved by: Brett Zamir (http://brett-zamir.me)
    // +    bugfixed by: Brett Zamir (http://brett-zamir.me)
    // %          note: It has been decided that we're not going to add global
    // %          note: dependencies to php.js. Meaning the constants are not
    // %          note: real constants, but strings instead. integers are also supported if someone
    // %          note: chooses to create the constants themselves.
    // *     example 1: get_html_translation_table('HTML_SPECIALCHARS');
    // *     returns 1: {'"': '&quot;', '&': '&amp;', '<': '&lt;', '>': '&gt;'}
    
    var entities = {}, histogram = {}, decimal = 0, symbol = '';
    var constMappingTable = {}, constMappingQuoteStyle = {};
    var useTable = {}, useQuoteStyle = {};
    
    // Translate arguments
    constMappingTable[0]      = 'HTML_SPECIALCHARS';
    constMappingTable[1]      = 'HTML_ENTITIES';
    constMappingQuoteStyle[0] = 'ENT_NOQUOTES';
    constMappingQuoteStyle[2] = 'ENT_COMPAT';
    constMappingQuoteStyle[3] = 'ENT_QUOTES';

    useTable       = !isNaN(table) ? constMappingTable[table] : table ? table.toUpperCase() : 'HTML_SPECIALCHARS';
    useQuoteStyle = !isNaN(quote_style) ? constMappingQuoteStyle[quote_style] : quote_style ? quote_style.toUpperCase() : 'ENT_COMPAT';

    if (useTable !== 'HTML_SPECIALCHARS' && useTable !== 'HTML_ENTITIES') {
        throw new Error("Table: "+useTable+' not supported');
        // return false;
    }

    if (useTable === 'HTML_ENTITIES') {
        entities['160'] = '&nbsp;';
        entities['161'] = '&iexcl;';
        entities['162'] = '&cent;';
        entities['163'] = '&pound;';
        entities['164'] = '&curren;';
        entities['165'] = '&yen;';
        entities['166'] = '&brvbar;';
        entities['167'] = '&sect;';
        entities['168'] = '&uml;';
        entities['169'] = '&copy;';
        entities['170'] = '&ordf;';
        entities['171'] = '&laquo;';
        entities['172'] = '&not;';
        entities['173'] = '&shy;';
        entities['174'] = '&reg;';
        entities['175'] = '&macr;';
        entities['176'] = '&deg;';
        entities['177'] = '&plusmn;';
        entities['178'] = '&sup2;';
        entities['179'] = '&sup3;';
        entities['180'] = '&acute;';
        entities['181'] = '&micro;';
        entities['182'] = '&para;';
        entities['183'] = '&middot;';
        entities['184'] = '&cedil;';
        entities['185'] = '&sup1;';
        entities['186'] = '&ordm;';
        entities['187'] = '&raquo;';
        entities['188'] = '&frac14;';
        entities['189'] = '&frac12;';
        entities['190'] = '&frac34;';
        entities['191'] = '&iquest;';
        entities['192'] = '&Agrave;';
        entities['193'] = '&Aacute;';
        entities['194'] = '&Acirc;';
        entities['195'] = '&Atilde;';
        entities['196'] = '&Auml;';
        entities['197'] = '&Aring;';
        entities['198'] = '&AElig;';
        entities['199'] = '&Ccedil;';
        entities['200'] = '&Egrave;';
        entities['201'] = '&Eacute;';
        entities['202'] = '&Ecirc;';
        entities['203'] = '&Euml;';
        entities['204'] = '&Igrave;';
        entities['205'] = '&Iacute;';
        entities['206'] = '&Icirc;';
        entities['207'] = '&Iuml;';
        entities['208'] = '&ETH;';
        entities['209'] = '&Ntilde;';
        entities['210'] = '&Ograve;';
        entities['211'] = '&Oacute;';
        entities['212'] = '&Ocirc;';
        entities['213'] = '&Otilde;';
        entities['214'] = '&Ouml;';
        entities['215'] = '&times;';
        entities['216'] = '&Oslash;';
        entities['217'] = '&Ugrave;';
        entities['218'] = '&Uacute;';
        entities['219'] = '&Ucirc;';
        entities['220'] = '&Uuml;';
        entities['221'] = '&Yacute;';
        entities['222'] = '&THORN;';
        entities['223'] = '&szlig;';
        entities['224'] = '&agrave;';
        entities['225'] = '&aacute;';
        entities['226'] = '&acirc;';
        entities['227'] = '&atilde;';
        entities['228'] = '&auml;';
        entities['229'] = '&aring;';
        entities['230'] = '&aelig;';
        entities['231'] = '&ccedil;';
        entities['232'] = '&egrave;';
        entities['233'] = '&eacute;';
        entities['234'] = '&ecirc;';
        entities['235'] = '&euml;';
        entities['236'] = '&igrave;';
        entities['237'] = '&iacute;';
        entities['238'] = '&icirc;';
        entities['239'] = '&iuml;';
        entities['240'] = '&eth;';
        entities['241'] = '&ntilde;';
        entities['242'] = '&ograve;';
        entities['243'] = '&oacute;';
        entities['244'] = '&ocirc;';
        entities['245'] = '&otilde;';
        entities['246'] = '&ouml;';
        entities['247'] = '&divide;';
        entities['248'] = '&oslash;';
        entities['249'] = '&ugrave;';
        entities['250'] = '&uacute;';
        entities['251'] = '&ucirc;';
        entities['252'] = '&uuml;';
        entities['253'] = '&yacute;';
        entities['254'] = '&thorn;';
        entities['255'] = '&yuml;';
    }

    if (useQuoteStyle !== 'ENT_NOQUOTES') {
        entities['34'] = '&quot;';
    }
    if (useQuoteStyle === 'ENT_QUOTES') {
        entities['39'] = '&#39;';
    }
    entities['60'] = '&lt;';
    entities['62'] = '&gt;';

    // ascii decimals for better compatibility
    entities['38'] = '&amp;';

    // ascii decimals to real symbols
    for (decimal in entities) {
        symbol = String.fromCharCode(decimal);
        histogram[symbol] = entities[decimal];
    }
    
    return histogram;
}


// Import functions
function updateImportProgress() {
	// Get the progress
	G['xmlHttp'] = createAjaxObject();
	if (!G['xmlHttp']) { loff(); return false; }
	G['xmlHttp'].onreadystatechange=function() {
		if(G['xmlHttp'].readyState==1) { set_progress(25); }
		if(G['xmlHttp'].readyState==2) { set_progress(50); }
		if(G['xmlHttp'].readyState==3) { set_progress(75); }
		if(G['xmlHttp'].readyState==4) {
			set_progress(100);
			if (G['xmlHttp'].responseText == 'logout') { document.location.href='?'; return; }
			var mySplit = G['xmlHttp'].responseText.split("<<>>");
			var myDetails = mySplit[0];
			var myFinished = mySplit[1];
			document.getElementById('importstatus').innerHTML = myDetails;
			if (myFinished == '2') { 
				G['WizardManagerFileCancel'] = false;
			} else if (myFinished == '1') {
				G['WizardManagerFileCancel'] = false;
			} else {
				setTimeout('updateImportProgress();', 1000);
			}
		}
	}
	
	var action = '';
	try { action = document.formwm.action.value; } catch(error) {}
	var parameters = "ajax=importprogress&action="+action;
	if (G['WizardManagerFileCancel']) { parameters += "&cancelimport=1"; }
	G['xmlHttp'].open("POST","?",true);
	G['xmlHttp'].setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    G['xmlHttp'].setRequestHeader("Content-length", parameters.length);
    G['xmlHttp'].setRequestHeader("Connection", "close");
    G['xmlHttp'].send(parameters);
}
function cancelImport() { 
	if (!confirm('Are you sure you want to cancel?\nYour import will be only partially done.')) { return; }
	G['WizardManagerFileCancel'] = true;
	
	// Set the status to cancelling
	document.getElementById('importstatus').innerHTML = "<strong>Cancelling File Upload</strong><br><br>Please wait... Cancelling";
}

/* Choicebuilder Functions */

function addoption(cbnum) {
	if (G['CBMaxChoices'][cbnum] > 0) { if (G['CBOptNum'][cbnum] >= G['CBMaxChoices'][cbnum]) { alert('No more choices can be added.'); return false; } }
	G['CBOptNum'][cbnum]++;
	if (InsertCBRow('cb_'+cbnum+'_'+G['CBOptNum'][cbnum], cbnum)) { return false; }
	ShowRows('cb_'+cbnum+'_'+G['CBOptNum'][cbnum]);
	document.formwm[G['CBFieldName'][cbnum]].value=G['CBOptNum'][cbnum];
}
function suboption(cbnum) {
	if ((G['CBOptNum'][cbnum] <= G['CBMinChoices'][cbnum])||(G['CBOptNum'][cbnum] == 0)) { alert('No more choices can be removed.'); return false; }
	HideRows('cb_'+cbnum+'_'+G['CBOptNum'][cbnum]);
	G['CBOptNum'][cbnum]--;
	document.formwm[G['CBFieldName'][cbnum]].value=G['CBOptNum'][cbnum];
}
function InsertCBRow(id, cbnum) { 
	if (document.getElementById(id)) { return false; }
	// The element does not exist
	document.formwm[G['CBFieldName'][cbnum]].value=G['CBOptNum'][cbnum];
	document.formwm.next.value=0;lon();updateWizardManager();
	return true;
}
function DeleteOption(opt, cbnum) { 
	if ((G['CBOptNum'][cbnum] <= G['CBMinChoices'][cbnum])||(G['CBOptNum'][cbnum] == 0)) { alert('No more choices can be removed.'); return false; }
	G['CBOptNum'][cbnum]--;
	document.formwm.delcbrow.value = cbnum+'_'+opt;
	document.formwm[G['CBFieldName'][cbnum]].value=G['CBOptNum'][cbnum];
	document.formwm.next.value=0;updateWizardManager();
	document.formwm.delcbrow.value = '';
	return true;
}
function InsertOption(opt, cbnum) { 
	if (G['CBMaxChoices'][cbnum] > 0) { if (G['CBOptNum'][cbnum] >= G['CBMaxChoices'][cbnum]) { alert('No more choices can be added.'); return false; } }
	G['CBOptNum'][cbnum]++;
	document.formwm.addcbrow.value = cbnum+'_'+opt;
	document.formwm[G['CBFieldName'][cbnum]].value=G['CBOptNum'][cbnum];
	document.formwm.next.value=0;updateWizardManager();
	document.formwm.addcbrow.value = '';
	return true;
}

/* TinyMCE Functions */
function addTinyMCEControl(id) {
	if (document.getElementById(id)) { 
		tinyMCE.execCommand('mceAddControl',false,id);
		G['currentTinyMCEInstances'].push(id);
	}
}
function removeTinyMCEControls() {
	if (G['currentTinyMCEInstances'].length > 0) { tinyMCE.triggerSave(); }
	for (var i=0;i<G['currentTinyMCEInstances'].length;i++) { 
		tinyMCE.execCommand('mceRemoveControl',false,G['currentTinyMCEInstances'][i]);
	}
	G['currentTinyMCEInstances'] = new Array();
}

function selectorSHOW(shfld, valfld, module, sh, val) {
	G['dataTableIsDoneLoading'] = false;
	G['selectorSHFLD'] = shfld;
	G['selectorVALFLD'] = valfld;
	G['selectorMODULE'] = module;
	G['selectorSH'] = sh;
	G['selectorVAL'] = val;
	G['noProcessEnterKey'] = true;
	
	// Set the display div
	var delsearches = 0;
	var ddiv = document.getElementById('selectordiv');
	if (ddiv.style.display != '') {
		document.getElementById('selector_dataContainer').innerHTML = "<div class=\"success\"><div>Please Wait, Loading Data....</div></div>";
		var left = G['posX'] - 10;
		var top = G['posY'] - 10;
		ddiv.style.left = left;
		ddiv.style.top = top;
		ddiv.style.display = '';
		delsearches = 1;
		G['vf'] = valfld.value;
	}
	
	var fields = new Array();
	var inputFields = document.form_selector.getElementsByTagName('input');
	for (var i=0;i<inputFields.length;i++) { fields.push(inputFields[i]); }
	var selectFields = document.form_selector.getElementsByTagName('select');
	for (var i=0;i<selectFields.length;i++) { fields.push(selectFields[i]); }
	var textFields = document.form_selector.getElementsByTagName('textarea');
	for (var i=0;i<textFields.length;i++) { fields.push(textFields[i]); }
	var qrystring = '';
	for (var i=0;i<fields.length;i++) {
		qrystring += "&"+fields[i].name+"="+fields[i].value;
	}
	G['xmlHttp'] = createAjaxObject();
	if (!G['xmlHttp']) { loff(); G['dataTableIsDoneLoading'] = true; return false; }
	G['xmlHttp'].onreadystatechange=function() {
		if(G['xmlHttp'].readyState==1) { set_progress(25); }
		if(G['xmlHttp'].readyState==2) { set_progress(50); }
		if(G['xmlHttp'].readyState==3) { set_progress(75); }
		if(G['xmlHttp'].readyState==4) {
			set_progress(100);
			if (G['xmlHttp'].responseText == 'logout') { G['dataTableIsDoneLoading'] = true; document.location.href='?'; return; }
			mySplit = G['xmlHttp'].responseText.split("<<>>");
			if (mySplit[1]) { document.getElementById('selector_MENUSYSTEM').innerHTML = mySplit[1]; }
			if (mySplit[2]) { document.getElementById('selector_TOPMENU').innerHTML = mySplit[2]; }
			if (mySplit[3]) { document.getElementById('selector_pagestop').innerHTML = mySplit[3]; document.getElementById('selector_pagesbot').innerHTML = mySplit[3]; }
			if (mySplit[4]) { document.getElementById('selector_linesperpage').innerHTML = mySplit[4]; }
			if (mySplit[5]) { document.getElementById('selector_displays').innerHTML = mySplit[5]; }
			// if (mySplit[7]) { document.getElementById('selector_SCREENTITLE').innerHTML = mySplit[7]; }
			if (mySplit[8]) { document.getElementById('selector_dataContainer').innerHTML = mySplit[8]; }
			loff();
			if (mySplit[9]) { eval(mySplit[9]); }
			var did = document.form_selector.bcol.value;
			if (did) { 
				var Column = document.getElementById(did);
				if (Column) { 
					var nrw = Column.offsetWidth;
					var line = Column.getAttribute('line');
					setColWidth(line, nrw);
					updateColWidth(did, nrw);
				}
				document.form_selector.bcol.value = '';
			}
			G['isSelectorDM'] = true;
			G['isTarget'] = false;
			G['dataTableIsDoneLoading'] = true;
			loff();
			try{ startFloatTitle(); } catch(err) { }
			
		}
	}
	var parameters = "delsearches="+delsearches+"&getselector=1&ajax=updatetable&selectormodule="+module+"&sh="+sh+"&val="+val+"&vf="+G['vf']+qrystring;
	G['xmlHttp'].open("POST","?",true);
	G['xmlHttp'].setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    G['xmlHttp'].setRequestHeader("Content-length", parameters.length);
    G['xmlHttp'].setRequestHeader("Connection", "close");
    G['xmlHttp'].send(parameters);
	
}
function selectorGetAdditionalChunks(startrec, selector, shfld, valfld, module, sh, val) {
	
	lon();
	G['dataTableIsDoneLoading'] = false;
	G['xmlHttp'] = createAjaxObject();
	if (!G['xmlHttp']) { G['dataTableIsDoneLoading'] = true; loff(); return false; }
	G['xmlHttp'].onreadystatechange=function() {
		if(G['xmlHttp'].readyState==1) { set_progress(25); }
		if(G['xmlHttp'].readyState==2) { set_progress(50); }
		if(G['xmlHttp'].readyState==3) { set_progress(75); }
		if(G['xmlHttp'].readyState==4) {
			set_progress(100);
			if (G['xmlHttp'].responseText == 'logout') { G['dataTableIsDoneLoading'] = true; document.location.href='?'; return; }
			if (G['xmlHttp'].responseText) { 
				var dtable = document.getElementById('selector_data_table_body');
				// Totals.
				var trow = document.getElementById('selector_totalrow');
				if (trow) { 
					var tp = document.getElementById('selector_totalrowpad');
					dtable.deleteRow(trow.rowIndex);
					dtable.deleteRow(tp.rowIndex);
				}
				var spantotals = document.getElementById('selector_SPANTOTALS');
				if (spantotals) { spantotals.id = ''; spantotals.innerHTML = ''; }
				
				var mySplit = G['xmlHttp'].responseText.split("<<>>");
				if (dtable.nodeName.toLowerCase() == 'td') { 
					dtable.innerHTML += mySplit[0];
				} else { 
					var dummy = "<table id=\"dmsdummytable\">" + mySplit[0] + "</table>";
					var ddiv = document.getElementById('dmsdummydiv');
					ddiv.innerHTML = dummy;
					var dummytable = document.getElementById('dmsdummytable');
					for (var i=0; i<dummytable.rows.length; i++) { 
						var rowobj = dummytable.rows[i].cloneNode(true);
						dtable.appendChild(rowobj);
					}
					ddiv.innerHTML = '';
				}
				document.getElementById('selector_linesperpage').innerHTML = mySplit[1];
				document.getElementById('selector_pagestop').innerHTML = mySplit[2]; document.getElementById('selector_pagesbot').innerHTML = mySplit[2];
				loff();
				G['dataTableIsDoneLoading'] = true;
			}
		}
	}
	
	var spantotals = document.getElementById('selector_SPANTOTALS');
	if (spantotals) { 
		document.form_selector.totals.value = spantotals.innerHTML;
	}
	
	fields = new Array();
	var inputFields = document.form_selector.getElementsByTagName('input');
	for (i=0;i<inputFields.length;i++) { fields.push(inputFields[i]); }
	var selectFields = document.form_selector.getElementsByTagName('select');
	for (i=0;i<selectFields.length;i++) { fields.push(selectFields[i]); }
	var textFields = document.form_selector.getElementsByTagName('textarea');
	for (i=0;i<textFields.length;i++) { fields.push(textFields[i]); }
	var qrystring = '';
	for (i=0;i<fields.length;i++) {
		qrystring += "&"+fields[i].name+"="+fields[i].value;
	}
	
	var lines = selector.options[selector.selectedIndex].value;
	selector.selectedIndex = 0;
	var parameters = "ajax=updatetable&getselector=1&selectormodule="+module+"&sh="+sh+"&val="+val+"&vf="+G['vf']+"&startrec="+startrec+"&recstoget="+lines+qrystring;
	G['xmlHttp'].open("POST","?",true);
	G['xmlHttp'].setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    G['xmlHttp'].setRequestHeader("Content-length", parameters.length);
    G['xmlHttp'].setRequestHeader("Connection", "close");
    G['xmlHttp'].send(parameters);
	
}
function selectorClose(SL) { 
	var ddiv = document.getElementById('selectordiv');
	ddiv.style.display = 'none';
	G['noProcessEnterKey'] = false;

	document.getElementById('selector_MENUSYSTEM').innerHTML = '';
	document.getElementById('selector_TOPMENU').innerHTML = '';
	document.getElementById('selector_pagestop').innerHTML = '';
	document.getElementById('selector_pagesbot').innerHTML = '';
	document.getElementById('selector_linesperpage').innerHTML = '';
	document.getElementById('selector_displays').innerHTML = '';
	document.getElementById('selector_SCREENTITLE').innerHTML = '';
	document.getElementById('selector_dataContainer').innerHTML = '';
	
	// Get rid of the searches
	var SB = document.getElementById('selector_SearchBuilder');
	for (var i=0;i<SB.rows.length;i++) { SB.deleteRow(0); }
	
	dmsdetailsClose(1);
	G['isSelectorDM'] = false;
	mouse_move();
	if (!SL) { loff(); }
	G['SELECTORID'] = false;
	try{ startFloatTitle(); } catch(err) { }
}
function wmdivClose(SL) {
	selectorClose(1);
	removeTinyMCEControls();
	var ddiv = document.getElementById('wmdiv');
	ddiv.style.display = 'none';
	document.getElementById('wmdivHeaderCell').innerHTML = '';
	document.getElementById('wmdivContent').innerHTML = '';
	if (!SL) { loff(); }
}
function setSelector() {
	fields = new Array();
	
	G['selectorSHFLD'].value = '';
	G['selectorVALFLD'].value = '';
	if (G['SELECTORID']) {
		field = document.getElementById('trs_'+G['SELECTORID']);
		G['selectorSHFLD'].value = field.getAttribute('sh');
		G['selectorVALFLD'].value = field.getAttribute('val');
	}
	selectorClose();
}
function disableEnter(e) {
	var e = e || window.event;
	return (e.keyCode != 13);
}
function fill_across_fields(field) {
	var fields = new Array();
	var cn = field.name;
	var val = field.value;
	var ischecked = false;
	if (field.type == 'checkbox') { ischecked = field.checked; }
	var name = cn.split('_');
	var inputFields = document.formwm.getElementsByTagName('input');
	for (var i=0;i<inputFields.length;i++) {
		if (inputFields[i].name == cn) { continue; }
		var tn = inputFields[i].name.split('_');
		if ((tn[0] == 'ffield')&&(tn[1] == name[1])) { inputFields[i].value = val; }
		if ((ischecked)&&(inputFields[i].type == 'checkbox')) { inputFields[i].checked = true; }
	}
}
/* Document Signing Functions */

function signmo() {
	var canvas = document.getElementById('signcanvas');
	G['signCanvas'] = canvas.getContext("2d");
	changesignink();
	canvas.on = false;
	var cpos = objFindPos(canvas);
	canvas.onmousedown = function(e) {
    	G['signCanvas'].beginPath(); G['signCanvas'].moveTo(G['posX'] - cpos[0], G['posY'] - cpos[1]);
    	this.on= true;
	};
  	canvas.onmouseup = function(e) { this.on= false };
  	canvas.onmousemove = function(e) {
  	  if (this.on)  {
  	    G['signCanvas'].lineTo(G['posX'] - cpos[0], G['posY'] - cpos[1]); G['signCanvas'].stroke();
  	  }
  	};
}
function changesigndocres() {
	document.formwm.resetres.value=1;
	document.formwm.next.value=0;lon();updateWizardManager();
	return true;
}
function changesignink() {
	var inkfield = document.getElementById('ink');
	G['signCanvas'].strokeStyle = '#'+inkfield.value;
}
function signdoc(page) { 
	var canvas = document.getElementById('signcanvas');
	var strDataURI = canvas.toDataURL();
	document.getElementById('signdata').value = strDataURI;
	document.formwm.next.value=0;lon();updateWizardManager();
	return true;
}
function setsign(page) { 
	var canvas = document.getElementById('signcanvas');
	var strDataURI = canvas.toDataURL();
	document.getElementById('signdata').value = strDataURI;
}
function signVerification() {
	var fields = new Array(document.getElementById('iitem'));
	var qrystring = '';
	for (var i=0;i<fields.length;i++) {
		qrystring += "&"+fields[i].name+"="+escape(fields[i].value).replace('+', '%2B');
	}
	G['xmlHttp'] = createAjaxObject();
	if (!G['xmlHttp']) { loff(); return false; }
	G['xmlHttp'].onreadystatechange=function() {
		if(G['xmlHttp'].readyState==1) { set_progress(25); }
		if(G['xmlHttp'].readyState==2) { set_progress(50); }
		if(G['xmlHttp'].readyState==3) { set_progress(75); }
		if(G['xmlHttp'].readyState==4) {
			set_progress(100);
			if (G['xmlHttp'].responseText == 'logout') { document.location.href='?'; return; }
			var mySplit = G['xmlHttp'].responseText.split("<<>>");
			document.getElementById('wmcontent').innerHTML = mySplit[0];
			if (mySplit[1]) { eval(mySplit[1]); }
			G['WizardManagerFileFields'] = false; // Reset the file upload fields flag
			G['WizardManagerFileCancel'] = false; // Reset the file cancel upload flag
			loff();
			if (!mySplit[2]) {
				setTimeout('signVerification();', 2000);	
			}
		}
	}
	var parameters = "ajax=update&updatesign=1&action=verify"+qrystring;
	G['xmlHttp'].open("POST","?",true);
	G['xmlHttp'].setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    G['xmlHttp'].setRequestHeader("Content-length", parameters.length);
    G['xmlHttp'].setRequestHeader("Connection", "close");
    G['xmlHttp'].send(parameters);	
}

/* Live Update Functions */
function liveUpdateCheckProgress() { 
	G['xmlHttp'] = createAjaxObject();
	if (!G['xmlHttp']) { loff(); return false; }
	G['xmlHttp'].onreadystatechange=function() {
		if(G['xmlHttp'].readyState==1) { set_progress(25); }
		if(G['xmlHttp'].readyState==2) { set_progress(50); }
		if(G['xmlHttp'].readyState==3) { set_progress(75); }
		if(G['xmlHttp'].readyState==4) {
			set_progress(100);
			if (G['xmlHttp'].responseText == 'logout') { document.location.href='?'; return; }
			var mySplit = G['xmlHttp'].responseText.split("<<>>");
			document.getElementById('updateprogress').innerHTML = mySplit[0];
			if (mySplit[1]) { eval(mySplit[1]); }
			loff();
		}
	}
	var parameters = "ajax=updatecheck&module=liveupdate";
	G['xmlHttp'].open("POST","?",true);
	G['xmlHttp'].setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    G['xmlHttp'].setRequestHeader("Content-length", parameters.length);
    G['xmlHttp'].setRequestHeader("Connection", "close");
    G['xmlHttp'].send(parameters);	
}

function urldecode( str ) {
	if (!str) { return ''; }
    // Decodes URL-encoded string  
    // 
    // version: 905.3122
    // discuss at: http://phpjs.org/functions/urldecode
    // +   original by: Philip Peterson
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +      input by: AJ
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Brett Zamir (http://brett-zamir.me)
    // +      input by: travc
    // +      input by: Brett Zamir (http://brett-zamir.me)
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Lars Fischer
    // %          note 1: info on what encoding functions to use from: http://xkr.us/articles/javascript/encode-compare/
    // *     example 1: urldecode('Kevin+van+Zonneveld%21');
    // *     returns 1: 'Kevin van Zonneveld!'
    // *     example 2: urldecode('http%3A%2F%2Fkevin.vanzonneveld.net%2F');
    // *     returns 2: 'http://kevin.vanzonneveld.net/'
    // *     example 3: urldecode('http%3A%2F%2Fwww.google.nl%2Fsearch%3Fq%3Dphp.js%26ie%3Dutf-8%26oe%3Dutf-8%26aq%3Dt%26rls%3Dcom.ubuntu%3Aen-US%3Aunofficial%26client%3Dfirefox-a');
    // *     returns 3: 'http://www.google.nl/search?q=php.js&ie=utf-8&oe=utf-8&aq=t&rls=com.ubuntu:en-US:unofficial&client=firefox-a'
    
    var histogram = {}, ret = str.toString(), unicodeStr='', hexEscStr='';
    
    var replacer = function(search, replace, str) {
        var tmp_arr = [];
        tmp_arr = str.split(search);
        return tmp_arr.join(replace);
    };
    
    // The histogram is identical to the one in urlencode.
    histogram["'"]   = '%27';
    histogram['(']   = '%28';
    histogram[')']   = '%29';
    histogram['*']   = '%2A';
    histogram['~']   = '%7E';
    histogram['!']   = '%21';
    histogram['%20'] = '+';
    histogram['\u00DC'] = '%DC';
    histogram['\u00FC'] = '%FC';
    histogram['\u00C4'] = '%D4';
    histogram['\u00E4'] = '%E4';
    histogram['\u00D6'] = '%D6';
    histogram['\u00F6'] = '%F6';
    histogram['\u00DF'] = '%DF'; 
    histogram['\u20AC'] = '%80';
    histogram['\u0081'] = '%81';
    histogram['\u201A'] = '%82';
    histogram['\u0192'] = '%83';
    histogram['\u201E'] = '%84';
    histogram['\u2026'] = '%85';
    histogram['\u2020'] = '%86';
    histogram['\u2021'] = '%87';
    histogram['\u02C6'] = '%88';
    histogram['\u2030'] = '%89';
    histogram['\u0160'] = '%8A';
    histogram['\u2039'] = '%8B';
    histogram['\u0152'] = '%8C';
    histogram['\u008D'] = '%8D';
    histogram['\u017D'] = '%8E';
    histogram['\u008F'] = '%8F';
    histogram['\u0090'] = '%90';
    histogram['\u2018'] = '%91';
    histogram['\u2019'] = '%92';
    histogram['\u201C'] = '%93';
    histogram['\u201D'] = '%94';
    histogram['\u2022'] = '%95';
    histogram['\u2013'] = '%96';
    histogram['\u2014'] = '%97';
    histogram['\u02DC'] = '%98';
    histogram['\u2122'] = '%99';
    histogram['\u0161'] = '%9A';
    histogram['\u203A'] = '%9B';
    histogram['\u0153'] = '%9C';
    histogram['\u009D'] = '%9D';
    histogram['\u017E'] = '%9E';
    histogram['\u0178'] = '%9F';

    for (unicodeStr in histogram) {
        hexEscStr = histogram[unicodeStr]; // Switch order when decoding
        ret = replacer(hexEscStr, unicodeStr, ret); // Custom replace. No regexing
    }
    
    // End with decodeURIComponent, which most resembles PHP's encoding functions
    ret = decodeURIComponent(ret);

    return ret;
}


/* New Tree Functions of the wizardmanager / propertiesmanager */
function expand_tree(treeid, branchid) { 
	document.formwm.treeop.value = 'expand';
	document.formwm.treeid.value = treeid;
	document.formwm.branchid.value = branchid;
	document.formwm.next.value=0;
	updateWizardManager();
	document.formwm.treeop.value = '';
	document.formwm.treeid.value = '';
	document.formwm.branchid.value = '';
	document.formwm.next.value=1;
}
function collapse_tree(treeid, branchid) { 
	document.formwm.treeop.value = 'collapse';
	document.formwm.treeid.value = treeid;
	document.formwm.branchid.value = branchid;
	document.formwm.next.value=0;
	updateWizardManager();
	document.formwm.treeop.value = '';
	document.formwm.treeid.value = '';
	document.formwm.branchid.value = '';
	document.formwm.next.value=1;
}
function tree_select(treeid, branchid) {
	document.formwm.treeop.value = 'select';
	document.formwm.treeid.value = treeid;
	document.formwm.branchid.value = branchid;
	document.formwm.next.value=0;
	updateWizardManager();
	document.formwm.treeop.value = '';
	document.formwm.treeid.value = '';
	document.formwm.branchid.value = '';
	document.formwm.next.value=1;
}
function treeMenu(event, treeid, branchid) {
	document.formwm.treeid.value = treeid;
	document.formwm.branchid.value = branchid;
	if (G['isSelectorDM']) { return; }
	G['coldrag'] = false; G['movecol'] = false; G['rightclicked'] = true;
	// try to compensate for tendency to treat right-clicking as text selection
	try { window.getSelection().collapseToStart(); } catch (e) {} // do nothing
	
	// prevent the event from bubbling up and causing the regular browser context menu to appear.
  	event.cancelBubble = true;
	if (event.stopPropagation) event.stopPropagation(); 
  	if (event.preventDefault) event.preventDefault();
	
	vsMenuShowRightClickMenu('r_treeop_menu_'+treeid);
	G['rightclicked'] = false;
	return false;
}
/* End Tree Functions. */
