function whenFriendList(f){
	if(window.aAllFriendInfo){
		f(aAllFriendInfo);
	}
	else{
		$ajax('/friends/index.php?m=agf', null, function (s){
			aAllFriendInfo = $eval(s) || [];
			f(aAllFriendInfo);
		});
	}
}//whenFriendList

//]]测试代码

//dlgShare是单子
dlgShare = {
	pop: function (_type, _id, _target_user_id, _arg_0, _arg_1, _key){
		whenFriendList(function (aF){
			dlgShare = new function (){
				_this = $('#sharebox');

				var tab0 = $("#share_tab_0");
				var tab1 = $("#share_tab_1");
				var qToWho = $("#share_towho");
				//var selShareTo = $("#selShareTo");
				var txtWhyShare = $("#txtWhyShare");
				var ids = $("#ids");
				var sbm = $('input:submit', _this);
				var type, id;
				
				if(!(/microsoft/i.test(navigator.appName))){
					var maxLengthWhyShare = txtWhyShare[0].getAttribute('maxlength');
					txtWhyShare[0].onkeydown = function(evt){
						if(txtWhyShare.val().length > maxLengthWhyShare){
							var val = txtWhyShare.val().substr(0, maxLengthWhyShare);
							txtWhyShare.val(val);
							return false;
						}
						return true;
					};
				}

				var oMFI = new MultiFriendInput('#ctnMFI', aF);

				//selShareTo.change(function (){
				//	if(selShareTo.val() == '-'){
				//		selShareTo.hide();
						//oMFI.show().setFocus();
				//	}
				//});

				function share2all(){
					var jParam = {
						all:1,
						type: type,
						id: id,
						target_user_id: target_user_id,
						arg_0: arg_0,
						arg_1: arg_1,
						reason: txtWhyShare.val()
					};
					sbm[0].value = '分享中';
					sbm[0].disabled = true;
					$ajax('/share/ajax_friend.php', jParam, function (s){
						if(s == 'ok'){
							_this.hideDlg();
							_alert('分享<em>成功</em>！', 2);
							sbm[0].disabled = false;
							sbm[0].value = '分　享';
						}
						else{
							_alert(s, '错误');
							sbm[0].disabled = false;
							sbm[0].value = '分　享';
						}
					});
				}//share2all

				function share2friends(){
					if(txtWhyShare.val().length > 70){
						_alert();
					}
					var jParam = {
						type: type,
						id: id,
						target_user_id: target_user_id,
						arg_0: arg_0,
						arg_1: arg_1,
						reason: txtWhyShare.val()
					};
					//if(selShareTo.val() == 'all'){
					//	jParam.all = 1;
					//}
					//else{
						if(!ids.val()){
							_alert('想和谁分享呢？别忘了输入他们的姓名');
							return false;
						}
						jParam.ids = ids.val();
					//}
					sbm[0].disabled = true;
					sbm[0].value = '分享中';
					$ajax('/share/ajax_friend.php', jParam, function (s){
						if(s == 'ok'){
							_this.hideDlg();
							_alert('分享<em>成功</em>！', 2);
							sbm[0].disabled = false;
							sbm[0].value = '分　享';
						}
						else{
							_alert(s, '错误');
							sbm[0].disabled = false;
							sbm[0].value = '分　享';
						}
					});
				}//share2friends

				function tabTo(n){
					if(n){
						tab1.addClass('current');
						tab0.removeClass('current');
						tab1.html('<strong>分享给所有朋友</strong>');
						tab0.html('<a href="javascript: dlgShare.tabTo(0);void(0)"><strong>分享给某位朋友</strong></a>');
						qToWho.hide();
						sbm[0].onclick = share2all;
					}
					else{
						tab0.addClass('current');
						tab1.removeClass('current');
						tab0.html('<strong>分享给某位朋友</strong>');
						tab1.html('<a href="javascript: dlgShare.tabTo(1);void(0)"><strong>分享给所有朋友</strong></a>');
						qToWho.show();
						oMFI.show().setFocus();
						sbm[0].onclick = share2friends;
					}
				}//tabTo
				
				function pop(_type, _id, _target_user_id, _arg_0, _arg_1, _key){
					type = _type;
					id = _id;
					target_user_id = _target_user_id;
					arg_0 = _arg_0;
					arg_1 = _arg_1;
					key = _key ? _key : 0;
					
					//selShareTo.val('all');
					//selShareTo.show();
					//oMFI.hide();
					oMFI.reset();
					txtWhyShare.empty();

					$("#share_h4").removeClass();
					$("#share_desc_dl").removeClass();
					$("#share_desc_dt").html('');
					$("#share_desc_name").html('');
					$("#share_desc_content").html('');
					if(window.bShareRss){
						$("#share_desc_content").html($("#desc_content_"+key).html());
					}
					else{
						var s = $("#desc_content_"+key).text();
						$("#share_desc_content").html(s.length > 70 ? s.substring(0, 69) + '…' : s);
					}
					switch (type){
						case 0://照片
							$("#share_h4").addClass('photo');
							$("#share_h4").html('分享照片');
							$("#share_desc_dl").addClass('otherdesc clearfix');
							$("#share_desc_dt").html($("#desc_img_"+key).html());
							$("#share_desc_name").html($("#desc_name_"+key).html());
							break;
						case 1://相册
							$("#share_h4").addClass('photo');
							$("#share_h4").html('分享相册');
							$("#share_desc_dl").addClass('otherdesc clearfix');
							$("#share_desc_dt").html($("#desc_img_"+key).html());
							$("#share_desc_name").html($("#desc_name_"+key).html());
							break;
						case 2://日记
							$("#share_desc_dl").addClass('desc');
							$("#share_h4").html('分享日记');
							$("#share_desc_name").html($("#desc_name_"+key).html());
							break;
						case 3://群组
							$("#share_h4").addClass('group');
							$("#share_h4").html('分享群组');
							$("#share_desc_dl").addClass('otherdesc clearfix');
							$("#share_desc_dt").html($("#desc_img_"+key).html());
							$("#share_desc_name").html($("#desc_name_"+key).html());
							break;
						case 4://群组照片
							$("#share_h4").addClass('photo');
							$("#share_h4").html('分享照片');
							$("#share_desc_dl").addClass('otherdesc clearfix');
							$("#share_desc_dt").html($("#desc_img_"+key).html());
							$("#share_desc_name").html($("#desc_name_"+key).html());
							break;
						case 5://群组话题
							$("#share_h4").addClass('group');
							$("#share_h4").html('分享话题');
							$("#share_desc_dl").addClass('desc clearfix');
							$("#share_desc_name").html($("#desc_name_"+key).html());
							break;
						case 6://占吧
							$("#share_h4").addClass('bar');
							$("#share_h4").html('分享占吧');
							$("#share_desc_dl").addClass('desc');
							$("#share_desc_name").html($("#desc_name_"+key).html());
							break;
						case 7://心曲吧话题
							$("#share_h4").addClass('bar-one');
							$("#share_h4").html('分享话题');
							$("#share_desc_dl").addClass('desc clearfix');
							$("#share_desc_dt").html('<p style="background:transparent url(http://img.zhanzuo.com/s/peach_img/feed_ico.png) no-repeat 0 -108px;padding:2px 24px;">'+$("#desc_name_"+key).html()+'</p>');
							break;
						case 8://缘分吧话题
							$("#share_h4").addClass('bar-one');
							$("#share_h4").html('分享话题');
							$("#share_desc_dl").addClass('otherdesc clearfix');
							$("#share_desc_dt").html($("#desc_img_"+key).html());
							break;
						case 9://占吧话题
							$("#share_h4").addClass('bar-one');
							$("#share_h4").html('分享话题');
							$("#share_desc_dl").addClass('desc clearfix');
							$("#share_desc_name").html($("#desc_name_"+key).html());
							break;
						case 10://班级
							$("#share_h4").addClass('alumi');
							$("#share_h4").html('分享班级');
							$("#share_desc_dl").addClass('otherdesc clearfix');
							$("#share_desc_dt").html($("#desc_img_"+key).html());
							$("#share_desc_name").html($("#desc_name_"+key).html());
							break;
						case 11://班级照片
							$("#share_h4").addClass('photo');
							$("#share_h4").html('分享照片');
							$("#share_desc_dl").addClass('otherdesc clearfix');
							$("#share_desc_dt").html($("#desc_img_"+key).html());
							$("#share_desc_name").html($("#desc_name_"+key).html());
							break;
						case 12://班级话题
							$("#share_h4").addClass('group');
							$("#share_h4").html('分享话题');
							$("#share_desc_dl").addClass('desc clearfix');
							$("#share_desc_name").html($("#desc_name_"+key).html());
							break;
						case 13://占友
							$("#share_h4").addClass('person');
							$("#share_h4").html('分享占友');
							$("#share_desc_dl").addClass('desc clearfix');
							$("#share_desc_dt").html($("#desc_img_"+key).html());
							$("#share_desc_name").html($("#desc_name_"+key).html());
							break;
						case 17://商城
							$("#share_h4").addClass('mall');
							$("#share_h4").html('分享商品');
							$("#share_desc_dl").addClass('desc clearfix');
							$("#share_desc_name").html($("#desc_name_"+key).html());
							break;
						default:
							$error('分享的类别不对！');
					}

					tabTo(1);
					_this.showDlg();
				}//pop
				function showDlg(){
					_this.show();
					var oEmbeds = $('embed');
					var oObjects = $('object');
					for(var i = 0; i < oEmbeds.length; i++){
						oEmbeds[i].style.visibility = 'hidden';
					}
					for(var i = 0; i < oObjects.length; i++){
						oObjects[i].style.visibility = 'hidden';
					}
				}//show
				function hideDlg(){
					_this.hide();
					var oEmbeds = $('embed');
					var oObjects = $('object');
					for(var i = 0; i < oEmbeds.length; i++){
						oEmbeds[i].style.visibility = 'visible';
					}
					for(var i = 0; i < oObjects.length; i++){
						oObjects[i].style.visibility = 'visible';
					}
				}//hide
				
				
				_this.pop = pop;
				_this.tabTo = tabTo;
				_this.showDlg = showDlg;
				_this.hideDlg = hideDlg;
				return _this;
			}();//dlgShare

			dlgShare.pop(_type, _id, _target_user_id, _arg_0, _arg_1, _key);//真的弹出
		});
	}
}


