﻿/*
* @fileoverview 该文件封装了Alitalk初始化功能，构建一个组群实例方法为：FD.widget.Alitalk(...)，组件需要用到online这个全局变量，谨防冲突。
* @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() {
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;
})(),
//弹出阿里旺旺下载页
getAlitalk = function() {
window.open('http://alitalk.alibaba.com.cn/index.html', '_blank');
},
//自动登陆
autoLogin = function() {
if (version == 5) {
location.href = 'alitalk:'
} else {
window.location.href = 'aliim:';
}
},
//默认配置
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: ''
},
//回调函数
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() { new w.Alitalk(els, opts); }, Math.random() * 1000 + 1000);
return;
} else {
this.opts = FD.common.applyIf(opts || {}, defaults);
if (this.opts.remote) online = [];
}
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);
els[i].opt = o;
ids += o.id + ';';
}
//给按钮注册点击事件
$E.addListener(els, 'click', function(e) {
$E.preventDefault(e);
//非ie浏览器不支持
if (!isIE) return;
//静态模式下 设置默认状态为在线
if (!that.opts.remote) this.online = 1;
//还没有获取到状态
if (this.online == null) return;
//解析用户id
var userID = eval('(' + ($D.getAttribute(this, 'alitalk') || '{}') + ')').id;
switch (version) {
case 0:
default:
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.getAlitalk = getAlitalk;
/*
* 自动启动alitalk客户端软件
*/
w.Alitalk.autoLogin = autoLogin;
})(FD.widget);
