/*
	formulier verify script
	ICATT interactieve media, 2001
	
*/

/*
	/scripts/verify/verify.js gebruikt de foutmeldingen die staan in /scripts/verify/defaultMessages.js
	Als je de default messages wil gebruiken dan hoef je die niet te includen in je html
	als je die meldingen per site wil configureren dan include je je eigen messages.js in je htmnl bestand.
*/
if(typeof(MSG)=="undefined")
	document.writeln("<script type='text/javascript' language='javascript' src='/scripts/verify/defaultMessages.js'></script>");

/**************************************************
*                                                 *
*	functies van het document                      *
*                                                 *
***************************************************/
var optionalImageSrc = "";
var requiredImageSrc = "";

/**************************************************

	formulieren initialiseren 

	alle formulieren van het document initialiseren.
	door alle layers van het document loopen.
***************************************************/
	function initForms(doc)
	{
		if(!doc)
		{
			doc = document;
		}
		for(var f=0; f< doc.forms.length; f++)
		{
			initEachForm(doc.forms[f], doc);
		}
//		for(var l=0; doc.layers && l<doc.layers.length; l++)
//		{
//			initForms(doc.layers[l].document)
//		}
	}

/**************************************************

	een formulier initialiseren 

	methodes en properties toevoegen aan 
	het formulier en aan de formulier elementen
***************************************************/
	function initEachForm(form, doc)
	{
		form.setOptional = setOptional;
		form.setRequired = setRequired;
		form.setBeautified = setBeautified;
		if(typeof(doIt)!="undefined")
		{
			form.doIt = doIt;
		}
		form.verify = verify;
		form.verifyElement = verifyElement;
		form.resetElements = resetElements;
		form.setFormat = setFormat;
		form.setMin = setMin;
		form.setMax = setMax;
		form.setBusinessDays = setBusinessDays;
		form.initAllElements = initAllElements;
		form.update = update;
		form.setBullet = setBullet;
		
		form.doc = doc;
		
		form.emptyFields = "";
    	form.errors = "";
    	form.scriptErrors = "";
		form.errorMsg = new ErrorMsg();
		form.getMsg = getMsg;
		
		form.initBullets = initBullets;
		form.bulletPrefix = "bullet_";
		form.bulletSuffix = "";

		form.openPopWindow = openPopWindow;
		form.initPopWindow = initPopWindow;
		form.popWindowTemplate = "";
		form.popWindowWidth = 0;
		form.popWindowHeight = 0;
		form.defaultMsg = null;
		form.setDefaultMsg = setDefaultMsg;
		form.quietMode = false;
		form.setQuiet = setQuiet;
	   form.initAllElements();
	}

/**************************************************
*                                                 *
*	formulier methodes                             *
*                                                 *
***************************************************/
	function getMsg(msg, name, value)
	{
		var text = "";
		text = eval("this.errorMsg."+msg);
		if(name)
			text = text.replace(/<NAME>/, name);
		if(value)
			text = text.replace(/<VALUE>/, value);

		return(text);
	}
	function setDefaultMsg(defaultMsg)
	{
		if(defaultMsg)
			this.defaultMsg = defaultMsg;
		else
			this.defaultMsg = "";
	}
	function setQuiet(value) // wel of geen popup bij verify (true of false)
	{
		this.quietMode = value;
	}
	function openPopWindow(msg) 
	{
		var opt = "toolbar=no,menubar=0,scrollbars=1,resizable=1,width=" + this.popWindowWidth + ",height=" + this.popWindowHeight;
		if(msg)
		{
			msg = msg.replace(/\n/g,"<br>");
			msg = escape(msg);
		}
		var url = this.popWindowTemplate + "?" + msg;
		window.open(url,'bericht',opt);
	}

	function initPopWindow(popWindowTemplate, popWindowWidth, popWindowHeight) 
	{
		this.popWindowTemplate = popWindowTemplate;
		this.popWindowWidth = popWindowWidth;
		this.popWindowHeight = popWindowHeight;
	}

	function update()
	{
		if(optionalImageSrc && requiredImageSrc)
		{
			for(var e = 0; e < this.elements.length; e++)
			{
				element = this.elements[e];
	
				this.setBullet(element);
			}	
		}
    	for(var i = 0; i < this.length; i++) 
    	{
	    	element = this.elements[i];
    		element.verified = false;
		}
	}

	function initBullets(optional, required)
	{
		optionalImageSrc = optional;
		requiredImageSrc = required;
	}

	function setBullet(element)
	{
		bulletImage = this.bulletPrefix + element.name + this.bulletSuffix;
		
		if(this.doc.images[bulletImage])
		{
			if(element.optional)
			{
				this.doc.images[bulletImage].src = optionalImageSrc;
			}
			else
			{
				this.doc.images[bulletImage].src = requiredImageSrc;
			}
		}
	}