function MultiFriendInput(_this, aFriend, onChange){//onChange 可选
	var nMAX = 20;
	var _this = $(_this);

	var tpl = $tpl('<a id="token-__" class="token" href="javascript:;" tabindex="-1">_1_<img src="http://img.zhanzuo.com/s/peach_img/token_x.gif"/></a>');
	var jFRIENDSELECTED = {};//以user_id为索引。成员jo的组成为：id, name, token
	var qIds = $('#' + _this.attr('ids_to'));

	var nLength = 0;
	var sLastAddedId;

	var txtFI = $('.innerFI', _this);
	var ctnToken = _this.children('span.ctnToken');
	var aAlreadySelected = [];
	var xmp = $('xmp', _this);
	if(xmp.length){
		aAlreadySelected = $eval(xmp.html());
		for(var i = 0; i < aAlreadySelected.length; i++){
			var uid = aAlreadySelected[i].user_id;
			var b;
			for(var j = 0; j < aFriend.length; j++){
				if(aFriend[j].user_id == uid){
					b = true;
				};
			}
			if(!b){
				aFriend.push(aAlreadySelected[i]);
			}
		}
		ctnToken.empty();
	}

	var txtFI = FriendInput(txtFI, aFriend, add, jFRIENDSELECTED);
	txtFI.qDock = _this;
	for(var i = 0; i < aAlreadySelected.length; i++){
		add(aAlreadySelected[i].user_id, aAlreadySelected[i].user_name);
	}
	_this.click(function (){
		txtFI.focus();
	});

	//自动调整宽度
	//通过 qSizeEstimater 获取宽度
	$(document.body).append('<div id="ctnSizeEstimater" class="jLayer" style="font-size: 12px; visibility: hidden;"></div>');
	var qSizeEstimater = $('#ctnSizeEstimater');
	var sLastValue;
	function sizeSense(){
		setTimeout(sizeSense, 100);
		sValue = txtFI.val();
		if(sValue != sLastValue){
			sLastValue = sValue;
			if(sValue){
				qSizeEstimater.html(sValue);
				txtFI.width(qSizeEstimater[0].clientWidth + 14);
			}
			else{
				//if(document.all && document.activeElement != txtFI[0]){
				if(document.all && document.srcElement != txtFI[0]){
					return;
				}
				txtFI.width(14);
			}
		}
	}//sizeSense
	sizeSense();

	/*
	这个功能画蛇添足了，但以后可能派上用场。
	txtFI.keydown(function (event){
		if(!this.value && event.keyCode == 8){
			if(nLength){
				del(sLastAddedId);
			}
		}
	});
	*/

	function setFocus(){
		txtFI.focus();
	}//setFocus

	function add(sId, sName){
		if(sId in jFRIENDSELECTED){
			_alert('不能重复！');
			return false;
		}
		if(nLength == nMAX){
			_alert('最多只可选' + nMAX + '个！');
			return false;
		}
		ctnToken.append(tpl(sId, sName));
		var token = $('#token-' + sId, ctnToken);
		jFRIENDSELECTED[sId] = {id: sId, name: sName, token: token};
		var qDelBtn = $('img', token);
		sLastAddedId = sId;
		qDelBtn.click(function (){
			del(sId);
		});
		join();
		onChange && onChange(true, nLength);
		return true;
	}//add

	function del(sId){
		if(nLength == 0 || !(sId in jFRIENDSELECTED)){
			return false;
		}
		jFRIENDSELECTED[sId].token.remove();
		delete jFRIENDSELECTED[sId];
		join();
		onChange && onChange(false, nLength);
	}//del

	function join(){
		var a = [];
		for(var i in jFRIENDSELECTED){
			a.push(i);
		}
		nLength = a.length;
		qIds.val(a.join(','));
	}//join

	function reset(){
		for(var i in jFRIENDSELECTED){
			delete jFRIENDSELECTED[i];
		}
		nLength = 0;
		ctnToken.empty();
		join();
	}//reset

	_this.reset = reset;
	_this.add = add;
	_this.del = del;
	_this.setFocus = setFocus;

	return _this;
}//MultiFriendInput


