// JavaScript 1.3

// FAT-MySQL -- Form Automation Tools for MySQL -- v 1.0
// JavaScript system file

// st-out.com


//-----------------------------------------------------------------------------------------------------------------------------
//					global functions & variables
//-----------------------------------------------------------------------------------------------------------------------------

var formActive;

function popHelp(main, sub) {
	str = absLocFAT + 'help/index.php';
	if(main) {
		str += '?main=' + main;
		if(sub) str += '&sub=' + sub;
	}
	popup(str, 850, 600, 50, 50);
}


//-----------------------------------------------------------------------------------------------------------------------------
//					form validation functions & variables
//-----------------------------------------------------------------------------------------------------------------------------

var FAT_alert = '';

var mandatoryAlert = 'the following fields are mandatory : ';

var forbiddenAlert = 'do not use any of the following characters : ';

var minlengthAlert = 'minimum amount of characters : ';

var schemeAlert = 'entry must be ';

var extensionAlert = 'wrong format, allowed extensions : ';

var checkArray = new Object();

var uploadArray = new Object();

function fieldCheck(myField) {
//	return true;
	checkReturn = false;
	fieldForm = myField.form.name;
	if(checkArray[fieldForm]['minlength'][myField.name]) {
		if(checkMinlength(myField)) checkReturn = true;
	}
	if(checkArray[fieldForm]['forbidden'][myField.name]) {
		if(checkForbidden(myField)) checkReturn = true;
	}
	if(checkArray[fieldForm]['schemes'][myField.name]) {
		if(checkScheme(myField)) checkReturn = true;
	}
	if(checkReturn) {
		window.alert(FAT_alert);
		FAT_alert = '';
		if(navigator.appName != 'Netscape') {
			myField.focus();
			myField.select();
		}
		// else myField.value = '';
	}
}

function formSubmit(myForm) {
//	return true;
	submitReturn = true;
	fieldForm = myForm;
	tempArray = new Array();
	for(i in checkArray[myForm]['mandatory']) {
		tempResult = true;
		if(document.forms[myForm][i].type == 'checkbox') {
			if(!document.forms[myForm][i].checked) tempResult = false;
		}
		else if(document.forms[myForm][i][0] && document.forms[myForm][i][0].type == 'radio') {
			radioResult = false;
			for(j = 0; j < document.forms[myForm][i].length; j++) if(document.forms[myForm][i][j].checked) radioResult = true;
			tempResult = radioResult;
		}
		else if(!document.forms[myForm][i].value) {
			tempResult = false;
		}
		if(!tempResult) {
			submitReturn = false;
			myLabel = checkArray[myForm]['mandatory'][i];
			if(myLabel == '') myLabel = document.forms[myForm][i].name;
			tempArray.push('\'' + myLabel + '\'');
		}
	}
	if(!submitReturn) {
		if(FAT_alert != '') FAT_alert += '\n\n';
		FAT_alert += mandatoryAlert + '\n' + tempArray.join(', ');
	}
	for(i in checkArray[myForm]['minlength']) {
		if(checkMinlength(document.forms[myForm][i])) submitReturn = false;
	}
	for(i in checkArray[myForm]['forbidden']) {
		if(checkForbidden(document.forms[myForm][i])) submitReturn = false;
	}
	for(i in checkArray[myForm]['schemes']) {
		if(checkScheme(document.forms[myForm][i])) submitReturn = false;
	}
	if(!submitReturn) window.alert(FAT_alert);
	FAT_alert = '';
	if(submitReturn) {
		waitForeground = myForm + '_waitForeground';
		if(document.getElementById(waitForeground)) {
			$(waitForeground).setStyle({visibility: 'visible', display: 'block'});
			Position.absolutize(waitForeground);
			Position.clone(myForm, waitForeground);
		}
		waitImage = myForm + '_waitImage';
		if(document.getElementById(waitImage)) {
			$(waitImage).setStyle({visibility: 'visible', display: 'block'});
			formDim = $(myForm).getDimensions();
			imageDim = $(waitImage).getDimensions();
			myL = Math.round((parseInt(formDim.width) / 2) - (parseInt(imageDim.width) / 2));
			myT = Math.round((parseInt(formDim.height) / 2) - (parseInt(imageDim.height) / 2)); 
			Position.absolutize(waitImage);
			Position.clone(myForm, waitImage, {setWidth: false, setHeight: false, offsetLeft: myL, offsetTop: myT});
		}
	}
	return submitReturn;
}

function checkMinlength(myField) {
	myReturn = false;
	temp = checkArray[fieldForm]['minlength'][myField.name].split('_-_');
	myLabel = temp[0];
	myLength = parseInt(temp[1]);
	myValue = myField.value;
	if(myValue != '' && myValue.length < myLength) {
		myReturn = true;
		if(FAT_alert != '') FAT_alert += '\n\n';
		if(myLabel != '') FAT_alert += '\'' + myLabel + '\' : ';
		FAT_alert += minlengthAlert + myLength;
	}
	return myReturn;
}

