function _id (id) { return $('#'+id)[0]; }
function _registerOnLoad (func) { $().ready(func) }
function _registerOnUnload (func) { $(window).unload(func) }
function _registerHandler () {
	if(arguments.length == 3) { dojo.event.connect(arguments[0], arguments[1], arguments[2]);
	} else if(arguments.length == 4) { dojo.event.connect(arguments[0], arguments[1], arguments[2], arguments[3]); }
}
function _hitch (obj, func) {
	return dojo.lang.hitch(obj, func);
}
function _httpRequest (panelId, params) {
	if (panelId) {
		var content = (params.content) ? params.content : { };
		content.action = 'request';
		content.url = window.location.href;
		content.panel_id = panelId;
		
		pageLoading(1);
		dojo.io.bind({
			method: (params.method) ? params.method : 'post',
			content: content,
			formNode: params.formNode,
			url: eu.main_dir + 'userpages/panel',
			load: function (type, data, evt) {
				pageLoading(0);
				if (params.load) { params.load(type, data, evt); }
			},
			error: function (error) {
				pageLoading(2,'Request failed in page panel #' + panelId);
				if (params.error) { params.error(error); }
			},
			timeout: function () {
				pageLoading(2,'Request timed out in page panel #' + panelId);
				if (params.timeout) { params.timeout(); }
			},
			mimetype: (params.mimetype) ? params.mimetype : 'text/plain'
		});
	}
}

eu.panelActions = {
	request: function (panelId, params) {
		if (panelId) {
			var content = params.content || params.data || { };
			content.action = 'request';
			content.url = window.location.href;
			content.panel_id = panelId;
			
			if (params.formNode) {
				$.each($(params.formNode).serializeArray(), function (k, v) {
					content[v.name] = v.value;
				});
			}
			
			var success = params.success || params.load;
			
			pageLoading(1);
			$.ajax({
				type: (params.method) ? params.method : 'POST',
				data: content,
				url: eu.main_dir + 'userpages/panel',
				success: function (data) {
					pageLoading(0);
					if (params.dataType == 'json' && data.eval) eval(data.eval);
					if (success) { success(data); }
				},
				error: function (error) {
					pageLoading(2,'Request failed in page panel #' + panelId);
					if (params.error) { params.error(error); }
				},
				dataType: params.dataType|| 'plain'
			});
		}
	},
	
	cometReq: null,
	cometData: [],
	cometCallbacks: [],
	
	cometHandle: function (panelId, params) {
		function abort () {
			delete cometData[panelId];
			
			cometInit();
		}
	},
	
	cometInit: function () {
		if (cometReq) cometReq.abort();
		
		cometReq = $.ajax({
			type: 'POST',
			data: {
				action: 'comet',
				content: window.location.href,
				data: cometData
			},
			url: eu.main_dir + 'userpages/panel',
			success: function (data) {
				if (!data.success) return;
				
				var callback;
				
				for (var i in data.resData) {
					if (callback = cometCallbacks[i]) {
						callback(data.responseData[i]);
					}
				}
				
			},
			dataType: 'json'
		});
	},
	
	registerComet: function (panelId, params, callback) {
		
		cometData[panelId] = params;
		
		var comet = new cometHandle(panelId, params);
		
		cometData.push(comet);
		
		if (callback) {
			cometCallbacks[panelId] = callback;
		}
		
		cometInit();
		
		return comet;
	}
};