﻿/******************************************************************************
  Litium Datavalidering: LitiumDBValid.js

  Typer som stöds: select-one, select-multiple, file, text, password, checkbox, radio
  Funktioner som stöds för typerna: isEmail, isNum, isDate, isRange, notZero,
  isAlfaNumeric
  © 2000 Litium Affärskommunikation AB	
  Reviderad: 2001-12-03, Erik Engvall
  Reviderad: 2003-04-30, Jens Ribbholm
******************************************************************************/

function LitiumDBFindObject(varFieldName, varDocument)
{
  var i, varTemp, varRetVal;  
  if(!varDocument)
    varDocument = document; 
  if((varTemp = varFieldName.indexOf("?"))>0 && parent.frames.length)
  {
    varDocument = parent.frames[varFieldName.substring(varTemp+1)].document;
    varFieldName = varFieldName.substring(0, varTemp);
  }
  if(!(varRetVal = varDocument[varFieldName]) && varDocument.all)
    varRetVal = varDocument.all[varFieldName];
  for (i=0; !varRetVal && i<varDocument.forms.length;i++)
    varRetVal = varDocument.forms[i][varFieldName];
  for(i=0;!varRetVal&&varDocument.layers&&i<varDocument.layers.length;i++) 
    varRetVal = LitiumDBFindObject(varFieldName, varDocument.layers[i].document); 
  return varRetVal;
}

function LitiumDBFindInvalidChars(varValue, varCharsNotAllowed)		//skapad 23/3-00
{
  var i, varLen, varRetVal = false
  varLen = varCharsNotAllowed.length;
  for (i=0; i < varLen; i++)
  {
    varTemp = varCharsNotAllowed.charAt(i)
    if (varValue.indexOf(varTemp) != -1)
      varRetVal = true;
  }
  return varRetVal;
}

var userLocale = '1053';

function isValidDate(dateStr) 
{
	var datePat = /^(\d{4})(\/|-)(\d{1,2})\2(\d{1,2})($|((\s)(\d{2})(\:)(\d{2})(\:)(\d{2})$))/;
	var matchArray = dateStr.match(datePat); // is the format ok?
	if (matchArray == null) {
		strError = 'Datumet måste anges på formatet åååå-mm-dd. sv'
		return strError;
	}
	// parse date into variables
	year = matchArray[1];
	month = matchArray[3];
	day = matchArray[4];

	if (month < 1 || month > 12) { // check month range
		strError = 'Månaden måste vara mellan 1 och 12.';
		return strError;
	}

	if (day < 1 || day > 31) {
		strError = 'Dagen måste vara mellan 1 och 31.';
		return strError;
	}

	if ((month==4 || month==6 || month==9 || month==11) && day==31) {
		strError = 'Månaden ' + month + ' har inte 31 dagar.'
		return strError;
	}

	if (month == 2) { // check for february 29th
		var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
		if (day>29 || (day==29 && !isleap)) {
			strError = 'Februari' + year + " har inte " + day + " dagar!";
			return strError;
		}
	}
	return true;  // date is valid
}

function isAlfaNumeric(inputString) {
	//Sträng med tillåtna tecken. Lägg till och ta bort vid behov. Det inmatade värdet görs atomatiskt om till versaler - så endast dessa behöver stå med i strängen med godkända tecken.
	registerString = 'ABCDEFGHIJKLMNOPQRSTUVWXYZÅÄÖ0123456789';      
	inputString = inputString.toUpperCase();
	i = 0;
	found = true;
	while(i <= (inputString.length-1) && found == true) {
		varCurrentCharacter = inputString.charAt(i);
		j = 0;
		found = false;
		while(j < (registerString.length) && found == false) {
			if (varCurrentCharacter == registerString.charAt(j)) {
				found = true;
				j = 0;
			}
			else {
				j = j + 1;
			}
		}
		i = i + 1;
	}
	if (found == false) {
		strError = 'får bara innehålla tecknen A-Ö och 0-9';
		return strError;
	}
	else {
		return true;
	}
}