function checkForbidden(myField) {
	myReturn = false;
	temp = checkArray[fieldForm]['forbidden'][myField.name].split('_-_');
	myLabel = temp[0];
	tempArray = temp[1].split('_&&_');
	forbiddenArray = new Array();
	for(i = 0; i < tempArray.length; i++) if(tempArray[i] != '') forbiddenArray.push(tempArray[i]);
	if(arrayContains(forbiddenArray, ' ') || arrayContains(forbiddenArray, '_space_')) myField.value = trimSpaces(myField.value);
	myValue = myField.value;
	if(myValue != '') {
		testArray = forbiddenArray;
		for(i = 0; i < testArray.length; i++) {
			if(testArray[i] == '_space_') testArray[i] = ' ';
			if(testArray[i] == '_backslash_') testArray[i] = '\\';
			if(testArray[i] == '_squote_') testArray[i] = '\'';
			if(testArray[i] == '_dquote_') testArray[i] = '\"';
			if(testArray[i] == '_comma_') testArray[i] = ',';
		}
		if(stringContains(myValue, testArray)) myReturn = true;
	}
	if(myReturn) {
		for(i = 0; i < forbiddenArray.length; i++) {
			if(forbiddenArray[i] == ' ') forbiddenArray[i] = 'space';
			if(forbiddenArray[i] == '_space_') forbiddenArray[i] = 'space';
			if(forbiddenArray[i] == '_squote_') forbiddenArray[i] = '\'';
			if(forbiddenArray[i] == '_dquote_') forbiddenArray[i] = '\"';
			if(forbiddenArray[i] == ',') forbiddenArray[i] = 'comma';
			if(forbiddenArray[i] == '_comma_') forbiddenArray[i] = 'comma';
		}
		if(FAT_alert != '') FAT_alert += '\n\n';
		if(myLabel != '') FAT_alert += '\'' + myLabel + '\' : ';
		FAT_alert += forbiddenAlert + '\n' + forbiddenArray.join(', ');
	}
	return myReturn;
}

function checkScheme(myField) {
	myReturn = false;
	temp = checkArray[fieldForm]['schemes'][myField.name].split('_-_');
	myLabel = temp[0];
	myScheme = temp[1].split('_');
	FAT_alertScheme = '';
	myField.value = trimSpaces(myField.value);
	switch(myScheme[0]) {
		case 'NUMBER':
			FAT_alertScheme = 'a number';
			if(myScheme[1]) FAT_alertScheme += ', minimum ' + myScheme[1];
			if(myScheme[2]) FAT_alertScheme += ', maximum' + myScheme[2];
			if(myField.value != '' && myField.value != 'NULL') {
				temp = myField.value;
				temp = temp.split(',');
				temp = temp.join('.');
				temp = temp.split(';');
				temp = temp.join('.');
				myField.value = temp;
				myField.value = parseFloat(myField.value);
				if(isNaN(myField.value)) {
					myReturn = true;
				}
				else if(myScheme[2]) {
					if(myField.value < parseFloat(myScheme[1]) || myField.value > parseFloat(myScheme[2])) myReturn = true;
				}
				else if(myScheme[1]) {
					if(myField.value < parseFloat(myScheme[1])) myReturn = true;
				}
			}
		break;
		case 'INTEGER':
			FAT_alertScheme = 'an integer number';
			if(myScheme[1]) FAT_alertScheme += ', minimum ' + myScheme[1];
			if(myScheme[2]) FAT_alertScheme += ', maximum' + myScheme[2];
			if(myField.value != '' && myField.value != 'NULL') {
				myField.value = parseInt(myField.value);
				if(isNaN(myField.value)) {
					myReturn = true;
				}
				else if(myScheme[2]) {
					if(myField.value < parseInt(myScheme[1]) || myField.value > parseInt(myScheme[2])) myReturn = true;
				}
				else if(myScheme[1]) {
					if(myField.value < parseInt(myScheme[1])) myReturn = true;
				}
			}
		break;
		case 'EMAIL':
			FAT_alertScheme = 'a valid e-mail address';
			if(myField.value != '' && myField.value != 'NULL') {
				if(!stringIsEmail(myField.value)) myReturn = true;
			}
		break;
		case 'EQUAL':
			if(myScheme[1] && myField.value != '' && myField.value != 'NULL') {
				if(myScheme[2]) FAT_alertScheme = 'same as \'' + myScheme[2] + '\'';
				else FAT_alertScheme = 'same as \'' + myScheme[1] + '\'';
				compareField = document.forms[myField.form.name][myScheme[1]];
				if(compareField.value != '') {
					if(myField.value != compareField.value) myReturn = true;
				}
			}
	}
	if(myReturn) {
		if(FAT_alert != '') FAT_alert += '\n\n';
		if(myLabel != '') FAT_alert += '\'' + myLabel + '\' : ';
		FAT_alert += schemeAlert + FAT_alertScheme;
	}
	return myReturn;
}


//-----------------------------------------------------------------------------------------------------------------------------
//					text field functions & variables
//-----------------------------------------------------------------------------------------------------------------------------

function upDownSet(direction, field, unit, jump, minimum, maximum) {
	if(unit == (1/10)) {
		if(field.value != '') myVal = parseFloat(field.value);
		else myVal = 0;
		if(isNaN(myVal)) myVal = 0;
		myMin = parseFloat(minimum);
		myMax = parseFloat(maximum);
	}
	else {
		if(field.value != '') myVal = parseInt(field.value);
		else myVal = 0;
		myMin = parseInt(minimum);
		myMax = parseInt(maximum);
	}
	if(direction == 'down') temp = myVal - jump;
	else temp = myVal + jump;
	if(!isNaN(myMin) && temp < myMin) temp = myMin;
	if(!isNaN(myMax) && temp > myMax) temp = myMax;
	if(unit == (1/10)) {
		temp = Math.round(temp * 10);
		temp = temp / 10;
	}
	field.value = temp;
}


//-----------------------------------------------------------------------------------------------------------------------------
//					buttonList field functions & variables
//-----------------------------------------------------------------------------------------------------------------------------

function buttonListSet(field, button, buttons, val, delim, multi, onClass, offClass) {
	triggerEvent('focus', field);
	triggerEvent('select', field);
	triggerEvent('click', field);
	if(multi) {
		if(field.value.search(val) == -1) {
			field.value = field.value + delim + val;
			button.className = onClass;
		}
		else {
			field.value = field.value.replace(val, '');
			temp = field.value.split(delim);
			temptemp = new Array();
			for(i = 0; i < temp.length; i++) {
				if(temp[i] != '') temptemp.push(temp[i]); 
			}
			field.value = temptemp.join(delim);
			button.className = offClass;
		}
	}
	else {
		for(i = 0; i < buttons.length; i++) document.getElementById(buttons[i]).className = offClass;
		if(field.value == val) field.value = '';
		else {
			field.value = val;
			button.className = onClass;
		}
	}
	triggerEvent('blur', field);
	triggerEvent('change', field);
}

