/**
 * profiles.js
 * @author Bram Van Damme <bramus@netlash.com>
 * @author Pieter De Baets <pieter@netlash.com>
 */
// jQuery Wrapper
/**
 * JS_4UC Object
 */
	if (!JS_4UC) { var JS_4UC = new Object(); }

/**
 * JS_4UC - Profiles object
 */
	JS_4UC.profiles = {

		/**
		 * Datamembers
		 */
			debug				: false,

		/**
		 * init
		 * @return void
		 */
			init				: function() {

				// init registerHandler
				JS_4UC.profiles.registerHandler.init();
			}
	}
/*
 * JS_4UC - Profiles object - registerHandler (handles the registration part)
 */
	JS_4UC.profiles.registerHandler = {
		/**
		 * Datamembers (config)
		 */
			spinner			: '<img src="/modules/core/layout/images/loading.gif" id="spinner_register" />',
			timeToWait		: 700,
			timer			: null,
			evt				: null,


		/**
		 * init - hook ourselves to the region field!
		 * @return void
		 * -------------------------------------------------------------
		 */

			init			: function() {

				/* region to school-mapper */
		
				if ($('select#region').length > 0) {
					// hook the change event
					$('select#region').bind('change', function(evt) {						
						// don't let 'm type if we're already checking!
						if ($('#spinner_register').length > 0) {
							evt.preventDefault();

						// aah, we're not checking yet ... go bramus go!
						} else {
							// cached page load: region is selected but no schools are shown
							if($(this).val() == -1 && $('#school').val() == -1) return;
							
							// clear previous timer
							clearTimeout(JS_4UC.profiles.registerHandler.timer);

							// Store the event
							JS_4UC.profiles.registerHandler.evt = evt;

							// Che-che-che ... check.it.out!
							JS_4UC.profiles.registerHandler.timer = setTimeout(function() { 
								JS_4UC.profiles.registerHandler._initGetSchools(); 
							}, JS_4UC.profiles.registerHandler.timeToWait);
						}
					});
				}
				
				/* form-enhancements */
				
				$('select#status').change(function(evt) {
					var src = $(evt.target);
					switch(src.val()) {
						case 'S':
							$('#student_number, #education_end, #education_year').parent().show();
							$('#teacher_number').parent().hide();
							break;
						case 'T':
							$('#student_number, #education_end, #education_year').parent().hide();
							$('#teacher_number').parent().show();
							break;
						default:
							$('#student_number, #teacher_number, #education_end, #education_year').parent().hide();
							break;
					}
				}).change();
				
				$('select#education_type').change(function(evt) {
					var src = $(evt.target);
					
					// if code is bigger than A, (charCode 65)
					if(src.val().charCodeAt(0) > 'A'.charCodeAt(0)) $('#education_study').parent().show();
					else $('#education_study').parent().hide();
				});
				
				$('select#region, select#education_type, select#education_study, select#school').change(function(evt) {
					var src = $(evt.target);
					var id = src.attr('id') + '_other';
					if(src.val() == '0' || src.val() == 'F' || src.val() == '99' || src.val() == 'S0099') {
						$('#' + id).show();
					}
					else $('#' + id).hide();
				}).change();
			},


		/**
		 * _initGetSchools: fetch all schools corresponding with this region
		 * @return void
		 * -------------------------------------------------------------
		 */

			_initGetSchools		: function(evt) {

				// get the event
					evt = evt || JS_4UC.profiles.registerHandler.evt;

				// debug
					if (JS_4UC.profiles.debug)	console.log(evt);


				// inject spinner
					$(evt.target).after(JS_4UC.profiles.registerHandler.spinner);

				// get region
					region	= $(evt.target).val();

				// don't call if empty!
					if ($.trim(region) == '') {
						$('#spinner_register').remove();
						return;
					}

				// define postData
					postData	= 'region=' + encodeURIComponent(region);

				// 	Now make the ajax call
					JS_4UC.profiles.registerHandler._doGetSchools(postData);

			},


		/**
		 * _doGetSchools - do the Ajax Dance
		 * @return void
		 * -------------------------------------------------------------
		 */

			_doGetSchools		: function(postData) {

				// post it
					$.ajax({
						url:		'/ajax.php?module=profiles&action=schools',
						type:		'post',
						dataType:	'json',
						cache:		false,
						data:		postData,

						// success making call
						success:	function(json) {

							// process the ajax response
							JS_4UC.profiles.registerHandler._doneGetSchools(json);

						},

						// error making call - something went horribly wrong!
						error:		function(xhr,err,e) {

							// give notice
							alert(err + ' ' + e, 'Critical Error');

							// reload the page
							window.location.reload();

						}

					});
			},



		/**
		 * _doneGetSchools - process the Ajax response
		 * @return void
		 * -------------------------------------------------------------
		 */

			_doneGetSchools		: function(json) {

				// debug
				if (JS_4UC.profiles.debug)	console.log(json);

				// what what (in the butt)?
					switch (parseInt(json.status.code)) {

						// OK - We haz got response
							case 200:

								var data = json.content.data;
								var current = $('select#school').val();
								var options = '';
								
								// clear select options	
								for(var i = 0; i < json.content.count; i++) {
									options += '<option value="' + data[i].school_id + '">' + data[i].school + '</option>';
								}
								
								// update the options
								$('select#school')
									.attr('disabled', '')
									.html(options)
									.val(current).change();
								
							break;

						// ERROR - Something went wrong (most likely insufficient params)
							case 500:
							default:

								// Give notice
								alert(json.status.text);

							break;

					}

				// remove spinner
					$('#spinner_register').remove();

			},


		/**
		 * end of object
		 * -------------------------------------------------------------
		 */

			_eoo				: true


	}


/**
 * Main Run : Init objects when document is loaded
 * -------------------------------------------------------------
 */

$(document).ready(function() {
	JS_4UC.profiles.init();
});

