var stamgegevens = {};

function Stamgegevens(assetId, pageUrl, callback) {
	var nosubmit = false;

	this.constructor = function(assetId, pageUrl, callback) {
		this.loadStamgegevens(null);
		this.callback = callback;	
	};
	
	this.getFormObjectId = function() {
		return 'stamgegevensform' + assetId;
	};
	
	this.getFormObject = function() {
		return document.getElementById(this.getFormObjectId());
	};
	
	this.getContainerObject = function() {
		return document.getElementById(this.getContainerObjectId());
	};
	
	this.getContainerObjectId = function() {
		return 'stamgegevensContainer' + assetId;
	};
	
	/*
	 * loadStamgegevens laadt de HttpProxyExt die weer gekoppeld is aan de BWAppStamEditObject
	 * applicatie; deze moet de url /framework/javascripts/stamgegevens.js/stamgegevensasset hebben
	 */
	this.loadStamgegevens = function(fn) {
		var now = new Date();
		var callback =
		{
			upload:  this.onLoadStamgegevens,
			success: this.onLoadStamgegevens,
			failure: onFailure,
			argument: {stamgegevens: this}
		};
		var method = 'GET';
		if(fn) {
			var object = this.getFormObject();
			object.HttpProxy_fn.value = fn;
			YAHOO.util.Connect.setForm(this.getFormObjectId());
			method = 'POST';
		}
		YAHOO.util.Connect.asyncRequest(method, pageUrl + "/stamgegevensasset?noCache="+now.getTime(), callback, "");
	};
	
	this.onLoadStamgegevens = function(o) {
		var parent = o.argument.stamgegevens;
		var object = parent.getContainerObject();
		object.innerHTML = o.responseText;
		
		var aInputDates = YAHOO.util.Selector.query(".stamedit_date",parent.getContainerObjectId());
		for(var i=0; i<aInputDates.length; i++) {
			Calendar.setup({
				inputField : aInputDates[i].id,
				ifFormat : "%d-%m-%Y",
				showsTime : false,
				timeFormat : "24",
				mondayFirst : false,
				weekNumbers: true
				});
		}
		var formObject = parent.getFormObject();
		var me = parent;
		var modeObject = document.getElementById('stamgegevensmode'+assetId);
		var zoekfunctie = 'zoek';
		if(modeObject.value == 'edit') {
			zoekfunctie = 'koppelzoek';
		}
		if(formObject.HttpProxy_zoek) {
			formObject.HttpProxy_zoek.onkeypress = function(e) {
				me.checkKey(e, zoekfunctie);
			};
			formObject.HttpProxy_zoek.focus();
			formObject.HttpProxy_zoek.select();
		}
		var zoekknop = document.getElementById('stamgegevenszoek'+assetId);
		if(zoekknop != null) {
			zoekknop.onclick = function() {
				me.loadStamgegevens('zoek');
			};
		}
		var koppelzoekknop = document.getElementById('stamgegevenskoppelzoek'+assetId);
		if(koppelzoekknop != null) {
			koppelzoekknop.onclick = function() {
				me.loadStamgegevens('koppelzoek');
			};
		}
		if(parent.callback) {
			parent.callback(parent);
		}
	};
	
	/**
	 * 
	 * Om te voorkomen dat bij het drukken op de enter toets na gebruik van pijltjes in een
	 * autocomplete dropdownlist van een input veld direct de zoekfunctie wordt aangeroepen,
	 * wordt het volgende mechanisme gebruikt.
	 * 
	 * @param evt
	 * @param fn 
	 * @return
	 */
	this.checkKey = function(evt, fn) {
		if(evt.keyCode == 38 || evt.keyCode == 40) {
			nosubmit = true;
		}
		if(evt.keyCode == 27) {
			nosubmit = false;
		}
		// enter key pressed?
		if(evt.keyCode == 13) {
			if(nosubmit) {
				nosubmit = false;
			} else {
				this.loadStamgegevens(fn);
			}
		}
	}
	
	this.constructor(assetId, pageUrl, callback);
}

// var stam = new Stamgegevens('eWljVmj8i3XRbGom2QrvzQ', '/framework/javascripts/stamgegevens.js');