// toevoeging 27 aug 2001:EB, een extra propertie voor een beautified name
	function initAllElements()
	{
		var element;
		
		for(var e = 0; e < this.elements.length; e++)
		{
			element = this.elements[e];
			initElement(element);
			element.optional = true;
			element.beautified = element.name;
		}
//		this.reset();
	}

	function initElement(element)
	{
		initElementVerify(element);

		if(element.format)
		{
			initElementVerifyFormat(element);
			initElementVerifyConstraints(element);
		}
	}

/****************/
				function verifyCheckbox()
				{
					var check = true;
				  	var checkboxName, checkboxChecked, checkboxElement;
				
					if(!this.verified)
					{
						checkboxChecked = false;
				
						for(var j=0; j<this.form.elements.length; j++)
						{
							e2 = this.form.elements[j];
							if(e2.name == this.name)
							{
								if(e2.checked)
								{
									checkboxChecked = true;
								}
								e2.verified = true;
							}
						}
						if(!checkboxChecked)
						{
							this.form.emptyFields += "\n          " + this.beautified;
							check = false;
						}
						checkboxChecked = false;
						return(check);
					}
				}

				function verifyText()
				{
					var check = true;

					if ((this.value == null) || (this.value == "") || isblank(this.value)) 
					{  
						this.form.emptyFields += "\n          " + this.beautified;
						check = false;
					}
					return(check);
				}

				function verifySelect()
				{
					var check = true;
					if (this.selectedIndex == 0)
					{
						this.form.emptyFields += "\n          " + this.beautified;
						check = false;
					}
					return(check);
				}
				function verifySelectMultiple()
				{
					var check = true;
					if (this.selectedIndex == -1)
					{
						this.form.emptyFields += "\n          " + this.beautified;
						check = false;
					}
					return(check);
				}
	function initElementVerify(element)
	{
			if((element.type == "checkbox") || (element.type == "radio"))
			{
				element.verify = verifyCheckbox;
			}
			else if((element.type == "file") || (element.type == "password") || (element.type == "text") || (element.type == "textarea"))
			{
				element.verify = verifyText;
			}
			else if(element.type == "select-one")
			{
				element.verify = verifySelect;
			}
			else if(element.type == "select-multiple")
			{
				element.verify = verifySelectMultiple;
			}
	}