function buttonListClear(field, buttons, offClass) {
	triggerEvent('focus', field);
	triggerEvent('select', field);
	triggerEvent('click', field);
	for(i = 0; i < buttons.length; i++) document.getElementById(buttons[i]).className = offClass;
	field.value = '';
	triggerEvent('blur', field);
	triggerEvent('change', field);
}


//-----------------------------------------------------------------------------------------------------------------------------
//					file field functions & variables
//-----------------------------------------------------------------------------------------------------------------------------

function fileCheckValue(field) {
//	return true;
	// check extension
	tmpUplArr = uploadArray[field.form.name]; 
	if(tmpUplArr['extensions'][field.name] && tmpUplArr['extensions'][field.name] != '') {
		tmpArr = tmpUplArr['extensions'][field.name].split('___');
		success = false;
        for (i = 0; i < tmpArr.length; i++) {
            if(tmpArr[i].toLowerCase() == tmpUplArr['currentExt'][field.name].toLowerCase()) {
                success = true;
                break;
            }
        }
        if(!success) {
            window.alert(extensionAlert + tmpArr.join(', '));
            field.value = '';
            if(tmpUplArr['nameField'][field.name]) formActive[tmpUplArr['nameField'][field.name]].value = '';
            if(tmpUplArr['extensionField'][field.name]) formActive[tmpUplArr['extensionField'][field.name]].value = '';
            tmpUplArr['currentExt'][field.name] = '';
            return false;
        }
	}
	// check name
	if(tmpUplArr['nameField'][field.name]) {
		fileName = formActive[tmpUplArr['nameField'][field.name]].value;
		tmpForbidden = new Array('/', '\\', ':', '\*', '?', '"', '\'', '<', '>', '|');
		for(i = 0; i < tmpForbidden.length; i++) {
			arr = fileName.split(tmpForbidden[i]);
			fileName = arr.join('_');
		}
		arr = fileName.split('.');
		ext = arr[arr.length - 1];
		ext = ext.toLowerCase();
		if(ext != tmpUplArr['currentExt'][field.name] || fileName == ext) {
		    if(arr.length > 1) arr[arr.length - 1] = tmpUplArr['currentExt'][field.name];
		    else arr[arr.length] = tmpUplArr['currentExt'][field.name];
		}
		else arr[arr.length - 1] = tmpUplArr['currentExt'][field.name];
		fileName = arr.join('.');
		tmpEmpty = '.' + tmpUplArr['currentExt'][field.name];
		if(fileName == tmpEmpty) fileName = 'untitled.' + tmpUplArr['currentExt'][field.name]; 
		formActive[tmpUplArr['nameField'][field.name]].value = fileName;
	}
	return true;
}

function directoryCheckValue(field) {
//	return true;
	// check name
	tmpUplArr = uploadArray[field.form.name]; 
	if(tmpUplArr['directoryField'][field.name]) {
		dirName = formActive[tmpUplArr['directoryField'][field.name]].value;
		tmpForbidden = new Array('\\', ':', '\*', '?', '"', '\'', '<', '>', '|');
		for(i = 0; i < tmpForbidden.length; i++) {
			arr = dirName.split(tmpForbidden[i]);
			dirName = arr.join('_');
		}
		formActive[tmpUplArr['directoryField'][field.name]].value = dirName;
	}
	return true;
}


//-----------------------------------------------------------------------------------------------------------------------------
//					url field functions & variables
//-----------------------------------------------------------------------------------------------------------------------------

function urlSetScheme(field, scheme) {
	activeScheme = scheme;
	for(i = 0; i < urlSchemes.length; i++) {
		if(field.value.indexOf(urlSchemes[i]) != -1) {
			temp = field.value.split(urlSchemes[i]);
			field.value = temp.join('');
		}
	}
	field.value = activeScheme + field.value;
}


//-----------------------------------------------------------------------------------------------------------------------------
//					valUnit field functions & variables
//-----------------------------------------------------------------------------------------------------------------------------

function valUnitSet(field, valuefield, unitfield, delimiter) {
	field.value = valuefield.value + delimiter + unitfield.value;
}


//-----------------------------------------------------------------------------------------------------------------------------
//					time field functions & variables
//-----------------------------------------------------------------------------------------------------------------------------

timeUnit = 'h';

