
	var basketController = Class.create({
		initialize:function(container){
			this.instID = 'basketController.' + parseInt(Math.random()*1000000);
			this.container = container;
			this.basketID = 0;
			this.fromSearch = false;
			this.items = $H({});
			this.added = 0;
			this.myCommand = 'perclubBasket';
			window.onbeforeunload = this.warnUser.bind(this);
		},
		
		draw : function(){
			this.container.update('');
			var ul = new Element('ul', {id:this.instID + 'matrixContainer', className:'basketMatrix'});
			this.container.insert(ul);
			this.getLists(this.drawMatrix.bind(this));
		},
		
		getLists : function(callBack){
			var RPCObj = new rpc;
//			RPCObj.debug = true;
			RPCObj.attachWaiter(waiter, this);
			RPCObj.attachUnWaiter(unWaiter, this);
			RPCObj.createCall(this.myCommand, callBack, this);
			RPCObj.call('getBasketList');
		},

		drawMatrix : function(req){
			if (req.responseJSON && req.responseJSON.data){
				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)
				)
			}else{
				$(this.instID + "matrixContainer").insert("Geen lijsten gevonden");
			}
		},
		
		openBasket : function(event){
			this.basketID = event.element().basketID;
			this.loadBasket(this.basketID);
		},

		loadBasket : function(basketID){
			var RPCObj = new rpc;
//			RPCObj.debug = true;
			RPCObj.attachWaiter(waiter, this);
			RPCObj.attachUnWaiter(unWaiter, this);
			RPCObj.createCall(this.myCommand, this.setBasket.bind(this), this);
			RPCObj.call('getBasket', 'basketID=' + basketID);
		},
		
		setBasket : function(req){ 
			var obj = req.responseJSON;
//			this.basketID = obj.id;
			var tmpHash = $H({});
			$A(obj.data[0].items).each(
				(function(item){
					if (item.journalist){
						var row = new media(item.journalist);
						tmpHash.set(item.item_id, row)
					}
				}).bind(this)
			)
			this.items = tmpHash;
//			this.items = obj.items;
			this.drawBasket();
		},
		
		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.showJournalist.bindAsEventListener(this))
						$(item.journalist_id + "removeFromBasket").observe('click', this.removeFromBasket.bindAsEventListener(this))
					}).bind(this)
				)
		},		
		
		
		drawRow : function(row, pos){
			if (pos%2==0){
				 var rowClassName = "basketRowNameEven";
				 var delClassName = "basketRowDeleteEven";
				 var journalistInfoClass = "basketJournalistInfoEven";
			}else{
				 var rowClassName = "basketRowNameUnEven";
				 var delClassName = "basketRowDeleteUnEven";
				 var journalistInfoClass = "basketJournalistInfoUnEven";
			}
			var html = '<tbody id="' + row.journalist_id + '_basketRow" class="basketRow">';
			html += '<tr>';
			html += '	<td align="left" class="' + rowClassName + '"><span ';
			if (row.journalist_id == row.hoofdredacteur){
				html += " class='hoofd'";
			}else{
				html += " class='niet-hoofd' ";
			}
			html += '		id="'+ row.journalist_id + '_journalist">' + row.naam() + '</span>';
			if (row.fotograaf == '1'){
				html += '<img src="images/cam.gif" class="camIcon"/>';
			}
			html += '			<div class="' + journalistInfoClass+ '" style="display:none;" id="' + row.journalist_id + '_journalistContainer"></div>';
			html += '		</td>'; 
			html += '	<td  class="' + delClassName+ '" align="right"><img src="images/del.gif" alt="Verwijder uit lijst" style="cursor:pointer;" border="0" id="' + row.journalist_id+ 'removeFromBasket"/></td>';
			html += '</tr></tbody>';
//			html += '<tr><td colspan="3"><div class="journalistInfo" style="display:none;" id="' + row.journalist_id + '_journalistContainer"></div></td></tr>'
			return html;
		},
		
		showJournalist : function(event){
			var jID = parseInt(event.element().id);
			var func = (function(req){
				this._showJournalist(req, jID);
			}).bind(this)
			var RPCObj = new rpc;
//			RPCObj.debug = true;
			RPCObj.attachWaiter(waiter, this);
			RPCObj.attachUnWaiter(unWaiter, this);
			RPCObj.createCall('persclubSearch', func, this);
			RPCObj.call('getJournalistHTML', "jID=" + jID);		
		},
		
		_showJournalist: function(req, mediaID){
			var container = $(mediaID + "_journalistContainer");
			container.update(req.responseText);
			new Effect.SlideDown(container, {duration:'0.3'});
		},
		
		removeFromBasket : function(event){
			var journalistID = parseInt(event.element().id);
			$(journalistID + '_basketRow').remove();
//			if (this.basketID > 0){
				// also remove basket from database:
				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=' + journalistID);		
//			}
		},		
		
		dummy : function(){},
		
		drawListControls : function(){
			var container = new Element('div', {className:"basketControls", id:this.instID + '_basketControls'});
			this.container.insert(container);

			if (this.basketID >0){
				if (!this.fromSearch){
					var buttonNew = new Element('button').update(basketTextHTML.addContact);
					container.insert(buttonNew);
					buttonNew.observe('click', this.addItem.bind(this));
		
					var buttonNew = new Element('button').update(basketTextHTML.removeBasket);
					container.insert(buttonNew);
					buttonNew.observe('click', this.deleteList.bind(this));
					
					var buttonNew = new Element('button').update(basketTextHTML.printPhoneList);
					container.insert(buttonNew);
					buttonNew.observe('click', this.printPhonelist.bind(this));

					var buttonCopy = new Element('button', {id:'copyButton'}).update('Kopi&euml;ren');
					container.insert(buttonCopy);
					buttonCopy.observe('click', this.copyItem.bind(this));

					container.insert('<br/><br/>');
					var link = new Element('a', {href:"#"}).update(basketTextHTML.backToOverview);
					container.insert(link);
					link.observe('click', (function(){this.draw()}).bind(this))
					
					this.printDiv = new Element('div', {className:'printLayer'});
					this.printDiv.hide();
					container.insert(this.printDiv);
					
				}else{
					var buttonNew = new Element('button').update(basketTextHTML.storeBasket);
					container.insert(buttonNew);
					buttonNew.observe('click', this.storeBasket.bind(this));
				}
			}else{
				
				var buttonNew = new Element('button').update(basketTextHTML.addToNewList);
				container.insert(buttonNew);
				buttonNew.observe('click', this.createNewList.bind(this));
				
				var func = (function(req){
					var anotherFunc = (function(req){this.addToExistingList(req, container)}).bind(this)
					this.getLists(anotherFunc);
				}).bind(this)
				var buttonEx = new Element('button').update(basketTextHTML.addToExistingList);
				container.insert(buttonEx);
				buttonEx.observe('click', func);
				
			}
						
		},
		
		createNewList : function(){
			var container = $(this.instID + '_basketControls');
			
			var title = new Element('span', {className:'controlTitle'}).update(basketTextHTML.nameOfList);
			container.insert(title);
			
			var input = new Element('input', {className:'formElem', id:this.basketID + '_listName', maxlen:64});
			container.insert(input);
			input.observe('change', (function(event){
				if (event.element().getValue != '') $(this.basketID + '_addListButton').disabled = false;
				if (event.element().getValue == '') $(this.basketID + '_addListButton').disabled = true;
			}).bindAsEventListener(this));
			
			var button = new Element('button', {id:this.basketID + '_addListButton', disabled:true}).update(basketTextHTML.storeBasket);
			container.insert(button);

			button.observe('click', this.storeBasket.bind(this))
			
		},
		
		storeBasket : function(){
			if ($(this.basketID + '_listName')){
				var basketName = $(this.basketID + '_listName');
			}
			var items = '';
			this.items.values().find(
				function(item){
					items+=item.journalist_id + ',';
				}
			)
			
			var RPCObj = new rpc;
//			RPCObj.debug = true;
			
			RPCObj.createCall(this.myCommand, '', this);
			RPCObj.setMethod('storeBasket');
			
			RPCObj.addArgument('basketID', this.basketID);
			if (this.basketID == 0 && basketName){
				RPCObj.addArgument('basketName', basketName.getValue());	
			}
			RPCObj.addArgument('items', items);
			
			RPCObj.attachWaiter(waiter, this);
			RPCObj.attachUnWaiter(unWaiter, this);
			RPCObj.setCallback(this.handleSave.bind(this));
			RPCObj.call();			
			this.added = 0;
		},
		
		copyItem : function(){
			$('copyButton').update("Bezig met kopieren");
			$('copyButton').disabled=true;
			var RPCObj = new rpc;
			RPCObj.attachWaiter(waiter, this);
			RPCObj.attachUnWaiter(unWaiter, this);
			RPCObj.createCall(this.myCommand, this.draw.bind(this), this);
			RPCObj.call('copyBasket', "basketID=" + this.basketID);		
		},
		
		handleSave : function(req){
			var id = req.responseXML.getElementsByTagName('message').item(0).childNodes.item(0).nodeValue
			this.basketID = id;
			this.loadBasket(id);
		},
		
		addToExistingList : function(req, container){
			container.update('');
			container.insert(basketTextHTML.addToExistingListSelection);
			var select = new Element('select');
			container.insert(select);
			
			$A(req.responseJSON.data).each(
				function(basketData){
					var option = new Element('option', {value:basketData.id}).update(basketData.name);
					select.insert(option);
				}
			)
			var button = new Element('button').update(basketTextHTML.save);
			button.srcElem = select;
			container.insert(button);
			button.observe('click', this._addToExistingList.bindAsEventListener(this));
		},
		
		_addToExistingList : function(event){
			var basketID = $(event.element().srcElem).getValue();
			this.basketID = basketID;
			event.element().parentNode.update(basketTextHTML.listSaved);
			this.storeBasket();
		},
	
		addItem : function(){
			if (!gSearch){
				gSearch = new persclubSearch($('mainContainer'));
			}
			gSearch.mode = 1;
			gSearch.basket = this;
			gSearch.draw();

		},
		
		add : function(row){
			this.added++;
			this.items.set(row.journalist_id, row);
		},
		
		remove : function(row){
			this.items.unset(row.journalist_id);
		},
		
		printPhonelist : function(){
			var win = window.open("include/printList.php?basketID=" + this.basketID, "win", "width=" + basketTextHTML.popupWidth+ ",height=" + basketTextHTML.popupHeight + 'scrollbars=yes'); // a window object
		},
		
		showInPopup : function(req){
			this.printDiv.insert(req.responseText);
			this.printDiv.show();
//			var win = window.open("", "win", "width=" + basketTextHTML.popupWidth+ ",height=" + basketTextHTML.popupHeight + 'scroll=yes'); // a window object
//			win.document.write(req.responseText);
//			win.document.close();			
		},
		
		deleteList : function(event){
			if (confirm(basketTextHTML.confirmRemove)){
				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('removeBasket', "basketID=" + this.basketID);		
			}
		},
		
		warnUser : function(){
			if ( (this.basketID == 0) && (this.added > 0) ){
				return basketTextHTML.interpret('unloadText', [this.added])
			}
		}

		
	})

	//			handleSelection : function(event){
//			var row = event.element().data;
//			
//			if (!this.basket){
//				this.basket = new basket(0);
//			}
//			if (event.element().checked){
//				this.add(row);
//			}else{
//				this.remove(row);
//			}
//			this.update();
//		},		

