/* [Discuz!] (C)2001-2099 Comsenz Inc. This is NOT a freeware, use is subject to license terms $Id: home_friendselector.js 26733 2011-12-21 07:18:01Z zhengqingpeng $ */ (function() { friendSelector = function(parameter) { this.dataSource = {}; this.selectUser = {}; this.prompterUser = []; this.showObj = $(isUndefined(parameter['showId']) ? 'selectorBox' : parameter['showId']); if(!this.showObj) return; this.handleObj = $(isUndefined(parameter['searchId']) ? 'valueId' : parameter['searchId']); this.showType = isUndefined(parameter['showType']) ? 0 : parameter['showType']; this.searchStr = null; this.selectNumber = 0; this.maxSelectNumber = isUndefined(parameter['maxSelectNumber']) ? 0 : parseInt(parameter['maxSelectNumber']); this.allNumber = 0; this.notInDataSourceNumber = 0; this.handleKey = isUndefined(parameter['handleKey']) ? 'this' : parameter['handleKey']; this.selectTabId = isUndefined(parameter['selectTabId']) ? 'selectTabId' : parameter['selectTabId']; this.unSelectTabId = isUndefined(parameter['unSelectTabId']) ? 'unSelectTabId' : parameter['unSelectTabId']; this.maxSelectTabId = isUndefined(parameter['maxSelectTabId']) ? 'maxSelectTabId' : parameter['maxSelectTabId']; this.formId = isUndefined(parameter['formId']) ? '' : parameter['formId']; this.filterUser = isUndefined(parameter['filterUser']) ? {} : parameter['filterUser']; this.showAll = true; this.newPMUser = {}; this.interlaced = true; this.handover = true; this.parentKeyCode = 0; this.pmSelBoxState = 0; this.selBoxObj = isUndefined(parameter['selBox']) ? null : $(parameter['selBox']); this.containerBoxObj = isUndefined(parameter['selBoxMenu']) ? null : $(parameter['selBoxMenu']); this.imgBtn = null; this.initialize(); return this; }; friendSelector.prototype = { addDataSource : function(data, clear) { if(typeof data == 'object') { var userData = data['userdata']; clear = isUndefined(clear) ? 0: clear; if(clear) { this.showObj.innerHTML = ""; if(this.showType == 3) { this.selBoxObj.innerHTML = ''; } this.allNumber = 0; this.dataSource = {}; } for(var i in userData) { if(typeof this.filterUser[i] != 'undefined') { continue; } var append = clear ? true : false; if(typeof this.dataSource[i] == 'undefined') { this.dataSource[i] = userData[i]; append = true; this.allNumber++; } if(append) { this.interlaced = !this.interlaced; if(this.showType == 3) { this.append(i, 0, 1); } else { this.append(i); } } } if(this.showType == 1) { this.showSelectNumber(); } else if(this.showType == 2) { if(this.newPMUser) { window.setInterval(this.handleKey+".handoverCSS()", 400); } } } }, addFilterUser : function(data) { var filterData = {}; if(typeof data != 'object') { filterData[data] = data; } else if(typeof data == 'object') { filterData = data; } else { return false; } for(var id in filterData) { this.filterUser[filterData[id]] = filterData[id]; } return true; }, handoverCSS : function() { for(var uid in this.newPMUser) { $('avt_'+uid).className = this.handover ? 'avt newpm' : 'avt'; } this.handover = !this.handover; }, handleEvent : function(key, event) { var username = ''; this.searchStr = ''; if(key != '') { if(event.keyCode == 188 || event.keyCode == 13 || event.keyCode == 59) { if(this.showType == 3) { if(event.keyCode == 13) { var currentnum = this.getCurrentPrompterUser(); if(currentnum != -1) { key = this.dataSource[this.prompterUser[currentnum]]['username']; } } if(this.parentKeyCode != 229) { this.selectUserName(this.trim(key)); this.showObj.style.display = 'none'; $(this.handleObj.id+'_menu').style.display = 'none'; this.showObj.innerHTML = ""; } } } else if(event.keyCode == 38 || event.keyCode == 40) { } else { if(this.showType == 3) { this.showObj.innerHTML = ""; var result = false; var reg = new RegExp(key, "ig"); this.searchStr = key; this.prompterUser = []; for(var uid in this.dataSource) { username = this.dataSource[uid]['username']; if(username.match(reg)) { this.prompterUser.push(uid); this.append(uid, 1); result = true; } } if(!result) { $(this.handleObj.id+'_menu').style.display = 'none'; } else { showMenu({'showid':this.showObj.id, 'duration':3, 'pos':'43'}); showMenu({'showid':this.handleObj.id, 'duration':3, 'pos':'43'}); } } } } else if(this.showType != 3) { this.showObj.innerHTML = ""; for(var uid in this.dataSource) { this.append(uid); } } else { $(this.handleObj.id+'_menu').style.display = 'none'; this.showObj.innerHTML = ""; } }, selectUserName:function(userName) { this.handleObj.value = ''; if(userName != '') { var uid = this.isFriend(userName); if(uid && typeof this.selectUser[uid] == 'undefined' || uid === 0 && typeof this.selectUser[userName] == 'undefined') { var spanObj = document.createElement("span"); if(uid) { this.selectUser[uid] = this.dataSource[uid]; spanObj.id = 'uid' + uid; if($('chk'+uid) != null) { $('chk'+uid).checked = true; } } else { var id = 'str' + Math.floor(Math.random() * 10000); spanObj.id = id; this.selectUser[userName] = userName; } this.selectNumber++; spanObj.innerHTML= '删除' + userName + ''; this.handleObj.parentNode.insertBefore(spanObj, this.handleObj); this.showObj.style.display = 'none'; } else { alert('已经存在'+userName); } } }, delSelUser:function(id) { id = isUndefined(id) ? 0 : id; var uid = id.substring(0, 3) == 'uid' ? parseInt(id.substring(3)) : 0; var spanObj; if(uid) { spanObj = $(id); delete this.selectUser[uid]; if($('chk'+uid) != null) { $('chk'+uid).checked = false; } } else if(id.substring(0, 3) == 'str') { spanObj = $(id); delete this.selectUser[spanObj.getElementsByTagName('input')[0].value]; } if(spanObj != null) { this.selectNumber--; spanObj.parentNode.removeChild(spanObj); } }, trim:function(str) { return str.replace(/\s|,|;/g, ''); }, isFriend:function(userName) { var id = 0; for(var uid in this.dataSource) { if(this.dataSource[uid]['username'] === userName) { id = uid; break; } } return id; }, directionKeyDown : function(event) {}, clearDataSource : function() { this.dataSource = {}; this.selectUser = {}; }, showUser : function(type) { this.showObj.innerHTML = ''; type = isUndefined(type) ? 0 : parseInt(type); this.showAll = true; if(type == 1) { for(var uid in this.selectUser) { this.append(uid); } this.showAll = false; } else { for(var uid in this.dataSource) { if(type == 2) { if(typeof this.selectUser[uid] != 'undefined') { continue; } this.showAll = false; } this.append(uid); } } if(this.showType == 1) { for(var i = 0; i < 3; i++) { $('showUser_'+i).className = ''; } $('showUser_'+type).className = 'a brs'; } }, append : function(uid, filtrate, form) { filtrate = isUndefined(filtrate) ? 0 : filtrate; form = isUndefined(form) ? 0 : form; var liObj = document.createElement("li"); var appendUserData = this.dataSource[uid] || this.selectUser[uid]; var username = appendUserData['username']; liObj.userid = appendUserData['uid']; if(typeof this.selectUser[uid] != 'undefined') { liObj.className = "a"; } if(filtrate) { var reg = new RegExp("(" + this.searchStr + ")","ig"); username = username.replace(reg , "$1"); } if(this.showType == 1) { liObj.innerHTML = '' + username + ''; } else if(this.showType == 2) { if(appendUserData['new'] && typeof this.newPMUser[uid] == 'undefined') { this.newPMUser[uid] = uid; } liObj.className = this.interlaced ? 'alt' : ''; liObj.innerHTML = '
'+username+'

'+username+'

'; } else { if(form) { var checkstate = typeof this.selectUser[uid] == 'undefined' ? '' : ' checked="checked" '; liObj.innerHTML = ''; this.selBoxObj.appendChild(liObj); return true; } else { liObj.innerHTML = '' + username + ''; } } this.showObj.appendChild(liObj); }, select : function(uid) { uid = parseInt(uid); if(uid){ var select = false; if(typeof this.selectUser[uid] == 'undefined') { if(this.maxSelectNumber && this.selectNumber >= this.maxSelectNumber) { alert('最多只允许选择'+this.maxSelectNumber+'个用户'); return false; } this.selectUser[uid] = this.dataSource[uid]; this.selectNumber++; if(this.showType == '1') { $(uid).parentNode.className = 'a'; } select = true; } else { delete this.selectUser[uid]; this.selectNumber--; $(uid).parentNode.className = ''; } if(this.formId != '') { var formObj = $(this.formId); var opId = 'selUids_' + uid; if(select) { var inputObj = document.createElement("input"); inputObj.type = 'hidden'; inputObj.id = opId; inputObj.name = 'uids[]'; inputObj.value = uid; formObj.appendChild(inputObj); } else { formObj.removeChild($(opId)); } } if(this.showType == 1) { this.showSelectNumber(); } } }, delNewFlag : function(uid) { delete this.newPMUser[uid]; }, showSelectNumber:function() { if($(this.selectTabId) != null && typeof $(this.selectTabId) != 'undefined') { $(this.selectTabId).innerHTML = this.selectNumber; } if($(this.unSelectTabId) != null && typeof $(this.unSelectTabId) != 'undefined') { this.notInDataSourceNumber = 0; for(var i in this.selectUser) { if(typeof this.dataSource[i] == 'undefined') { this.notInDataSourceNumber++; } } $(this.unSelectTabId).innerHTML = this.allNumber + this.notInDataSourceNumber - this.selectNumber; } if($(this.maxSelectTabId) != null && this.maxSelectNumber && typeof $(this.maxSelectTabId) != 'undefined') { $(this.maxSelectTabId).innerHTML = this.maxSelectNumber - this.selectNumber; } }, getCurrentPrompterUser:function() { var len = this.prompterUser.length; var selectnum = -1; if(len) { for(var i = 0; i < len; i++) { var obj = $('prompter_' + this.prompterUser[i]); if(obj != null && obj.className == 'a') { selectnum = i; } } } return selectnum; }, mouseOverPrompter:function(obj) { var len = this.prompterUser.length; if(len) { for(var i = 0; i < len; i++) { $('prompter_' + this.prompterUser[i]).className = 'cl'; } obj.className = 'a'; } }, initialize:function() { var instance = this; this.handleObj.onkeyup = function(event) { event = event ? event : window.event; instance.handleEvent(this.value, event); }; if(this.showType == 3) { this.handleObj.onkeydown = function(event) { event = event ? event : window.event; instance.parentKeyCode = event.keyCode; instance.showObj.style.display = ''; if(event.keyCode == 8 && this.value == '') { var preNode = this.previousSibling; if(preNode.tagName == 'SPAN') { var uid = preNode.getElementsByTagName('input')[0].getAttribute('uid'); if(parseInt(uid.substring(3))) { instance.delSelUser(uid); } else { delete instance.selectUser[preNode.getElementsByTagName('input')[0].value]; instance.selectNumber--; this.parentNode.removeChild(preNode); } } } else if(event.keyCode == 38) { if(!instance.prompterUser.length) { doane(event); } var currentnum = instance.getCurrentPrompterUser(); if(currentnum != -1) { var nextnum = (currentnum == 0) ? (instance.prompterUser.length-1) : currentnum - 1; $('prompter_' + instance.prompterUser[currentnum]).className = "cl"; $('prompter_' + instance.prompterUser[nextnum]).className = "a"; } else { $('prompter_' + instance.prompterUser[0]).className = "a"; } } else if(event.keyCode == 40) { if(!instance.prompterUser.length) { doane(event); } var currentnum = instance.getCurrentPrompterUser(); if(currentnum != -1) { var nextnum = (currentnum == (instance.prompterUser.length - 1)) ? 0 : currentnum + 1; $('prompter_' + instance.prompterUser[currentnum]).className = "cl"; $('prompter_' + instance.prompterUser[nextnum]).className = "a"; } else { $('prompter_' + instance.prompterUser[0]).className = "a"; } } else if(event.keyCode == 13) { doane(event); } if(typeof instance != "undefined" && instance.pmSelBoxState) { instance.pmSelBoxState = 0; instance.changePMBoxImg(instance.imgBtn); instance.containerBoxObj.style.display = 'none'; } }; } }, changePMBoxImg:function(obj) { var btnImg = new Image(); btnImg.src = IMGDIR + '/' + (this.pmSelBoxState ? 'icon_top.gif' : 'icon_down.gif'); if(obj != null) { obj.src = btnImg.src; } }, showPMFriend:function(boxId, listId, obj) { this.pmSelBoxState = !this.pmSelBoxState; this.imgBtn = obj; this.changePMBoxImg(obj); if(this.pmSelBoxState) { this.selBoxObj.innerHTML = ''; for(var uid in this.dataSource) { this.append(uid, 0, 1); } } this.containerBoxObj.style.display = this.pmSelBoxState ? '' : 'none'; this.showObj.innerHTML = ""; }, showPMBoxUser:function() { this.selBoxObj.innerHTML = ''; for(var uid in this.dataSource) { this.append(uid, 0, 1); } }, extend:function (obj) { for (var i in obj) { this[i] = obj[i]; } } }; })();