var g_sListFilterImage = 'media/5998BD-alpha50.png';

function handleResponse(p_oResponse) {
	switch(p_oResponse.SACTION) {
		case 'getList':
			setList(p_oResponse);
			break;
		case 'getListOptions':
			getListOptions(p_oResponse);
			break;
		case 'saveField':
			saveField(p_oResponse);
			break;
		case 'openPlusListForm':
			openPlusListForm(p_oResponse);
			break;
		case 'saveListItem':
			saveListItem(p_oResponse);
			break;
		case 'deleteListItem':
			deleteListItem(p_oResponse);
			break;	
		case 'refreshPlusList':
			refreshPlusList(p_oResponse);
			break;
		case 'getOplFuncties':
			getOplFuncties(p_oResponse);
			break;
		case 'getCreboNrLabel':
			getCreboNrLabel(p_oResponse);
			break;
	}
}

var g_sPcHnr = 'initial-value';
var g_oFrm = '';
function chkPcHnr(p_oSender) {
	g_oFrm = p_oSender.form;
	
	var sFieldPrefix = new String();
	if (p_oSender.name.substr(p_oSender.name.length-2,2)=='pc') {
		// pc veld
		sFieldPrefix = p_oSender.name.substr(0, p_oSender.name.length-2);
	}
	if (p_oSender.name.substr(p_oSender.name.length-3,3)=='hnr') {
		// hnr veld
		sFieldPrefix = p_oSender.name.substr(0, p_oSender.name.length-3);
	}
	
	oContainer = {};
	oContainer.sFieldPrefix = sFieldPrefix;
	oContainer.sUuid = jQuery('#frm-verz_uuid').val();// als het bestaat
	oContainer.sPostcode = g_oFrm[sFieldPrefix+'pc'].value;
	oContainer.nHuisnummer = g_oFrm[sFieldPrefix+'hnr'].value;
	oContainer.sFormId = g_oFrm.id;
	var sPcHnr = '[' + oContainer.sPostcode + '][' + oContainer.nHuisnummer + '][' + sFieldPrefix + ']';
	if ((sPcHnr!=g_sPcHnr) && (sPcHnr.length>=7+sFieldPrefix.length)) {
		oProxy.getJSON('chkPcHnr', oContainer);
	}
	g_sPcHnr = sPcHnr;
}

function setValues(p_oResponse) {
	var f = document.forms[0]; // eerste de beste formulier
	
	if (p_oResponse.SFORMID) {
		// Kijk, formulier is meegegeven. Beter!
		f = document.getElementById(p_oResponse.SFORMID);
	}
	
	if (p_oResponse.STDATA) {
		for (var sKey in p_oResponse.STDATA) {
			try {
				// @todo: radio, checkboxes
				f[sKey.toLowerCase()].value = p_oResponse.STDATA[sKey];
			}
			catch(er) {
				// suppress error
			}
		}
	}
}

function getList(p_oSender, p_sTarget) {
	var oFrm = p_oSender.form;
	var oContainer = {
	    'sFormId':oFrm.id
	  , 'sValue':p_oSender.value
	  , 'sSender':p_oSender.name
	  , 'sTarget':p_sTarget
	};
	oProxy.getJSON('getList', oContainer);
}

function setList(p_oResponse) {
	var oFrm = document.getElementById(p_oResponse.SFORMID);
	var aOptions = p_oResponse.LOPTIONS.split('|');
	var aTargets = p_oResponse.STARGET.split(',');
	for (n in aTargets) {
		sTarget = aTargets[n];
		if (oFrm[sTarget]) {
			oFrm[sTarget].options.length = 0;
			for (i=0;i<aOptions.length;i++) {
				var aOption = aOptions[i].split('~');
				var sLabel = aOption.length>1 ? aOption[1] : aOption[0];
				var sValue = aOption[0];
				oFrm[sTarget].options[i] = new Option(sLabel, sValue);
			}
			try {
				// fix jquery-selectbox
				jQuery('#frm_'+sTarget).parents('.jquery-selectbox').unselectbox();
				jQuery('#frm_'+sTarget).selectbox();
			} catch(er) {
			}
		}
	}
}

