/* the magic variable */
var humanAction = false;

jQuery(document).ready(function($) {
	initInterface();
});

/* initInterface
 *
 * deze functie wordt aangeroepen na iedere gebruikers actie, hierin kan je
 * al je magic kwijt.
 *
 * user interface enhancement magic, als de datepickers moet je hier initalliseren
 * javascript in eval of tpl trekt IE niet zo goed
 *
 */
function initInterface(){
	
	
	jQuery(document).ready(function($) {
	
																
		/* laad nog wat extra feedback */	
		humanActionReaction();
			
		/* engage ajax */
		initAjax();
		
		/* reset the magic */
		humanAction = false;	
		
	});
	
}

function humanActionReaction(){

	if(humanAction == 'reloadCenter'){

	//	reloadInterfaceComponent('#left_content','/media/ajax','ui_selected');
	//	reloadInterfaceComponent('#center_content','/media/ajax','ui_selected');
	//	reloadInterfaceComponent('#right_content','/media/ajax','ui_selected');
		
	}

} 

/* initAjax
 *
 * Forms, uploads, paginator ajax stuff 
 *
 * enable ajax voor alle formulieren met class 'ajaxMeForm' en is afhankelijk van 
 * de onderstaande attributen per form
 * 
 * target: 	geeft aan welke frame/div/whatever moet worden geupdated "#id" of 
 *			".class", gewoon jquery selectie wijze dus.
 *
 * id:		zet de momenteel uit te voeren 'humanAction', belangrijk wanneer je
 *			na het uitvoeren van actie, nog wat dingen wilt updaten via bijvoorbeeld
 * 			de functie 'reloadInterfaceComponent'
 *
 * method:  post	
 *
 * action:	
 *
 * de paginator, wordt juist afgehandeld met paginator <<nog ff opzoeken>>.tpl
 * de upload, template --> , en afhandeling in class volgens 
 */