/**************************************************

	check of de waarden van het element tussen min en max zijn.

	als het element is van type numeric, dan zijn
	min en max waardes. 

	als het element is van type string of stringstrict, dan zijn
	min en max het aantal characters. 
	als het element is van type MMDDYYYY, DDMMYYYY: min en max zijn het aantal dagen.
	als element.businessDays is true, dan zijn het werkdagen

***************************************************/
				function verifyNumericConstraints()
				{
					var check = true;

					if(this.min)
					{
						if(this.value.length < this.min)
						{
							this.form.errors += this.form.getMsg("errorStringMin", this.beautified, this.min) + "\n";
							check = false;
						}
					}
					if(this.max)
					{
						if(this.value.length > this.max)
						{
							this.form.errors += this.form.getMsg("errorStringMax", this.beautified, this.max) + "\n";
							check = false;
						}
					}
					return(check);
				}

				function verifyStringConstraints()
				{
					var check = true;

					if(this.min)
					{
						if(this.value.length < this.min)
						{
							this.form.errors += this.form.getMsg("errorStringMin", this.beautified, this.min) + "\n";
							check = false;
						}
					}
					if(this.max)
					{
						if(this.value.length > this.max)
						{
							this.form.errors += this.form.getMsg("errorStringMax", this.beautified, this.max) + "\n";
							check = false;
						}
					}
					return(check);
				}
				function verifyDateConstraints()
				{
					var check = true;

					var datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{2}|\d{4})$/;
					var matchArray = this.value.match(datePat); 
	
					if(matchArray)
					{
						switch(this.format)
						{
							case "MMDDYYYY":
								var maand = matchArray[1];
								var dag   = matchArray[3];
								var jaar  = matchArray[4];
							break;
							case "DDMMYYYY":
								var dag = matchArray[1];
								var maand   = matchArray[3];
								var jaar  = matchArray[4];
							break;
						}
						var nowDate = new Date();
						var formDate = new Date();
						formDate.setYear(jaar);
						formDate.setMonth(maand-1);
						formDate.setDate(dag);
						var dagen = daysBetween(nowDate, formDate);
						if(this.min)
						{
							if(this.businessDays)
							{
								var deliveryDate = getDeliveryDateObj(this.min);
								var deliveryDays = daysBetween(nowDate, deliveryDate);
								if(deliveryDays > dagen)
								{
									this.form.errors += this.form.getMsg("errorBussinessDaysMin", this.beautified, this.min) + "\n";
									check = false;
								}
							}
							else
							{
								if(dagen < this.min)
								{
									this.form.errors += this.form.getMsg("errorDaysMin", this.beautified, this.min) + "\n";
									check = false;
								}
							}
						}
						if(this.max)
						{
							if(this.businessDays)
							{
								var deliveryDate = getDeliveryDateObj(this.max);
								var deliveryDays = daysBetween(nowDate, deliveryDate);
								if(deliveryDays < dagen)
								{
									this.form.errors += this.form.getMsg("errorBussinessDaysMax", this.beautified, this.max) + "\n";
									check = false;
								}
							}
							else
							{
								if(dagen > this.max)
								{
									this.form.errors += this.form.getMsg("errorDaysMax", this.beautified, this.max) + "\n";
									check = false;
								}
							}
						}
					}
					return(check);
				}

	function initElementVerifyConstraints(element)
	{
			if((element.format == "numeric"))
			{
				element.verifyConstraints = verifyNumericConstraints;
			}
			else if((element.format == "string") || (element.format == "stringstrict"))
			{
				element.verifyConstraints = verifyStringConstraints;
			}
			else if((element.format == "MMDDYYYY") || (element.format == "DDMMYYYY"))
			{
				element.verifyConstraints = verifyDateConstraints;
			}
			else 
			{
				if(element.min || element.max)
				{
					element.form.scriptErrors += "\n          " + this.form.getMsg("verifyConstraints", element.beautified) + "\n";
				}
			}	
		
	}

