/*
Data  voorbeeld
	- Data kan een html string zijn
		data['html'] =  het template
		data[javascript] = soma jvascript totun
	-  OF een array met  object met de volgende parameters
		omschrijving:  Text voor het form field
		name:  naam van formulier veld,
		value:  standaard waarde
		type:  password / text /select* / datum** / tinymce*** / radio****

	je kunt ook data[postAction] . dan word de data bij oke gepost naar de opgegeven waarde


	* bij select hebben we extra data arry nodig met tekst en value voor de opties
		options: 	-> tekst:
					-> value:
	** maakt gebruik van de javascript calender bestanden v
		$page->javascriptLoader('calendar');
		$page->javascriptLoader('calendar-setup');
		$page->javascriptLoader('lang/calendar-nl');
		$page->stylesheetLoader('calendar');
	*** maakt gebruik van tiny mce bestanden
			$page->javascriptLoader('tinymce/tiny_mce');
		Daarnaast (ptioneel ook een extra parameter meegeven  indien er meerdere tiny mce elementen zijn worden alle parameters samengevoegd
			tinymceInit:  ->  de init functie.   (default (vb):   'mode : "textareas", theme : "simple"' )
	**** extra parameter checked
hoogte en breedte
	als height, widt niet worden meegegeven dan word de window automatisch gezised

Voorbeeld!
	var addPrompt = promptWindow.show('Nieuw', 'Nieuw', data)
	addPrompt.onOke = function(result){
		post('menu.php', result);
		return true;
	}
	addPrompt.onCancel = function(){
		//doe iets
		return true;
	}


*/

/*//Controleer of de variabele voor vertalingen al ingesteld zijn, wanneer dit niet het geval is, wordt hier de default ingesteld.
if(typeof OK == "undefined") {
	var OK = 'OK';
	var CANCEL = 'Annuleren';
	var VOLGENDE = 'Volgende';

}*/

var promptForm = new Array();

/*standaard functies om window te laden met behulp van AJAX*/
function ajaxPromptWindow(titel, config, height, width){
	if (typeof(width == undefined)) width = 550;
	if (typeof(height == undefined)) height = 'auto';

	var ajax = new ajaxObject();
	//ajax.init({
	//	url : applicatieFolder +'index.php?ajx'
	//});
	config.onReady = function(response){
		if (typeof(response) == 'string'){
			alert(T_laadError);
			return;
		}
		var promptData = getXMLValue(response, 'result');
		var data = parseJSON(promptData);
		if (response.getElementsByTagName('stop').length > 0){
			alert(getXMLValue(response, 'stop'));
			return false;
		}
		var editPromptWin = promptWindow.show(titel, '', data, height, width);

		// onOke functie aanwezig?
		if (response.getElementsByTagName('onOke').length > 0){
			var onOkeStr = getXMLValue(response, 'onOke');
			editPromptWin.onOke = function(result){
				eval(onOkeStr);
				return true;
			}
		}

		// onCancel functie aanwezig?
		if (response.getElementsByTagName('onCancel').length > 0){
			var onCancelStr = getXMLValue(response, 'onCancel');
			editPromptWin.onCancel = function(result){
				eval(onCancelStr);
				return true;
			}
		}
		promptForm[titel] = editPromptWin;
	}
	ajax.load(config);
}

var inputWin;
if (typeof tinyMCE == 'undefined'){
	var tinyMCE;
}