function timeUpDownSet(direction, field, bAction, hJump, mJump, sJump, hField, mField, sField) {
	switch(timeUnit) {
		case 'h':
			aField = hField;
			bField = 0;
			cField = 0;
			aMax = 23;
			bMax = 0;
			cMax = 0;
			aJump = hJump;
		break;
		case 'm':
			aField = mField;
			bField = hField;
			cField = 0;
			aMax = 59;
			bMax = 23;
			cMax = 0;
			aJump = mJump;
		break;
		case 's':
			aField = sField;
			bField = mField;
			cField = hField;
			aMax = 59;
			bMax = 59;
			cMax = 23;
			aJump = sJump;
	}
	aJump = parseInt(aJump);
	if(aJump < 1) aJump = 1;
	else if(aJump > aMax) aJump = aMax;
	val = aField.value;
	if(val.length > 1 && val.indexOf('0') == 0) val = val.substr(1, 1);
	val = parseInt(val);
	aField.value = val;
	if(direction == 'up' && (val + aJump) > aMax) {
		if(bField) {
			if(parseInt(bField.value) == bMax) {
				bField.value = 0;
				if(cField) {
					if(parseInt(cField.value) == cMax) cField.value = 0;
					else upDownSet(direction, cField, 1, 1, 0, cMax);
				}
			}
			else upDownSet(direction, bField, 1, 1, 0, bMax);
		}
		aField.value = (val + aJump) - aMax - 1;
	}
	else if(direction == 'down' && (val - aJump) < 0) {
		if(bField) {
			if(parseInt(bField.value) == 0) {
				bField.value = bMax;
				if(cField) {
					if(parseInt(cField.value) == 0) cField.value = cMax;
					else upDownSet(direction, cField, 1, 1, 0, cMax);
				}
			}
			else upDownSet(direction, bField, 1, 1, 0, bMax);
		}
		aField.value = aMax + 1 - (aJump - val)
		//if(bField) triggerBAction = direction;
	}
	else {
		aField.value = val;
		upDownSet(direction, aField, 1, aJump, 0, aMax);
	}
	if(parseInt(hField.value) < 10) hField.value = '0' + parseInt(hField.value);
	if(parseInt(mField.value) < 10) mField.value = '0' + parseInt(mField.value);
	if(sField && parseInt(sField.value) < 10) sField.value = '0' + parseInt(sField.value);
	if(sField) timeSet(field, hField, mField, sField);
	else timeSet(field, hField, mField);
	aField.select();
}

function timeSet(field, hField, mField, sField) {
	if(hField.value == '') hField.value = 0;
	if(mField.value == '') mField.value = 0;
	if(sField && sField.value == '') sField.value = 0;
	if(hField.value.length > 1 && hField.value.indexOf('0') == 0) hField.value = hField.value.substr(1, 1);
	if(parseInt(hField.value) < 10) hField.value = '0' + hField.value;
	if(mField.value.length > 1 && mField.value.indexOf('0') == 0) mField.value = mField.value.substr(1, 1);
	if(parseInt(mField.value) < 10) mField.value = '0' + mField.value;
	if(sField) {
		if(sField.value.length > 1 && sField.value.indexOf('0') == 0) sField.value = sField.value.substr(1, 1);
		if(parseInt(sField.value) < 10) sField.value = '0' + sField.value;
	}
	if(isNaN(hField.value)) hField.value = '00';
	if(isNaN(mField.value)) mField.value = '00';
	if(sField && isNaN(sField.value)) sField.value = '00';
	if(sField) field.value = hField.value + ':' + mField.value + ':' + sField.value;
	else field.value = hField.value + ':' + mField.value;
}

function timeCheck(field) {
	if(field.value != '') {
		temp = field.name.split('time_');
		switch(temp[0]) {
		case '_H' :
			if(isNaN(parseInt(field.value)) || field.value > 23) {
				window.alert('Hour : 00 - 23');
				field.value = '00';
			}
		break;
		case '_M' : 
			if(isNaN(parseInt(field.value)) || field.value > 59) {
				window.alert('Minutes : 00 - 59');
				field.value = '00';
			}
		break;
		case '_S' : 
			if(isNaN(parseInt(field.value)) || field.value > 59) {
				window.alert('Seconds : 00 - 59');
				field.value = '00';
			}
		}
	}
}


//-----------------------------------------------------------------------------------------------------------------------------
//					actionlist functions & variables
//-----------------------------------------------------------------------------------------------------------------------------

orgRowClass = '';
alistArray = new Object();
var alistXHR;
var alistActive;

function alistSetSelected(pid, check, alist) {
	switch(alistArray[alist]['select']) {
		case 'radio' : 
			if(check) {
				if(alistArray[alist]['rowSelectedClass']) {
					document.getElementById('td_' + alist + '_' + pid).className = alistArray[alist]['rowSelectedClass'];
					if(!alistArray[alist]['rowClass']) alistArray[alist]['rowClass'] = 'none';
					prevSelected = alistArray[alist]['prevSelected'];
					if(prevSelected != 0) document.getElementById('td_' + alist + '_' + prevSelected).className = alistArray[alist]['rowClass'];
					alistArray[alist]['prevSelected'] = pid;
					orgRowClass = alistArray[alist]['rowSelectedClass'];
				}
				alistArray[alist]['selected'] = pid;
			}
		break;
		default :
			if(check) {
				if(alistArray[alist]['rowSelectedClass']) {
					document.getElementById('td_' + alist + '_' + pid).className = alistArray[alist]['rowSelectedClass'];
					orgRowClass = alistArray[alist]['rowSelectedClass'];
				}
				alistArray[alist]['selected'].push(pid);
			}
			else {
				if(!alistArray[alist]['rowClass']) alistArray[alist]['rowClass'] = 'none'
				document.getElementById('td_' + alist + '_' + pid).className = alistArray[alist]['rowClass'];
				orgRowClass = alistArray[alist]['rowClass'];
				alistArray[alist]['selected'] = arrayRemoveValue(alistArray[alist]['selected'], pid);
			}
	}
}

function alistRefresh(alist) {
	if(window.ActiveXObject) alistXHR = new ActiveXObject("Microsoft.XMLHTTP");
	else if(window.XMLHttpRequest) alistXHR = new XMLHttpRequest();
	url = alistArray[alist]['locFAT'] + "alist/alistUpdate.php?timeStamp=" + new Date().getTime();
	queryString = '';
	c = 0;
	for(x in alistArray[alist]) {
		if(c > 0) queryString += '&';
		c++;
		queryString += x + '=' + alistArray[alist][x];
	}
	queryString += '&orgLocFAT=' + orgLocFAT;
	queryString += '&jsName=' + alist;
	alistActive = alist;
	document.getElementById('label_' + alistActive).innerHTML = 'Loading ...';
	if(alistArray[alist]['loadingClass']) document.getElementById('label_' + alistActive).className = alistArray[alist]['loadingClass'];
	alistXHR.open("POST", url, true);
	alistXHR.onreadystatechange = alistHandleRefresh;
	alistXHR.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");    
	alistXHR.send(queryString);
}