function initAjax(){

	jQuery(document).ready(function($) {
		
		
		/* zorg ervoor dat de paginator samenwerkt met ajaxMeForm
		 * In gevallen zonder javascript ondersteuning moet de gewone
		 * controller worden aangeroepen met nieuwe argumenten. Wanneer 
		 * javascript wel wordt ondersteund dan zal ieder form zodanig 
		 * worden aangepast dat de action verwijst naar de ajax gateway,
		 * de hidden message 'ui_action' wordt meegegeven, met het 
		 * target (html element) waarin de update moet plaatsvinden 
		 */
		
		if($('.pagination_ajax').length > 0){
			$('.pagination_ajax').each( function(){
					
				var target 		= $(this).children('span.ajaxTarget').eq(0).text();
			 	var action 		= $(this).children('span.ajaxAction').eq(0).text();
			 	var ui_action 	= $(this).children('span.ajaxMethod').eq(0).text();
				
			 	$(this).children('form').each( function (){
				
					$(this).attr('target',target);
					$(this).attr('action',action);			
					$(this).append('<input type="hidden" name="ui_action" value="'+ui_action+'">');
					
				});
					
			}); 
		}
		
		/* 
		 * kijk of er file upload aanwezig is, indien zo, transformeer het formulier in iets met 
		 * fancy flash. Dit zorgt ervoor dat IE ons ook lief vind. Jammer genoeg heeft IE een 
		 * echt probleem met het uploaden van meerdere files snel achter elkaar, een 
		 * security warning popt up met een vraag naar een niet bestaand certificaat
		 *
		 * wanneer alles geupload is, kan de actie onAllComplete gebruikt worden 
		 *
		 * 
		 * http://www.ronniesan.com/examples/file-upload.html 
		 */
		
		if($('.ajaxMeFileUpload').length > 0){	

			/* Uit kijken voor dubbele instantiatie
			 * we controlleren of het flash embed object aanwezig is voordat we het echt neerzetten
			 */ 

			if(!$('#fileUploadUploader').length > 0){

				/* */
				if($('#fileUpload').attr('name') == 'Filedata'){
					$('#fileUpload').attr('name','fileUpload');
					$('#fileUploadSubmit').remove();
				}

				/* get the user hash */
				var updateElement 		= $('.ajaxMeFileUpload').children('span.updateElement').eq(0).text();
				var uploadScript 		= $('.ajaxMeFileUpload').children('span.uploadScript').eq(0).text();
				var uploadUserHash 		= $('.ajaxMeFileUpload').children('span.uploadUserHash').eq(0).text();
				var uploadTicket 		= $('#ui_file_upload_ticket').attr('value');
		
				$('#fileUpload').fileUpload({
					'uploader': 	'/packages/fileupload/uploader.swf',
					'buttonImg': 	'/packages/fileupload/browse.png',
					'cancelImg': 	'/packages/fileupload/cancel.png',
					'folder': 		'/../we/dont/use/this',
					'script': 		uploadScript,
					'multi': 		true,
					'auto':			true,
					'scriptData': 	{'ui_file_upload_ticket': uploadTicket ,'hash': uploadUserHash,'ui_action': 'dummy'},
					'fileExt':		 '*.jpg;*.jpeg;*.png;*.gif',
					'width': 110,
					'height': 30,
					'sizeLimit': 10000000,
					'onComplete': function (){

						humanAction = 'uploadComplete';

						// herlaad de resultaten in de modal
//						reloadInterfaceComponent(updateElement,'/admin/ajax?ui_file_upload_ticket='+uploadTicket,'ui_my_temp_uploads');
						reloadInterfaceComponent(updateElement,'/upload/ajax?ui_file_upload_ticket='+uploadTicket,'ui_my_temp_uploads');
					
						/* extra ( tenzij we deze elementen ook worden ingeladen in default include ) */
						
						// geef de ticket informatie terug
						$('#ui_upload_ticket').attr('value',uploadTicket);

						// zorg ervoor dat dit upload scherm een tweede keer kan worden geladen vanaf de parent pagina met behoud van sessie
						$('#ui-uploadForm').attr('action',$('#ui-uploadForm').attr('action')+'&ui_file_upload_ticket='+uploadTicket);

						// laat even zien welke files we gaan uploaden
//						reloadInterfaceComponent('#ui-filesToSubmit','/admin/ajax?ui_file_upload_ticket='+uploadTicket,'ui_my_temp_uploads');
						reloadInterfaceComponent('#ui-filesToSubmit','/upload/ajax?ui_file_upload_ticket='+uploadTicket,'ui_my_temp_uploads');
						
						/* einde extra*/

					}
				
				});
			}
			
		}
		
		/* init alle ajax forms */	
		
		$('.ajaxMeForm').unbind('submit').bind('submit', function() {
			$(this).ajaxSubmit({
				
				target: $(this).attr('target'),
				beforeSubmit: checkHumanAction,
				success: initInterface 
				
			});
			humanAction = $(this).attr('id');
			return false; // <-- important!
		});
	});
}


/* checkHumanAction
 *
 * controlleerd of er al een request gaande is, en geeft een alert box zodat we even wachten 
 */

function checkHumanAction(){
	if(humanAction){
		alert('I can\'t take it anymore... stop spanking the button');
		return false;
	}
}


/* reloadInterfaceComponent
 *
 * Laad een interface component naar een element binnen het scherm
 *
 * target: 	geeft aan welke frame/div/whatever moet worden geupdated "#id" of 
 *			".class", gewoon jquery selectie wijze dus.
 * 
 * call: 	de aan te roepen controller
 *
 * method: 	de aan te roepen component
 *
 */

function reloadInterfaceComponent(target,call,method){
	jQuery(document).ready(function($) {
		
		if(humanAction){	
		
			$("#lastPostData_action").val(method);	
		
			$("#lastPostData").ajaxSubmit({	
				target: target,
				success: initInterface,
				url: call,
				timeout: 500 
			});

		}
	});
}














/* onderstaande nog uitzoeken, dit is volgens mij niet meer nodig */

function linkMe(e){
	$.get($(e).attr('href'), function(data) {
		alert(data);
	});

	// wat gebruikers feedback
}

function notify(){

	// soort van pop up box

	// lifetime ?

}

function ajaxMeForm(form){
	alert($(form).attr('action'));
	
}