var promptWindow = {
	resize: 1,
show:function(titel, vraag, data, height, width){
	var addcalenderARR = new Array();
	var tinymceInit ='';
	var doInitTinymce = false;
	var gaVerder = false
	var row, cell1, cell2
	var result = new Array();

	this.width = width;
	this.height = height;

	//clean evt achtergebeleven onOke en onCancel
	this.onOke = undefined;
	this.onCancel = undefined;
	this.validate = undefined;

	this.data = data;

	//bepaal inhoud van het prompt window
	var inputHTML='<div id="promptContent">Loading...</div>';
	var form =  document.createElement('form');
	form.id = 'promptForm';
	form.name = 'promptForm';
	//form.enctype="multipart/form-data"
	form.encoding ="multipart/form-data"
	if (data['postAction']){
		form.method = 'post';
		form.action = data['postAction'];
		if (data['postTarget']){
			form.target = data['postTarget'];
		}
	}
	form.onsubmit= function (){
		if (data['wizzard']){
			inputWin.volgende();
			return false;
		}else{
			return inputWin.ok();
		}
	}

	var table = document.createElement('table');
	table.style.position = 'relative';
	var tbody = document.createElement('tbody');


	if (!data['html']){
		if (vraag != '') {
			form.innerHTML = '<div style="font-size: 12px; font-weight: bold; padding: 2px 0;">'+vraag+'</div>';
		} else {
			form.innerHTML = '';
		}
		for (var i=0; i<data.length; i++){
			row = document.createElement('tr');
			cell1 = document.createElement('td');
			cell1.className = 'formElementLabel';
			cell1.innerHTML = data[i].omschrijving;
			row.appendChild(cell1);
			cell2 = document.createElement('td');
			if (data[i].fomvalidator == undefined) data[i].fomvalidator='';
			switch(data[i].type){
				case 'select':
					//create een select
					var select = document.createElement('select');
					var optionsData = data[i].options
					var selectedIndex = 0;
					select.name = data[i].name;
					select.style.width = "245px";
					//maak de opties voor de select
					for (var j=0; j<optionsData.length; j++){
						if (optionsData[j].value == data[i].value){
							selectedIndex = j;
						}
						select.options[j] = new Option(optionsData[j].tekst ,optionsData[j].value);
					}

					//set selected
					select.selectedIndex = selectedIndex;
					if (data[i].fomvalidator){
						//var fomvalidatorAttr = data[i].fomvalidator.split('=');
						eval('select.'+data[i].fomvalidator);
					}
					//append to cell
					cell2.appendChild(select);
				break;
				case 'datum':
					cell2.innerHTML = '<input type="text" id="'+data[i].name+'" name="'+data[i].name+'" value="'+data[i].value+'" '+data[i].fomvalidator+' style="width: 225px;" /><img alt="Kalender" id="kalender'+i+'" src="images/calendar.jpg" class="calendarIcon"/>';
					curCalender = addcalenderARR[addcalenderARR.length] = new Array();
					curCalender['veld'] = data[i].name
					curCalender['buttonid'] = 'kalender'+i;
				break;
				case 'radio':
					cell2.innerHTML = '<input type="radio" id="'+data[i].name+'" name="'+data[i].name+'" value="'+data[i].value+'" '+(data[i].checked?'checked="checked"':'')+' '+data[i].fomvalidator+'/>';
				break;
				case 'tinymce':
					cell2.innerHTML = '<textarea id="'+data[i].name+'" name="'+data[i].name+'" rows="6" cols="30" '+data[i].fomvalidator+'>'+data[i].value+'</textarea>';
					doInitTinymce = true;
					//is hier een init ingesteld bij dit element?
					if (data[i].tinymceInit != undefined  && data[i].tinymceInit !=''){
						//moet er worden toegevoed dan ook een ', '
						if (tinymceInit !=''){
							tinymceInit += ', ';
						}
						tinymceInit += data[i].tinymceInit;
					}
				break;
				default:
					cell2.innerHTML = '<input type="'+data[i].type+'" name="'+data[i].name+'" id="'+data[i].name+'" value="'+data[i].value+'" '+data[i].fomvalidator+' style="width: 240px;" />';
				break
			}

			row.appendChild(cell2);
			tbody.appendChild(row);
		}
	}else{
		row = document.createElement('tr');
		//row.style.position = 'relative';
		cell1 = document.createElement('td');
		cell1.innerHTML = data['html'];
		cell1.colSpan = 2;
		row.appendChild(cell1);
		tbody.appendChild(row);
	}

	row = document.createElement('tr');
	cell =document.createElement('td');
	cell.colSpan = 2;
	var cancelBtn = '<input type="button" onclick="inputWin.hide()" value="'+T_cancel+'" class="button iddinkButton "/>';
	if (this.data['buttons']){
		cell.innerHTML = '<div class="buttonHolder">'+ this.data['buttons'] + '</div>';
	}else if (data['wizzard']){
		
		var volgendeBtn = '<input type="button" value="'+T_volgende+'" align="right" onclick="inputWin.volgende()" class="button iddinkButton"/>';
		if (data['rondeButtons']){
			cancelBtn = this.roundButton(cancelBtn);
			volgendeBtn = this.roundButton(volgendeBtn);
		}
		cell.innerHTML = '<div class="buttonHolder"><div align="right">'+cancelBtn+' '+volgendeBtn+'</div></div>';
	}else{
		var okBtn = '<input type="submit"  value="'+T_ok+'" name="ok" class="button iddinkButton" />';
		if (data['rondeButtons']){
			cancelBtn = this.roundButton(cancelBtn);
			okBtn = this.roundButton(okBtn);
		}
		cell.innerHTML = '<div class="buttonHolder">'+okBtn+' '+cancelBtn+'</div>';
	}
	
	row.appendChild(cell);
	tbody.appendChild(row);
	table.appendChild(tbody);
	form.appendChild(table);

	//hebben we nog een oude window?
	if (inputWin != undefined){
		this.cancel();
		if (typeof inputWin.cleanup == 'function'){
			inputWin.cleanup();
		}
		
		inputWin=undefined;
	}

	//maak nieuw window
	width =  (this.width == undefined ? 'auto':this.width);
	height = (this.height == undefined ? 'auto':this.height);

	inputWin = dhtmlwindow.open('input', 'inline', inputHTML, titel, 'resize='+(this.resize)+',scrolling=1,center=1,width='+width+',height='+height);
	inputWin.promptObject = this;
	inputWin.clicked = 'cancel';
	var promptContent = document.getElementById('promptContent')
	promptContent.innerHTML = '';
	promptContent.appendChild(form);

	//hebben we ook java te runnden?
	if (data['javascript'] != ''){
//		alert('test');
		//document is al ready dit word via ajax geladen
		//$$(document).ready(function() {
		//	eval(data['javascript']);
		//});
		eval(data['javascript']);
	}
	//kalenders maken (?)
	for (i=0; i<addcalenderARR.length; i++){
		Calendar.setup({
	      inputField	:	addcalenderARR[i]['veld'],// ID van het date field
				electric		: false,
        button    	: addcalenderARR[i]['buttonid'],
				ifFormat  	:	"%d-%m-%Y",// datumnotatie
        showsTime 	:	false, // ook tijd?
				firstDay		: 1 //maandag is eerste dag
    });
	}

	if (doInitTinymce == true){

		//is er een init gezet?
		if (tinymceInit ==''){
			//geen gezet dus default
			tinymceInit = 'mode : "textareas", theme : "simple"';
		}
		//voeg functie nin die gerund word na init (in dit geval doet hij dan een resize
		tinymceInit += ' init_instance_callback : "afterTinyMciInit" ';
		eval('tinyMCE.init({ '+tinymceInit+ '  });');
		tinyMCE.prompt = this;
		//wacht ff
		var date = new Date()

		var stop = date.getTime() +100;
		while(date.getTime() < stop){
			date = new Date();
		}
	}else{
		//resize word niet via tinyMCO gedaan
		this.resizeWin();
	}
	//zet focus
	var form = document.forms['promptForm'];
	for (var i=0; i<form.elements.length; i++ ){
		if (form.elements[i].type !='hidden' && form.elements[i].disabled == false && 
			(typeof form.elements[i].attributes['readOnly'] == "undefined" || form.elements[i].readOnly == false )) {
			try {
				form.elements[i].focus();
				form.elements[i].select();
			} catch(err) {	}
			break;
		}
	}

	//het resulttaat bij oke deze gaat af als we op het  formulier submitten
	inputWin.ok = function(){

		//setting voor in onclose het object niet verwijderen
		inputWin.clicked = 'ok';

		//data array maken (ook nodig voor de validate
		inputWin.formResult = this.promptObject.genereerResult();
		if ( data['postAction']){
			//hebben we tunymce dan trigger de save func
			if (tinyMCE){
				tinyMCE.triggerSave()
			}

			//deze triggerd de inputWin.onclose
			var closeResult =  inputWin.hide();
			if (closeResult){
				// we moeten posten en het sluiten is goed gegaan
				if (data['AIMcallBackFunctions']){
					if (data['AIMBeforeSubmit']){
						eval(data['AIMBeforeSubmit']);
					}
					//post  via verborgen iframe zodat pagina niet herladen word (handif voor file upload)
					//voorbeeld data['AIMcallBackFunctions'] = '{'onStart' : startCallbackfunctie, 'onComplete' : completeCallbackfunctie}'
					form = document.getElementById('promptForm');
					var AIMcallBackFunctions = eval('('+data['AIMcallBackFunctions']+')');
					return AIM.submit(form, AIMcallBackFunctions);
				}else{
					//normale post submit het form
					return true;
				}
			}else{
				// run de submit niet
				return false;
			}


		}else{


			//deze triggerd de inputWin.onclose  en stuurt het result
			inputWin.hide();

			return false;
		}
	}

	// de sluit functie word aangeroepen als je op het kruisje of op cancel clickt of vanuit de inputWin.ok functie
	inputWin.onclose  = function(){
		if (inputWin.clicked == 'ok' || inputWin.clicked == 'volgende'){
			//hij is aangeroepen vanuit de oke functie

			//run formvalidator
			if (typeof formValidator == "function"){
				if(!formValidator('promptForm')){
					inputWin.clicked = 'cancel';
					return false;
				}
			}

			//run eventueel de php validator
			if (typeof inputWin.promptObject.validate == "function"){
				if (!inputWin.promptObject.validate(inputWin.formResult)){
					//validate error
					inputWin.clicked = 'cancel';
					return false;
				}
			}
			if (inputWin.clicked == 'ok'){
				var okResult = promptWindow.ok(inputWin.formResult);
			}else{
				var okResult = true;
			}
		}else{
			//cancel! return een false to de result function
			promptWindow.cancel();
			inputWin=undefined;
			var okResult = true;
		}



		return okResult;
	}



	//return object
	return this;
},
roundButton:function(button){
	return '<div style="position: relative;display: inline-block;	*display: inline;">'+
			'<div class="buttonWrapper" >'+
				'<span class="corner topLeft"></span>'+
				'<span class="corner bottomLeft"></span>'+
				'<span class="corner bottomRight"></span>'+
				'<span class="corner topRight"></span>'+
				button+
			'</div>'+
		'</div>';
},
genereerResult:function(){
	//maak de resultaat array
	var result = getFormData(document.forms['promptForm']);

	return result;
},
resizeWin:function(){
	//set size
	width =  (this.width == undefined ? 'auto':this.width);
	height = (this.height == undefined ? 'auto':this.height);
	inputWin.setSize(width, height);
	inputWin.moveTo('middle', 'middle');
},

ok:function(result){
	//probeer de data['onOke'] te runnen
	try{
		//var data = this.data;
		dataOkefunc = function(data, result){
			var dataOkeresult = true;
			//ales je je window niet wilt sluiten moet je in de eval code result op false zetten
			try {
				eval(data['onOke']);
			} catch(err) {
				alert(err.name+' - '+err.message);
				dataOkeresult = false; // window niet dicht als er een fout is.
			}
			return dataOkeresult;
		}
		var dataOkeResult = dataOkefunc(this.data, result);
	} catch(err) { //In non IE browsers, all errors are caught, so just run the below
		var dataOkeResult=true
		alert('Fout in promptobject.onOk: '+err.name+' - '+err.message);
	}
	// finally{ //In IE, not all errors are caught, so check if variable isn't defined in IE in those cases
		// if (typeof dataOkeResult=="undefined"){
			// alert("An error has occured somwhere inside your dataOkeResult event handler")
			// var dataOkeResult=true
		// }
	// }
	// probeer de user onOke functie te runnen
	try{
		var okeResult=false;
		if (typeof(this.onOke)=='function') {
			okeResult=this.onOke(result);
		} else {
			okeResult=true;
		}
	} catch(err){ //In non IE browsers, all errors are caught, so just run the below
		alert('Fout in promptwindow.onOk: '+err.name+' - '+err.message);
	}
	//finally{ //In IE, not all errors are caught, so check if variable isn't defined in IE in those cases
	//	if (typeof okeResult=="undefined"){
	//		alert("An error has occured somwhere inside your \"onOke\" event handler")
	//		var okeResult=true
	//	}
	//}
	if (okeResult && dataOkeResult){ //if custom event handler function returns true
		//run  standaard code

		//schoonmaken
		this.data = undefined;

		//tinymce resetten
		this.resetTinyMce();
		return true;
	}else{
		return false;
	}
	//clear param

},
resetTinyMce:function(){
	if (tinyMCE){
		for (editorID in tinyMCE.editors) {
			if (editorID != 'toJSONString'){
				tinyMCE.execCommand("mceRemoveControl", false, editorID);
			}
		}
		if (tinyMCE.activeEditor){
			tinyMCE.activeEditor = undefined;
		}
	}
},
cancel:function(){
	try{
		var cancelResult = false;
		if (typeof(this.onCancel)=='function') {
			cancelResult=this.onCancel();
		} else {
			cancelResult=true;
		}
	}
	catch(err){ //In non IE browsers, all errors are caught, so just run the below
		alert(err.name+' - '+err.message);
	}
	//finally{ //In IE, not all errors are caught, so check if variable isn't defined in IE in those cases
	//	if (typeof cancelResult=="undefined"){
	//		alert("An error has occured somwhere inside your \"onCancel\" event handler")
	//		var cancelResult=true
	//	}
	//}
	if (cancelResult){ //if custom event handler function returns true
		//run  standaard code
		/*if (tinyMCE){
			 if (tinyMCE.activeEditor){
				tinyMCE.execCommand("mceRemoveControl", false, tinyMCE.activeEditor.id);
				tinyMCE.activeEditor = undefined;
			}
		}*/
		this.resetTinyMce();
	}
}
}
function isArray(obj) {
	if(obj == undefined) return false;
	if (obj.constructor.toString().indexOf("Array") == -1)
		return false;
	else
	return true;
}

