
$(document).ready(function(){
	var topLevelClickHandler = function(event){
		if (event.target.name) {
			// Approval 
			if (event.target.name.match(/approved[0-9]+/)) {
				var req_id = event.target.name.replace('approved', '');
				var value = event.target.checked;
				//console.info(req_id,value);
				$('body').trigger({
					type: 'webservice',
					req_id: req_id,
					value: value,
					op: 'approved',
					checkbox: $(event.target)
				});
				return true;
			}
			
			// Certificate Printing
			if (event.target.name.match(/print_cert[0-9]+/)) {
				var req_id = event.target.name.replace('print_cert', '');
				var value = event.target.checked;
				//console.info(req_id,value);
				$('body').trigger({
					type: 'webservice',
					req_id: req_id,
					value: value,
					op: 'print_cert',
					checkbox: $(event.target)
				});
				return true;
			}
		}
		
	};
	
	var webservice = function(event) { 
		// Datasource
		var DS = new $.wcl.util.XHRDataSource('index.cfm',{
			maxCacheEntries:0,
			connMethodPost:true,
			responseSchema:{
				fields:["REQ_ID.VALUE"],
				resultsList:"RESULT",
				metaFields:{
					serverStatus:"STATUS",
					serverMessage:"MESSAGE",
					appStatus:"APPLICATION.STATUS",
					appMessage:"APPLICATION.MESSAGE"
				}
			},
			responseType:$.wcl.util.DataSource.TYPE_JSON
		});
		
		// Callback
		var self = this;
		var callback = {
			success:function(oRequest,oParsedResponse,oCallbackArgument) {
				// Enable the checkbox again
				oCallbackArgument.checkbox.attr('disabled',false);
				
				// Set checkbox back to initial state if application status is not 20
				if(oParsedResponse.meta.appStatus !== 20) {
					//set the checkbox back to the original state oCallbackArgument.value?0:1
					oCallbackArgument.checkbox.attr('checked',!oCallbackArgument.value);
					
					if(oParsedResponse.meta.appStatus === 33) {
						// Error Message
						$.wcl.util.messageDialog('Webservice Error',oParsedResponse.meta.appMessage);
					}
					
				}

			},
			failure:function(oRequest,oRawResponse,oCallbackArgument){
				// Enable the checkbox again
				oCallbackArgument.checkbox.attr('disabled',false);
				//set the checkbox back to the original state oCallbackArgument.value?0:1
				oCallbackArgument.checkbox.attr('checked',!oCallbackArgument.value);
				
				// Error Message
				$.wcl.util.messageDialog('Webservice Error','Server failed to respond.');
			},
			argument:event,
			scope:self
		};
		
		// Request Object
		var oRequest = {source:'certificate.' + event.op,req_id:event.req_id,value:event.value?'1':'0'};
		
		// Disable checkbox
		event.checkbox.attr('disabled',false);
		
		// Send Request
		DS.sendRequest(oRequest,callback);
	};
	
	$('body').bind('click',topLevelClickHandler)
			 .bind('webservice',webservice);
	
	
});

