$(function(){
	var _Netscience = function(){
		var obj = this;
		obj.pageX = undefined;
		obj.pageY = undefined;	
		
		obj.init = function(){
			// listen to mouse movements
			$(document).mousemove(function(e){
				obj.pageX = e.pageX;
				obj.pageY = e.pageY;
			});	
		
			// default ajax settings
			$.ajaxSetup({
				async: 		 true,
				//timeout:	 1000,
				type: 		 'POST',		
				contentType: 'application/json; charset=utf-8',						
				dataType: 	 'json',
				dataFilter:  obj.ajax_data_filter,	
				beforeSend:  function(){},
				complete:    function(){},
				error:		 function(XMLHttpRequest, textStatus, errorThrown){ obj.ajax_error(XMLHttpRequest, textStatus, errorThrown); }
			});		
		}
		
		obj.ajax_error = function(XMLHttpRequest, textStatus, errorThrown){
			var msg = "";
			switch(XMLHttpRequest.status){
				// request ok
				case 200:
				case 201:
				case 202:
				case 203:
				case 204:
				case 205:
				case 206:
					return;
				break;
				case 403:
				msg = "The page you have requested requires you to be authenticated. Please reload the page in your browser to perform authentication.";
				break;
				default:
				msg = "The page you have requested has generated a fatal error (status code: " + XMLHttpRequest.status + ")";
				break;
			}
			var p = $(document.createElement('p'));
			p.attr('class', 'error-message');
			p.text(msg);
			$.Overlay.dialog(p);
		};		
		
		obj.ajax_data_filter = function(data, type){
			var correct = true;
			switch(type){
				case 'json':
				data = eval('(' + data + ')');
				if(typeof data != 'object'){
					correct = false;
					break;
				}
				
				data = eval('(' + data.d + ')');
				
				if(typeof data != 'object'){
					correct = false;
					break;
				}
				break;
				case 'xml':
				case 'html':
				case 'script':
				default:
				break;
			}
			if(!correct){
				return false;
			}else{
				return data;
			}
		};
		
		obj.init();
	}
	
	// extends jquery
	$.extend({
		Netscience: new _Netscience()
	});
});