function isNumeric(varValue) {

	var boolRetVal = false, strValue = varValue.toString(), strMatch, arrTemp;

	strMatch = /^[0-9]{1,}((\s[0-9]{3})*(,[0-9]{1,2}){0,1}$)/g
	arrTemp = strValue.match(strMatch);
	if (arrTemp != null)
		boolRetVal = true;

	return boolRetVal;
}

function isCurrency(varValue) {
	var strTempChar, strTempValue = '';
	for (i = 0; i < varValue.length; i++) {
		strTempChar = varValue.charAt(i);
		if (strTempChar.match(/[0-9,.]/g) != null)
			strTempValue = strTempValue + strTempChar;
	}
	varValue = strTempValue;

	if (isNumeric(varValue)) 
		return true;
	else
		return false;
}

function ButtongroupSelected(FieldName) {		//ändrad 31/8-04 av Joakim Karlsson för att den ska klara flera formulär.
	var HasValue = false;
	var j, varFound;  
	for (j=0; !varFound && j<window.document.forms.length;j++){
		var varFrm = window.document.forms[j];
		for (i=0;i<varFrm.elements.length;i++) {
			if (varFrm.elements[i].name!=undefined && varFrm.elements[i].type!=undefined){
				if (varFrm.elements[i].name.indexOf(FieldName) != -1 && varFrm.elements[i].type.indexOf("checkbox") != -1) {
					varFound = varFrm.elements[i];
					if (varFrm.elements[i].checked) {
						HasValue = true;
					}
				}
				if (varFrm.elements[i].name.indexOf(FieldName) != -1 && varFrm.elements[i].type.indexOf("radio") != -1) {
					varFound = varFrm.elements[i];
					if (varFrm.elements[i].checked) {
						HasValue = true;
					}
				}
			}
		}
	}
	return HasValue;
}

