/*
	basic engine for parsing form values
	accepts list of required fields as array
*/


var valCol = '#FFFFFF'; 	// regular background color
var invalCol = '#FFCCCC';	// highlighted (alerted) field color
var invalidChars = " /:;\|\)\(\*\&\^\%\$\#\!\~\`\"'\\\}\{\[\]\<\>\?\+\=,";

function isValid(reqFields) {
  
	var bStatus = true;
	
	for(i = 0; i < reqFields.length; i++) 
	{
		var currentField = document.getElementById(reqFields[i]);
		
		// reset bg color to clear all previous errors
		setValid(currentField,true);
		if( (!currentField.value) || (currentField.value=="") ) 
		{
			// set background color to alert
			setValid(currentField,false);
			bStatus = false;
			break;
		}
	}

  return bStatus;
}

function isValidEmail(emailField)
{
  if (isEmail(emailField.value)==false) 	
  {
  	setValid(emailField,false);
		return ("Please enter a valid email address!");
	}
	
	setValid(emailField,true);
	return("");
}


function isValidCountry(countryField)
{
  if(countryField.value=="[select]")
	{
    setValid(countryField,false);
		return ("Please select a country!");
	}
	
	setValid(countryField,true);
  return ("");
}

function isValidCustomer(customerField)
{
  if(customerField.value=="[Select]")
  {
    setValid(customerField,false);
    return ("You must select ECS Customer Name!");
  }
  
	setValid(customerField,true);
  return("");
}

function isValidMonth(monthField)
{
  if(monthField.value=="[Select month]")
  {
    setValid(monthField,false);
    return ("You must select a month!");
  }
  
	setValid(monthField,true);
  return ("");
}

function isValidCardType(cardTypeField)
{
  if(cardTypeField.value=="[Select customer first]")
  {
    setValid(cardTypeField,false);
    return ("You must select ECS Customer Name and then card type!");
  }
  else if(cardTypeField.value == "[Select]               ")
  {
    setValid(cardTypeField,false);
    return ("You must select a card type!");
  }
  
  cardTypeField.style.backgroundColor=valCol;
  setValid(cardTypeField,true);
  return ("");
}

function isValidNewCardType(cardTypeField)
{
  if(cardTypeField.value=="")
  {
    setValid(cardTypeField,false);
    return ("You must enter a name for the new card type!");
  }

  setValid(cardTypeField,true);
  return ("");
}

function isValidQuantity(quantityField)
{
  if(isNumeric(quantityField.value)==false)
  {
    setValid(quantityField,false);
    return ("Quantity field can only contain numbers!");
  }
  
	setValid(quantityField,true);
  return (""); 
}

function isValidQtyReturnItems(quantityField)
{
  if(isNumeric(quantityField.value)==false)
  {
    setValid(quantityField,false);
    return ("Return Items field can only contain numbers!");
  }
  else if (quantityField.value <= 0)
  {
	setValid(quantityField,false);
    return ("Return Items must be an amount greater then 0!");
  }
  
  setValid(quantityField,true);
  return (""); 
}

function isValidRegion(regionField)
{
  if(regionField.value=="[Select]")
  {
    setValid(regionField,false);
    return ("The ECS Customer Region is required!");
  }
  
  setValid(regionField,true);
  return ("");
}

function isValidSubLocation(subLocField)
{
  if(subLocField.value=="[Select]")
  {
    setValid(subLocField,false);
    return ("You must select whether the new location is a sublocation!");
  }
  
  setValid(subLocField,true);
  return ("");
}

function isValidNewCustomer(newCustomerField)
{
  if(newCustomerField.value=="")
  {
    setValid(newCustomerField,false);
    return ("The New Customer Name is required!");
  }

  setValid(newCustomerField,true);
  return("");
}

function isValidNewRegion(newRegionField)
{
  if(newRegionField.value=="")
  {
    setValid(newRegionField,false);
    return ("The New Customer Region is required!");
  }
  
  setValid(newRegionField,true);
  return("");
}

function isValidMainLocation(mainLocationField)
{
  if(mainLocationField.value=="")
  {
    setValid(mainLocationField,false);
    return ("Main location name is required!");
  }
  
  setValid(mainLocationField,false);
  return ("");
}

function isValidMainLocationId(mainLocationIdField)
{
  if(mainLocationIdField.value=="")
  {
    setValid(mainLocationIdField,false);
    return ("Main location id is required!");
  }
  else if(isNumeric(mainLocationIdField.value)==false)
  {
    setValid(mainLocationIdField,false);
    return ("Main location id can only contain numbers!");
  } 
  
  setValid(mainLocationIdField,true);
  return("");
}

function isValidOpeningDate(openingDateField)
{
  if (check_date(openingDateField)==false)
  {
    setValid(openingDateField,false);
    return ("Valid opening date is required!")
  }
  
  setValid(openingDateField,true);
  return ("");
}

function isValidLocationType(locationTypeField)
{
  if(locationTypeField.value=="[Select]")
  {
    setValid(locationTypeField,false);
    return ("You must select a location type!");
  }
  setValid(locationTypeField,true);
  return ("");
}

//manager applications
function isValidNoManagers(noManagersField)
{
  if(isNumeric(noManagersField.value)==false && noManagersField.value!="")
  {
    setValid(noManagersField,false);
    return ("Number of ECS Managers can only contain numbers!");
  }
    
  setValid(noManagersField,true);
  return ("");
}

//remote manager applications
function isValidNoRemoteManagers(noRemoteManagersField)
{
  if(isNumeric(noRemoteManagersField.value)==false && noRemoteManagersField.value!="")
  {
    setValid(noRemoteManagersField,false);
    return ("Number of ECS Remote Managers can only contain numbers!");
  }
    
  setValid(noRemoteManagersField,true);
  return ("");
}

