var Search = Class.create();
Object.extend(Object.extend(Search.prototype, Abstract.prototype),{
		initialize: function(target, options) {
			this.wrapper    = $('container');
			this.searchField= $(target);
			this.options		= Object.extend({ajax_url:"", ajax_parameters:{t:''}}, options || {});
			this.ajax_container = $(options.ajax_container) || false;
			this.addObservers();
			this.reqs = 0;
			_this = this;
		},
		addObservers: function() {
			this.events = {
				click: this.click.bind(this),
				keydown: this.keydown.bind(this),
				addProdukt: this.addProdukt.bind(this),
				delProdukt: this.delProdukt.bind(this),
				AjaxCreate: this.AjaxCreate.bind(this),
				AjaxComplete: this.AjaxComplete.bind(this)
			}
			
			this.responder = Ajax.Responders.register({
					onCreate: this.events.AjaxCreate,
					onComplete: this.events.AjaxComplete
			});
							

			if(this.options.submitButton){
				var buttons = this.wrapper.getElementsBySelector(this.options.submitButton);
				buttons.invoke('observe', 'click', this.events.click);
			}
			if(this.options.submitOnEnter) this.searchField.observe('keydown', this.events.keydown);
			if(this.options.addButton)$(this.options.addButton).observe('click', this.events.addProdukt);
			if(this.options.delButton){
				var delbuttons = this.wrapper.getElementsBySelector(this.options.delButton);
				delbuttons.invoke('observe', 'click', this.events.delProdukt);
			}
		},
		AjaxCreate: function(event){
			if(this.reqs == 0){
				if(!this.overlay){
					new Insertion.After(this.wrapper, '<div id="overlay"><div class="ajaxLoading"><img src="../www/images/animaties/ajax_loading.gif" /></div></div>');
					this.overlay = $('overlay');
				}
				//this.throwError(event);
				//var arrayPageSize = this.getPageSize();
				//this.overlay.setStyle({'padding-top':(arrayPageSize[1]/2-150)+'px', height:(arrayPageSize[1]-(arrayPageSize[1]/2 - 150))+'px'});
				//if(Ajax.Effect)Ajax.Effect.cancel();
				//Ajax.Effect = new Effect.Appear(this.overlay, { duration: 0.2, from:0, to:1});
				if(event.parameters.sleep)this.overlay.show();
			}
			this.reqs++;
		},
		AjaxComplete: function(event){
			this.update();
			this.reqs =  (this.reqs-1 < 0 ) ? 0 : this.reqs-1;
			if(this.reqs == 0){
				//if(Ajax.Effect)Ajax.Effect.cancel();
				//Ajax.Effect = new Effect.Fade('overlay', { duration: 0.2});
				this.overlay.hide();
			}	
		},
		click: function(event) {
			if(this.reqs == 0)this.search(this.ajax_container, $F(this.searchField));
		    Event.stop(event);
			return false;
		},
		keydown: function(event) {
			if(event.keyCode == Event.KEY_RETURN && this.reqs == 0)this.search(this.ajax_container, $F(this.searchField));
		},
		search: function(container, search) {
			if(search != "" && search.length > 1){
				this.options.ajax_parameters.q = search;

				if(container.up('div').getStyle('height') == 'auto') container.up('div').setStyle({'height':'30px'});
				else container.up('div').setStyle({'height':'auto'});

				new Ajax.Updater(container, this.options.ajax_url, {
					method: 'get',
					parameters: this.options.ajax_parameters,
					onSuccess: function(transport){
						resultaat.change();
					}
				});
			}else{
				alert("U moet minimaal 2 karakters invoeren");
			}
			return false;

		},
		addProdukt: function(event){
			var parameters = {
				t:'add_product',
				id: $F('select_prod'),
				eenheid: $F('select_eenheid'),
				aantal: $F('select_aantal'),
				sleep: 1
			};
			
			if(parameters.id && parameters.eenheid && parameters.aantal > 0 ){
				if(this.reqs == 0){
					var table_header = $('table_header');
					var table_footer = $('table_footer');
				
					var Updater = new Ajax.Updater(table_footer, this.options.ajax_url, {
							method: 'get',
							parameters: parameters,
							insertion: Insertion.Before,
							onSuccess: function() {
								$('select_aantal').value = 1;
							}
						});
				}
			}else{
				//this.throwError("U heeft géén geldig aantal (producten) ingevoerd");
				alert("Je hebt géén geldig aantal (producten) ingevoerd");
			}
			return false;

		},
		updateProdukt: function(event){
			
		},
		delProdukt: function(event){
			var id	= parseFloat( Event.element(event).getAttribute('rel') );
			
			if(id){
				if(this.reqs == 0){
					if(this.deleteMessage()){
						var parameters = {
								t:"delete_product",
								aID: id
								// ,sleep:1
						}
						rows = Event.element(event).ancestors();
						var Request = new Ajax.Request(this.options.ajax_url, {
								method: 'get',
								parameters: parameters,
								onSuccess: function(){
									rows.each( function(s, index){
										if(s.nodeName == "TR") s.remove();		
									});
								}

						});
					}else{
						return false;
					}
				}
			}else{
				alert('Er is een fout opgetreden, vernieuw de pagina en probeer het opnieuw.');
			}
			return false;
		},
		update: function(){
			var table = $('tbl_overzicht');

			var delbuttons = this.wrapper.getElementsBySelector(this.options.delButton);
			delbuttons.invoke('observe', 'click', this.events.delProdukt);

			if(this.options.dagelijksButton){
				var dbuttons = this.wrapper.getElementsBySelector(this.options.dagelijksButton);
				dbuttons.invoke('observe', 'click', this.events.checkDagelijks);
			}
			
			var s = 0;
			var kcal_total = table.getElementsBySelector('td.kcal');
			kcal_total.pluck('title').each( function( i ) { s += parseFloat(i); } );
			if(!isNaN(s))$('kcal_total').innerHTML = "<strong>"+Math.round(s)+"</strong>";
			
			var s = 0;
			var vv_total = table.getElementsBySelector('td.vv');
			vv_total.pluck('title').each( function( i ) { s += parseFloat(i); } );
			if(!isNaN(s) && $('vv_total'))$('vv_total').innerHTML = "<strong>"+Math.round(s)+"</strong>";
			
			var s = 0;
			var ov_total = table.getElementsBySelector('td.ov');
			ov_total.pluck('title').each( function( i ) { s += parseFloat(i); } );
			if(!isNaN(s) && $('ov_total'))$('ov_total').innerHTML = "<strong>"+Math.round(s)+"</strong>";
		},
		getPageSize: function (){		
			var xScroll, yScroll;			
			if (window.innerHeight && window.scrollMaxY) {	
				xScroll = window.innerWidth + window.scrollMaxX;
				yScroll = window.innerHeight + window.scrollMaxY;
			} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
				xScroll = document.body.scrollWidth;
				yScroll = document.body.scrollHeight;
			} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
				xScroll = document.body.offsetWidth;
				yScroll = document.body.offsetHeight;
			}
			
			var windowWidth, windowHeight;
			if (self.innerHeight) {	// all except Explorer
				if(document.documentElement.clientWidth){
					windowWidth = document.documentElement.clientWidth; 
				} else {
					windowWidth = self.innerWidth;
				}
				windowHeight = self.innerHeight;
			} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
				windowWidth = document.documentElement.clientWidth;
				windowHeight = document.documentElement.clientHeight;
			} else if (document.body) { // other Explorers
				windowWidth = document.body.clientWidth;
				windowHeight = document.body.clientHeight;
			}	
			if(yScroll < windowHeight){
				pageHeight = windowHeight;
			} else { 
				pageHeight = yScroll;
			}
			
			if(xScroll < windowWidth){	
				pageWidth = xScroll;		
			} else {
				pageWidth = windowWidth;
			}

			arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight) 
			return arrayPageSize;
		},
		deleteMessage:function(){
			var agree = confirm("Weet u zeker dat u dit produkt wil verwijderen?");
			if(agree) return true;
			else return false;
		},
		compareRow: function(sourceRow, table){
			var returnRow = false
			sourceTable = table.getElementsBySelector('tr');
			if(source_id =  sourceRow.getElementsBySelector('td.voedingsmiddel')){
				if(source_id[0]){
					source_id = source_id[0].innerHTML;
					sourceTable.each(
						function( targetRij ) {
							if(targetRij.rowIndex != sourceRow.rowIndex){
								if( target_id = targetRij.getElementsBySelector('td.voedingsmiddel')){
									if(target_id[0]){
										target_id = target_id[0].innerHTML 
										if(target_id == source_id){
											var source_eenheid 	= sourceRow.getElementsBySelector('td.eenheid')[0].innerHTML;
											var target_eenheid =  targetRij.getElementsBySelector('td.eenheid')[0].innerHTML;
											if( (target_eenheid && source_eenheid) && (target_eenheid == source_eenheid) ){
												returnRow = targetRij;
												return true;
											}
										}
									}
								}	
							}
						}
					);
				}
			}
			return returnRow;
		},
		throwError: function(error){
			var new_error = '';
			switch(typeof error){
				case "string":
					new_error += '<li>'+error+'</li>';
				  break;
				case "object":
					new_error += '<li>Object:</li>';
					Object.keys(error).each(
						function(s, index) {
							new_error += '<li>'+s+": "+error[s]+'</li>';
						});
				  break;
				case "array":
					error.each(
						function(s, index) {
							new_error += '<li>'+s+'</li>';
						});
				  break;
				 default: new_error += '<li>'+typeof error+'</li>';
			}
			var html = '<div class="javascript_error"><ul>'+ new_error +'</ul></div>';
			new Insertion.Before(this.wrapper, html);
		}
});

