/**
 * @fileOverview aop功能,方法级拦截器
 * @import jQuery.js
 * @author pengkun 
 * @revision 1.0
 */

if(typeof window.mapbar == "undefined"){
	window.mapbar = {};
}
if(typeof window.mapbar.aop == "undefined"){
	window.mapbar.aop = {};
}

(
 	function (package) {
		jQuery.extend(package, {
			/** 
			 * @description 方法前增加拦截
			 * @function
			 * @param {Object} obj 要增加拦截的对象
			 * @param {String} methodName 要增加拦截的方法
			 * @param {Function} func 执行的函数
			 * @return {Function} 添加拦截器之前的函数
			 */
			addBefore : function (obj, methodName, func) {
				if (typeof obj != "undefined" && typeof methodName == "string" 
					&& typeof func == "function" && typeof obj[methodName] == "function") {
					
					var old = obj[methodName];
					obj[methodName] = function() {
						func.apply(this, arguments);
						var result = old.apply(this, arguments);
						return result;
					};
					return old;
				}
			},
			/** 
			 * @description 方法后增加拦截
			 * @function
			 * @param {Object} obj 要增加拦截的对象
			 * @param {String} methodName 要增加拦截的方法
			 * @param {Function} func 执行的函数
			 * @return {Function} 添加拦截器之前的函数
			 */
			addAfter : function (obj, methodName, func) {
				if (typeof obj != "undefined" && typeof methodName == "string" 
					&& typeof func == "function" && typeof obj[methodName] == "function") {
					
					var old = obj[methodName];
					
					obj[methodName] = function() {
						var result = old.apply(this, arguments);
						func.apply(this, arguments);
						return result;
					};
					
					return old;
				}
			}
		});
	}
)(mapbar.aop);