//polling applications
function isValidNoPolling(noPollingField)
{
  if(isNumeric(noPollingField.value)==false && noPollingField.value!="")
  {
    setValid(noPollingField,false);
    return ("Number of Polling Computers can only contain numbers!");
  }
    
  setValid(noPollingField,true);
  return ("");
}

//pos applications
function isValidNoPOS(noPOSField)
{
  if(isNumeric(noPOSField.value)==false && noPOSField.value!="")
  {
    setValid(noPOSField,false);
    return ("Number of POS Computers can only contain numbers!");
  }
    
  setValid(noPOSField,true);
  return ("");
}

//kiosks 
function isValidNoKiosks(noKiosksField)
{
  if(isNumeric(noKiosksField.value)==false && noKiosksField.value!="")
  {
    setValid(noKiosksField,false);
    return ("Number of Kiosks can only contain numbers!");
  }
    
  setValid(noKiosksField,true);
  return ("");
}

//mobile cashiers
function isValidNoMobileCashiers(noMobileCashiersField)
{
  if(isNumeric(noMobileCashiersField.value)==false && noMobileCashiersField.value!="")
  {
    setValid(noMobileCashiersField,false);
    return ("Number of Mobile Cashiers can only contain numbers!");
  }
    
  setValid(noMobileCashiersField,true);
  return ("");
}

//swipers
function isValidNoSwipers(noSwipersField)
{
  if(isNumeric(noSwipersField.value)==false && noSwipersField.value!="")
  {
    setValid(noSwipersField,false);
    return ("Maximum Number of Swipers can only contain numbers!");
  }
    
  setValid(noSwipersField,true);
  return ("");
}

//floor area
function isValidFloorArea(floorAreaField)
{
  if(isNumeric(floorAreaField.value)==false && floorAreaField.value!="")
  {
    setValid(floorAreaField,false);
    return ("Floor area field can only contain numbers!");
  }
    
  setValid(floorAreaField,true);
  return ("");
}


function setValid(field, isValid)
{
  if (!(isValid))
  {
    field.focus();
    field.style.backgroundColor=invalCol;
  }
  else
  {
    field.style.backgroundColor=valCol;
  }
}


//regex validation
function isNumeric(str)
{
  refno=/^[0-9]+$/;
  return (refno.test(str));
}

function isAlphaNumeric(str)
{
  refno=/^[a-zA-Z0-9\\-]+$/;
  return (refno.test(str));
}

function isEmail(str) 
{
  // are regular expressions supported?
  var supported = 0;
  if (window.RegExp) 
  {
    var tempStr = "a";
    var tempReg = new RegExp(tempStr);
    if (tempReg.test(tempStr)) supported = 1;
  }
  if (!supported) 
    return (str.indexOf(".") > 2) && (str.indexOf("@") > 0);
  var r1 = new RegExp("(@.*@)|(\\.\\.)|(@\\.)|(^\\.)");
  var r2 = new RegExp("^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$");
  return (!r1.test(str) && r2.test(str));
}
//end - regex validation



        
function check_date(field)
{
  var checkstr = "0123456789";
  var DateField = field;
  var Datevalue = "";
  var DateTemp = "";
  var seperator = "/";
  var day;
  var month;
  var year;
  var leap = 0;
  var err = 0;
  var i;
  
  err = 0;
  DateValue = DateField.value;
  /* Delete all chars except 0..9 */
  for (i = 0; i < DateValue.length; i++) 
  {
   if (checkstr.indexOf(DateValue.substr(i,1)) >= 0) 
   {
     DateTemp = DateTemp + DateValue.substr(i,1);
   }
  }
  DateValue = DateTemp;
  /* Always change date to 8 digits - string*/
  /* if year is entered as 2-digit / always assume 20xx */
  if (DateValue.length == 6) 
  {
    DateValue = DateValue.substr(0,4) + '20' + DateValue.substr(4,2); 
  }
  if (DateValue.length != 8) 
  {
    err = 19;}
  /* year is wrong if year = 0000 */
  year = DateValue.substr(4,4);
  if (year == 0) 
  {
    err = 20;
  }
  /* Validation of month*/
  month = DateValue.substr(2,2);
  if ((month < 1) || (month > 12)) 
  {
    err = 21;
  }
  /* Validation of day*/
  day = DateValue.substr(0,2);
  if (day < 1) 
  {
   err = 22;
  }
  /* Validation leap-year / february / day */
  if ((year % 4 == 0) || (year % 100 == 0) || (year % 400 == 0)) 
  {
    leap = 1;
  }
  if ((month == 2) && (leap == 1) && (day > 29)) 
  {
    err = 23;
  }
  if ((month == 2) && (leap != 1) && (day > 28)) 
  {
    err = 24;
  }
  /* Validation of other months */
  if ((day > 31) && ((month == "01") || (month == "03") || (month == "05") || (month == "07") || (month == "08") || (month == "10") || (month == "12"))) 
  {
    err = 25;
  }
  if ((day > 30) && ((month == "04") || (month == "06") || (month == "09") || (month == "11"))) 
  {
    err = 26;
  }
  /* if 00 ist entered, no error, deleting the entry */
  if ((day == 0) && (month == 0) && (year == 00)) 
  {
    return false;
  }
  /* if no error, write the completed date to Input-Field (e.g. 13.12.2001) */
  if (err == 0) 
  {
    DateField.value = day + seperator + month + seperator + year;
    return true;
  }
  /* Error-message if err != 0 */
  else 
  {
   return false;
  }
}
