/*global window, YAHOO, MEDECO */
/*jslint white: true, onevar: true, browser: true, undef: true, nomen: true, eqeqeq: true, plusplus: true, bitwise: true, regexp: true, strict: false, newcap: true, immed: true */
if (!this.MEDECO) {
	this.MEDECO = {};
}
(function () {

	//VERSION
	//14.0.1.8

	//Aliasses
	var Y = YAHOO,
		Event = Y.util.Event,
		Dom = Y.util.Dom,
		Cookie = Y.util.Cookie;

	//EXTEND Y.util.Dom
	if (typeof Dom.createElement !== 'function') {
		Dom.createElement = function (type, id, className, innerHTML, parent) {
			var oElement = document.createElement(type);
			if (id) {
				oElement.id = id;
			}
			else {
				//Set unique ID
				Y.util.Dom.generateId(oElement, 'syn-gen');
			}
			
			if (className) {
				oElement.className = className;
			}
			if (typeof innerHTML !== 'undefined' && innerHTML !== null) { 
				if (typeof oElement.innerHTML !== 'undefined') {
					oElement.innerHTML = innerHTML;
				}
			}			
			if (parent) {
				parent.appendChild(oElement);
			}
			//Null
			parent = null;
			//Result
			return oElement;
		};
	}

	//Dom.createCheckbox
	if (typeof Dom.createCheckbox !== 'function') {
		Dom.createCheckbox = function (id, className, value, parent) {
			var oElement = document.createElement('input');
			oElement.type = 'checkbox';
			if (id) {
				oElement.id = id;
			}
			else {
				//Set unique ID
				Y.util.Dom.generateId(oElement, 'syn-gen');
			}
			
			if (className) {
				oElement.className = className;
			}
			oElement.value = value;
			if (parent) {
				parent.appendChild(oElement);
			}
			//Null
			parent = null;
			//Result
			return oElement;
		};
	}


	//HELPERS
	//--------------------------------------------------------------

	//MEDECO.helpers
	if (typeof MEDECO.helpers !== 'object') {
		MEDECO.helpers = {};
	}

	//MEDECO.helpers.throbber
	if (typeof MEDECO.helpers.throbber !== 'object') {
		MEDECO.helpers.throbber = {
			cover : null,
			dialog : null,
			show : function (message) {
				//Var
				var hlp = MEDECO.helpers.throbber,
					html = '';
				
				//Test for currently active cover
				if (Y.lang.isObject(hlp.cover)) {
					return;
				}
				
				//Create divs
				hlp.cover = Dom.createElement('div', 'pb-throbber-cover');
				hlp.dialog = Dom.createElement('div', 'pb-throbber-dialog');
				
				//Build html
				html += '<div class="inner">';
				html += '<table cellpadding="2" cellspacing="2" border="0">';
				html += '	<tr>';
				html += '		<td colspan="2" style="text-align: center"><b>Een ogenblik geduld A.U.B</b></td>';
				html += '	</tr>';
				html += '	<tr>';
				html += '		<td valign="top"><img src="/framework/modules/General/images/check.png" alt=""></td>';
				html += '		<td valign="top">' + message + '</td>';
				html += '	</tr>';
				html += '</table>';
				html += '</div>';
		
				//Add message
				hlp.dialog.innerHTML = html;
				
				//Append
				document.body.appendChild(hlp.cover);
				document.body.appendChild(hlp.dialog);
				
				//Resize
				hlp.resize();
				
				//Add listener
				Event.addListener(window, 'resize', hlp.resize);
				Event.addListener(window, 'scroll', hlp.resize);
				
			},
			resize: function () {
				//Var
				var hlp = MEDECO.helpers.throbber,
					vpWidth = Dom.getViewportWidth(),
					vpHeight = Dom.getViewportHeight(),
					scrollTop = Dom.getDocumentScrollTop(),
					scrollLeft = Dom.getDocumentScrollLeft(),
					cvWidth = vpWidth,
					cvHeight = vpHeight,
					cvTop = scrollTop,
					cvLeft = scrollLeft,
					thRegion,
					thTop,
					thLeft;

				//Test for currently active cover
				if (!Y.lang.isObject(hlp.cover)) {
					return;
				}
				
				//GEt region
				thRegion = Dom.getRegion(hlp.dialog);
				
				//Test regin
				if (!thRegion) {
					return;
				}
				
				//Calc dialog pos
				thTop = ((vpHeight - thRegion.height) / 2) + scrollTop;
				thLeft = ((vpWidth - thRegion.width) / 2) + scrollLeft;
				
				//Test for 0
				cvWidth = (cvWidth < 0) ? 0 : cvWidth;
				cvHeight = (cvHeight < 0) ? 0 : cvHeight;
				
				//Set cover
				Dom.setStyle(hlp.cover, 'position', 'absolute');
				Dom.setStyle(hlp.cover, 'top', cvTop + 'px');
				Dom.setStyle(hlp.cover, 'left', cvLeft + 'px');
				Dom.setStyle(hlp.cover, 'width', cvWidth + 'px');
				Dom.setStyle(hlp.cover, 'height', cvHeight + 'px');
				Dom.setStyle(hlp.cover, 'opacity', 0.5);  

				//Set dialog
				Dom.setStyle(hlp.dialog, 'position', 'absolute');
				Dom.setStyle(hlp.dialog, 'top', thTop + 'px');
				Dom.setStyle(hlp.dialog, 'left', thLeft + 'px');
			},
			close : function () {
				//Var
				var hlp = MEDECO.helpers.throbber;

				//Remove listener
				Event.removeListener(window, 'resize', hlp.resize);
				Event.removeListener(window, 'scroll', hlp.resize);

				//Remove from body
				if (Y.lang.isObject(hlp.cover)) {
					document.body.removeChild(hlp.cover);
				}
				if (Y.lang.isObject(hlp.dialog)) {
					document.body.removeChild(hlp.dialog);
				}
				//Set null
				hlp.cover = null;
				hlp.dialog = null;
			}
		};
	}

	//MEDECO.helpers.imagePopup
	if (typeof MEDECO.helpers.imagePopup !== 'object') {
		MEDECO.helpers.imagePopup = {
			cover : null,
			dialog : null,
			imageList : [],
			currentImage : null,
			addImage : function (imageLocation) {
				MEDECO.helpers.imagePopup.imageList.push(imageLocation);
			},
			show : function (currentImage) {
				//Var
				var hlp = MEDECO.helpers.imagePopup,
					imgWidth,
					imgHeight,
					topBar,
					closeButtton;
				
				//Test for currently active cover
				if (Y.lang.isObject(hlp.cover)) {
					return;
				}
//				alert(currentImage);

				//Create divs
				hlp.cover = Dom.createElement('div', 'pb-throbber-cover');
				hlp.dialog = Dom.createElement('div', 'pb-image-dialog');
				
				//Create top bar with close button
				topBar = Dom.createElement('div', null, 'pb-image-topbar', null, hlp.dialog);
				closeButtton = Dom.createElement('div', null, 'pb-image-topbar-close', 'X', topBar);
				
				Event.on(closeButtton, 'click', hlp.close);
				
				//Load image
				hlp.currentImage = Dom.createElement('img');
				hlp.currentImage.src = currentImage;
				
				//Get width & height
				imgWidth = hlp.currentImage.width;
				imgHeight = hlp.currentImage.height;
				
				
				hlp.dialog.style.width = (imgWidth + 2) + 'px';
				
				hlp.dialog.appendChild(hlp.currentImage);
				//hlp.cover = Dom.createElement('div', 'pb-throbber-cover');
				
				//hlp.resize();
				
				//Append
				document.body.appendChild(hlp.cover);
				document.body.appendChild(hlp.dialog);
				
				//Event.on(hlp.currentImage, 'load', hlp.resize);
				//Resize
				
				hlp.resize();
				
				//Event.onDOMReady(hlp.resize);
				
				//Add listener
				Event.addListener(window, 'resize', hlp.resize);
				Event.addListener(window, 'scroll', hlp.resize);
				
			},
			resize: function () {
				//Var
				var hlp = MEDECO.helpers.imagePopup,
					vpWidth = Dom.getViewportWidth(),
					vpHeight = Dom.getViewportHeight(),
					scrollTop = Dom.getDocumentScrollTop(),
					scrollLeft = Dom.getDocumentScrollLeft(),
					cvWidth = vpWidth,
					cvHeight = vpHeight,
					cvTop = scrollTop,
					cvLeft = scrollLeft,
					thRegion,
					thTop,
					thLeft;

				//Test for currently active cover
				if (!Y.lang.isObject(hlp.cover)) {
					return;
				}
				
				//GEt region
				thRegion = Dom.getRegion(hlp.dialog);
				
				//Test regin
				if (!thRegion) {
					return;
				}
				
				//Calc dialog pos
				thTop = ((vpHeight - thRegion.height) / 2) + scrollTop;
				thLeft = ((vpWidth - thRegion.width) / 2) + scrollLeft;
				
				//Test for 0
				cvWidth = (cvWidth < 0) ? 0 : cvWidth;
				cvHeight = (cvHeight < 0) ? 0 : cvHeight;
				
				//Set cover
				Dom.setStyle(hlp.cover, 'position', 'absolute');
				Dom.setStyle(hlp.cover, 'top', cvTop + 'px');
				Dom.setStyle(hlp.cover, 'left', cvLeft + 'px');
				Dom.setStyle(hlp.cover, 'width', cvWidth + 'px');
				Dom.setStyle(hlp.cover, 'height', cvHeight + 'px');
				Dom.setStyle(hlp.cover, 'opacity', 0.5);  

				//Set dialog
				Dom.setStyle(hlp.dialog, 'position', 'absolute');
				Dom.setStyle(hlp.dialog, 'top', thTop + 'px');
				Dom.setStyle(hlp.dialog, 'left', thLeft + 'px');
				//alert([vpWidth, thRegion.width]);
			},
			close : function () {
				//Var
				var hlp = MEDECO.helpers.imagePopup;

				//Remove listener
				Event.removeListener(window, 'resize', hlp.resize); 
				Event.removeListener(window, 'scroll', hlp.resize);

				//Remove from body
				if (Y.lang.isObject(hlp.cover)) {
					document.body.removeChild(hlp.cover);
				}
				if (Y.lang.isObject(hlp.dialog)) {
					document.body.removeChild(hlp.dialog);
				}
				//Set null
				hlp.cover = null;
				//hlp.dialog = null;
			}
		};
	}

	//MEDECO.helpers.parseRequest
	if (typeof MEDECO.helpers.parseRequest !== 'function') {
		MEDECO.helpers.parseRequest = function (o) {
			var result;
			//Try parse
			try {
				result = YAHOO.lang.JSON.parse(o.responseText);
			}
			catch (ex) {
				alert('Ontvangen JSON bericht voldoet niet aan de specificaties.\n ');
				alert(o.responseText);
				return false;
			}
			//Test object
			if (typeof result !== 'object') {
				alert('JSON result is not an object.');
				alert(o.responseText);
				return false;					
			}
			return result;				
		};
	}

	//MEDECO.helpers.toggleComboboxSelection
	if (typeof MEDECO.helpers.toggleComboboxSelection !== 'function') {
		MEDECO.helpers.toggleComboboxSelection = function (elName, isChecked) {
			//Var
			var dep = Dom.get(elName),
				i, l, k, checkValue = (isChecked) ? true : false;
			
			//Test for type
			if (typeof dep.options !== 'object') {
				return false;
			}
			
			//Length
			l = dep.options.length;
			
			//Loop
			for (i = 0; i < l; i += 1) {
				k = dep.options[i];
				k.selected = checkValue;
			}
		};
	}	

	//MEDECO.helpers.toggleCheckbox
	if (typeof MEDECO.helpers.toggleCheckbox !== 'function') {
		MEDECO.helpers.toggleCheckbox = function (formName, checkboxName) {
			//Var
			var form = Dom.get(formName),
				i, l, idx, k;
			if (form && form.elements) {
				l = form.elements.length;
				for (i = 0; i < l; i += 1) {
					k = form.elements[i];
					
					if (k.type === 'checkbox') {
						idx = k.name.indexOf(checkboxName);
						if (idx >= 0) {
							if (k.disabled) {
								continue;
							}
							k.checked = !k.checked;
						}
					}
				}
			}
		};
	}	

	//MEDECO.helpers.validateEmailAddress
	if (typeof MEDECO.helpers.validateEmailAddress !== 'function') {
		MEDECO.helpers.validateEmailAddress = function (address) {
			var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
			if (reg.test(address) === false) {
				return false;
			}
			return true;
		};
	}

	//MEDECO.helpers.validateFormFields
	if (typeof MEDECO.helpers.validateFormFields !== 'function') {
		MEDECO.helpers.validateFormFields = function () {
			var i, k, l = arguments.length, o, valid = true,
				classParts, orgClass, validationType, submitButton;

			function getClassParts(className) {
				var parts = className.split(' ');
				return parts;
			}
			
			//alert(arguments);
			for (i = 0; i < l; i += 1) {
				k = arguments[i];
				//alert(k);
				o = Dom.get(k);
				if (o) {
					//Get org class
					orgClass = o.className;
					
					//Use org or set org
					if (o.orgClass) {
						orgClass = o.orgClass;
					}
					else {
						o.orgClass = orgClass;	
					}
					
					//Get parts
					classParts = getClassParts(orgClass);
					
					//Set normal before validation
					o.className = orgClass;
					o.title = '';
					
					//Test for validation type
					validationType = (classParts.length > 1) ? classParts[1].toLowerCase() : '';

					//Second part is type
					if (validationType === 'email') {
						if (!MEDECO.helpers.validateEmailAddress(o.value)) {
							valid = false;
							o.className = orgClass + ' pb-field-invalid';
							o.title = 'Het e-mail adres is ongeldig.';
						}
					}
					else {
						if (Y.lang.trim(o.value) === '') {
							valid = false;
							o.className = orgClass + ' pb-field-invalid';
							o.title = 'Het veld mag niet leeg zijn.';
						}						
					}
				}
			}
			if (!valid) {
				alert('Vul alle verplichte velden.');
				return false;
			}
			
			//Set waiting
			MEDECO.helpers.throbber.show('De gegevens zijn naar de server verstuurd.');
			
			submitButton = Dom.get('formSubmitButton');
			if (submitButton) {
				submitButton.disabled = true;
			}
			//Disable submit if its available formSubmitButton
			
			return true;
		};
	}
	
	//MEDECO.helpers.submitToCart
	if (typeof MEDECO.helpers.submitToCart !== 'function') {
		MEDECO.helpers.submitToCart = function () {
			//Show throbber
			MEDECO.helpers.throbber.show('De artikelen worden toegevoegd aan uw winkelmand.');
			
			//Parse memory fields
			MEDECO.controls.assortmentMemory.clear();

			//Var
			var submitButtonTop, submitButtonBottom;
			submitButtonTop = Dom.get('submitToCartTopButton');
			if (submitButtonTop) {
				submitButtonTop.disabled = true;
			}
			submitButtonBottom = Dom.get('submitToCartBottomButton');
			if (submitButtonBottom) {
				submitButtonBottom.disabled = true;
			}
			return true;
		};
	}
	
	//MEDECO.helpers.sendAbbReport
	if (typeof MEDECO.helpers.sendAbbReport !== 'function') {
		MEDECO.helpers.sendAbbReport = function () {
			//Var
			var dep = Dom.get('dep_id'),
				quarter = Dom.get('quarter'),
				year = Dom.get('year'),
				i, l, k, depString = '',
				url;
			
			if (typeof dep.options === 'object') {
				//Length
				l = dep.options.length;
				
				//Loop
				for (i = 0; i < l; i += 1) {
					k = dep.options[i];
					if (k.selected) {
						depString += k.value + '/';
						//depList[depList.length] = k.value;
					}
				}					
			}
			
			//Build url
			url = '/html/medbis/abb/report/' + year.value + '/' + quarter.value + '/' + depString;
			
			//Open window
			window.open(url);
			
			//Send false to form submit
			return false;
		};
	}

	//MEDECO.helpers.submitGeneral
	if (typeof MEDECO.helpers.submitGeneral !== 'function') {
		MEDECO.helpers.submitGeneral = function (msg) {
			//Show throbber
			MEDECO.helpers.throbber.show(msg);
			return true;
		};
	}	

	//MEDECO.helpers.populateSelect
	if (typeof MEDECO.helpers.populateSelect !== 'function') {
		MEDECO.helpers.populateSelect = function (selectBox, moduleName, className, eventName, value, secondarySelects) {
			
			//handleDataReceived
			function handleDataReceived(o) {
				//Var
				var result = MEDECO.helpers.parseRequest(o),
					i, l, k,
					g, h, q, obj,
					box = Dom.get(selectBox);
					
				//Test result
				if (!result) {
					alert('No result');
					return;
				}
				
				//Test List
				l = result.List.length;
				
				if (secondarySelects) {
					q = secondarySelects.length;
					for (g = 0; g < q; g += 1) {
						h = secondarySelects[g];
						obj = Dom.get(h);
						if (obj) {
							obj.options.length = 0;
							obj.options[obj.options.length] = new Option('-- Selecteer --', '');
						}
					}
				}
				
				//Clear 
				box.options.length = 0;
				
				//Add empty
				box.options[box.options.length] = new Option('-- Selecteer --', '');
				
				for (i = 0; i < l; i += 1) {
					k = result.List[i];
					
					box.options[box.options.length] = new Option(k.Name, k.Id);
					
					//alert(k.Name);
				}
				
//				YAHOO.lang.debugObject(result);
			}
			
			//handleFailure
			function handleFailure(o) {
				alert(o.status + '-' + o.statusText);
			}
			
			//request
			function request() {
				var type = 'get',
					box = Dom.get(selectBox),
					url = '/json/' + moduleName + '/' + className + '/' + eventName + '/?id=' + value,
					handlers = {
						failure : handleFailure,
						success : handleDataReceived
					};

				//Clear 
				box.options.length = 0;
				box.options[box.options.length] = new Option('-- De gegevens worden geladen --', '');
				
				//Exec
				Y.util.Connect.asyncRequest(type, url, handlers);	
			}
			
			//Exec
			request();
			
		};
	}
	
	//MEDECO.helpers.validatePhotoField
	if (typeof MEDECO.helpers.validatePhotoField !== 'function') {
		MEDECO.helpers.validatePhotoField = function (fileObj) {
			if (fileObj.value === '') {
				return true;
			}
			var ext = fileObj.value.split('.').pop().toLowerCase();
			if (ext !== 'jpg' && ext !== 'jpeg' && ext !== 'png' && ext !== 'gif') {
				alert('Alleen bestanden met de extensie (JPG, JPEG, PNG en GIF zijn toegestaan.)');
			}
		};
	}

	//MEDECO.helpers.clearPhotoField
	if (typeof MEDECO.helpers.clearPhotoField !== 'function') {
		MEDECO.helpers.clearPhotoField = function (fieldName, optionTr) {
			var field = Dom.get(fieldName),
				tr = Dom.get(optionTr);
			if (confirm('Weet u zeker dat u de foto wilt verwijderen?')) {
				if (field) {
					field.value = '';
				}
				tr.style.display = 'none';
			}
		};
	}

	//MEDECO.helpers.clearFileField
	if (typeof MEDECO.helpers.clearFileField !== 'function') {
		MEDECO.helpers.clearFileField = function (fieldName, optionTr) {
			var field = Dom.get(fieldName),
				tr = Dom.get(optionTr);
			if (confirm('Weet u zeker dat u het bestand wilt verwijderen?')) {
				if (field) {
					field.value = '';
				}
				tr.style.display = 'none';
			}
		};
	}

	//MEDECO.helpers.submitForm
	if (typeof MEDECO.helpers.submitForm !== 'function') {
		MEDECO.helpers.submitForm = function (formName) {
			var frm = Dom.get(formName);
			if (frm) {
				frm.submit();
			}
		};
	}	
	
	//MEDECO.helpers.hrefPopup
	if (typeof MEDECO.helpers.hrefPopup !== 'function') {
		MEDECO.helpers.hrefPopup = function (uri, width, height, windowName) {
			windowName = (windowName) ? windowName : 'pbPopup';
			var obj = window.open(uri, windowName, 'width=' + width + ',height=' + height + ',location=0,menubar=0,scrollbars=1,status=0,toolbar=0,resizable=1');
			if (obj) {
				if (typeof obj.focus === 'function') {
					obj.focus();
				}
			}
			return false;
		};
	}

	//MEDECO.helpers.createPrintLink
	if (typeof MEDECO.helpers.createPrintLink !== 'function') {
		MEDECO.helpers.createPrintLink = function (id, className) {
			//Var
			var printEl = Dom.get(id);
			
			//Print function
			function printPage(e) {
				window.print();
				Event.stopEvent(e);
				return false;
			}
			
			//Test el
			if (printEl) {
				printEl.className = className;
				Event.on(printEl, 'click', printPage);
			}
			
			//Null
			printEl = null;
		};
	}
	
	//MEDECO.helpers.confirmRemoveViaForm
	if (typeof MEDECO.helpers.confirmRemoveViaForm !== 'function') {
		MEDECO.helpers.confirmRemoveViaForm = function (description) {
			if (!description) {
				description = 'Weet u zeker dat u dit item wilt verwijderen?';
			}
			if (confirm(description)) {
				return true;
			}
			return false;
		};
	}

	//MEDECO.helpers.confirmBookAllViaForm
	if (typeof MEDECO.helpers.confirmBookAllViaForm !== 'function') {
		MEDECO.helpers.confirmBookAllViaForm = function (description) {
			if (!description) {
				description = 'Weet u zeker dat u alle artikelen wilt binnenboeken?';
			}
			if (confirm(description)) {
				return true;
			}
			return false;
		};
	}	

	//MEDECO.helpers.setCheckOnSelection
	if (typeof MEDECO.helpers.setCheckOnSelection !== 'function') {
		MEDECO.helpers.setCheckOnSelection = function (value, checkboxName) {
			var obj = Dom.get(checkboxName);
			if (!obj) {
				return;
			}
			if (value) {
				obj.checked = true;
			}
			else {
				obj.checked = false;
			}
		};
	}

	//MEDECO.helpers.writeErrorMessage 
	if (typeof MEDECO.helpers.writeErrorMessage !== 'function') {
		MEDECO.helpers.writeErrorMessage = function (message, afterElementName) {
			var alertObj = Dom.get('pb-alert-message'),
				afterObj = Dom.get(afterElementName),
				msgObj;
			

			function createContents(rootNode) {
				var img = Dom.createElement('img');
				img.src = '/framework/modules/General/images/icon.error.png';
				img.alt = 'Foutbericht';
				rootNode.appendChild(img);
				rootNode.innerHTML += message;
			}
			
			function createMessage() {
				var div = Dom.createElement('div', 'pb-alert-message', 'pb-error');
				createContents(div);
				return div;
			}
			if (alertObj) {
				alertObj.className = 'pb-error';
				alertObj.innerHTML = '';
				createContents(alertObj);
			}
			else {
				if (afterObj) {
					msgObj = createMessage();
					Dom.insertAfter(msgObj, afterObj);
					Dom.insertAfter(Dom.createElement('br'), msgObj);
					
				}
			}
		};
	}

	//MEDECO.helpers.validateAssortmentManagementForm
	if (typeof MEDECO.helpers.validateAssortmentManagementForm !== 'function') {
		MEDECO.helpers.validateAssortmentManagementForm = function () {
			var objAction = Dom.get('action'),
				objDepartment = Dom.get('dep_id');
			
//			alert(objDepartment);
			
			function getCheckboxes() {
				var form = Dom.get('selectionForm'),
					i, l, idx = 0, selectName, selectObj, 
					commit = true, message = '', k;
				if (form && form.elements) {
					l = form.elements.length;
					for (i = 0; i < l; i += 1) {
						k = form.elements[i];
						if (k.type === 'checkbox') {
							selectName = k.id.replace('material_check', 'unit');
							selectObj = Dom.get(selectName);
							if (k.checked) {
								if (selectObj) {
									if (!selectObj.value) {
										message = 'Geef een verpakking op voor de geselecteerde artikelen.';
										selectObj.className = 'pb-field-invalid';
										commit =  false;
									}
									else {
										selectObj.className = 'pb-field';
									}
								}
								idx += 1;
							}
							else {
								if (selectObj) {
									selectObj.className = 'pb-field';
								}
							}
							
						}
					}
				}
				
				//Test commit
				if (!commit) {
					MEDECO.helpers.writeErrorMessage(message, 'messageBreak');
					return false;
				}
				
				if (idx < 1) {
					MEDECO.helpers.writeErrorMessage('Selecteer minimaal 1 artikel / verpakking', 'messageBreak');
					return false;
				}
				
				return true;
			}
			
			if (!objAction.value) {
				MEDECO.helpers.writeErrorMessage('Kies een actie voor de selectie.', 'messageBreak');
				return false;
			}
			if (objAction.value === 'add') {
				//alert('add' + objDepartment.value);
				if (!objDepartment || !objDepartment.value) {
					MEDECO.helpers.writeErrorMessage('Kies een afdeling om de selectie aan toe te voegen.', 'messageBreak');
					return false;
				}
				if (!getCheckboxes()) {
					return false;
				}
			}
			else if (objAction.value === 'removeall') {
				//
			}
			
			//Result
			return true;
		};
	}

	//MEDECO.helpers.deliveryMemory
	if (typeof MEDECO.helpers.deliveryMemory !== 'object') {
		MEDECO.helpers.deliveryMemory = [];
	}

	//MEDECO.helpers.populateDeliveryLines 
	if (typeof MEDECO.helpers.populateDeliveryLines !== 'function') {
		MEDECO.helpers.populateDeliveryLines = function (message, afterElementName) {
			var i, l, k, fld;
			
			//Test for memory			
			if (!MEDECO.helpers.deliveryMemory) {
				return;
			}
			
			//Count
			l = MEDECO.helpers.deliveryMemory.length;
			
			//Loop
			for (i = 0; i < l; i += 1) {
				//Map
				k = MEDECO.helpers.deliveryMemory[i];
				
				//Get field
				fld = Dom.get('delivery_quantity_' + k.id);
				
				//Test
				if (fld) {
					fld.value = k.quantity;
				}
			}
		};
	}

	//MEDECO.helpers.copyMonthlyFieldValue
	if (typeof MEDECO.helpers.copyMonthlyFieldValue !== 'function') {
		MEDECO.helpers.copyMonthlyFieldValue = function (fieldname, value) {
			//Var
			var fld, i;
			
			//Test for empty value
			if (value === null || value === '') {
				return;
			}
			
			//Loop months
			for (i = 1; i <= 12; i += 1) {
				fld = Dom.get(fieldname + i);
				if (fld) {
					fld.value = value;
				}
			}
		};
	}

	//MEDECO.helpers.switchImage
	if (typeof MEDECO.helpers.switchImage !== 'function') {
		MEDECO.helpers.switchImage = function (fieldname, value) {
			//Var
			var img = Dom.get(fieldname);
			
			//Set
			if (img && value) {
				img.src = value;
			}
			
			//Null
			img = null;
		};
	}
	
	//MEDECO.helpers.connectTab
	if (typeof MEDECO.helpers.connectTab !== 'function') {
		MEDECO.helpers.connectTab = function (tabPages) {
			var i, k, l = tabPages.length,
				elLink, elHref;
			
			for (i = 0; i < l; i += 1) {
				k = tabPages[i];
				elLink =  Dom.get('tablink_' + k);
				elHref =  Dom.get('ahreflink_' + k);
				
				if (elLink) {
					Event.on(elLink, 'click', (function () {
						return MEDECO.helpers.switchTab;
					}()), [k, tabPages]);
				}

				if (elHref) {
					elHref.removeAttribute('href');
					Event.on(elHref, 'click', (function () {
						return MEDECO.helpers.switchTab;
					}()), [k, tabPages]);
				}

			}
		};
	}
	
	//MEDECO.helpers.switchTab
	if (typeof MEDECO.helpers.switchTab !== 'function') {
		MEDECO.helpers.switchTab = function (e, arg) {
			var key = arg[0],
				tabPages = arg[1],
				i, k, l = tabPages.length,
				elLink, elTab;
			for (i = 0; i < l; i += 1) {
				k = tabPages[i];
				elLink =  Dom.get('tablink_' + k);
				elTab =  Dom.get('tabpage_' + k);
				if (elLink && elTab) {
					elLink.className = (k === key) ? 'selected' : '';
					elTab.className = (k === key) ? 'mat-tab' : 'pb-hidden';
				}
			}
			
			return false;
		};
	}

	//MEDECO.helpers.banner
	if (typeof MEDECO.helpers.banner !== 'object') {
		MEDECO.helpers.banner = {
			'index' : 0,
			'milisec' : 2000,
			'imageList' : [],
			'setConfig' : function (list, milisec) {
				MEDECO.helpers.banner.imageList = list;
				MEDECO.helpers.banner.milisec = parseInt(milisec, 10);
				MEDECO.helpers.banner.preload();
			},
			'preload' : function () {
				var i, k, l = MEDECO.helpers.banner.imageList.length, img;
				for (i = 0; i < l; i += 1) {
					k = MEDECO.helpers.banner.imageList[i];
					if (k.file) {
						img = new Image();
						img.src = k.file;
						img = null;
					}
				}
			},
			'run' : function () {
				setInterval(MEDECO.helpers.banner.timerTick, MEDECO.helpers.banner.milisec);
			},
			'timerTick' : function () {
				var imgData = MEDECO.helpers.banner.imageList[MEDECO.helpers.banner.index],
					elLink, elImage;
				if (imgData) {
					//Get elements					
					elLink = Dom.get('banner_link');
					elImage = Dom.get('banner_image');
					if (elLink && elImage) {
						elLink.setAttribute('href', imgData.url);
						elImage.src = imgData.file;
					}
				}
				
				//Determin new index
				MEDECO.helpers.banner.index += 1;
				if (MEDECO.helpers.banner.index > (MEDECO.helpers.banner.imageList.length - 1)) {
					MEDECO.helpers.banner.index = 0;
				}				

				//Null
				elLink = null;
				elImage = null;
			}
		};
	}

	//MEDECO.helpers.shoppingcartNext
	if (typeof MEDECO.helpers.shoppingcartNext !== 'function') {
		MEDECO.helpers.shoppingcartNext = function () {
			var elRedirect = Dom.get('redirect'),
				elFrm = Dom.get('selectionForm'),
				submitButtonTop, submitButtonBottom;
			if (elRedirect) {
				elRedirect.value = 'shoppingcart';
			}
			if (elFrm) {
				//Show throbber
				MEDECO.helpers.throbber.show('De artikelen worden toegevoegd aan uw winkelmand.');
				
				//Parse memory fields
				MEDECO.controls.assortmentMemory.clear();
	
				submitButtonTop = Dom.get('submitToCartTopButton');
				if (submitButtonTop) {
					submitButtonTop.disabled = true;
				}
				submitButtonBottom = Dom.get('submitToCartBottomButton');
				if (submitButtonBottom) {
					submitButtonBottom.disabled = true;
				}
				
				elFrm.submit();
			}
//			alert('next');
		};
	}

	//MEDECO.helpers.groupConflict
	if (typeof MEDECO.helpers.groupConflict !== 'function') {
		MEDECO.helpers.groupConflict = function (grpObj, groups) {
			//Var
			var i, l, k, o, valid = false;
			
			//Count
			l = groups.length;
			
			//Test if in array()
			for (i = 0; i < l; i += 1) {
				k = groups[i];
				if (grpObj.value.toString() === k.toString()) {
					valid = true;
				}
			}
			
			//Test for valid comparisson
			if (!valid) {
				return false;
			}
			
			
			//Test for checked
			if (grpObj.checked) {
				
				for (i = 0; i < l; i += 1) {
					k = groups[i];
					if (k.toString() !== grpObj.value.toString()) {
						o = Dom.get('Rol_' + k);
						if (o) {
							o.checked = false;
						}
					}
				}
			}
			
			//alert();
			/*
			var elRedirect = Dom.get('redirect'),
				elFrm = Dom.get('selectionForm'),
				submitButtonTop, submitButtonBottom;
			if (elRedirect) {
				elRedirect.value = 'shoppingcart';
			}
			if (elFrm) {
				//Show throbber
				MEDECO.helpers.throbber.show('De artikelen worden toegevoegd aan uw winkelmand.');
				
				//Parse memory fields
				MEDECO.controls.assortmentMemory.clear();
	
				submitButtonTop = Dom.get('submitToCartTopButton');
				if (submitButtonTop) {
					submitButtonTop.disabled = true;
				}
				submitButtonBottom = Dom.get('submitToCartBottomButton');
				if (submitButtonBottom) {
					submitButtonBottom.disabled = true;
				}
				
				elFrm.submit();
			}
//			alert('next');
			*/
		};
	}

	//CONTROLS
	//--------------------------------------------------------------
	
	//MEDECO.controls
	if (typeof MEDECO.controls !== 'object') {
		MEDECO.controls = {};
	}

	//MEDECO.controls.numericBox
	if (typeof MEDECO.controls.numericBox !== 'function') {
		MEDECO.controls.numericBox = function (fieldId) {
			//Var
			var fld = Dom.get(fieldId);

			//isAllowedCharCode
			function isAllowedCharCode(char) {
				var allowed = [8, 9, 35, 36, 37, 39, 46, 49, 50, 51, 52, 53, 54, 55, 56, 57, 48, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105],
					i, k, l = allowed.length;
				for (i = 0; i < l; i += 1) {
					k = allowed[i];
					if (k === char) {
						return true;
					}
				}
				//alert(char);
				return false;
			}
			
			//handleKeyDown
			function handleKeyDown(e) {
				//getEvent
				var char = Event.getCharCode(e);
				
				//Test for return
				if (char === 13) {
					return true;
				}
				
				//Test alt
				if (e.altKey) {
					Event.stopEvent(e);
					return false;
				}
				
				//Test shift
				if (e.shiftKey) {
					if (char !== 35 && char !== 36 && char !== 37 && char !== 39) {
						Event.stopEvent(e);
						return false;
					}
				}
				
				//Test for ctrl +x, +v, +c
				if ((char === 88 || char === 67 || char === 86) && e.ctrlKey) {
					return true;
				}
				
				//Result char
				if (!isAllowedCharCode(char)) {
					Event.stopEvent(e);
					return false;
				}
				return true;
			}			
			
			//validate
			function validate() {
				//Var
				var value = Y.lang.trim(fld.value),
					numericValue;

				//Valid
				//that.setValid();
				
				//Replace , with .
				value = value.replace(/,/g, '.');
				
				//Parse to float or integer
				numericValue = parseInt(value, 10);
				
				//Test number
				if (Y.lang.isNumber(numericValue)) {
					value = numericValue;
				}
				else {
					value = '';
				}

				//Set
				fld.value = value;
											
				//Result
				return true;
			}

			//Add listeners
			Event.addListener(fld, "keydown", handleKeyDown);
			Event.addListener(fld, "blur", validate);
			
			return fld;
		};
	}
	
	//MEDECO.controls.createNumericBoxes
	if (typeof MEDECO.controls.createNumericBoxes !== 'function') {
		MEDECO.controls.createNumericBoxes = function () {
			var i, l = arguments.length;
			for (i = 0; i < l; i += 1) {
				MEDECO.controls.numericBox(arguments[i]);
			}
		};
	}
	
	//MEDECO.controls.createNumericBoxesByForm
	if (typeof MEDECO.controls.createNumericBoxesByForm !== 'function') {
		MEDECO.controls.createNumericBoxesByForm = function (formName, fieldPrefix) {
			//Var
			var form = Dom.get(formName),
				i, l, prefixLength = fieldPrefix.length, k;
			if (form && form.elements) {
				l = form.elements.length;
				for (i = 0; i < l; i += 1) {
					k = form.elements[i];
					if (k.id.substr(0, prefixLength) === fieldPrefix) {
						MEDECO.controls.numericBox(k.id);
					}
				}
			}			
			
		};
	}

	//MEDECO.controls.assortmentMemory
	if (typeof MEDECO.controls.assortmentMemory !== 'function') {
		MEDECO.controls.assortmentMemory = {
			mem : [],
			set : function (o) {
				var itmIdx = MEDECO.controls.assortmentMemory.findItem(o);
				if (itmIdx !== false) {
					//Splice it
					MEDECO.controls.assortmentMemory.mem.splice(itmIdx, 1);
				}
				//Add always the new one
				if (o.quantity !== '') {
					MEDECO.controls.assortmentMemory.mem[MEDECO.controls.assortmentMemory.mem.length] = o;
				}
				//Save
				MEDECO.controls.assortmentMemory.save();
			},
			load : function () {
				//Var
				var cookieString = Cookie.get('myAssortment', { path : '/' }),
					parts, i, l, k, pieces;
				//Test
				if (cookieString) {
					parts = cookieString.split(',');
					l = parts.length;
					for (i = 0; i < l; i += 1) {
						k = parts[i];
						pieces = k.split('|');
						MEDECO.controls.assortmentMemory.mem[MEDECO.controls.assortmentMemory.mem.length] = {
							'mat_id' : pieces[0],
							'quantity' : pieces[1],
							'unit_id' : pieces[2]
						};
					}
				}
			},
			save : function () {
				//Var
				var i, l, k, ar = [];
				//Count
				l = MEDECO.controls.assortmentMemory.mem.length;
				//Loop
				for (i = 0; i < l; i += 1) {
					k = MEDECO.controls.assortmentMemory.mem[i];
					ar[ar.length] = k.mat_id + '|' + k.quantity + '|' + k.unit_id;
				}
				//Clear
				MEDECO.controls.assortmentMemory.clear();
				//Set new value
				Cookie.set('myAssortment', ar, { path : '/' });
			},
			dump : function () {
				//Var
				var i, l, k, fieldIndex = 40, 
					checkField, frm = Dom.get('selectionForm');
				//Count
				l = MEDECO.controls.assortmentMemory.mem.length;
				
				function addField(name, value, form) {
					var f = document.createElement('input');
					f.type = 'hidden';
					//f.type = 'text';
					f.name = name;
					f.value = value;
					frm.appendChild(f);					
				}
				
				//Loop
				for (i = 0; i < l; i += 1) {
					k = MEDECO.controls.assortmentMemory.mem[i];
					fieldIndex += 1;
					checkField = Dom.get('quantity_' + k.mat_id);
					if (!checkField) {
						//Create the fields
						addField('material[' + fieldIndex + '][mat_id]', k.mat_id, frm);
						addField('material[' + fieldIndex + '][quantity]', k.quantity, frm);
						addField('material[' + fieldIndex + '][unit_id]', k.unit_id, frm);
					}
					//ar[ar.length] = k.mat_id + '|' + k.quantity + '|' + k.unit_id;
				}
			},
			clear : function () {
				if (Cookie.exists('myAssortment', { path : '/' })) {
					Cookie.remove('myAssortment', { path : '/' });
				}				
			},
			findItem : function (o) {
				var i, l, k;
				l = MEDECO.controls.assortmentMemory.mem.length;
				for (i = 0; i < l; i += 1) {
					k = MEDECO.controls.assortmentMemory.mem[i];
					if (Y.lang.trim(k.mat_id) === Y.lang.trim(o.mat_id)) {
						return i;
					}
				}
				return false;
			},
			findValue : function (mat_id) {
				var itm, itmIdx = MEDECO.controls.assortmentMemory.findItem({
					'mat_id' : mat_id
				});
				if (itmIdx !== false) {
					//alert('found');
					itm = MEDECO.controls.assortmentMemory.mem[itmIdx];
					//return itm.quantity;
					return itm;
				}
				return false;
			}
		};
		//Load
		MEDECO.controls.assortmentMemory.load();
	}

	//MEDECO.controls.createNumericBoxesByAssortmentForm
	if (typeof MEDECO.controls.createNumericBoxesByAssortmentForm !== 'function') {
		MEDECO.controls.createNumericBoxesByAssortmentForm = function (formName, fieldPrefix) {
			//Var
			var form = Dom.get(formName),
				i, l, prefixLength = fieldPrefix.length, k, fld, matID, idParts, itmVal, unitFld;
				
			
			function saveAssortmentPicks(e) {
				var target = Event.getTarget(e),
					id, parts,
					quantityEl,
					unitEl, 
					unitVal = '', 
					quantityVal = '';
				if (target) {
					//Split
					parts = target.id.split('_');
					//Get id
					id = parts[1];
					quantityEl = Dom.get('quantity_' + id);
					if (quantityEl) {
						//Map values
						quantityVal = quantityEl.value;
					}
					//Map names
					unitEl = Dom.get('unit_' + id);
					if (unitEl) {
						unitVal = unitEl.value;
					}
					MEDECO.controls.assortmentMemory.set({
						'mat_id' : id,
						'quantity' : quantityVal,
						'unit_id' : unitVal
					});
				}

			}
			
			
			if (form && form.elements) {
				l = form.elements.length;
				for (i = 0; i < l; i += 1) {
					k = form.elements[i];
					idParts = k.id.split('_');
					matID = idParts[1];
					if (k.id.substr(0, prefixLength) === fieldPrefix) {
						fld = MEDECO.controls.numericBox(k.id);
						unitFld = Dom.get('unit_' + matID);
						
						//Get item value			
						itmVal = MEDECO.controls.assortmentMemory.findValue(matID);
						
						//Set quantity value
						if (itmVal !== false) {
							//Set quantity value
							fld.value = itmVal.quantity;
							//Test for dropdown
							if (unitFld.tagName.toLowerCase() === 'select') {
								//Set dropdown value
								unitFld.value = itmVal.unit_id;
							}
						}
						
						//In case of select set value
						if (unitFld.tagName.toLowerCase() === 'select') {
							Event.addListener(unitFld, "change", saveAssortmentPicks);
						}
						
						
						//fld
						//Event.addListener(fld, "blur", saveAssortmentPicks);
						Event.addListener(fld, "change", saveAssortmentPicks);
						
					}
				}
			}			
			
			MEDECO.controls.assortmentMemory.dump();
			
		};
	}	
	
	//MEDECO.controls.createNumericBoxesByClass
	if (typeof MEDECO.controls.createNumericBoxesByClass !== 'function') {
		MEDECO.controls.createNumericBoxesByClass = function (className, config) {
			var elements = Dom.getElementsByClassName(className),
				i;
			if (elements) {
				//Loop
				for (i in elements) {
					if (elements.hasOwnProperty(i)) {
						MEDECO.controls.numericBox(elements[i]);
					}
				}
			}
		};
	}

	
}());