/*
 * 这个文件是上海职酷-RMS2.0系统的动作的一部分
 * © 2007-2009 上海职酷信息技术有限公司 www.jobkoo.com <service@jobkoo.com>
 */

(function($){
 
	/**
	 * Script for Applications
	 *
	 * @package    jQuery
	 * @subpackage $.RMS
	 * @author     scott ming longerface <longerfacehao@jobkoo.com>,
	 * @version    0.1.0
	 */
	var apps = {
		
		/**
		 * 当前语言
		 */
		language: $.cookie('LANGUAGE'),
		
		/**
		 * initialize
		 */
		construct: function($){
			
		}($),
		
		/**
		 * 自定义扩展
		 * 
		 * @param {Object} func
		 * @param {Object} obj
		 * @return {Object} obj/$.RMS.apps
		 */
		extend: function(func,obj){
			if (!obj) {
				obj = this;
			}
			for (var i in func){
				obj[i] = func[i];
			}
			return obj;
		},
		
		/**
		 * 得到验证码图片
		 *
		 * @param jQuery img
		 * @return void
		 */
		getVerifyCode: function(img)
		{
			img.attr('src', $.RMS.requestStamp("/img/check.php"));
		},
		
		/**
		 * 添加按钮和表单对象回车提交事件
		 *
		 * @param jQuery btn
		 * @param jQuery/Function form | default empty
		 * @param Function fn | default empty
		 * @return jQuery form
		 */
		submitForm: function(btn, form, fn)
		{
			var fn = form&&typeof form == 'function' ? form : (fn || false);
			var form = form ? (typeof(form)=='function'?btn.closest('form'):form) : btn.closest('form');
			btn.bind('click', function(e){
				e.preventDefault();
				if(fn&&fn()==false) return form;
				form.submit();
			});
			form.bind('keydown', function(e){
				if(e.keyCode == 13){
					btn.trigger("click");
				}
			});
			return form;
		},
		
		/**
		 * 判断 v 值是否在数组 a 里
		 * 
		 * @param mixed v
		 * @param Array a
		 * @return boolean
		 */
		in_array : function (v, a){
			if(!v || !a || a.length<1) return false;
			for(var _=0;_<a.length;_++)
				if(v==a[_])
					return true;
			return false;
		},
		
		/**
		 * 判断方法是否是空方法
		 *
		 * @param Function fn
		 * @return boolean
		 */
		isEmptyFunction : function(fn){
			return fn?new RegExp(/functionanonymous\(\)\{\}/i).test(fn.valueOf().toString().replace(/\s*/g,'')):false;
		},
		
		/**
		 * 返回元素对象的绝对坐标
		 *
		 * @param Object ob
		 * @return Object{top: int, left: int}
		 */
		offsetCoordinate : function (ob){
			for(_={top:0,left:0};ob&&ob.tagName.toLowerCase()!='body';ob=ob.offsetParent?ob.offsetParent:false)
			{
				_.top  += ob.offsetTop;
				_.left += ob.offsetLeft;
			}
			return _;
		},
		
		/**
		 * 返回鼠标当前坐标位置
		 * 
		 * @param Event ev
		 * @return Object{x: int, y: int}
		 */
		getMousePosition: function(ev){
			var ev = ev || window.event;
			return ev.pageX || ev.pageY ? {
					x:ev.pageX,
					y:ev.pageY
				} : {
					x:ev.clientX + document.body.scrollLeft - document.body.clientLeft,
					y:ev.clientY + document.body.scrollTop  - document.body.clientTop
				};
		},
		
		/**
		 * 候选人用户专区类
		 *
		 * @package $.RMS
		 * @subpackage apps
		 */
		user: {
		
			/**
			 * 用户是否存在
			 *
			 * @param String user_login_name
			 * @return Boolean
			 */
			exist : function(user_login_name)
			{
				var json = $.ajax({
					url: $.RMS.requestStamp("/user/isexist"),
					data: {user_login_name: user_login_name},
					async: false
				}).responseText;
				json = eval("(" + json + ")");
				return json.exist;
			},
			
			/**
			 * 当前用户是否已经登录
			 *
			 * @return Boolean
			 */
			islogin: function()
			{
				var json = $.ajax({
					url: $.RMS.requestStamp("/user/islogin"),
					async: false
				}).responseText;
				json = eval("(" + json + ")");
				return json.login;
			},
			
			/**
			 * 用 ajax 为候选人用户登录并执行回调函数
			 *
			 * @param String/Object args	user_login_name=&user_password=&remember=
			 * @param Function/Object fn	回调函数，单个函数登录成功时回调，对象{ok: 成功回调方法, no: 失败回调方法}
			 * @return Boolean/Unknow
			 */
			ajaxlogin: function(args, fn)
			{
				if(fn && typeof fn=='function'){
					fn = {ok: fn};
				}
				$.getJSON($.RMS.requestStamp("/user/ajaxlogin"), args, function(json){
					if(json.status){
						if(fn && typeof fn=='object' && typeof fn.ok=='function'){
							return fn.ok();
						}
					}else{
						if(fn && typeof fn=='object' && typeof fn.no=='function'){
							return fn.no();
						}
					}
					return json.status;
				});
			},
			
			/**
			 * 候选人简历类
			 *
			 * @package apps
			 * @subpackage user
			 */
			resume: {
				
				/**
				 * 在简历标题项前加必填红星号
				 *
				 * @param jQuery o
				 * @return jQuery
				 */
				addRequireStar: function(o)
				{
					var goal = o.closest('dl').find('dt:first');
					var span = $('.require', goal);
					if(span.size()==0){
						goal.prepend($('<span></span>').addClass("require").html('*'));
					}
					return o;
				}
			}
		},
		
		/**
		 * 招聘专区类
		 *
		 * @package $.RMS
		 * @subpackage apps
		 */
		index: {
		
			/**
			 * 职位相关方法
			 *
			 * @package apps
			 * @subpackage index
			 */
			job: {
			
				/**
				 * 职位是否存在
				 *
				 * @param int jobid
				 * @return Boolean
				 */
				exist: function(jobid)
				{
					var json = $.ajax({
						url: $.RMS.requestStamp("/index/jobidexist"),
						data: {jobid: jobid},
						async: false
					}).responseText;
					json = eval("(" + json + ")");
					return json.exist;
				},
				
				/**
				 * 当前用户收藏职位
				 *
				 * @param int jobid
				 * @param Function fn
				 * @return void
				 */
				favor: function(jobid, fn)
				{
					$.getJSON($.RMS.requestStamp("/user/favorite"+"?jobid="+jobid), function(json){
						if(json.status){
							if(fn) fn();
						}
						return json.status;
					});
				}
			},
			
			/**
			 * 设置当前窗口的 title 属性值
			 *
			 * @param jQuery|string _
			 * @param string prefix
			 * @param string suffix
			 * @return $.RMS.apps.index
			 */
			setTitle: function(_, prefix, suffix){
				var s = typeof _=='object' ? _.html() : _;
				if(prefix) s = prefix + s;
				if(suffix) s = s + suffix;
				window.document.title = s;
				return this;
			}
		}
	};
	// extend
	$.RMS.apps = apps;
})($);
