
	var privateBasketController = Class.create(basketController, {
		initialize:function(container){
			this.container = container;
			this.basketID = 0;
			this.items = $H({});
			this.added = 0;
			this.myCommand = 'perclubPrivateBasket';
			this.instID = 'privateBasketController.' + parseInt(Math.random()*1000000);
//			window.onbeforeunload = this.warnUser.bind(this);
		},
		
		draw : function($super){
			$super();
			
			var button = new Element('button', {id:this.instID+'_addButton'}).update('Lijst toevoegen');
			this.container.insert(button);
			button.observe('click', this.addList.bindAsEventListener(this));
		},
		
		addList : function(event){
			var elem = event.element();
			var parentContainer = elem.parentNode;
			var closer = new Element('img', {src:'/images/close.gif', className:'closer'});
			var container = new Element('div', {className:'mediaInfo'}).insert(closer);
			parentContainer.insert(container);
			closer.observe('click', function(){container.remove()});
			
			var field = this.drawContactField(container, "Naam ", '', "");
			
			var button = new Element('button', {className:'button'}).update("Toevoegen");
			button.disabled = true;
			container.insert(button);
			button.srcField = field;
			button.observe('click', this.saveNewList.bindAsEventListener(this))
			field.observe('keyup', function(event){
				if (event.element().getValue()){
					button.disabled = false;
				}else{
					button.disabled = true;
				}
			})
		},
		
		drawMatrix : function(req){
			var lists = req.responseJSON.data;
			var tmpLists = [];
			var i = 0;
			$A(lists).each(
				(function(list){
					if (i%2==0){
						var liClass = 'even';
					}else{
						var liClass = 'uneven';
					}
					if (list.items){
						var li = new Element('li', {id:list.id + '_basketContainer', className:liClass} ).update( basketTextHTML.interpret('basketCount', [ (i+1), list.name, list.items.length ] ));
					}else{
						var li = new Element('li', {id:list.id + '_basketContainer', className:liClass} ).update( basketTextHTML.interpret('basketCount', [ (i+1), list.name, 0] ));
					}
					li.basketID = list.id;
					$(this.instID + "matrixContainer").insert(li);
					li.observe('click', this.openBasket.bindAsEventListener(this));
					i++;
				}).bind(this)
			)
		},

		drawBasket: function(event){
			this.container.update('');
			var html= basketTextHTML.basketContainer;
			// draw basket contents:
			var i =0;
			$(this.items.keys()).each(
				(function(basketItemID){
					var row = this.items.get(basketItemID);
					html += this.drawRow(row, i);
					i++;
				}).bind(this)
			)
			
			html+= '</table>';
			this.container.insert(html);
			// add controls:
			this.drawListControls();

			this.items.values().each(
				(function(item){
					$(item.journalist_id + '_journalist').observe('click', this.drawContact.bindAsEventListener(this))
					$(item.journalist_id + "removeFromBasket").observe('click', this.removeFromBasket.bindAsEventListener(this))
				}).bind(this)
			)
		},
		
		drawContact : function(event, parentContainer){
			if (event) {
				var itemID = parseInt(event.element().id);
				parentContainer = $(itemID + "_journalistContainer");
				var item = this.items.get(itemID);
			}else{
				var itemID = "new";
				var item = {initialen:'', voornaam:'', tussenvoegsel:'', achternaam:'', email:'', adres:'', postcode:'', plaats:'', telefoon:'', mobiel:'', journalist_id:'new'};
			}
			if ($(itemID+"_infoContainer")) {
				$(itemID+"_infoContainer").hide();
				$(itemID+"_infoContainer").remove();
			}else{
				var closer = new Element('img', {src:'/images/close.gif', className:'closer'});
				var container = new Element('div', {className:'mediaInfo', id:itemID+"_infoContainer"}).insert(closer);
				parentContainer.insert(container);
				closer.observe('click', function(){container.remove();});
				
				this.drawContactField(container, 'Initialen', itemID, item.initialen);
				this.drawContactField(container, 'Voornaam', itemID, item.voornaam);
				this.drawContactField(container, 'Tussenvoegsel', itemID, item.tussenvoegsel);
				this.drawContactField(container, 'Achternaam', itemID, item.achternaam);
				this.drawContactField(container, 'Adres', itemID, item.adres);
				this.drawContactField(container, 'Postcode', itemID, item.postcode);
				this.drawContactField(container, 'Plaats', itemID, item.plaats);
				this.drawContactField(container, 'Telefoon', itemID, item.telefoon);
				this.drawContactField(container, 'Mobiel', itemID, item.mobiel);
				this.drawContactField(container, 'Email', itemID, item.email);
				
				var button = new Element('button', {className:'button'}).update("Opslaan");
				container.insert(button);
				button.item = item;
				button.observe('click', this.saveContact.bindAsEventListener(this))
				parentContainer.show();
			}
		},
		

		drawContactField : function(container, title, contactID, value){
			var div = new Element('div', {className:'contactField'});
			container.insert(div);
			var titleElem = new Element('span', {className:'title'}).update(title);
			div.insert(titleElem);
			
			var field = new Element('input', {type:'text', name:title, id:title+"_"+contactID, value:value});
			div.insert(field);
			field.contactID = contactID;
			field.observe('change', this.validateField.bindAsEventListener(this));
			return field;
		},
		
		validateField : function(event, element){
			if (event){
				var elem = event.element();
			}else{
				var elem = element;
			}
			
			if (elem.name == 'Email'){
				if (elem.getValue() == '' || !this.isEmail(elem.getValue()) ){
					elem.setStyle('border:1px red solid;');
					if ($(elem.parentNode).select('.error').length < 1){
						$(elem.parentNode).insert('<span class="error">Dit is geen geldig email-adres</div>');
					}
					return false;
				}else{
					if ($(elem.parentNode).select('.error').length > 0){
						$(elem.parentNode).select('.error')[0].remove();
					}
					elem.setStyle('border:1px grey solid;');
					return true;
				}
			}
		},
		
		saveNewList:function(event){
			var elem = event.element().srcField;
			if (elem.getValue()){
				var RPCObj = new rpc;
				RPCObj.debug = true;
				RPCObj.attachWaiter(waiter, this);
				RPCObj.attachUnWaiter(unWaiter, this);
				RPCObj.createCall(this.myCommand, this.draw.bind(this), this);
				RPCObj.call('addBasket', 'name='+elem.getValue());
			}
		},
		
		saveContact : function(event){
			var elem = event.element();

			var func = (function(req){
				this.setSaved(req, elem);
			}).bind(this)
			
			if (elem.item.journalist_id !='new'){
				// update item
				var initialen = $("Initialen_" + elem.item.journalist_id).getValue();
				var first_name = $("Voornaam_" + elem.item.journalist_id).getValue();
				var tussenvoegsel = $("Tussenvoegsel_" + elem.item.journalist_id).getValue();
				var last_name = $("Achternaam_" + elem.item.journalist_id).getValue();
				var email = $("Email_" + elem.item.journalist_id).getValue();
				var adres = $("Adres_" + elem.item.journalist_id).getValue();
				var postcode = $("Postcode_" + elem.item.journalist_id).getValue();
				var plaats = $("Plaats_" + elem.item.journalist_id).getValue();
				var telefoon = $("Telefoon_" + elem.item.journalist_id).getValue();
				var mobiel = $("Mobiel_" + elem.item.journalist_id).getValue();
				var itemID = elem.item.journalist_id;
				if (this.validateField('', $("Email_" + elem.item.journalist_id))){
					var RPCObj = new rpc;
					RPCObj.debug = true;
					RPCObj.attachWaiter(waiter, this);
					RPCObj.attachUnWaiter(unWaiter, this);
					RPCObj.createCall(this.myCommand, func, this);
					RPCObj.call('updateContact', "itemID="+itemID, 'first_name=' + first_name, 'last_name='+last_name, 'email='+email, 'adres='+adres, 'postcode='+postcode, 'plaats='+plaats, 'telefoon='+telefoon, 'mobiel='+mobiel, 'initialen='+ initialen, 'tussenvoegsel='+tussenvoegsel);
				}
			}else{
				// add item
				var initialen = $("Initialen_new").getValue();
				var first_name = $("Voornaam_new").getValue();
				var tussenvoegsel = $("Tussenvoegsel_new").getValue();
				var last_name = $("Achternaam_new").getValue();
				var email = $("Email_new").getValue();
				var adres = $("Adres_new").getValue();
				var postcode = $("Postcode_new").getValue();
				var plaats = $("Plaats_new").getValue();
				var telefoon = $("Telefoon_new").getValue();
				var mobiel = $("Mobiel_new").getValue();
				
				if (this.validateField('', $("Email_new"))){
					var RPCObj = new rpc;
					RPCObj.debug = true;
					RPCObj.attachWaiter(waiter, this);
					RPCObj.attachUnWaiter(unWaiter, this);
					RPCObj.createCall(this.myCommand, func, this);
					RPCObj.call('insertContact', "basketID="+this.basketID, 'first_name=' + first_name, 'last_name='+last_name, 'email='+email, 'adres='+adres, 'postcode='+postcode, 'plaats='+plaats, 'telefoon='+telefoon, 'mobiel='+mobiel, 'initialen='+initialen , 'tussenvoegsel='+tussenvoegsel);
				}
			}
		},
		
		addItem : function(){
			this.drawContact('', this.container);
		},
		
		setSaved : function(req, button){
			this.loadBasket(this.basketID);
		},
		
		removeFromBasket : function(event){
			var itemID = parseInt(event.element().id);
			$(itemID + '_basketRow').remove();
			var RPCObj = new rpc;
			RPCObj.debug = true;
			RPCObj.attachWaiter(waiter, this);
			RPCObj.attachUnWaiter(unWaiter, this);
			RPCObj.createCall(this.myCommand, this.dummy.bind(this), this);
			RPCObj.call('removeItemFromBasket', "basketID=" + this.basketID, 'itemID=' + itemID);		
		},		
				
		printPhonelist : function(){
			var win = window.open("include/printPrivateList.php?basketID=" + this.basketID, "win", "width=" + basketTextHTML.popupWidth+ ",height=" + basketTextHTML.popupHeight + 'scroll=yes'); // a window object
		},
			
		isEmail : function(emailStr){
			var checkTLD=1;
			var knownDomsPat=/^(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum)$/;
			var emailPat=/^(.+)@(.+)$/;
			var specialChars="\\(\\)><@,;:\\\\\\\"\\.\\[\\]";
			var validChars="\[^\\s" + specialChars + "\]";
			var quotedUser="(\"[^\"]*\")";
			var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
			var atom=validChars + '+';
			var word="(" + atom + "|" + quotedUser + ")";
			var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
			var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$");
			var matchArray=emailStr.match(emailPat);

			if (matchArray==null) {
				return false;
			}

			var user=matchArray[1];
			var domain=matchArray[2];

			for (i=0; i<user.length; i++) {
				if (user.charCodeAt(i)>127) {
					return false;
				}
			}

			for (i=0; i<domain.length; i++) {
				if (domain.charCodeAt(i)>127) {
					return false;
				}
			}
			
			if (user.match(userPat)==null) {
				return false;
			}

			var IPArray=domain.match(ipDomainPat);
			
			if (IPArray!=null) {
				for (var i=1;i<=4;i++) {
					if (IPArray[i]>255) {
						return false;
			   		}
				}
				return true;
			}
			
			 
			var atomPat=new RegExp("^" + atom + "$");
			var domArr=domain.split(".");
			var len=domArr.length;

			for (i=0;i<len;i++) {
				if (domArr[i].search(atomPat)==-1) {
					return false;
			   }
			}

			if (checkTLD && domArr[domArr.length-1].length!=2 && domArr[domArr.length-1].search(knownDomsPat)==-1) {
				return false;
			}

			if (len<2) {
				return false;
			}
			
			return true;			
			
		}
			
	
	})

