
var calculator_watchlist = Class.create({
	
	calculator: null,
	elements: {
		container: null,
		handle: null,
		content: null,
		close: null
	},
	statusOpen: null,
	
	initialize: function(calculator) {
		
		if(calculator) {
			this.calculator = calculator;
		}
		
		// get elements
		var main = this.calculator.mainframe;
		
		this.elements.container = main.getElementsBySelector(".t_watchlist")[0];
		this.elements.handle = this.elements.container.getElementsBySelector(".t_handler")[0];
		this.elements.content =  this.elements.container.getElementsBySelector(".t_content")[0];
		this.elements.close = this.elements.content.getElementsBySelector(".t_button_hide")[0];
		
		this.addEventHandler();
		
		this.close();
	},
	
	
	addEventHandler: function () {
		
		this.elements.handle.observe("click",this.toogle.bind(this));		
		this.elements.close.observe("click", this.close.bind(this));
		
		// forms
		var forms = this.elements.container.getElementsBySelector("form");
		var formElements = null;
		
		for(var i=0; i<forms.length; i++) {
			
			// add onchange handler to fields
			formElements = forms[i].getElements();
			
			for(var e=0; e<formElements.length; e++) {
				formElements[e].observe("change",function (form) {
					form.onsubmit(form);
				}.bind(this,forms[i]));
			}
			
			forms[i].onsubmit = function (form) {
				form.request({
					onComplete: this.refresh.bind(this)
				});
				return false;
			}.bind(this,forms[i])
		}
	},
	
	open: function () {
		
		this.elements.handle.addClassName("up");
		this.elements.content.show();
		this.statusOpen = true;
	},
	
	close: function () {
		this.elements.handle.removeClassName("up");
		this.elements.content.hide();
		this.statusOpen = false;
	},
	
	toogle: function () {
		if(this.statusOpen == true) {
			this.close();
		}
		else {
			this.open();
		}
	},
	
	showProgress: function () {
		this.elements.content.innerHTML = '<div class="t_loading"></div>';
	},
	
	hideProgress: function () {
		var progress = this.elements.content.getElementsBySelector(".t_loading");
		if(progress[0]) {
			progress[0].remove();
		}
	},
	
	refresh: function (parameters) {
		this.showProgress();
		
		new Ajax.Request("/calculator/?action=getBasket&snippet=true", {
			method: "post",
			onComplete: this.refreshComplete.bind(this)
		});
	},
	
	refreshComplete: function (transport) {
		this.elements.content.remove();
		
		Element.replace(this.elements.container,transport.responseText);
		
		// reinit watchlist
		this.initialize(this.calculator);
		this.open();
	}
	
});