/**************************************************

	check of een text, textarea, password, file,  element
	het juiste formaat bevat.
	formaten zijn:
	
	numeric: een nummer
	string: een string, met of zonder nummers, maar geen nummer alleen
	stringstrict: hetzelfde als string, maar characters atotz, A tot Z, en 0 tot 9
	email: geldig email adres
	cc: meerdere emails adressen met puntkommas
	MMDDYY, DDMMYY, MMDDYYYY, DDMMYYYY: datums
	
***************************************************/
						function verifyNumericFormat()
						{
							var check = true;

					 		if (isNaN(this.value))
							{
				            	this.form.errors += this.form.getMsg("errorNumericFormat", this.beautified) + "\n";
								check = false;
				            }
							return(check);
						}
						function verifyStringFormat()
						{
							var check = true;
							if(this.value == this.value.match(/[\d|,|\.]+/))
							{
								this.form.errors += this.form.getMsg("errorStringFormat", this.beautified) + "\n";
								check = false;
				            }
							return(check);
						}
						function verifyStringstrictFormat()
						{
							var check = true;

							if(this.value != this.value.match(/\w+/) || (this.value == this.value.match(/[\d|,|\.]+/)))
							{
								this.form.errors += this.form.getMsg("errorStringStrictFormat", this.beautified) + "\n";
								check = false;
				            }
							return(check);
						}
						function verifyEmailFormat()
						{
							var check = true;

							var r1 = new RegExp("(@.*@)|(\\.\\.)|(@\\.)|(^\\.)");
							var r2 = new RegExp("^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$");
							if(r1.test(this.value) || !r2.test(this.value))
							{
								this.form.errors += this.form.getMsg("errorEmailFormat", this.beautified) + "\n";
								check = false;
							}
							return(check);
						}
						function verifyCcFormat()
						{
							var check = true;
							var arrbcc = this.value.split(";");

							for(var i = 0; i < arrbcc.length; i++)
							{
								var arrcheck = arrbcc[i];
								var r1 = new RegExp("(@.*@)|(\\.\\.)|(@\\.)|(^\\.)");
								var r2 = new RegExp("^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$");
								if(r1.test(arrcheck) || !r2.test(arrcheck))
								{
									this.form.errors += this.form.getMsg("errorCCFormat", this.beautified) + "\n";
									check = false;
								}
							}
							return(check);
						}
						function verifyMMDDYYFormat()
						{
							var check = true;
							var checkDate = isValidDate(this.value, "MMDDYY");

							if (!checkDate) 
							{
								this.form.errors += this.form.getMsg("errorMMDDYYFormat", this.beautified) + "\n";
								check = false;
							}
							return(check);
						}
						function verifyDDMMYYFormat()
						{
							var check = true;
							var checkDate = isValidDate(this.value, "DDMMYY");

							if (!checkDate)
							{
								this.form.errors += this.form.getMsg("errorDDMMYYFormat", this.beautified) + "\n";
								check = false;
							}
							return(check);
						}
						function verifyMMDDYYYYFormat()
						{
							var check = true;
							var checkDate = isValidDate(this.value, "MMDDYYYY");

							if (!checkDate) 
							{
								this.form.errors += this.form.getMsg("errorMMDDYYYYFormat", this.beautified) + "\n";
								check = false;
							}
							return(check);
						}
						function verifyDDMMYYYYFormat()
						{
							var check = true;
							var checkDate = isValidDate(this.value, "DDMMYYYY");

							if (!checkDate) 
							{
								this.form.errors += this.form.getMsg("errorDDMMYYYYFormat", this.beautified) + "\n";
								check = false;
							}
							return(check);
						}

	function initElementVerifyFormat(element)
	{
				switch(element.format)
				{
					case "numeric":
						element.verifyFormat = verifyNumericFormat;
					break;
					case "string":
						element.verifyFormat = verifyStringFormat;
					break;
					case "stringstrict":
						element.verifyFormat = verifyStringstrictFormat;
					break;
					case "email":
						element.verifyFormat = verifyEmailFormat;
					break;
					case "cc":
						element.verifyFormat = verifyCcFormat;
					break;
					case "MMDDYY":
						element.verifyFormat = verifyMMDDYYFormat;
					break;
					case "DDMMYY":
						element.verifyFormat = verifyDDMMYYFormat;
					break;
					case "MMDDYYYY":
						element.verifyFormat = verifyMMDDYYYYFormat;
					break;
					case "DDMMYYYY":
						element.verifyFormat = verifyDDMMYYYYFormat;
					break;
				}
			
		
	}


