	// formCheckClass, js side
	// VERSION 2
	// 08-07-2004 02:31:16
	
	/*
		Buggar:
		
		1)
			1.1)	Fixa korrekt format på Regexp, dvs utan "" t.ex.
			
	*/
	
	function formCheckClass() {
		this.construct();
	}
	
	formCheckClass.method('construct', function () {
		if(!testComp()) {
			this.enabled = false;
		} else {
			this.enabled = true;
		}
		this.arrCheck = new Array();
		this.n = -1;
		
		this.formMsg = "Error!";
		this.formMsgAlign = "left";
		
		this.bolForm = false;
		this.bolError = false;
		this.formMsgStart = false;
		this.objFormErrRow = false;
		this.showFormMsg = true;
		
		this.alertType = 0;
		this.trim = false; 
	});
	
	//function setFormMsg(value) {
	formCheckClass.method('setFormMsg', function (value) {
		this.formMsg = value;
	});
	
	formCheckClass.method('trimValues', function (value) {
		this.trim = value;
	});
	
	formCheckClass.method('setAlertType', function(type) {
		// 0 = Normal, 1 = alert
		if(type != 0 && type != 1) return false;
		this.alertType = type;
		return true;
	});
	
	//function setFormMsgStart(obj) {
	formCheckClass.method('setFormMsgStart', function (obj) {
		if(!this.enabled) return true;
		this.formMsgStart = document.getElementById(obj);
	});
	
	//function setShowFormMsg(value) {
	formCheckClass.method('setShowFormMsg', function (value) {
		this.showFormMsg = value;
	});
	
	//function setFormMsgAlign(align) {
	formCheckClass.method('setFormMsgAlign', function (align) {
		this.formMsgAlign = align;
	});
	
	//function addCheck(cType, var1, var2, errMsg, error) {
	formCheckClass.method('addCheck', function (cType, var1, var2, errMsg, error) {
		if(!this.enabled) return true;
		this.arrCheck[++this.n] = [cType, [var1, var2, errMsg, error]];
		if(this.arrCheck[this.n][1][3]) {
			this.arrCheck[this.n][1][3] = this.printError(var1, errMsg);
		}
	});
	
	//function checkForm(objSubmit) {
	formCheckClass.method('checkForm', function (objSubmit) {
		if(!this.enabled) return true;
		this.bolError = false;
		objForm = findParent(objSubmit, 'FORM');
		
		for(var i = 0; i < this.arrCheck.length; i++) {
			cType = this.arrCheck[i][0];
			var1 = this.arrCheck[i][1][0];
			var2 = this.arrCheck[i][1][1];
			errMsg = this.arrCheck[i][1][2];
			if(!this.checkObj(cType, var1, var2)) {
				if(!this.arrCheck[i][1][3]) {
					if(this.alertType == 0) {
						this.arrCheck[i][1][3] = this.printError(var1, errMsg);
					} else {
						alert(errMsg);
					}
				}
				this.bolError = true;
			} else {
				if(this.arrCheck[i][1][3]) {
					if(this.alertType == 0) {
						this.arrCheck[i][1][3] = findParent(this.arrCheck[i][1][3], 'TBODY').removeChild(this.arrCheck[i][1][3]);
						this.arrCheck[i][1][3] = false;
					}
				}
			}
		}
		
		if(!this.bolError) {
			if(this.objFormErrRow) {
				this.objFormErrRow = findParent(this.objFormErrRow, 'TBODY').removeChild(this.objFormErrRow);
				this.objFormErrRow = false;
			}
			if(this.enabled) {
				objNewInput = document.createElement('INPUT');
				objNewInput.name = 'form_js';
				objNewInput.value = 'enabled';
				objNewInput.type = 'hidden';
				objForm.appendChild(objNewInput);
			}
			return true;
		} else {
			return false;
		}
	});
	
	formCheckClass.method('trimValue', function (value) {
		if(this.trim) {
			value = value.replace(/^\s+/gi, '');
			value = value.replace(/\s+$/gi, '');
		}
		return value;
	});
	
	//function checkObj(cType, var1, var2) {
	formCheckClass.method('checkObj', function (cType, var1, var2) {
		if(!this.enabled) return true;
		objInput = document.getElementById(var1);
		switch(cType) {
			case 'length':	return this.trimValue(objInput.value).length >= var2;
			case 'match':		return this.trimValue(objInput.value) == this.trimValue(document.getElementById(var2).value);
			case 'email':		return this.trimValue(objInput.value).match('^([-a-zA-Z_0-9\\.åäö]+)(@)((([3-9][0-9]?|0|1[0-9]{0,2}|2(5[0-5]?|[0-4][0-9]?){0,2})\\.){3}([3-9][0-9]?|0|1[0-9]{0,2}|2(5[0-5]?|[0-4][0-9]?){0,2})|(([åäöa-z0-9A-Z\\-]+\\.){0,})([åäöa-z0-9A-Z\\-]{2,63})(\\.[a-z]{2,7}))$');
			case 'regExp':	return this.trimValue(objInput.value).match(var2);
			case 'change':	return this.trimValue(objInput.value).toLowerCase() != var2.toLowerCase();
			default:				return true; break;
		}
	});
	
	//function createRow(msg, form) {
	formCheckClass.method('createRow', function (msg, isForm) {
		if(!this.enabled) return true;
		var objTableRow = document.createElement('TR');
		var objTableData = new Array(false, document.createElement('TD'));
		var objTableDataText = document.createTextNode(msg);
		
		if(isForm) {
			objTableData[1].colSpan = 2;
			objTableData[1].align = this.formMsgAlign;
		} else {
			objTableData[0] = document.createElement('TD');
			objTableData[0].innerHTML = '&nbsp;';
			objTableRow.appendChild(objTableData[0]);
		}
		
		objTableData[1].className = 'formError';
		
		objTableData[1].appendChild(objTableDataText);
		objTableRow.appendChild(objTableData[1]);
		return objTableRow;
	});
	
	//function printError(objID, msg) {
	formCheckClass.method('printError', function (objID, msg) {
		if(!this.enabled) return true;
		var objInput = document.getElementById(objID);
		
		var objTable = findParent(objInput, 'TABLE');
		var objTableRow = findParent(objInput, 'TR');
		var objTableBody = findParent(objInput, 'TBODY');
		
		if(this.showFormMsg && !this.bolForm) {
			if(this.formMsgStart) {
				insertBefore = this.formMsgStart.nextSibling;
			} else {
				arrTableRows = objTableBody.getElementsByTagName('TR');
				insertBefore = arrTableRows[0];
			}
			this.bolForm = true;
			this.objFormErrRow = objTableBody.insertBefore(this.createRow(this.formMsg, true), insertBefore);
		}
		return objTableBody.insertBefore(this.createRow(msg), objTableRow.nextSibling);
	});
	
	//function addExtraError(objID, msg) {
	formCheckClass.method('addExtraError', function (objID, msg) {
		if(!this.enabled) return true;
		var obj = document.getElementById(objID);
		var objTableBody = findParent(obj, 'TBODY');
		
		objTableBody.insertBefore(this.createRow(msg, true), obj.nextSibling);
	});
