function checkFields(mand, valid, validtypes, formObj) {
  var mf = []
  var vf = []
	var missingFields = []
	var invalidFields = []
	var skipFields = []
	var retM = false
	var retTE = false
	var mfCount = 0
	var ifCount = 0
  for(var m in mand) {
	  mf[mand[m]] = true
	  mf[mand[m]+'[]'] = true
	}
	for(var v = 0; v < valid.length; v++) {
	  vf[valid[v]] = validtypes[v]
	}
  for(var f in document.forms) {
	  df = document.forms[f]
	  dfe = df.elements; 
	  if(formObj && df != formObj) {
	  	continue; 
	  }
	  if(df.action && (df.action.indexOf('/!datamanager/!form/!id') != -1 || formObj)) {
		  for(var el = 0; el < dfe.length; el++) {
			  element = dfe[el].name
			  if(element.indexOf('[]') != -1) {
				  if(!dfe[el].options) {
  				  if(mf[element] && !dfe[el].checked && !skipFields[element]) { 
							if(!missingFields[element]) mfCount++
    					missingFields[element] = true
  					} else if(mf[element] && dfe[el].checked) {
						  if(missingFields[element]) mfCount--
  					  missingFields[element] = false
  						skipFields[element] = true
  					}
					} else {
					  if(mf[element] && (dfe[el].options.selectedIndex < 0) && !skipFields[element]) {
							if(!missingFields[element]) mfCount++
						  missingFields[element] = true
						} else if(mf[element] && dfe[el].selected) {
						  if(missingFields[element]) mfCount--
  					  missingFields[element] = false
  						skipFields[element] = true
						}
					}
				} else {
				  if(mf[element] && dfe[el].value == '') {
					  missingFields[element] = true
						mfCount++
					}
					if(vf[element]) {
					  if(!validate(dfe[el], vf[element])) {
						  invalidFields[element] = true
							ifCount++
						}
					}
				}
			}
			for(var el = 0; el < dfe.length; el++) {
			  element = dfe[el].name
				if(missingFields[element]) {
				  if(dfe[el] && dfe[el].style) dfe[el].style.backgroundColor = '#e9f6fd'
					if(!retM && dfe[el].focus) dfe[el].focus()
					retM = true
				} else if(invalidFields[element]) {
				  if(dfe[el] && dfe[el].style) dfe[el].style.backgroundColor = '#e9f6fd'
					if(!retTE && !retM && dfe[el].focus) dfe[el].focus()
					retTE = true
				} else {
				  if(dfe[el] && dfe[el].style) dfe[el].style.backgroundColor = ''
				}
			}
			if(retM) return returnMissing(mfCount)
			if(retTE) return returnTypeError(ifCount)
		}	  
	}
	return true
}

function validate(field, type) {
	var re;
  switch(type) {
		case "number":
      re = /^[\-0-9\.\,\ ]*$/;
      if (re.test(field.value) || !field.value) return true
		  break;  
	  case "email":
      re = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,4})+$/;
      if (re.test(field.value) || !field.value) return true
		  break;
		case "date":
		  return true
		  break;
    default:
      return true
      break;
	}
	return false
}

function returnMissing(count) {
  if(count == 1) {
    alert('Pakollinen tieto puuttuu. Tarkista syöttämäsi tiedot.')
	} else {
    alert( count + ' pakollista tietoa puuttuu. Tarkista syöttämäsi tiedot.')
	}
	return false
}

function returnTypeError(count) {
	if(count == 1) {
    alert('Kentän tieto on virheellinen. Tarkista syöttämäsi tiedot.')
	} else {
	  alert('Kenttien tiedoissa oli virheitä. Tarkista syöttämäsi tiedot.')
	}
	return false
}

function enforceMaxLength(field, maxLength) {
	if(field && field.value && field.value.length > maxLength) {
		field.value = field.value.substring(0, maxLength);
	}
	if(document.getElementById) {
		var lf = document.getElementById('len_'+field.name);
		if(lf) {
			lf.innerHTML = new String(lf.innerHTML).replace(/^[0-9]*/, maxLength - field.value.length);
		}
	}	
}

function showLength(field) {
	if(document.getElementById) {
		var lf = document.getElementById('len_'+field.name);
		if(lf) {
			lf.style.display = 'block';
		}
	}
}

function hideLength(field) {
	if(document.getElementById) {
		var lf = document.getElementById('len_'+field.name);
		if(lf) {
			lf.style.display = 'none';
		}
	}
}