function capFirst(p_oSender) {
	var sCapital = p_oSender.value.substr(0,1).toUpperCase();
	var sRest = p_oSender.value.substr(1,p_oSender.value.length-1).toLowerCase();
	
	p_oSender.value = sCapital+sRest; 
}
function charOnly(p_oSender, p_oRegExp) {
	p_oSender.value = p_oSender.value.replace(p_oRegExp, ''); 
}
function formatVoorletters(p_oSender) {
	var sReturn = new String();
	var sTmp = p_oSender.value.replace(/[^A-Za-z]/g, '').toUpperCase();
	for (var i=0; i<sTmp.length; i++) {
		sReturn += sTmp.substr(i,1) + '.';
	}
	p_oSender.value = sReturn;
}
function formatBsn(p_oSender){
	var sReturn = new String(p_oSender.value);
	sReturn = sReturn.replace(/\D/g, '');
	sReturn = sReturn.replace(/([0-9]{4})([0-9]{2})([0-9]{3})/g, '$1.$2.$3');
	sReturn = sReturn.substr(0,11);
	p_oSender.value = sReturn;
}
function saveField(p_oResponse) {
	var $oField = jQuery('#'+p_oResponse.STINPUT.sId);
	
	$oField.removeClass('valid invalid missing');
	$oField.parent().removeClass('valid invalid missing');
	if (p_oResponse.NSTATUS!=1) {
		// er is iets mis met de invoer
		alert(p_oResponse.SMSG);
		$oField.addClass('invalid').parent().addClass('invalid');
	} else {
		// set value back
		var sValue = p_oResponse.SVALUE.replace(/^T_D_A_/, '');
		try {
			document.getElementById(p_oResponse.STINPUT.sId).value = sValue;
		} catch (er) {
			// dit is waarschijnlijk een datum veld...
			// gebruik document.getElementById om te voorkomen
			// dat de waarde in de opgedeelde velden komt
		}
		if ($oField.hasClass('required') && (p_oResponse.STINPUT.sValue.toString()=='' || p_oResponse.STINPUT.sValue=='@NO-VALUE@')) {
			// is een verplicht veld
			$oField.addClass('missing').parent().addClass('missing');
		} else {
			// alles in orde!
			$oField.addClass('valid').parent().addClass('valid');
		}
	}
}
function doGetListOptions(p_oSender, p_sDestination) {
	var oContainer = {};
	oContainer.sFormId = p_oSender.form.id;
	oContainer.sDestination = p_sDestination;
	oContainer.sValue = p_oSender.value;
	oProxy.getJSON('getListOptions', oContainer)
}

function getListOptions(p_oResponse) {
	var oFrm = document.getElementById(p_oResponse.STINPUT.sFormId);
	var oSelect = oFrm[p_oResponse.STINPUT.sDestination];
	var aOptions = p_oResponse.LOPTIONS.split('|');

	// delete all options from destination
	oSelect.options.length = 0;

	// fill it with new options
	for (i=0;i<aOptions.length;i++) {
		var aOption = aOptions[i].split('~');
		oSelect.options[i] = new Option(aOption[aOption.length-1],aOption[0]);
	}
	oSelect.disabled = false;
}

/**
 * showElements : Shows/hides dom-nodes
 * @param string p_sElementId Comma seperated list of element-id's
 * @param boolean p_bShow Switch: true shows, hides otherwise
 * @return void
 */
function showElements(p_sElementId, p_bShow) {
	var aElements = p_sElementId.split(',');
	for (var i=0; i<aElements.length; i++) {
		try {
			if (p_bShow) {
				jQuery('#'+aElements[i]).slideDown(g_nTransformSpeed);
			} else {
				jQuery('#'+aElements[i]).hide();
			}
		} catch (er) {
			// suppress errors
		} 
	}
}

