/*
 * JxHandler
 * Version: 0.1
 * Author: Maiko Tepe
 * Date: 2009-07-10 11:12:10
 */

	function JxHandler(url){
			this.url = document.URL;
			if (url != undefined) this.url = url;

			this.processAjax = function(params, callback, onLoading, onComplete, onFailure, onException){
				if (params != undefined) params = $.toJSON(params); else params = '{}';
				
				var message = new Object();
				message.AX_HANDLER = true;
				message.AX_PARAMS = params;

				// $.post(this.url, message, function(result){
				$.ajax({type:'POST',url:this.url,data:message,dataType:'json',beforeSend:onLoading, error:onFailure,complete:onComplete,
					success:function(result){
					// alert(result.AX_RESULT.hello);
					if (result.AX_TASKS) {
						jQuery.each(result.AX_TASKS, function(k,e) {
							if (e[0] == 'innerHTML'){
								// console.log(k[0], k[1].id, k[1].value);
								$('#'+e[1].id).html(e[1].value);
							}else if (e[0] == 'value') {

								if (jQuery.isArray( e[1].value )){
									$('#'+e[1].id+' option').each(function(i,option){
										option.selected = false;
										$(e[1].value).each(function(j,value){
											if (value == option.value) option.selected = true;
										});
									});
								}else{
									$('#'+e[1].id).val(e[1].value);
								}
							}else if (e[0] == 'style'){

								$(e[1].value.split(';')).each(function(i,v){
									var pair = v.split(':');
									if (pair.length < 2) return true;
									$('#'+e[1].id).css(jQuery.trim(pair[0]),jQuery.trim(pair[1]));										
								});

							}else if (e[0] == 'disable') {

								if (e[1].value){
									 $('#'+e[1].id).attr("disabled","disabled");
								}else{
									$('#'+e[1].id).removeAttr("disabled");
								}
								
							}else if (e[0] == 'options') {
								var field = $('#'+e[1].id);
								field.empty();

								if (jQuery.isArray( e[1].options )) {
									$(e[1].options).each(function(value, text){
										var newOption = document.createElement('option');
										newOption.value = value;
										newOption.appendChild(document.createTextNode(text));
										field.append(newOption);
									});
								}else{
									$(e[1].options).each(function(key, value){
										jQuery.each(value,function(value,text){
											var newOption = document.createElement('option');
											newOption.value = value;
											newOption.appendChild(document.createTextNode(text));
											jQuery(newOption).appendTo('#'+e[1].id); 
											
										});
									});
								}
							}else if(e[0] == 'script') {
								eval(e[1]);
							}
						});
						
					}
					if (callback != undefined) callback(result.AX_RESULT);
					
				// } , 'json'); // post
				}}); // $.ajax
			}; // processAjax			
			
		}
