//////////////////////////////////////////////////////////////////////////////////
//   Form Acceptor V 2.0					                //
//   Copyright © 2007 method.ir                                                 //
//////////////////////////////////////////////////////////////////////////////////

function submitAccept(objForm) {
	objInputs = objForm.getElementsByTagName("INPUT");
	objSelects = objForm.getElementsByTagName("SELECT");
	objTextarea = objForm.getElementsByTagName("TEXTAREA");

	isOK = true;
	objTemp = objInputs;
	var i;
	for(i=0; i<objTemp.length; i++) {
//		alert(objTemp[i].getAttribute('disabled'));
		if (objTemp[i].getAttribute('disabled'))
			continue;
		var message = '';
		var considerable = false;

		if (objTemp[i].type == "radio" && objTemp[i].getAttribute["processed"] != "true") {
	    	message = _checkRadio(objTemp, objTemp[i].name);
	    	considerable = true;
	    }
		else if((objTemp[i].type != "hidden") && (objTemp[i].type != "submit") && (objTemp[i].type != "reset") && (objTemp[i].type != "button") && (objTemp[i].type != "image") && (!objTemp[i].disabled)) {
			if((objTemp[i].getAttribute("required") == "true") && (objTemp[i].value == "")) {
				message = "This field is required";
				isOK = false;
			}
			if((objTemp[i].getAttribute("sameas") != null)) {
				sameObj = getElementByName(objTemp, objTemp[i].getAttribute("sameas"));
				if (sameObj != null) {
					if (objTemp[i].value != sameObj.value) {
						message = "Should be the same as " + sameObj.name + " field.";
						isOK = false;
					}
				}
			}
			if(objTemp[i].value != "") {
				switch(objTemp[i].getAttribute("dataType")) {
					case "integer":
						message = _checkInt(objTemp[i]);
						break;
					case "float":
						message = _checkFloat(objTemp[i]);
						break;
					case "email":
						message = _checkEmail(objTemp[i]);
						break;
					case "date":
						message = _checkDate(objTemp[i]);
						break;
					case "text":
					default:
						message = _checkText(objTemp[i]);
						break;
				}
			}
			considerable = true;
		}

		if (considerable) {
		    if (message != '') {
		    	if (objTemp[i].getAttribute('HasError') != 'true') {
			  		objTemp[i].title = message;
			  		objTemp[i].setAttribute('defaultBackgroundColor', objTemp[i].style.backgroundColor);
			  		objTemp[i].setAttribute('HasError', 'true');
			  		objTemp[i].style.backgroundColor = 'red';
		  		}
		  		isOK = false;
		  	}
		  	else if (objTemp[i].getAttribute('HasError') == 'true') {
		  		objTemp[i].title = '';
		  		objTemp[i].style.backgroundColor = objTemp[i].getAttribute('defaultBackgroundColor') != null ? objTemp[i].getAttribute('defaultBackgroundColor') : 'transparent';
		  		objTemp[i].setAttribute('HasError', 'false');
		  	}
	  	}
	}

	objTemp = objSelects;
	for(i=0; i<objTemp.length; i++) {
//		alert(objTemp[i].getAttribute('disabled'));
		if (objTemp[i].getAttribute('disabled'))
			continue;
		if((objTemp[i].value == "") && (!objTemp[i].disabled) && (objTemp[i].getAttribute('required') == "true")) {
			//alert (objTemp[i].name);
			if(objTemp[i].type != "hidden") {
				if (objTemp[i].getAttribute('HasError') != 'true') {
					objTemp[i].title = "This field is required";
					objTemp[i].setAttribute('defaultBackgroundColor', objTemp[i].style.backgroundColor);
					objTemp[i].style.backgroundColor = 'beige';
					objTemp[i].setAttribute('defaultColor', objTemp[i].style.color);
					objTemp[i].style.color = 'red';
					objTemp[i].setAttribute('HasError', 'true');
				}
			}
			isOK = false;
			//alert(objTemp[i].name);
		}
		else if (objTemp[i].getAttribute('HasError') == 'true') {
			objTemp[i].title = '';
			objTemp[i].style.backgroundColor = objTemp[i].getAttribute('defaultBackgroundColor') != null ? objTemp[i].getAttribute('defaultBackgroundColor') : 'transparent';
			objTemp[i].style.color = objTemp[i].getAttribute('defaultColor') != null ? objTemp[i].getAttribute('defaultColor') : 'black';
			objTemp[i].setAttribute('HasError', 'false');
		}
	}

	objTemp = objTextarea;
	for(i=0; i<objTemp.length; i++) {
		if (objTemp[i].getAttribute('disabled'))
			continue;
		if((objTemp[i].value == "") && (!objTemp[i].disabled) && (objTemp[i].getAttribute('required') == "true")) {
			if (objTemp[i].getAttribute('HasError') != 'true') {
				objTemp[i].title = "This field is required";
				objTemp[i].setAttribute('defaultBackgroundColor', objTemp[i].style.backgroundColor);
				objTemp[i].style.backgroundColor = 'red';
				objTemp[i].setAttribute('HasError', 'true');
			}
			isOK = false;
		}
		else {
			if (objTemp[i].getAttribute('minWords') != null || objTemp[i].getAttribute('maxWords') != null) {
				var range = '';
				if (objTemp[i].getAttribute('minWords') != null)
					range += 'from '+objTemp[i].getAttribute('minWords');
				else
					range += 'from 0';
				if (objTemp[i].getAttribute('maxWords') != null)
					range += ' to '+objTemp[i].getAttribute('maxWords');
				else
					range += ' to unlimited';

				var wordCount = 0;
				var preState = '', curState = 'B';
				for (var j=0; j<objTemp[i].value.length; j++) {
					if (objTemp[i].value.charAt(j) == ' ' || objTemp[i].value.charCodeAt(j) == 10 || objTemp[i].value.charCodeAt(j) == 13) {
						preState = curState;
						curState = 'B';
					}
					else {
						preState = curState;
						curState = 'W';
					}
					if (preState == 'B' && curState == 'W')
						wordCount++;
				}
				if (objTemp[i].getAttribute('minWords') != null && wordCount < objTemp[i].getAttribute('minWords')) {
					objTemp[i].title = "Word count doesn't match, expected: "+range+", seen: "+wordCount;
					objTemp[i].setAttribute('defaultBackgroundColor', objTemp[i].style.backgroundColor);
					objTemp[i].style.backgroundColor = 'red';
					objTemp[i].setAttribute('HasError', 'true');
					isOK = false;
				}
				else if (objTemp[i].getAttribute('maxWords') != null && objTemp[i].getAttribute('maxWords') < wordCount) {
					objTemp[i].title = "Word count doesn't match, expected: "+range+", seen: "+wordCount;
					objTemp[i].setAttribute('defaultBackgroundColor', objTemp[i].style.backgroundColor);
					objTemp[i].style.backgroundColor = 'red';
					objTemp[i].setAttribute('HasError', 'true');
					isOK = false;
				}
				else if (objTemp[i].getAttribute('HasError') == 'true') {
					objTemp[i].title = '';
					objTemp[i].style.backgroundColor = objTemp[i].getAttribute('defaultBackgroundColor') != null ? objTemp[i].getAttribute('defaultBackgroundColor') : 'transparent';
					objTemp[i].setAttribute('HasError', 'false');
				}
			}
			else if (objTemp[i].getAttribute('HasError') == 'true') {
				objTemp[i].title = '';
				objTemp[i].style.backgroundColor = objTemp[i].getAttribute('defaultBackgroundColor') != null ? objTemp[i].getAttribute('defaultBackgroundColor') : 'transparent';
				objTemp[i].setAttribute('HasError', 'false');
			}
		}
	}

	if (!isOK)
		alert("The form is not filled properly. Move your mouse over highlighted fields to see why.");

	return isOK;
}