function alistHandleRefresh() {
	if(alistXHR.readyState == 4) {
		if(alistXHR.status == 200) {
			document.getElementById('div_' + alistActive).innerHTML = alistXHR.responseText;
			if(alistArray[alistActive]['select'] == 'radio') {
				alistArray[alistActive]['selected'] = 0;
				alistArray[alistActive]['prevSelected'] = 0;
			}
			else alistArray[alistActive]['selected'] = new Array();
			alistActive = false;
		}
	}
}

function alistQuery(query, alist) {
	if(!alistActive) {
		goQuery = true;
		if(alistArray[alist]['select']) {
			switch(alistArray[alist]['select']) {
				case 'radio' : 
					if(query.search('_SELECTED_') != -1 && alistArray[alist]['selected'] == 0) goQuery = false;
					else {
						tmpSelected = alistArray[alist]['selected'];
						if(isNaN(tmpSelected)) tmpSelected = '%27' + tmpSelected + '%27';
						query = query.replace('_IS_SELECTED_', '%3D+' + tmpSelected)
						query = query.replace('_NOT_SELECTED_', '%21%3D+' + tmpSelected)
					}
				break;
				default :
					if(query.search('_SELECTED_') != -1 && alistArray[alist]['selected'].length == 0) goQuery = false;
					else {
						tmpSelected = '%28';
						c = 0;
						for(x = 0; x < alistArray[alist]['selected'].length; x++) if(alistArray[alist]['selected'][x] != '') {
							if(c > 0) tmpSelected += '%2C+';
							c++;
							if(isNaN(alistArray[alist]['selected'][x])) tmpSelected += '%27';
							tmpSelected += alistArray[alist]['selected'][x];
							if(isNaN(alistArray[alist]['selected'][x])) tmpSelected += '%27';
						}
						tmpSelected += '%29';
						query = query.replace('_IS_SELECTED_', 'in+' + tmpSelected)
						query = query.replace('_NOT_SELECTED_', 'not+in+' + tmpSelected)
					}
			}
		}
		if(goQuery) {
			if(window.ActiveXObject) alistXHR = new ActiveXObject("Microsoft.XMLHTTP");
			else if(window.XMLHttpRequest) alistXHR = new XMLHttpRequest();
			url = alistArray[alist]['locFAT'] + "alist/alistQuery.php?timeStamp=" + new Date().getTime();
			queryString = 'query=' + urlencode(query);
			alistActive = alist;
			document.getElementById('label_' + alistActive).innerHTML = 'Processing request ... ';
			if(alistArray[alist]['loadingClass']) document.getElementById('label_' + alistActive).className = alistArray[alist]['loadingClass'];
			alistXHR.open("POST", url, true);
			alistXHR.onreadystatechange = alistHandleQuery;
			alistXHR.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");    
			alistXHR.send(queryString);
		}
		else window.alert('nothing selected');
	}
	else window.alert('still loading ... please try again');
}

function alistHandleQuery() {
	if(alistXHR.readyState == 4) {
		if(alistXHR.status == 200) {
			tmp = alistActive;
			alistActive = false;
			if(alistXHR.responseText.search('FATdatabaseFailure') != -1) window.alert('database communication failed ... please try again')
			else alistRefresh(tmp);
		}
	}
}

function alistPopAction(action, queryString, alist, w, h, l, t) {
	tmpAction = action.split(':');
	if(tmpAction[0].toLowerCase() != 'path' && tmpAction[0].toLowerCase() != 'url') {
		tmpExt = getFileExt(action, 'lower'); 
		if(tmpExt && (tmpExt == 'php' || tmpExt == 'htm' || tmpExt == 'html' || tmpExt == 'inc')) action = alistArray[alist]['locFAT'] + 'actions/' + action;
		else action = alistArray[alist]['locFAT'] + 'actions/' + action + '.php';
	}
	else {
		tmpAction.shift();
		action = tmpAction.join(':');
	}
	if(queryString) action += '?' + queryString;
	if(!w) w = 250;
	if(!h) h = 250;
	if(!l) l = 0;
	if(!t) t = 0;
	popup(action, w, h, l, t);
	window.setTimeout('alistArray[\'' + alist + '\'][\'changes\'] = true', 5000);
}

function alistPopForm(form, pid, label, alist, w, h, l, t) {
	tmp = new Object();
	if(form) tmp['form'] = urlencode(form);
	if(pid) tmp['pid'] = urlencode(pid);
	if(label) tmp['label'] = urlencode(label);
	if(alist) tmp['alist'] = urlencode(alist);
	queryString = '';
		c = 0;
		for(x in tmp) {
			if(c > 0) queryString += '&';
			c++;
			queryString += x + '=' + tmp[x];
		}
	url = alistArray[alist]['locFAT'] + 'alist/alistPopForm.php?' + queryString;
	if(!w) w = 250;
	if(!h) h = 250;
	if(!l) l = 0;
	if(!t) t = 0;
	popup(url, w, h, l, t);
	window.setTimeout('alistArray[\'' + alist + '\'][\'changes\'] = true', 5000);
}

function alistOpenForm(frame, form, pid, label, alist, w, h) {
	tmp = new Object();
	if(form) tmp['form'] = urlencode(form);
	if(pid) tmp['pid'] = urlencode(pid);
	if(label) tmp['label'] = urlencode(label);
	if(alist) tmp['alist'] = urlencode(alist);
	queryString = '';
		c = 0;
		for(x in tmp) {
			if(c > 0) queryString += '&';
			c++;
			queryString += x + '=' + tmp[x];
		}
	url = alistArray[alist]['locFAT'] + 'alist/alistOpenForm.php?' + queryString;
	if(!w) w = 250;
	if(!h) h = 250;
	frames[frame].location = url;
	window.setTimeout('alistArray[\'' + alist + '\'][\'changes\'] = true', 5000);
}