var Search_Ext = Class.create();
Object.extend( Object.extend(Search_Ext.prototype, Search.prototype), {
		initialize: function(target, options) {
			this.wrapper    	= $('container');
			this.searchField	= $(target);
			this.options		= Object.extend({ajax_url:"", ajax_parameters:{t:''}}, options || {});
			this.ajax_container = $(options.ajax_container) || false;
			this.reqs = 0;

			Object.keys(this.options.ajax_toevoegen).each(
			function(optie, i){
				options.ajax_toevoegen[optie] = $F(options.ajax_toevoegen[optie]);
			});
			
			this.addMoreObservers();
			_this = this;
		},
		addMoreObservers: function(){
			this.addObservers();
			
			this.events = Object.extend(this.events,{
				checkDagelijks: this.checkDagelijks.bind(this)
			});
			
			if(this.options.dagelijksButton){
				var dbuttons = this.wrapper.getElementsBySelector(this.options.dagelijksButton);
				dbuttons.invoke('observe', 'click', this.events.checkDagelijks);
			}

		},
		addProdukt: function(event){
			var parameters = Object.extend(this.options.ajax_toevoegen,{
				t:'add_product_user',
				id: $F('select_prod'),
				eenheid: $F('select_eenheid'),
				aantal: $F('select_aantal'),
				sleep: 1
			});
			if(parameters.id != 0 && parameters.eenheid && parameters.aantal > 0){
				if(this.reqs == 0){
					var table_header = $('table_header');
					var table_footer = $('table_footer');
				
					var Updater = new Ajax.Updater( {success: table_footer }, this.options.ajax_url, {
							method: 'get',
							parameters: parameters,
							insertion: Insertion.Before,
							onSuccess: function() {
								$('select_aantal').value = 1;
							}
						});
				}
			}else{
				//this.throwError("U heeft géén geldig aantal (producten) ingevoerd");
				alert("Je hebt géén geldig aantal (producten) ingevoerd");
			}
			return false;
		},
		delProdukt: function(event){
			var id	 = Event.element(event).getAttribute('rel');
			if(id){
				if(this.reqs == 0){
					if(this.deleteMessage()){
						var parameters = Object.extend(this.options.ajax_toevoegen,{
								t:"del_product_user",
								aID: id
								// ,sleep:1
						});
						rows = Event.element(event).ancestors();
						var Request = new Ajax.Request(this.options.ajax_url, {
								method: 'get',
								parameters: parameters,
								onSuccess: function(){
									rows.each( function(s, index){
										if(s.nodeName == "TR") s.remove();		
									});
								}
						});
					}else{
						return false;
					}
				}
			}else{
				alert('foutje');
			}
			return false;

		},
		checkDagelijks: function(event){
			var element = Event.element(event);
			var id	 	= element.getAttribute('rel');
		/*
      var eenheid = element.up("TR").getElementsByClassName('eenheid').first().innerHTML.stripTags();
			element.checked = !element.checked;
    */
			var eenheid = element.up("TR");
      eenheid = Selector.findChildElements(eenheid, $w('td.eenheid')).first().innerHTML.stripTags();
      element.checked = !element.checked;

        if(this.reqs == 0){
				var parameters = Object.extend(this.options.ajax_toevoegen,{
					t:"change_dagelijks",
					aID: id,
					sleep:1,
					eenheid: eenheid,
					aantal: $F('select_aantal')	
				});
				
				var Request = new Ajax.Request(this.options.ajax_url, {
						method: 'get',
						parameters: parameters,
						onSuccess: function(transport) {
							element.checked = !element.checked;
						}
				});
			}
		return false;
		
		}
});
function makeSelection(catID, id){
	populate_select(catID,'product', id);
	populate_select(id, 'eenheid');
	
//	$elements = $('list').getElementsByClassName('icoon');
	$elements = $$('#list .icoon');
	$elements.each( 
		function( s){
			if(s.getAttribute('rel') == catID) $('icon').src = s.firstDescendant().src;
		}
	);
	zoekbox_slide.closeclick();
	var calback = function(){
		var lightDown = {
			duration: .8,
			startcolor:'#FFCC00',
			endcolor:'#FFE3CB',
			restorecolor:'#FFE3CB'
		}
		var lightUp = {
			duration: .8,
			startcolor:'#FFE3CB',
			endcolor:'#FFCC00',
			restorecolor:'#FFCC00',
			afterFinish:function(){highlight(lightDown);}
		}
		
		var highlight = function(options){
			new Effect.Highlight($('row3'), options);
		}
		highlight(lightUp);
	}
	resultaat.closeclick(calback);
	return false;
}
function populate_select (value, type, selectID){    
		var url = '../www/scripts/ajax_reqs.php';
		if(type == 'product'){
			var targetDiv = 'select_prod_holder';
			var ajax_options = {
				method: 'get',
				parameters: {
					c: value,
					t: 'productlist',
					select: selectID || false
				},
				onComplete: function(){
					populate_select($F('select_prod'), 'eenheid'); 
				}
			}
		}else if(type == 'eenheid'){
			var targetDiv = 'select_eenheid_holder';
			var ajax_options = {
				method: 'get',
				parameters: parameters = {
					p: value,
					t: 'eenheidlist',
					onComplete: null
				}		
			}
		}
		
		var updater = new Ajax.Updater(targetDiv, url, ajax_options)
}
function populate_menu(){
//	$elements = $('list').getElementsByClassName('icoon');
	$elements = $$('#list .icoon');
	$elements.each( function( s, index){
						if(index == 0){
							populate_select(s.getAttribute('rel'), 'product');
							$('icon').src = s.firstDescendant().src;
						}
						s.onclick = function(target,evt){
							populate_select(this.getAttribute('rel'), 'product');
							//$('select_prod').options[0].value = "selecteer een product";							
							//$('select_prod').options[0].innerHTML = "selecteer een product";							
							$('icon').src = this.firstDescendant().src;
							return false;
						}
					});
}