/*
提示输入一个朋友
	var txtFI = FriendInput('#txtFI', aF, onPick, jFRIENDSELECTED);
	onPick为回调函数，其传入参数为 user_id 和 user_name
*/
function FriendInput(txt, aFriend, onPick, jFRIENDSELECTED){
	var sCLS_ITEM_SELECTED = 'jMenuItem-selected';
	var txt = $(txt);
	txt.qDock = txt;//提示信息所停靠的 jQuery 对象

	var qFriendSuggest = $('#menuFriendSuggest');
	if(qFriendSuggest.length == 0){
		$(document.body).append('<div id="menuFriendSuggest" class="jLayer jMenu"></div>');
		qFriendSuggest = $('#menuFriendSuggest');
		qFriendSuggest.hide();

		txt.keydown(function (event){
			if(bFriendSuggest){
				fOnKeyDown[event.keyCode] && fOnKeyDown[event.keyCode]();
				if(event.keyCode == 9 || event.keyCode == 13){//TAB
					event.preventDefault();
				}
			}
		});

		qFriendSuggest.mousedown(function (event){//不能用click
			var li = event.target;

			if(li.tagName == 'A'){
				li = li.parentNode;
			}
			else if(li.tagName != 'LI'){
				li = null;
			}
			if(li){
				select(Number(li.getAttribute('sn')));
				pick();
			}
		});
	}
	var fOnKeyDown = {
		38: selectPrev,
		40: selectNext,
		9: pick,
		13: pick
	};

	var ul = $('ul', qFriendSuggest);

	var sLastValue;
	txt.bind('focus', onFocus);
	txt.bind('input', onInput);
	txt.bind('propertychange', onInput);
	txt.bind('blur', function (){
		this.value = sCandidateName = '';
		bFriendSuggest = false;
		qFriendSuggest.hide();
	});

	var tpl = $tpl('<li id="liMI-__" sn="__" class="jMenuItem"><a uid="_1_" href="javascript:;">_2_</a></li>');
	var bFriendSuggest, nPosition, sCandidateId, sCandidateName, qItems;

	function onFocus(){
		dock();
		qFriendSuggest.show();
		qFriendSuggest.html('<p class="hint">请输入你朋友的姓名</p>');
	}//onFocus

	function dock(){
		var jOffset = txt.qDock.offset();
		qFriendSuggest.css('top', jOffset.top + txt.qDock[0].offsetHeight);
		qFriendSuggest.css('left', jOffset.left);
		
	}//dock
	if(/microsoft/i.test(navigator.appName)){
		$(window).bind('scroll', function (){
			dock();
		});
	}else{
		//qFriendSuggest.css('position', 'fixed');
	}

	function onInput(){
		var s = this.value;
		if(sLastValue == s){
			return false;
		}
		sLastValue = s;
		dock();
		if(!s){
			qFriendSuggest.html('<p class="hint">请输入你朋友的姓名</p>');
			bFriendSuggest = false;
			return false;
		}

		bFriendSuggest = true;
		var a = [];
        for(i=0;i<s.length;i++)
        {
            chr = s.substr(i,1);
            if (i == 0)
            {
                pattern = chr; 
            }
            else
            {
                pattern += '[^'+chr+']*'+chr;
            }
        }
        reg = new RegExp(pattern,"i");
		for(var i = 0; i < aFriend.length; i++){
			var jo = aFriend[i];
			if(reg.test(jo.user_name) ||reg.test(jo.pinyin)){
				if(jFRIENDSELECTED && jo.user_id in jFRIENDSELECTED){
					continue;
				}
				a.push(jo);
			}
		}

		if(a.length){
			var s = '<ul>';
			for(var i = 0; i < a.length; i++){
				s += tpl(i, a[i].user_id, a[i].user_name);
			}
			s += '</ul>';
			qFriendSuggest.html(s);
			qItems = $('li', qFriendSuggest);
		}
		else{
			qFriendSuggest.html('<p class="hint">抱歉，没有找到相符的用户名</p>');
			bFriendSuggest = false;
			return false;
		}
		select(0);
	}//onInput

	function select(n){
		if(qItems && qItems.length){
			nPosition = n;
			qItems.removeClass(sCLS_ITEM_SELECTED);
			var q = $(qItems[n]);
			q.addClass(sCLS_ITEM_SELECTED);
			var an = $('a', q);
			sCandidateId = an.attr('uid');
			sCandidateName = an.text();
		}
	}//select

	function selectPrev(){
		if(nPosition > 0){
			select(nPosition - 1);
		}
	}//selectPrev

	function selectNext(){
		if(nPosition < qItems.length - 1){
			select(nPosition + 1);
		}
	}//selectNext

	//选中生效
	function pick(){
		if(bFriendSuggest){
			txt.val(sCandidateName);
			sLastValue = sCandidateName;
			onPick && onPick(sCandidateId, sCandidateName) && txt.val(sCandidateName = '');
			onInput();
			dock();
		}
	}//pick

	return txt;
}//FriendInput