function alistPopReport(form, pid, label, alist, w, h, l, t) {
	tmp = new Object();
	if(form) tmp['form'] = urlencode(form);
	if(pid) tmp['pid'] = urlencode(pid);
	if(label) tmp['label'] = urlencode(label);
	if(alist) tmp['alist'] = urlencode(alist);
	queryString = '';
		c = 0;
		for(x in tmp) {
			if(c > 0) queryString += '&';
			c++;
			queryString += x + '=' + tmp[x];
		}
	url = alistArray[alist]['locFAT'] + 'alist/alistPopReport.php?' + queryString;
	if(!w) w = 250;
	if(!h) h = 250;
	if(!l) l = 0;
	if(!t) t = 0;
	popup(url, w, h, l, t);
}

function alistChanges(alist) {
	if(alistArray[alist]['changes']) {
		alistArray[alist]['changes'] = false;
		alistRefresh(alist);
	}
}

function alistSetPage(dir, alist) {
	goPage = false;
	rTot = document.getElementById('rows_' + alist).value;
	rLim = document.getElementById('limit_' + alist).value;
	if(rLim != 'no limit' && rLim > 0 && rTot > 0) pMax = Math.ceil(rTot / rLim);
	else pMax = 1;
	if(!alistArray[alist]['reqPage']) alistArray[alist]['reqPage'] = 1;
	if(alistArray[alist]['reqPage'] > pMax) alistArray[alist]['reqPage'] = pMax;
	if(pMax > 1) switch(dir) {
		case '+' :
			if(alistArray[alist]['reqPage'] < pMax) {
				alistArray[alist]['reqPage']++;
				goPage = true;
			}
		break;
		case '++' :
			if(alistArray[alist]['reqPage'] < pMax) {
				alistArray[alist]['reqPage'] = pMax;
				goPage = true;
			}
		break;
		case '-' :
			if(alistArray[alist]['reqPage'] > 1) {
				alistArray[alist]['reqPage']--;
				goPage = true;
			}
		break;
		case '--' :
			if(alistArray[alist]['reqPage'] > 1) {
				alistArray[alist]['reqPage'] = 1;
				goPage = true;
			}
		break;
		default :
			if(alistArray[alist]['reqPage'] != dir) {
				alistArray[alist]['reqPage'] = dir;
				goPage = true;
			}
	}
	if(goPage) alistRefresh(alist);
}

function alistSetOrder(order, alist) {
	goPage = false;
	if(order == 'asc') {
		alistArray[alist]['reqOrderDir'] = 0;
		goPage = true;
	}
	else if(order == 'desc') {
		alistArray[alist]['reqOrderDir'] = order;
		goPage = true;
	}
	else if(!alistArray[alist]['reqOrder'] || alistArray[alist]['reqOrder'] != order) {
		alistArray[alist]['reqOrder'] = order;
		goPage = true;
	}
	if(goPage) alistRefresh(alist);
}

function alistSetFilter(filter, alist) {
	if(alistArray[alist]['reqFilter'] != filter) {
		alistArray[alist]['reqFilter'] = filter;
		alistArray[alist]['reqPage'] = 1;
		alistRefresh(alist);
	}
}

function alistSetSearch(alist) {
	if(alistArray[alist]['reqSearchField'] && alistArray[alist]['reqSearchString'] && alistArray[alist]['reqSearchString'] != '') {
		alistRefresh(alist);
	}
}

function alistSetLimit(limit, alist) {
	goPage = false;
	if(!alistArray[alist]['reqLimit']) {
		alistArray[alist]['reqLimit'] = limit;
		goPage = true;
	}
	else if(alistArray[alist]['reqLimit'] != limit) {
		alistArray[alist]['reqLimit'] = limit;
		goPage = true;
	}
	if(goPage) alistRefresh(alist);
}


//-----------------------------------------------------------------------------------------------------------------------------
//					filelist functions & variables
//-----------------------------------------------------------------------------------------------------------------------------

orgRowClass = '';
flistArray = new Object();
var flistXHR;
var flistActive;

function flistRefresh(flist) {
	if(window.ActiveXObject) flistXHR = new ActiveXObject("Microsoft.XMLHTTP");
	else if(window.XMLHttpRequest) flistXHR = new XMLHttpRequest();
	url = flistArray[flist]['locFAT'] + "flist/flistUpdate.php?timeStamp=" + new Date().getTime();
	queryString = '';
	c = 0;
	for(x in flistArray[flist]) {
		if(c > 0) queryString += '&';
		c++;
		queryString += x + '=' + flistArray[flist][x];
	}
	queryString += '&orgLocFAT=' + orgLocFAT;
	queryString += '&jsName=' + flist;
	flistActive = flist;
	document.getElementById('label_' + flistActive).innerHTML = 'Loading ...';
	if(flistArray[flist]['loadingClass']) document.getElementById('label_' + flistActive).className = flistArray[flist]['loadingClass'];
	flistXHR.open("POST", url, true);
	flistXHR.onreadystatechange = flistHandleRefresh;
	flistXHR.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");    
	flistXHR.send(queryString);
}

function flistHandleRefresh() {
	if(flistXHR.readyState == 4) {
		if(flistXHR.status == 200) {
			document.getElementById('div_' + flistActive).innerHTML = flistXHR.responseText;
			flistActive = false;
		}
	}
}