function LitiumDBValid()						//skapad 23/3-00
{
  var i, varTemp, varAt, varDot, varLen, varName, varCriteria, varNumber, varMin, varMax, errors='', arrArgs = LitiumDBValid.arguments;
  for (i=0; i<(arrArgs.length-2); i+=3)
  {
	varInternalFieldName = arrArgs[i];
    varCriteria = arrArgs[i+2];
	varFieldName = arrArgs[i+1];
    objField = LitiumDBFindObject(arrArgs[i]);
	if (!objField.type){
		if (ButtongroupSelected(varInternalFieldName)) {
			varName = varFieldName;
			varValue = "1";
			varType = "CheckboxM";
		}
		else {
			varName = varFieldName;
			varValue = "";
			varType = "CheckboxM";
		}
	}
    if (objField && "submit,image,button,reset".indexOf(objField.type)==-1)
    {
	  // Om det inte skickats med något namn på fältet in används det ursprungliga namnet.
	  if (varFieldName == "" && objField.name) {
      	varName = objField.name;
      }
      else {
      	varName = varFieldName;
      }
		if (objField.type) {
		  varType = objField.type;
		}
      if (varType.indexOf("Select-one") != -1){
		if (parseInt(objField.length) > 0) {
			varValue = objField.options[objField.selectedIndex].value;
		}
		else {
			varValue = "";
		}
	  }
	  else if (varType.indexOf("Select-multiple") != -1){
		if (parseInt(objField.length) > 0) {
			if (objField.selectedIndex != -1) {
				varValue = objField.options[objField.selectedIndex].value;
			}
			else {
				varValue = "";
			}
		}
		else {
			varValue = "";
		}
	  }
	  else if (varType.indexOf("checkbox") != -1){
		if (objField.checked) {
	  		varValue = objField.value;
		}
		else {
			varValue = "";
		}
	  }

	else if (varType.indexOf("CheckboxM") != -1){
	}

      else if (objField.value) {
		varValue = objField.value;
	  }
	  
	  else {
	  	varValue = "";
	  }
      if (varValue != "")
      {
	if (LitiumDBFindInvalidChars(varValue, '|'))
	    errors+='- Fältet \'' + varName + '\' får inte innehålla tecknen \|, \’ eller \".\n';
	else
	{
	  if (varCriteria.indexOf('isEmail') != -1) { 
	    varTemp = LitiumDBFindInvalidChars(varValue, 'åäöÅÄÖ*\\/[]<>,;:()');
	    varAt = varValue.indexOf('@');
	    varDot = varValue.lastIndexOf('.');
	    varLen = varValue.length;
	    if (!(((varTemp == false) && (varAt > 0)) && ((varDot > (varAt + 1)) && (varDot < (varLen - 2)))))
	      errors+='- Fältet \'' + varName + '\' måste innehålla en giltig e-postadress.\n';
	  }
	  else if (varCriteria.indexOf('isCur') != -1)			//skapad 4/12-01, JR
	  {														//plockar bort prefix, postfix och kollar att det är ett godkänt numeriskt värde
		if (!isCurrency(varValue))
			errors+='- Fältet \'' + varName + '\' är inte ett godkänt valutavärde.\n';
	  }
	  else if (varCriteria.indexOf('notZero') != -1)			//skapad 24/3-00, JR
	  {
	    if (varValue==0)
	      errors+='- Fältet \'' + varName + '\' får inte innehålla värdet ’0’.\n';
	  }
	  else if (varCriteria.indexOf('isDate') != -1)			//skapad 7/9-00, JensR
	  {
	    varReturn = isValidDate(varValue)
	    if (varReturn != true)
	    {
		errors+='- Fältet \'' + varName + '\' - ' + varReturn + '\n';
	    }
	  }
	  else if (varCriteria.indexOf('isAlfaNumeric') != -1)			//skapad 8/1-01, JensR
	  {
	    varReturn = isAlfaNumeric(varValue)
	    if (varReturn != true)
	    {
		errors+='- Fältet \'' + varName + '\' - ' + varReturn + '\n';
	    }
	  }
	  else if (varCriteria != 'R')
	  { 
	    if (!isNumeric(varValue))
			errors+='- Fältet \'' + varName + '\' måste innehålla ett numeriskt tal.\n';
	    
	    if (varCriteria.indexOf('inRange') != -1)
	    {
	      varTemp = varCriteria.indexOf(':');
	      varMin = varCriteria.substring(8, varTemp);
	      varMax = varCriteria.substring(varTemp + 1);
  	      if ((parseInt(varValue) < parseInt(varMin)) || (parseInt(varMax) < parseInt(varValue)))
	        errors+='- Fältet \'' + varName+'\' måste innehålla ett numeriskt tal mellan '+varMin+' och '+varMax+'.\n';
	    }
	  }
	}//inte ' och "
      } 
      else if (varCriteria.charAt(0) == 'R')
		errors += '- Fältet \''+varName+'\' får inte vara tomt.\n';
    }
  }//for
 
  if (errors)
  {
    alert('Litium® Inmatningskontroll är aktiverad.\n\n\nFöljande uppställning visar vad som måste åtgärdas:          \n\n'+errors+'\n\n© 2000-2002 Litium Affärskommunikation AB');
    return false;
  }
  else
    return true;
}

function LIHAttachSortOrder() {
	// ***********************************************************************************************
	// Skapad: 040408
	// Programmerare: Joakim Karlsson, Litium Affärskommunikation AB
	// Beskrivning: Denna funktion används för att skicka med en sorteringsordning till mottagarsidan
	// ***********************************************************************************************
	var aForms=document.getElementsByTagName("FORM")
	for(i=0;i<aForms.length;i++) {
		var order=":";
		var aChilds=aForms[i].elements; 
		for(j=0;j<aChilds.length;j++) {
			if((aChilds[j].tagName.toUpperCase()=="INPUT"&&aChilds[j].type.toLowerCase()!="button"&&aChilds[j].type.toLowerCase()!="submit"&&aChilds[j].type.toLowerCase()!="reset")||aChilds[j].tagName.toUpperCase()=="TEXTAREA"||aChilds[j].tagName.toUpperCase()=="IMAGE"||aChilds[j].tagName.toUpperCase()=="SELECT") {
				if(order.indexOf(":"+aChilds[j].name+":")==-1) {order+=aChilds[j].name+":";}
			}
		}
		if(order.length>1) {
			order=order.substring(1,order.length-1)
			if(aForms[i].action.indexOf(".asp")!=-1) {
				if(aForms[i].action.indexOf("?")!=-1) {aForms[i].action+="&LIHSortOrder="+order;}
				else {aForms[i].action+="?LIHSortOrder="+order;}
			}
		}
	}
}