function post(action, data, target){
	//hebben we cancel geclicked? (data = false)
	if (data){
		//geen cancel do een post
		var	input = document.createElement('input');
		var cuInput;
		input.type = "hidden";
		var form = document.createElement('form');
		form.method = 'post';
		form.action = action;
		if (target != undefined){
			form.target = target;
		}
		form.name = 'postFormulier';
		form.id = 'postFormulier';
		for(var key in data){
			if (typeof(data[key]) != "undefined" && (typeof(data[key]) != 'function')){

				cuInput  = input.cloneNode(true)
				cuInput.name = key;
				cuInput.value = data[key];
				form.appendChild(cuInput);

			}
		}

		document.body.appendChild(form);
		document.getElementById('postFormulier').submit();
	}
}
function afterTinyMciInit(inst){
	if (tinyMCE.prompt){
		//alleen ultraform (1)
		tinyMCE.prompt.resizeWin();
	}
}
function resizeTinyMCE(w, h){
	tinyEl = tinyMCE.get("tekst");
	if (tinyEl){

		tinyEl.contentAreaContainer.offsetParent.style.width = w-55 +"px";
		tinyEl.contentAreaContainer.offsetParent.style.height = h-110 + "px";
		tinyEl.contentWindow.frameElement.style.height = h-215 + "px";
	}
}