function flistQuery(query, flist) {
	if(!flistActive) {
		if(window.ActiveXObject) flistXHR = new ActiveXObject("Microsoft.XMLHTTP");
		else if(window.XMLHttpRequest) flistXHR = new XMLHttpRequest();
		url = flistArray[flist]['locFAT'] + "flist/flistQuery.php?timeStamp=" + new Date().getTime();
		queryString = 'query=' + urlencode(query);
		flistActive = flist;
		document.getElementById('label_' + flistActive).innerHTML = 'Processing request ... ';
		if(flistArray[flist]['loadingClass']) document.getElementById('label_' + flistActive).className = flistArray[flist]['loadingClass'];
		flistXHR.open("POST", url, true);
		flistXHR.onreadystatechange = flistHandleQuery;
		flistXHR.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");    
		flistXHR.send(queryString);
	}
	else window.alert('still loading ... please try again');
}

function flistHandleQuery() {
	if(flistXHR.readyState == 4) {
		if(flistXHR.status == 200) {
			tmp = flistActive;
			flistActive = false;
			if(flistXHR.responseText.search('FATdatabaseFailure') != -1) window.alert('database communication failed ... please try again')
			else flistRefresh(tmp);
		}
	}
}

function flistPopAction(action, queryString, flist, w, h, l, t) {
	tmpAction = action.split(':');
	if(tmpAction[0].toLowerCase() != 'path' && tmpAction[0].toLowerCase() != 'url') {
		tmpExt = getFileExt(action, 'lower'); 
		if(tmpExt && (tmpExt == 'php' || tmpExt == 'htm' || tmpExt == 'html' || tmpExt == 'inc')) action = flistArray[flist]['locFAT'] + 'actions/' + action;
		else action = flistArray[flist]['locFAT'] + 'actions/' + action + '.php';
	}
	else {
		tmpAction.shift();
		action = tmpAction.join(':');
	}
	if(queryString) action += '?' + queryString;
	if(!w) w = 250;
	if(!h) h = 250;
	if(!l) l = 0;
	if(!t) t = 0;
	popup(action, w, h, l, t);
	window.setTimeout('flistArray[\'' + flist + '\'][\'changes\'] = true', 5000);
}

function flistPopForm(form, pid, label, flist, w, h, l, t) {
	tmp = new Object();
	if(form) tmp['form'] = urlencode(form);
	if(pid) tmp['pid'] = urlencode(pid);
	if(label) tmp['label'] = urlencode(label);
	if(flist) tmp['flist'] = urlencode(flist);
	queryString = '';
		c = 0;
		for(x in tmp) {
			if(c > 0) queryString += '&';
			c++;
			queryString += x + '=' + tmp[x];
		}
	url = flistArray[flist]['locFAT'] + 'flist/flistPopForm.php?' + queryString;
	if(!w) w = 250;
	if(!h) h = 250;
	if(!l) l = 0;
	if(!t) t = 0;
	popup(url, w, h, l, t);
	window.setTimeout('flistArray[\'' + flist + '\'][\'changes\'] = true', 5000);
}

function flistOpenForm(frame, form, pid, label, flist, w, h) {
	tmp = new Object();
	if(form) tmp['form'] = urlencode(form);
	if(pid) tmp['pid'] = urlencode(pid);
	if(label) tmp['label'] = urlencode(label);
	if(flist) tmp['flist'] = urlencode(flist);
	queryString = '';
		c = 0;
		for(x in tmp) {
			if(c > 0) queryString += '&';
			c++;
			queryString += x + '=' + tmp[x];
		}
	url = flistArray[flist]['locFAT'] + 'flist/flistOpenForm.php?' + queryString;
	if(!w) w = 250;
	if(!h) h = 250;
	frames[frame].location = url;
	window.setTimeout('flistArray[\'' + flist + '\'][\'changes\'] = true', 5000);
}

function flistPopReport(form, pid, label, flist, w, h, l, t) {
	tmp = new Object();
	if(form) tmp['form'] = urlencode(form);
	if(pid) tmp['pid'] = urlencode(pid);
	if(label) tmp['label'] = urlencode(label);
	if(flist) tmp['flist'] = urlencode(flist);
	queryString = '';
		c = 0;
		for(x in tmp) {
			if(c > 0) queryString += '&';
			c++;
			queryString += x + '=' + tmp[x];
		}
	url = flistArray[flist]['locFAT'] + 'flist/flistPopReport.php?' + queryString;
	if(!w) w = 250;
	if(!h) h = 250;
	if(!l) l = 0;
	if(!t) t = 0;
	popup(url, w, h, l, t);
}

function flistPopRenameFile(flist, myFile, currentDir) {
	tmp = new Object();
	if(flist) tmp['flist'] = urlencode(flist);
	tmp['flistOrg'] = urlencode(flistArray[flist]['flist']);
	if(myFile) tmp['myFile'] = urlencode(myFile);
	if(currentDir) tmp['currentDir'] = urlencode(currentDir);
	queryString = '';
	c = 0;
	for(x in tmp) {
		if(c > 0) queryString += '&';
		c++;
		queryString += x + '=' + tmp[x];
	}
	url = flistArray[flist]['locFAT'] + 'flist/flistPopRenameFile.php?' + queryString;
	popup(url, 250, 250, 0, 0);
	window.setTimeout('flistArray[\'' + flist + '\'][\'changes\'] = true', 5000);
}

function flistPopRenameDir(flist, myDir, currentDir) {
	tmp = new Object();
	if(flist) tmp['flist'] = urlencode(flist);
	tmp['flistOrg'] = urlencode(flistArray[flist]['flist']);
	if(myDir) tmp['myDir'] = urlencode(myDir);
	if(currentDir) tmp['currentDir'] = urlencode(currentDir);
	queryString = '';
	c = 0;
	for(x in tmp) {
		if(c > 0) queryString += '&';
		c++;
		queryString += x + '=' + tmp[x];
	}
	url = flistArray[flist]['locFAT'] + 'flist/flistPopRenameDir.php?' + queryString;
	popup(url, 250, 250, 0, 0);
	window.setTimeout('flistArray[\'' + flist + '\'][\'changes\'] = true', 5000);
}