var oVal = new TDAValidation();// requires validation.js
function applyFormSettings() {
	var bReturn = false;
	
	jQuery('input.year')
		.attr({size:4,maxlength:4})
		.keyup(function(p_oEvent) {
			p_oEvent.preventDefault();
		})
		.change(function(p_oEvent) {
			this.value = oVal.formatYear(this.value);
		})
	;
	
	jQuery('input.num')
		.change(function(p_oEvent) {
			this.value = oVal.formatNumber(this.value);
		})
	;
	
	jQuery('input.bsn')
		.blur(function(p_oEvent) {
			jQuery(this).removeClass('invalid valid');
			if (!oVal.isBSN(this.value)) {
				jQuery(this).addClass('invalid');
			} else if (this.value.length>0) {
				jQuery(this).addClass('valid');
			}
		})
		.change(function(p_oEvent) {
			this.value = oVal.formatBsn(this.value);
		})
	;
	
	jQuery('input.brilsterkte')
		.attr({size:5,maxlength:5})
		.change(function(p_oEvent) {
			this.value = oVal.formatBrilsterkte(this.value);
		})
	;
	
	jQuery('input.perc')
		.change(function(p_oEvent) {
			this.value = oVal.formatPercentage(this.value);
		})
	;
	
	jQuery('input.tel')
		.attr({size:10,maxlength:10})
		.change(function(p_oEvent) {
			this.value = oVal.formatPhone(this.value);
		})
	;

	jQuery('input.datum')
		.attr({size:10,maxlength:10})
		.change(function(p_oEvent) {
			this.value = oVal.formatDate(this.value);
		})
	;
	
	jQuery('input.vl')
		.change(function(p_oEvent){
			this.value = oVal.formatInitials(this.value);
		})
	;
	
	jQuery('input.nm')
		.change(function(p_oEvent){
			this.value = oVal.formatLastname(this.value);
		})
	;
	
	jQuery('input.pc')
		.attr({size:7,maxlength:7})
		.change(function(p_oEvent){
			this.value = oVal.formatPostcode(this.value);
			chkPcHnr(this);
		})
	;
	jQuery('input.hnr')
		.attr({size:5})
		.change(function(p_oEvent){
			this.value = oVal.formatNumber(this.value);
			chkPcHnr(this);
		})
	;
	jQuery('input.readonly')
		.attr('readonly','readonly');
	
	// set success value
	bReturn = true;
	
	return bReturn;
};

function getOplFuncties(p_oResponse) {
	var oSelect1 = document.getElementById('frm-vkfunc_vkfunc1');
	var oSelect2 = document.getElementById('frm-vkfunc_vkfunc2');
	var oSelect3 = document.getElementById('frm-vkfunc_vkfunc3');
	var aOptions = p_oResponse.SLIST.split('|');
	oSelect1.options.length = 0;
	oSelect2.options.length = 0;
	oSelect3.options.length = 0;
	for (i=0;i<aOptions.length;i++) {
		var aOption = aOptions[i].split('~');
		var sLabel = aOption.length>1 ? aOption[1] : aOption[0];
		var sValue = aOption[0];
		oSelect1.options[i] = new Option(sLabel, sValue);
		jQuery(oSelect1).removeClass('valid').addClass('missing');
		oSelect2.options[i] = new Option(sLabel, sValue);
		jQuery(oSelect2).removeClass('valid');
		oSelect3.options[i] = new Option(sLabel, sValue);
		jQuery(oSelect3).removeClass('valid');
	}
	oSelect1.disabled = false;
	oSelect2.disabled = false;
	oSelect3.disabled = false;
}
function doGetCreboNrLabel(p_oSender) {
	var oContainer = {};	
	oContainer.sCreboNr = p_oSender.value.replace(/\D/gi, '');
	oProxy.getJSON('getCreboNrLabel', oContainer);
}
function getCreboNrLabel(p_oResponse) {
	jQuery('#frm-cursus_crebo_nr_txt').val('');
	if (p_oResponse.NSTATUS==1) {
		jQuery('#frm-cursus_crebo_nr_txt').val(p_oResponse.SVALUE);
		jQuery('#fs_frm-cursus_crebo_nr_txt').slideDown();
	} else {
		jQuery('#fs_frm-cursus_crebo_nr_txt').hide();
	}
}