function formVeldenNaarArray(formName){
	var form;
	switch(typeof formName){
		case 'string':
			if (form = eval('document.'+formName)){
				//firefox ie8
			}else{
				//ie
				for(var i=0;i<document.forms.length;i++) {
					//alert(document.forms[i].name + ' ' + frm);
					if (document.forms[i].name == formName) {
						form = document.forms[i];

					}
				}
			}

			break;
		case 'object':
			form = formName;
			break;
		default:
			//error
			alert('Form not defined');
			return Array();
	}
	var result = getFormData(form);
	return result;
}

//Start LET OP!! Er staat een copy in ultraform.js voorde zoekbvelden!!!!
function getFormData(form) {
	//maak de resultaat array
	//hebben we tinymce dan trigger de save func
	var result = new Array();
	var fields = new Object();
	if (typeof(tinyMCE) != "undefined"){
		tinyMCE.triggerSave();
	}
	var checkBoxVelden = new Array();
	fields = form.elements;
	for (var i=0; i<fields.length; i++){
		//button overslaan
		if (fields[i].type == 'button'){
		//file werkt niet dus overslaan
		} else if (fields[i].type == 'file'){
			//we sturen alleen de naam mee voor een eventuele validate
			result[fields[i].name+"[name]"] = fields[i].value;
		//ongecheckte radios overslaan
		} else if ((fields[i].type == 'radio') ||(fields[i].type == 'checkbox')) {//
			if ((fields[i].checked)){
				//is de name al als array?
				if (fields[i].name.lastIndexOf('[')!=false){
					result[fields[i].name] = componentToAjax(fields[i].value);
				}else{
					if (typeof(checkBoxVelden[fields[i].name]) == 'undefined'){
						checkBoxVelden[fields[i].name] = 0;

					}else{
						checkBoxVelden[fields[i].name]++
					}
					var index = checkBoxVelden[fields[i].name];
					result[fields[i].name+"["+index+"]"] = componentToAjax(fields[i].value);
				}
			}
		} else {
			result[fields[i].name] = componentToAjax(fields[i].value);
		}
	}
	return result;
}
function componentToAjax(waarde){
	return encodeURIComponent(waarde).replace(/€/g, escape('€')).replace(/&/g, escape('&'));
}
// einde LET OP!!! copy