/**************************************************

	setOptional: de optional property van een of meerdere elementen zetten op true;
	setRequired: de optional property van een of meerdere elementen zetten op true;
	flag call:
	indien het argument is _ALL of _NONE worden alle elementen van het formulier op resp. true of false gezet.
	element call:
	een of meer namen van elementen.

***************************************************/
	function setOptional()
	{
		var flagCall = false;
		var element;

		if(arguments.length == 1)
		{
			switch(arguments[0])
			{
				case "_ALL":
					for(var e=0; e<this.elements.length; e++)
					{
						this.elements[e].optional = true;
					}
					flagCall = true;
				break;
				case "_NONE":
					for(var e=0; e<this.elements.length; e++)
					{
						this.elements[e].optional = false;
					}
					flagCall = true;
				break;
				default:	break;
			}
		}
		if(!flagCall)
		{
			for(var e=0; e<this.elements.length; e++)
			{
				element = this.elements[e];

				for(var a=0; a<arguments.length; a++)
				{
					if(element.name == arguments[a])
					{
						element.optional = true;
					}
				}
			}
		}
	}

	function setRequired()
	{
		var flagCall = false;
		var element;

		if(arguments.length == 1)
		{
			switch(arguments[0])
			{
				case "_ALL":
					for(var e=0; e<this.elements.length; e++)
					{
						this.elements[e].optional = false;
					}
					flagCall = true;
				break;
				case "_NONE":
					for(var e=0; e<this.elements.length; e++)
					{
						this.elements[e].optional = true;
					}
					flagCall = true;
				break;
				default:	break;
			}
		}
		if(!flagCall)
		{
			for(var e=0; e<this.elements.length; e++)
			{
				element = this.elements[e];

				for(var a=0; a<arguments.length; a++)
				{
					if(element.name == arguments[a])
					{
						element.optional = false;
//						element.beautified = element.name;
					}
				}
			}
		}
	}
	
	// er zijn 1 of 2 argumenten, bij 2 elementen is de beautify naam het 2e element, de 1e is de naam van het veld
	function setBeautified()
	{
		var element;
//alert("elements=" + this.elements.length);
		for(var e=0; e<this.elements.length; e++)
		{
			element = this.elements[e];
//alert("name=" + element.name);
//alert("len=" + arguments.length + ",arg1=" + arguments[0] + ",arg2=" + arguments[1]);

			if(element.name == arguments[0] && arguments.length>1)
			{
				element.beautified = arguments[1];
//				alert("beauty=" + element.name +":" + arguments[1]);
			}
		}
	}
	
	 

/**************************************************

	format zetten van een element

***************************************************/
	function setFormat(element, format)
	{
		this.elements[element].format = format;
	}

/**************************************************

	min zetten van een element

***************************************************/
	function setMin(element, min)
	{
		this.elements[element].min = min;
	}

/**************************************************

	max zetten van een element

***************************************************/
	function setMax(element, max)
	{
		this.elements[element].max = max;
	}

/**************************************************

	zijn de min en de max van een datum element 
	geteld in werkdagen

***************************************************/
	function setBusinessDays(element, flag)
	{
		this.elements[element].businessDays = flag;
	}

/**************************************************

	check het formulier
	
***************************************************/
	function verify()
	{
    	var msg="";
	   	var element;
	   
		this.emptyFields = "";
    	this.errors = "";
    	this.scriptErrors = "";

    	for(var i = 0; i < this.elements.length; i++) 
    	{
			element = this.elements[i];
	    	
	    	this.verifyElement(element);
		}
		this.update();

    	if (!this.emptyFields && !this.errors && !this.scriptErrors) return true;

		if(!this.defaultMsg)
			msg = this.getMsg("errorDefaultMsg");
		else
			msg = this.defaultMsg+"\n";

		if(this.scriptErrors) 
		{
			msg += this.getMsg("scriptErrorMsg") + this.scriptErrors + "\n"
			if (this.scriptErrors) msg += "\n";
		}

    	if (this.emptyFields) 
    	{
    	    msg += this.getMsg("emptyFieldsMsg") + this.emptyFields + "\n";
    	    if (this.errors) msg += "\n";
    	}
    	
    	msg += this.errors;
		this.emptyFields = "";
		this.errors = "";

		if(!this.quietMode)
		{
			if(this.popWindowTemplate)
			{
				this.openPopWindow(msg);
			}
			else
			{
		    	alert(msg);
			}
		}
    	return false;
	}

	function verifyElement(element)
	{
		var verify=true, verifyFormat=true, verifyConstraints=true;
		var check;
	   initElement(element);

		if(!element.optional && element.verify)
		{
				verify = element.verify();
		}		
		if(element.verifyFormat && element.value)
		{
			verifyFormat = element.verifyFormat();
		}
		if(element.verifyConstraints && element.value)
		{
			verifyConstraints = element.verifyConstraints();
		}	
		check = verify && verifyFormat && verifyConstraints;
		if(check)
		{
			this.setOptional(element.name);
		}
		return(check)
	}

/**************************************************

	formulier elementen die niet optional zijn resetten.

***************************************************/
	function resetElements()
	{
		var element;

		for(var e=0; e<this.elements.length; e++)
		{
			element = this.elements[e];
			if(!element.optional)
			{
				switch(element.type)
				{
					case "checkbox":		element.checked = false; break;
					case "file":			break;
					case "hidden":			element.value = ""; break;
					case "password":		element.value = ""; break;
					case "radio":			element.checked = false; break;
					case "reset":			break;
					case "submit":			break;
					case "button":			break;
					case "select-one":	element.selectedIndex = 0; break;
					case "select-multiple":		
						element.selectedIndex = -1; 
						break;
					case "text":			element.value = ""; break;
					case "textarea":		element.value = ""; break;
					default:					element.value = "";
				}
			}
		}
	}


	
