/*
* @fileoverview 该文件封装了Alitalk初始化功能，构建一个组群实例方法为：FD.widget.Alitalk(...)，组件需要用到online这个全局变量，谨防冲突。
* @author Denis<danxia.shidx@alibaba-inc.com>
* @link http://page.china.alibaba.com/shtml/alitalk/alitalk-demo.html
* @version 2.0.1
*/
var online=null;
(function(w) {
/*
* 实例化Alitalk的入口.
* @param {HTMLElement|Array} Dom单一元素或元素组
* @param {object} opts 配置参数
*/
var Alitalk=function(els,opts) {
this.init(els,opts);
},
//是否为IE浏览器
isIE=!!(YAHOO.env.ua.ie),
//保存贸易通版本号，目前为5或6
version,
//是否安装贸易通或阿里旺旺
isInstalled=(function() {
if(isIE) {
var vers={
'aliimx.wangwangx': 6,
'Ali_Check.InfoCheck': 5
};
for(var p in vers) {
try {
new ActiveXObject(p)
version=vers[p];
return true;
} catch(e) { }
}
version=0;
}
return false;
})(),
//自动登陆
autoLogin=function(id) {
if(version==5) {
location.href='alitalk:'
} else {
id=id?'?uid='+id:'';
window.location.href='aliim:login'+id;
}
},
//默认配置
defaults={
type: 2,
//数组对应的类型依次为自定义、按钮和图标
cls: [{},{ base: 'btnAlitalk',on: 'btn-on',off: 'btn-off',mb: 'btn-mb' },{ base: 'iconAlitalk',on: 'icon-on',off: 'icon-off',mb: 'icon-mb'}],
siteID: 'cnalichn',
//是否请求用户在线状态
remote: true,
//实例化过程中是否开启自动登陆
autoLogin: false,
prop: '',
//弹出阿里旺旺下载页
getAlitalk: function() {
window.open('http://alitalk.alibaba.com.cn/index.html','_blank');
}
},
//回调函数
success=function(ali) {
for(var i=0;i<ali.els.length;i++) {
if(ali.els[i].opt.remote) { //对没有指定remote为false的判断在线状态并加上相应样式
ali.els[i].online=online[i]; //把在线状态保存到元素属性以便于后期调用
$D.addClass(ali.els[i],ali.els[i].opt.cls[ali.els[i].opt.type].base); //上基样式
switch(online[i]) {
case 0:
case 2:
case 6:
default: //不在线
$D.addClass(ali.els[i],ali.els[i].opt.cls[ali.els[i].opt.type].off);
break;
case 1: //在线
$D.addClass(ali.els[i],ali.els[i].opt.cls[ali.els[i].opt.type].on);
break;
case 4:
case 5: //手机在线
$D.addClass(ali.els[i],ali.els[i].opt.cls[ali.els[i].opt.type].mb);
break;
}
}
}
//重置
online=null;
};
Alitalk.prototype={
/*
* 实例化Alitalk的入口. 这是组件实例唯一暴露在外的方法
* @param {HTMLElement|Array} Dom单一对象或对象组
* @param {object} opts 配置参数
*/
init: function(els,opts) {
//防止多次调用online冲突
if(online!=null) {
setTimeout(function() { return new w.Alitalk(els,opts); },Math.random()*1000+1000);
return;
} else {
this.opts=FD.common.applyIf(opts||{},defaults);
if(this.opts.remote) online=[];
this.getAlitalk=this.opts.getAlitalk;
}
if(els.nodeType) els=[els];
if(!els.length) return;
this.els=els;
var ids='',that=this;
for(var i=0;i<els.length;i++) {
var o=FD.common.applyIf(eval('('+($D.getAttribute(els[i],'alitalk')||'{}')+')'),this.opts);
if(!o.id||!YAHOO.lang.trim(o.id)) {
els.splice(i,1);
i--;
} else {
els[i].opt=o;
ids+=o.id+';';
}
}
//给按钮注册点击事件
$E.addListener(els,'click',function(e) {
$E.preventDefault(e);
//非ie浏览器不支持
var userID=eval('('+($D.getAttribute(this,'alitalk')||'{}')+')').id;
if(!isIE) {
if(that.opts.webWW) that.opts.webWW(userID);
return;
}
//静态模式下 设置默认状态为在线
if(!that.opts.remote) this.online=1;
//还没有获取到状态
if(this.online==null) return;
//解析用户id
switch(version) {
case 0:
default:
that.opts.getAlitalk(); //下载阿里旺旺
break;
case 5:
window.location='Alitalk:Send'+(this.online==4?'Sms':'IM')+'?'+userID+'&siteid='+that.opts.siteID+'&status='+this.online+that.opts.prop;
break;
case 6:
if(this.online==4) window.location='aliim:smssendmsg?touid=cnalichn'+userID+that.opts.prop;
else window.location='aliim:sendmsg?touid=cnalichn'+userID+'&siteid='+that.opts.siteID+'&status='+this.online+that.opts.prop;
break;
}
});
//从阿里软件获取在线状态
if(this.opts.remote)
YAHOO.util.Get.script('http://amos.im.alisoft.com/muliuserstatus.aw?uids='+ids+'&site='+that.opts.siteID,{ charset: 'gb2312',onSuccess: function() { success(that); },onFailure: function() { online=null; },onTimeout: function() { online=null; } });
//自动登录
if(isIE&&this.opts.autoLogin)
autoLogin();
}
};
/*
* 静态变量及方法
*/
w.Alitalk=Alitalk;
/*
* Alitalk客户端版本
*/
w.Alitalk.version=version;
/*
* 客户端是否安装了Alitalk
*/
w.Alitalk.isInstalled=isInstalled;
/*
* 自动启动alitalk客户端软件
*/
w.Alitalk.autoLogin=autoLogin;
})(FD.widget);