function _checkEmail(emailFld) {
	//var emailPat = /^(\w+(?:\.\w+)*)@((?:\w+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;
	var emailPat = /^([\d\w\.\-_]+)@((?:\w+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;
	var matchArray = emailFld.value.match(emailPat);
	if (matchArray == null) {
		return "Your email address seems incorrect.  Please try again (check the '@' and '.'s in the email address)";
	}
	var IPArray = matchArray[2].match(/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/);
	if (IPArray != null) {
		for (var i=1;i<=4;i++) {
			if (IPArray[i]>255) {
				return "Destination IP address is invalid!";
			}
        }
	}
	return '';
}

function _checkInt(intFld) {
	var re = new RegExp("^[+-]?[0-9۰-۹]*$");
	if(!re.test(intFld.value)) {
		return "An integer number is required!";
	}
	var value = replaceFarsiDigits(intFld.value);
	if (intFld.getAttribute("dataLow")!=null &&
			parseInt(value) < parseInt(intFld.getAttribute("dataLow")))
		return "An integer number greater than " + intFld.getAttribute("dataLow") + " is required.";
	if (intFld.getAttribute("dataHigh")!=null &&
			parseInt(value) > parseInt(intFld.getAttribute("dataHigh")))
		return "An integer number lower than " + intFld.getAttribute("dataHigh") + " is required.";
	return '';
}


function _checkFloat(floatFld) {
	re = new RegExp("^[+-]?[0-9]+(\\.[0-9]+)?$");
	if(!re.test(floatFld.value)) {
		return "A float number is required!";
	}
	return '';

}


function _checkText(txtFld) {
	value = txtFld.value;
	if (txtFld.getAttribute("min") != null
			&& txtFld.getAttribute("max") != null
			&& txtFld.getAttribute("min") == txtFld.getAttribute("max")
			&& value.length != txtFld.getAttribute("min"))
		return "A text of " + txtFld.getAttribute("min") + " characters is required.";
	if (txtFld.getAttribute("min") != null && value.length < txtFld.getAttribute("min"))
		return "A text longer than or equal to " + txtFld.getAttribute("min") + " characters is required.";
	if (txtFld.getAttribute("max") != null && value.length > txtFld.getAttribute("max"))
		return "A text shorter than or equal to " + txtFld.getAttribute("max") + " characters is required.";
	return '';
}


function _checkDate(dateFld) {
	var datePat = /^([0-9۰-۹]{4})[\/-]([0-9۰-۹]{1,2})[\/-]([0-9۰-۹]{1,2})$/;
	var matchArray = dateFld.value.match(datePat); // is the format ok?
	if (matchArray == null) {
		return "Date is not in a valid format.";
	}
	month = replaceFarsiDigits(matchArray[2]); // parse date into variables
	day = replaceFarsiDigits(matchArray[3]);
	year = replaceFarsiDigits(matchArray[1]);
	if (month < 1 || month > 12) { // check month range
		return "Month must be between 1 and 12.";
	}
	if (day < 1 || day > 31) {
		return "Day must be between 1 and 31.";
	}
	if ((month==7 || month==8 || month==9 || month==10 || month==11 || month==12) && day==31) {
		return "Month "+month+" doesn't have 31 days!";
	}
	return '';  // date is valid
}

function _checkRadio(objTemp2, radioName) {
  var checked = false;
  var required = false;
  var i;
  for(i=0; i<objTemp2.length; i++) {
    if (objTemp2[i].name == radioName) {
      if (objTemp2[i].checked) checked = true;
      if (objTemp2[i].getAttribute("required") == "true") required = true;
      objTemp[i].setAttribute("processed", "true");
    }
  }
  if (required && !checked) return "This field is required";
  else return "";
}

function getElementByName(obj, name) {
	for (j=0; j<obj.length; j++) {
		if (obj[j].name == name) return obj[j];
	}
	return null;
}

function replaceFarsiDigits(str) {
  str = str.replace(/۰/g, "0");
  str = str.replace(/۱/g, "1");
  str = str.replace(/۲/g, "2");
  str = str.replace(/۳/g, "3");
  str = str.replace(/۴/g, "4");
  str = str.replace(/۵/g, "5");
  str = str.replace(/۶/g, "6");
  str = str.replace(/۷/g, "7");
  str = str.replace(/۸/g, "8");
  str = str.replace(/۹/g, "9");
  return str;
}