/**************************************************
*                                                 *
*	utility functies                               *
*                                                 *
***************************************************/

/**************************************************

	check of string s is leeg

***************************************************/
	function isblank(s)
	{
		for(var i = 0; i < s.length; i++) 
		{
			var c = s.charAt(i);
			if ((c != ' ') && (c != '\n') && (c != '\t')) return false;     
		}
		return true;
	}

/**************************************************

	geldig datum

***************************************************/
	function isValidDate(dateStr, dateFormat)
	// Checks for the following valid date formats:
	// MM/DD/YY   MM/DD/YYYY   MM-DD-YY   MM-DD-YYYY
	// Also separates date into month, day, and year variables
	{
		var datePat;
		var month;
		var day;
		var year;

		if (dateFormat=="MMDDYY" || dateFormat=="DDMMYY")
		{
			datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{2}|\d{4})$/;
		}
		else if (dateFormat=="MMDDYYYY" || dateFormat=="DDMMYYYY")
		{
			datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{4})$/;
		}
	
		// is the format ok?
		var matchArray = dateStr.match(datePat); 
		
		if (matchArray == null) 
		{
			//alert("Date is not in a valid format.")
			return false;
		}
		
		// parse date into variables
		if (dateFormat=="MMDDYY" || dateFormat=="MMDDYYYY")
		{
			month = matchArray[1]; 
			day = matchArray[3];
		}
		else if (dateFormat=="DDMMYY" || dateFormat=="DDMMYYYY")
		{
			month = matchArray[3]; 
			day = matchArray[1];
		}	
		year = matchArray[4];
		
		// check month range
		if (month < 1 || month > 12) 
		{
			//alert("Month must be between 1 and 12.");
			return false;
		}

		if (day < 1 || day > 31) 
		{
			//alert("Day must be between 1 and 31.");
			return false;
		}
		
		if ((month==4 || month==6 || month==9 || month==11) && day==31)
		{
		//	alert(this.form.getMsg("error31Days", month));
			return false
		}
		
		// check for february 29th
		if (month == 2) 
		{ 
			var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
			if (day>29 || (day==29 && !isleap)) 
			{
			//	alert(this.form.getMsg("errorFebruary", year, day));
				return false;
			}
		}
		
		// date is valid
		return true;  
	}

/**************************************************

	2 datums vergelijken
	Yehuda Shiran, Ph.D.
	http://webreference.com/js/tips/010220.html
	
***************************************************/
	var SECOND = 1000; // the number of milliseconds in a second
	var MINUTE = SECOND * 60; // the number of milliseconds in a minute
	var HOUR = MINUTE * 60; // the number of milliseconds in an hour
	var DAY = HOUR * 24; // the number of milliseconds in a day
	var WEEK = DAY * 7; // the number of milliseconds in a week

	function daysBetween(date1, date2) 
	{
		var nTime = date1.getTime(); // current time (UTC)
		var dTime = date2.getTime(); // specified time (UTC)
		var bTime = dTime - nTime;   // time difference
		return Math.round(bTime / DAY);
	}

	function getDeliveryDateObj(businessDaysLeftForDelivery) 
	{
		var now = new Date();
		var dayOfTheWeek = now.getDay();
		var calendarDays = businessDaysLeftForDelivery;
		var deliveryDay = dayOfTheWeek + businessDaysLeftForDelivery;
		if (deliveryDay >= 6) {
			businessDaysLeftForDelivery -= 6 - dayOfTheWeek;  //deduct this-week days
			calendarDays += 2;  //count this coming weekend
			deliveryWeeks = Math.floor(businessDaysLeftForDelivery / 5); //how many whole weeks?
			calendarDays += deliveryWeeks * 2;  //two days per weekend per week
		}
		now.setTime(now.getTime() + calendarDays * DAY);
		return now;
	}

 

