(function($){
	$E=function(id){return document.getElementById(id);}
	// 严格的email匹配规则
	var EmailPattern = /(?:^([a-z0-9][\.\+a-z0-9_-]*)@([a-z0-9][a-z0-9\.-]{0,63}\.(com|org|net|biz|info|name|net|pro|aero|coop|museum|[a-z]{2,4}))$)/i
	// 简单的email匹配规则
	,sEmailPattern = /^\w+([-+.']*\w+)*@\w+([-.]\w+)*(\.\w+([-.]\w+)*)*$/
	,markExp = /^[a-zA-Z0-9\u4e00-\u9fa5]+$/
	,urlExp = /^https?:\/\/([\w-]+\.)+[\w-]+(\/[\w- .\/\?%&=]*)?$/i
	;
	$util = {
		/**
	 * 检查昵称格式是否正确
	 * @param {Object} mark
	 */
		checkMark: function(mark){
			// 如果全部是数字，也返回false
			if (!isNaN(mark)) 
				return false;
			var ret = markExp.test(mark);
			if (ret) {
				var len = this.getStringLength(mark);
				if (len < 2 || len > 10) {
					ret = false;
				}
			}
			return ret;
		},
		/**
	 * 检查email格式是否正确
	 * @param {Object} email
	 * @param {Object} simple 是否进行简单的验证
	 */
		checkEmail: function(email, simple){
			return !simple ? EmailPattern.test(email) : sEmailPattern.test(email);
		},
		/**
	 * 检查url格式是否正确
	 * @param {Object} url
	 */
		checkUrl: function(url){
			if (!url) 
				return false;
			if (!/^https?\:\/\//i.test(url)) {
				url = 'http://' + url;
			}
			return urlExp.test(url);
		},
		/**
		 * 得到字符串长度
		 * @param {Object} content
		 */
		getStringLength:function(str){
			if (typeof str == 'undefined') {
		        return 0;
		    }
		    var match = str.match(/[^\x00-\x80]/g);
		    return (str.length + (!match ? 0 : match.length))/2;
		},
		/**
		 * 从左边起截取字符串
		 * @param {Object} str
		 * @param {Object} len
		 */
		getLeftString:function(str, len) {
			len *= 2;
			var s = str.replace(/\*/g, " ").replace(/[^\x00-\xff]/g, "**");
		    str = str.slice(0, s.slice(0, len).replace(/\*\*/g, " ").replace(/\*/g, "").length);
		    if (this.getStringLength(str) > len) {
		        str = str.slice(0, str.length - 1);
		    }
		    return str;
		}
	}

	
	$config = {
		openid:{
			renren:{
				publickey:'0e8835d563d649479e762cc642582828',
				domainfile:'/static/html/xd_receiver.html'
			}
		}
	};
	$post = {
		favorite:function(params){
			$.ajax({
				type: 'post',
				url: '/group/topic/favorite',
				data: params,
				dataType: 'json',
				success: function(data){
					if (data.status == 1) {
						window.location.reload();
					}
					else {
						alert(data.error);
					}
				}
			});
		},
		/**
		 * 初始化图片
		 * 让其自适应大小
		 */
		initImages:function(){
			var maxWidth = 520, 
				checkWidth = function(){
					var width = this.width,height=this.height;
					if (width > maxWidth) {
						this.width = maxWidth;
						this.height = height*(maxWidth/width);
						
						$(this).after('<div style="color:#060">上图有所缩小，<a href="' + this.src + '" target="_blank" title="点击查看大图">点击查看大图</a>。</div>');
					}
				}
			$('div.content img').each(function(){
				if (this.complete) {
					checkWidth.call(this);
				} else {
					$(this).load(function(){
						checkWidth.call(this);
					});
				}
				$(this).error(function(){
					this.style.border = 'solid 2px #F00';
					this.style.padding = '2px';
					$(this).after('<div style="color:red">上图加载失败，<a href="' + this.src + '" target="_blank" title="点击到原网址查看">点击到原网址查看</a>。</div>');
				});
			});
		}
	};
	
	
	$form = {
		onRegisterSubmit:function(form) {
			function _e(name) {
				return form['data[' + name + ']'];
			}
			function _v(name) {
				return _e(name).value || '';
			}
			
			$(form).submit(function(){
				if (!$.trim(_v('email'))) {
					alert('邮箱不能为空');
					_e('email').focus();
					return false;
				}
				if (!$util.checkEmail(_v('email'))) {
					alert('邮箱格式不正确');
					_e('email').focus();
					return false;
				}
				if (!$.trim(_v('username'))) {
					alert('昵称不能为空');
					_e('username').focus();
					return false;
				}
				if (!$util.checkMark(_v('username'))) {
					alert('昵称格式不正确');
					_e('username').focus();
					return false;
				}
				if (typeof form['data[password]'] != 'undefined') {
					if (!$.trim(_v('password'))) {
						alert('密码不能为空');
						_e('password').focus();
						return false;
					}
					if (!/\w{6,20}/.test(_v('password'))) {
						alert('密码长度为6-20位');
						_e('password').focus();
						return false;
					}
					if (form.repassword.value != _v('password')) {
						alert('两次输入的密码不一致');
						form.repassword.focus();
						return false;
					}
				}
				if (!$E('sexMale').checked && !$E('sexFemale').checked) {
					alert('没有选择性别');
					$E('sexMale').focus();
					return false;
				}
				if (_v('province') == '-1' || _v('city') == '-1') {
					alert('居住地没有选择完整');
					_e('province').focus();
					return false;
				}
				if (!/[a-z0-9]{6}/i.test(form.validCode.value)) {
					alert('验证码格式不对');
					form.validCode.focus();
					return false;
				}
			});
		},
		onLoginSubmit:function(form) {
			function _e(name) {
				return form['data[' + name + ']'];
			}
			function _v(name) {
				return _e(name).value || '';
			}
			$(form).submit(function(){
				if ( !$.trim(_v('username')) || !$.trim(_v('password')) ) {
					alert('邮箱/昵称 和 密码都不能为空');
					return false;
				} 
			});
		},
		onAddTopicSubmit:function(form) {
			function _e(name) {
				return form['data[' + name + ']'];
			}
			function _v(name) {
				return _e(name).value || '';
			}
			$(form).submit(function(){
				if ( !$.trim(_v('title')) ) {
					alert('标题不能为空');
					_e('title').focus();
					return false;
				} 
				if ( !$.trim(_v('content'))) {
					alert('内容不能为空');
					_e('content').focus();
					return false;
				}
			});
		},
		onAddReplySubmit:function(form) {
			$(form).submit(function(){
				if (!$.trim(form['data[content]'].value)) {
					alert('回复的内容不能为空');
					form['data[content]'].focus();
					return false;
				}
			});
		}
	};
	
	$openid = {
		initRenren: function(){
			var form = $('#formXiaonei')[0];
			var clickedRenren = false, logoutLink = $('#renrenLogoutLink'), userCache = {};
			$('#renrenLoginLink').click(function(){
				clickedRenren = true;
				if (getRenrenUid()) {
					var count = 0,
					interval = setInterval(function(){
						if (count > 10) {
							clearInterval(interval);
							interval = null;
							
							XN.Connect.requireSession(function(){
								loadUserInfo(function(){
									form.submit();
								});
							});
							return;
						}
						
						if (!form.uid.value) {
							count++;
							return;
						}
						clearInterval(interval);
						interval = null;
						form.submit();
					}, 500);
				}
				else {
					XN.Connect.requireSession(function(){
						loadUserInfo(function(){
							form.submit();
						});
					});
				}
			});
			logoutLink.click(function(){
				XN.Connect.logout(function(){
					logoutLink.hide();
					form.reset();
					form.uid.value = '';
				});
			})
			function getRenrenUid(){
				if (XN.Connect.get_status().result != 1) 
					return null;
				var matches = /\w{32}_user=(\d+)/.exec(document.cookie);
				if (matches && matches[1]) {
					return matches[1];
				}
				return null;
			}
			
			function setForm(user){
				form.uid.value = user.uid;
				form.name.value = user.name;
				logoutLink.html('(' + user.name + ')退出').css('display', '');
				if (user.sex == '1') {
					form.sex.value = 1;
				}
				else 
					if (user.sex == '0') {
						form.sex.value = 2;
					}
				form.province.value = user.hometown_location.province;
				form.city.value = user.hometown_location.city;
				form.big_avatar.value = user.mainurl;
				form.small_avatar.value = user.tinyurl;
			}
			function loadUserInfo(callback){
				var uid = getRenrenUid();
				if (!uid) return;
				XN.Main.apiClient.users_getInfo([uid], ['uid', 'name', 'sex', 'mainurl', 'tinyurl', 'hometown_location'], function(result, ex){
					if (!ex) {
						var user = result[0];
						userCache[uid] = user;
						setForm(user);
						
						if (typeof callback == 'function') {
							callback();
						}
					}
				});
			}
			XN_RequireFeatures(["Connect"], function(){
				var openid = $config.openid.renren;
				XN.Main.init(openid.publickey, openid.domainfile);
				
				XN.Main.get_sessionState().waitUntilReady(function(){
					loadUserInfo();
				});
			});
		},
		/**
		 * 发布新鲜事
		 * @param {Object} postId
		 * @param {Object} title
		 */
		publicRenrenFresh:function(postId,title){
			XN_RequireFeatures(["Connect"], function() {
			    var openid = $config.openid.renren;
				XN.Main.init(openid.publickey, openid.domainfile);
			    var template_id = 1;
			    var title_data = {site:'<a href="http://lengxiaohua.org/">我们爱讲冷笑话</a>'};
			    var body_data = {title:'<a href=\"http://lengxiaohua.org/group/topic/' + postId + '">' + title + '</a>'};
			    XN.Main.get_sessionState().waitUntilReady(function() {
			　　　XN.Main.apiClient.feed_publishTemplatizedAction(template_id, title_data, body_data, function(result, ex) {
			      　if (!ex) {
			       　　//发送简单新鲜事成功了，result的值为{"result":1}
			      　}
			    　});
			　　});
		  });	
		}
	};
})(jQuery);

(function($){
	$.fn.bindClicks = function(events){
		var type = typeof events;
		if (type == 'function') {
			$(this).click(function(event){
				var target = event.target, 
					operate = target.getAttribute('operate');
				operate && events.call(target, event, operate);
			});
		} else if (type == 'object') {
			$(this).click(function(event){
				var target = event.target, 
					operate = target.getAttribute('operate');
				if (!operate || !(operate in events)) return;
				events[operate].call(target, event);			
			});
		}
	}
	$.fn.ubbable = function(){
		var dialogs = {},
			submits = {
				url:function(event){
					if ( !/^https?:\/\/.+$/i.test(this.url.value) ){
						showError(this, '网址格式错误');
						this.url.focus();
						return false;
					}
					appendText('[url]' + this.url.value + '[/url]');
					return true;
				},
				img:function(event){
					if ( !/^https?:\/\/.+$/i.test(this.url.value) ) {
						showError(this, '图片地址格式错误');
						this.url.focus();
						return false;
					}
					appendText('[img]' + this.url.value + '[/img]');
					return true;
				},
				flash:function(event){
					if ( !/^https?:\/\/.+$/i.test(this.url.value) ) {
						showError(this, '视频地址格式错误');
						this.url.focus();
						return false;
					}
//					var width = $.trim(this.width.value),
//						height = $.trim(this.height.value);
//					if (isNaN(width) || this.width.value < 10 || this.width.value > 500) {
//						width = 0;
//					}
//					if (isNaN(height) || this.height.value < 10 || this.height.value >500) {
//						height = 0;
//					}
//					if (width == 0) {
//						height = 0;
//					}
					appendText('[flash]' + this.url.value + '[/flash]');
					return true;
				}
			},
			self=this;
		function appendText(txt) {
			self.val(self.val() + txt);
		}
		function showError(form,msg) {
			form.getElementsByTagName('em')[0].innerHTML = msg;
		}
		
		var elem = $('<ul class="ubb-operate"><li>[<a href="javascript:void(0);" operate="url">+链接</a>]</li><li>[<a href="javascript:void(0);" operate="img">+图片</a>]</li><li>[<a href="javascript:void(0);" operate="flash">+视频</a>]</li></ul>');
		self.before(elem);
		elem.width(self.outerWidth()).bindClicks(function(event,type){
			if (!(type in dialogs)) {
				dialogs[type] = $('#' + type + 'UbbDialog').menuable({
					shadow:true,
					close:true,
					show:function(){
						dialogs[type].find('input[name=url]').focus();
					}
				});
				dialogs[type].submit(function(evt){
					if (submits[type].call(this, evt)) {
						dialogs[type].menuable('hide');
						showError(this, '');
					} 
					dialogs[type].menuable('resize');
					return false;
				});
			}
			dialogs[type].menuable('show','middle');
		});
		if (!$('#__ubbForms__').length) {
			self.parents('form').after($('<div id="__ubbForms__"></div>'));
			setTimeout(function(){
				$('#__ubbForms__').html('<form id="urlUbbDialog" class="dialog">\
				<h3>输入网址:</h3>\
				<input type="text" name="url" style="width:400px;"/><input type="submit" name="submit" value="确定"/>\
				<em class="error"></em>\
			</form>\
			<form id="imgUbbDialog" class="dialog">\
				<h3>输入图片地址:</h3>\
				<input type="text" name="url" style="width:400px;"/><input type="submit" name="submit" value="确定"/>\
				<em class="error"></em>\
			</form>\
			<form id="flashUbbDialog" class="dialog">\
				<h3>输入视频地址:</h3>\
				<input type="text" name="url" style="width:400px;"/>\
				<input type="submit" name="submit" value="确定"/>\
				<em class="error"></em>\
			</form>');
			},1000);
		}
	}
})(jQuery);

