<!--
/* ----------------------------------------------------
 docformvalidator.js
 Version 2.0
 Author: Andris Brivers, Artnets Ltd.
 ab@artnets.lv
 Copyright (c) 1999-2003 Artnets Ltd. All rights reserved.
 Unauthorized use prohibited.
---------------------------------------------------- */

	// Validate form values
	function DocFormValidator(oForm)
	{

		for(var i=0; i<oForm.elements.length; i++)
		{
			var oInput = oForm.elements[i];
			var smaxval;
			var sminval;
			var svalue;
			var bempty;
			
			if (oInput.getAttribute('required')) {
				bempty = true;
				if ((oInput.getAttribute('required')=='yes')) {
					switch (oInput.type.toLowerCase()) 
					{
						case "radio":
						case "checkbox":
						var aCollection = oForm.elements;
						for (var j = 0; j < aCollection.length; j++) {
							if (aCollection[j].name==oInput.name) {
								if (aCollection[j].checked) 
									bempty = false;
							}
						}
						break;

						case "text":
							if (oInput.value!='')
								bempty = false;
						break;
					}

					// textarea check
					if (oInput.rows) {
						if (oInput.value!='')
							bempty = false;
					}

					if (bempty) {
						alert("Field value cannot be empty");
						oInput.focus();
						return false;
					}
				}
			}

			// Check data type specific values
			if (oInput.getAttribute('datatype'))
			{
				switch (oInput.getAttribute('datatype').toLowerCase())
				{
					

					case "integer":
						if ((oInput.value!='') && (oInput.value.match(/^\d*$/) == null)) {
							oInput.focus();
							alert("Invalid integer value");
							return false;
						}

						if ((oInput.value!='')) {
							if (oInput.getAttribute('maxval'))
								smaxval = oInput.getAttribute('maxval');
							else
								smaxval = '';
							if (oInput.getAttribute('minval'))
								sminval = oInput.getAttribute('minval');
							else
								sminval = '';
							svalue = oInput.value;

							if (!CheckMinMax(sminval, smaxval, svalue, oInput.getAttribute('datatype'))) {
								oInput.focus();
								return false;
							}
						}
						break;

					case "date":
						if ((oInput.value!='') && (oInput.value.match(/^\d{1,2}.\d{1,2}.\d{2,4}$/) == null)) {
							oInput.focus();
							alert("Invalid date value. Expected date format: DD.MM.YY");
							return false;
						}

						if ((oInput.value!='')) {
							if (oInput.getAttribute('maxval'))
								smaxval = oInput.getAttribute('maxval');
							else
								smaxval = '';
							if (oInput.getAttribute('minval'))
								sminval = oInput.getAttribute('minval');
							else
								sminval = '';
							svalue = oInput.value;

							if (!CheckMinMax(sminval, smaxval, svalue, oInput.getAttribute('datatype'))) {
								oInput.focus();
								return false;
							}
						}
						break;

					case "time":
						if ((oInput.value!='') && (oInput.value.match(/^((0[0-9]|1[0-2])\:)((0[0-9]|[1-5][0-9])\:)((0[0-9]|[1-5][0-9]))$/) == null)) {
							oInput.focus();
							alert("Invalid time value. Expected time format: HH:MM:SS");
							return false;
						}
						break;

					case "datetime":
						if (oInput.value!='') {
							if (String(oInput.value).length>10) {
								
								if (oInput.value.match(/^\d{1,2}.\d{1,2}.\d{2,4} ((0[0-9]|1[0-2])\:)((0[0-9]|[1-5][0-9])\:)((0[0-9]|[1-5][0-9])) (AM|PM|am|pm)$/) == null) {
								
									oInput.focus();
									alert("Invalid date value. Expected date format: DD.MM.YY HH:MM:SS AM/PM");
									return false;
								}
							} else {
								if (oInput.value.match(/^\d{1,2}.\d{1,2}.\d{2,4}$/) == null) {
									oInput.focus();
									alert("Invalid date value. Expected date format: DD.MM.YY");
									return false;
								}
							}
						}

						if ((oInput.value!='')) {
							if (oInput.getAttribute('maxval'))
								smaxval = oInput.getAttribute('maxval');
							else
								smaxval = '';
							if (oInput.getAttribute('minval'))
								sminval = oInput.getAttribute('minval');
							else
								sminval = '';
							svalue = oInput.value;

							if (!CheckMinMax(sminval, smaxval, svalue, oInput.getAttribute('datatype'))) {
								oInput.focus();
								return false;
							}
						}
						break;

					case "float":
						// one or more digits, followed by .
						if ((oInput.value!='') && (oInput.value.match(/^((\d+(\.\d*)?)|((\d*\.)?\d+))$/) == null)) {
							oInput.focus();
							alert("Invalid float value");
							return false;
						}

						if ((oInput.value!='')) {
							if (oInput.getAttribute('maxval'))
								smaxval = oInput.getAttribute('maxval');
							else
								smaxval = '';
							if (oInput.getAttribute('minval'))
								sminval = oInput.getAttribute('minval');
							else
								sminval = '';
							svalue = oInput.value;

							if (!CheckMinMax(sminval, smaxval, svalue, oInput.getAttribute('datatype'))) {
								oInput.focus();
								return false;
							}
						}
						break;

					case "currency":
						if (oInput.value!='') {
							if (oInput.value.indexOf('$')!=-1) {
								if (oInput.value.match(/\$\d{1,3}(,\d{3})*\.\d{2}/) == null) {
									alert("Invalid currency value");
									oInput.focus();
									return false;
								}
							} else {
								if (oInput.value.match(/\d{1,3}(,\d{3})*\.\d{2}/) == null) {
									alert("Invalid currency value");
									oInput.focus();
									return false;
								}
							}
						}
						break;

					case "email":
						if ((oInput.value!='') && (oInput.value.match(/^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/) == null)) {
							alert("Invalid email value");
							oInput.focus();
							return false;
						}
						break;

					

					default:
						if ((oInput.value!='') && (oInput.getAttribute('ae'))) {
							var aAllowedDocExt = String(oInput.getAttribute('ae'));
							if (CheckExtNoCase(aAllowedDocExt, GetExt(oInput.value)) == -1)
							{
								// file doesn't have one of the accepted extensions
								alert("Please check uploading file extension. \nAllowed file extensions: "+ aAllowedDocExt +".");
								oInput.focus();
								return false;
							}
						}
						break;
						
				}
			}
		}
		return true;
	}

	// case insensitive search
	function CheckExtNoCase(list, value)
	{
		var i = 0;
		var delimiter = ',';
		var returnValue = -1;
		var aTemp = new Array();

		if (CheckExtNoCase.arguments.length == 3)
			delimiter = CheckExtNoCase.arguments[2].toLowerCase();

		list = list.toLowerCase();
		value = value.toLowerCase();
		aTemp = list.split(delimiter);

		for(i = 0; i < aTemp.length; i++) {
			if(aTemp[i] == value) {
				returnValue = i;
				break;
			}
		}
	
		return returnValue;
	}

	// get the file extension from the entire path
	function GetExt(list)
	{
		var delimiter = '.';
		var returnValue = '';
		var aTemp = new Array();
		if(GetExt.arguments.length == 2) 
			delimiter = GetExt.arguments[1].toLowerCase();

		aTemp = list.split(delimiter);
		if(aTemp.length)
			returnValue = aTemp[aTemp.length - 1];
		else
			returnValue = list;

		return returnValue;
	}

	// main min/max checking function
	function CheckMinMax(sminval, smaxval, svalue, stype)
	{
		if ((sminval!='') && (smaxval!='')) {
			if ((parseVal(svalue, stype)<parseVal(sminval, stype)) || (parseVal(svalue, stype)>parseVal(smaxval, stype))) {
				alert("Value must be between \'' + sminval + '\' and \'' + smaxval + '\'");
				return false;
			}
		} else {
			if (smaxval!='') {
				if (parseVal(svalue, stype)>parseVal(smaxval, stype)) {
					alert("Value must be not greater than " + smaxval);
					return false;
				}
			}

			if (sminval!='') {
				if (parseVal(svalue, stype)<parseVal(sminval, stype)) {
					alert("Value must be not less than " + sminval);
					return false;
				}
			}
		}
		return true;
	}

	function parseVal(svalue, stype) {

		switch (stype) {
			case 'integer':
				return parseInt(svalue);
				break;
			case 'float':
				return parseFloat(svalue);
				break;
			case 'date':
				return GetDate(svalue);
				break;
			case 'datetime':
				return GetDateTime(svalue);
				break;
		}
	}

	function GetDate(argDate)
	{
		// str2date(sdate)	
		var date_split;	
		var tdate, tmonth, tyear;
	
		date_split = argDate.split('.');
	
		tdate = parseInt(date_split[0]);
		tmonth = parseInt(date_split[1]);
		tyear = parseInt(date_split[2]);
	
		return date = new Date(tyear,tmonth-1,tdate);
	}

	function GetDateTime(sdate)
	{
		// str2datetime(sdate)	
		var arrD = new Array();
		var arrT = new Array();
		var arrTemp = new Array();
		var dm, dd, dY;	
		var dh, dmin, ds;
		arrD = sdate.split(".");

		dd = parseInt(checkdm(arrD[0]));
		dm = parseInt(checkdm(arrD[1])) - 1;
		dy = parseInt(arrD[2]);

		arrTemp = sdate.split(" ");

		if (arrTemp[1]) {
			arrT = arrTemp[1].split(":");
			if (arrT.length>=2) {
				dh = parseInt(checkdm(arrT[0]));
				dmin = parseInt(checkdm(arrT[1]));
				ds = parseInt(checkdm(arrT[2]));
			} else {
				dh = 0;
				dmin = 0;
				ds = 0;
			}
		} else {
			dh = 0;
			dmin = 0;
			ds = 0;
		}
	
		return (new Date(dy, dm, dd, dh, dmin, ds));
	}
//-->