function flistPopUpload(flist, currentDir) {
	tmp = new Object();
	if(flist) tmp['flist'] = urlencode(flist);
	tmp['flistOrg'] = urlencode(flistArray[flist]['flist']);
	if(currentDir) tmp['currentDir'] = urlencode(currentDir);
	queryString = '';
	c = 0;
	for(x in tmp) {
		if(c > 0) queryString += '&';
		c++;
		queryString += x + '=' + tmp[x];
	}
	url = flistArray[flist]['locFAT'] + 'flist/flistPopUpload.php?' + queryString;
	popup(url, 250, 250, 0, 0);
	window.setTimeout('flistArray[\'' + flist + '\'][\'changes\'] = true', 5000);
}

function flistPopMkdir(flist, currentDir) {
	tmp = new Object();
	if(flist) tmp['flist'] = urlencode(flist);
	tmp['flistOrg'] = urlencode(flistArray[flist]['flist']);
	if(currentDir) tmp['currentDir'] = urlencode(currentDir);
	queryString = '';
	c = 0;
	for(x in tmp) {
		if(c > 0) queryString += '&';
		c++;
		queryString += x + '=' + tmp[x];
	}
	url = flistArray[flist]['locFAT'] + 'flist/flistPopMkdir.php?' + queryString;
	popup(url, 250, 250, 0, 0);
	window.setTimeout('flistArray[\'' + flist + '\'][\'changes\'] = true', 5000);
}

function flistUnlink(flist, unlinkFile, currentDir) {
	if(window.ActiveXObject) flistXHR = new ActiveXObject("Microsoft.XMLHTTP");
	else if(window.XMLHttpRequest) flistXHR = new XMLHttpRequest();
	url = flistArray[flist]['locFAT'] + "flist/flistUnlink.php?timeStamp=" + new Date().getTime();
	queryString = 'unlinkFile=' + urlencode(unlinkFile);
	queryString += '&currentDir=' + urlencode(currentDir);
	queryString += '&flistOrg=' + urlencode(flistArray[flist]['flist']);
	flistActive = flist;
	document.getElementById('label_' + flistActive).innerHTML = 'Processing ...';
	if(flistArray[flist]['loadingClass']) document.getElementById('label_' + flistActive).className = flistArray[flist]['loadingClass'];
	flistXHR.open("POST", url, true);
	flistXHR.onreadystatechange = flistHandleUnlink;
	flistXHR.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");    
	flistXHR.send(queryString);
}

function flistHandleUnlink() {
	if(flistXHR.readyState == 4) {
		if(flistXHR.status == 200) {
			tmp = flistActive;
			flistActive = false;
			tmpSuccess = true;
			if(flistXHR.responseText.search('FATfileFailure') != -1) {
				window.alert('file deletion failed ... please try again');
				tmpSuccess = false;
			}
			if(flistXHR.responseText.search('FATdatabaseFailure') != -1) {
				window.alert('database communication failed');
				tmpSuccess = false;
			}
			if(tmpSuccess) flistRefresh(tmp);
		}
	}
}

function flistRmdir(flist, rmdir, currentDir) {
	if(window.ActiveXObject) flistXHR = new ActiveXObject("Microsoft.XMLHTTP");
	else if(window.XMLHttpRequest) flistXHR = new XMLHttpRequest();
	url = flistArray[flist]['locFAT'] + "flist/flistRmdir.php?timeStamp=" + new Date().getTime();
	queryString = 'rmdir=' + urlencode(rmdir);
	queryString += '&currentDir=' + urlencode(currentDir);
	queryString += '&flistOrg=' + urlencode(flistArray[flist]['flist']);
	flistActive = flist;
	document.getElementById('label_' + flistActive).innerHTML = 'Processing ...';
	if(flistArray[flist]['loadingClass']) document.getElementById('label_' + flistActive).className = flistArray[flist]['loadingClass'];
	flistXHR.open("POST", url, true);
	flistXHR.onreadystatechange = flistHandleRmdir;
	flistXHR.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");    
	flistXHR.send(queryString);
}

function flistHandleRmdir() {
	if(flistXHR.readyState == 4) {
		if(flistXHR.status == 200) {
			tmp = flistActive;
			flistActive = false;
			tmpSuccess = true;
			if(flistXHR.responseText.search('FATfileFailure') != -1) {
				window.alert('directory deletion failed ... please try again');
				tmpSuccess = false;
			}
			if(flistXHR.responseText.search('FATdatabaseFailure') != -1) {
				window.alert('database communication failed');
				tmpSuccess = false;
			}
			if(tmpSuccess) flistRefresh(tmp);
		}
	}
}

function flistChanges(flist) {
	if(flistArray[flist]['changes']) {
		flistArray[flist]['changes'] = false;
		flistRefresh(flist);
	}
}

function flistSetOrder(order, flist) {
	goPage = false;
	if(order == 'asc') {
		flistArray[flist]['reqOrderDir'] = 0;
		goPage = true;
	}
	else if(order == 'desc') {
		flistArray[flist]['reqOrderDir'] = order;
		goPage = true;
	}
	else if(!flistArray[flist]['reqOrder'] || flistArray[flist]['reqOrder'] != order) {
		flistArray[flist]['reqOrder'] = order;
		goPage = true;
	}
	if(goPage) flistRefresh(flist);
}

function flistSetDirectory(directory, flist) {
	if(flistArray[flist]['directory'] != directory) {
		flistArray[flist]['directory'] = directory;
		flistRefresh(flist);
	}
}

function flistSetFilter(filter, flist) {
	if(flistArray[flist]['reqFilter'] != filter) {
		flistArray[flist]['reqFilter'] = filter;
		flistRefresh(flist);
	}
}

function flistSetSearch(flist) {
	if(flistArray[flist]['reqSearchString'] && flistArray[flist]['reqSearchString'] != '') {
		flistRefresh(flist);
	}
}
