﻿if(!window.snda)
{
	window.snda = {};
}
window.snda.utility ={
	get_browser:function(){ //获取当前浏览器的信息
			var browser = {};
			var ua = navigator.userAgent.toLowerCase();   
			var s;
			(s = ua.match(/msie ([\d.]+)/)) ? browser.ie = s[1] :
			(s = ua.match(/firefox\/([\d.]+)/)) ? browser.firefox = s[1] :
			(s = ua.match(/chrome\/([\d.]+)/)) ? browser.chrome = s[1] :
			(s = ua.match(/opera.([\d.]+)/)) ? browser.opera = s[1] :
			(s = ua.match(/version\/([\d.]+).*safari/)) ? browser.safari = s[1] : 0;	
			browser.isie6 = browser.ie && parseInt(browser.ie)==6;
			return browser;
	},
	
	extend:function(defaultObject,extentObject){ //扩展object
		for(var  a in extentObject)
		{
			defaultObject[a] = extentObject[a];
		}		
	},
	bind_event:function(obj,even_type,fun){ //绑定事件
		if (typeof obj != "object" || typeof even_type != "string" || typeof fun != "function" )
        {    
			return;
		}
        if (obj.attachEvent)
        {
			obj.attachEvent("on" + even_type,function(e){fun.call(obj,e)});
		}
        else if (obj.addEventListener)
		{
			obj.addEventListener(even_type, function(e){fun.call(obj,e)}, false);
		}
	},
	get:function(element){ //根据ID获取元素
		if(typeof(element) =="object")
		{
			return element;
		}
		else
		{
			return document.getElementById(element);
		}
	},
	trim:function(s){ //去除空格
		if(typeof(s) !="string" || s ==null || s=="")
		{
			return "";
		}
		else
		{
			return s.replace(/(^\s*)|(\s*$)/ig,"");
		}
	},
	getScrollTop:function(){//获取滚动条的位置
		 var scrollTop = 0;
        if (document.documentElement && document.documentElement.scrollTop) {
            scrollTop = document.documentElement.scrollTop;
        }
        else if (document.body) {
            scrollTop = document.body.scrollTop;
        }
        return scrollTop;
	},
	getClientHeight:function(){ //获取整个网页的高度
		var clientHeight = 0;
        if (document.body.clientHeight && document.documentElement.clientHeight) {
            clientHeight = (document.body.clientHeight < document.documentElement.clientHeight) ? document.body.clientHeight : document.documentElement.clientHeight;
        }
        else {
            clientHeight = (document.body.clientHeight > document.documentElement.clientHeight) ? document.body.clientHeight : document.documentElement.clientHeight;
        }
        return clientHeight;
	},
	format:function(temp, data) {
		return temp.replace(/\{([a-zA-z0-9_]+)\}/g, function(s1, s2) { var s = data[s2]; if (typeof (s) != "undefined") { if (s instanceof (Date)) { return s.getTimezoneOffset() } else { return (s); } } else { return ""; } });
	}
};

function __snda_os_widget()
{
	//获取浏览器信息
	this._utility = window.snda.utility;
	this._browser = this._utility.get_browser();
}
__snda_os_widget.prototype = 
{
	init:function(p) //初始化
	{
		this._option = {
			smallWidth:80,  //小图标时宽度
			smallHeight:101, //小图标时高度		
			flowType:6,      // 1左上 2中 3 左下 4右上  5右中  6 右下
			offsetLeft:0,    // 左边的偏移量，可设置负值
			offsetTop:0,     // 上边的偏移量 ，可设置负值
			defaultAppid:-1,
			defaultSource:-1,
			//exParams:[],
			firstWord:"来自盛大客服" //接入OS时 玩家自动发送的第一句话。
			//pushWord:"您已经在页面停留很久了，请问有什么需要帮助的吗？",   //主动服务输入框的提示文字
			//inputNotice:"请问你有什么话要说？"
			//cusicon:true,
			//cusiconSrc:"",		
			//onlinetime :[] //在线时间段
		};
		
		this._utility.extend(this._option ,p);
		var me = this;
		var id= "oswidget"+new Date().getTime();
		this._option.baseid = id;
		this._option.switchDelay = typeof(this._option.switchDelay) == "number" ? Math.abs(this._option.switchDelay) : 5000; 
		//验证参数是否完全
		//模板定义
		var isoutservice = !this.check_is_in_service();	
		var smallclass =isoutservice?"os_widget_small_disable":"os_widget_small";

		var tempdata ={"id":id,"smallclass":smallclass,"inputNotice":this._option.inputNotice,"pushWord":this._option.pushWord};
		var snda_os_webrefer_dom01 = this._utility.format(this._option.dom01Template,tempdata);
   
		
		var sty = document.createElement("link");
		sty.type = "text/css";
		sty.rel = "Stylesheet";
		sty.href = this._option.cssFileName;
		
		var oFragmeng = document.createDocumentFragment();
		oFragmeng.id = id+"_frag";		
		
		var el01 = document.createElement("div");
		el01.innerHTML = snda_os_webrefer_dom01;	
		oFragmeng.appendChild(el01);

	
		document.body.appendChild(sty);
		document.body.appendChild(oFragmeng);

		//初始化小图标
		var dom01 = this._utility.get(id+"_small");		
		this._utility.bind_event(dom01,"click",function(e){					
              (e || window.event).cancelBubble = true;
			  me.open_service(1);
			  me._option.hasserviced =true;
              return false;
		});	
		dom01.style.display = "block";
		this._dom01= dom01;
		this._option.winStyle= 1;
		
		if(this._browser.isie6)
		{				
			this._utility.bind_event(window, "scroll",function(){ me.resize_widget();});
		}
		this._utility.bind_event(window, "resize",function(){ me.resize_widget();});
		this.resize_widget(); // adjust the initiative position
		
		if(this._option.checkservicestate && !this._option.cusicon)
		{
			window.setTimeout(function(){me.check_in_service_state.call(me);},60000) //每分钟检查一次
		}

		this.is_inited =true;
	},
	open_service:function(type){ //打开窗口
		var t = this._option.firstWord
		if(type==2)
		{
			var tbValue =  this._utility.get(this._option.baseid +"_tb").value;
			if(tbValue !="" && tbValue !=this._option.inputnNotice)
			{
				t +="("+tbValue.substring(0, 200)+")";	
			}
		}
		this.show_service(this._option.defaultAppid,this._option.defaultSource,t,this._option.exParams);
	},
	show_service:function(appid,source,first_word,ex){ //可供外部调用
		var isinservice = this.check_is_in_service();
		if(!isinservice)
		{
			if(this._option.noserviceurl)
			{
				 window.open(this._option.noserviceurl);
			}
			else
			{
				alert("非工作时间");
			}
			return;
		}
		if (typeof window.snda_os_webrefer_oswin == "object" && !window.snda_os_webrefer_oswin.closed) {
			alert("您已经打开了一个【盛大在线客服】窗口，请关闭旧窗口后再打开。");
			return;
		}
		if(typeof(appid)=="undefined" || appid<0)
		{
			alert("appid参数必须");
			return;
		}
		var p = "?gm="+appid+"&source="+source;
		if(first_word)
		{
			p +="&t="+encodeURIComponent(first_word);
		}	
		if(ex){
			for(var  a in ex)
			{
				p +="&"+a+"="+ex[a];
			}
		}
		var url = (this._option.rootUrl || "http://os.sdo.com/default.aspx") + p;
		window.snda_os_webrefer_oswin = window.open(url, "", "toolbar=no,location=no,left=" + (window.screen.width - 640) / 2 + ",top=" + (window.screen.height - 480) / 2 + ",directories=no,scrollbars=no,menubar=no,width=465,height=455,resizable=no,status=no");
	},
    resize_widget:function()
    {		
	
		var adleft = 0 ;
		var adtop = 0;
		var adright = 0;
		switch(this._option.flowType)
		{
			case 1: //左上
				adleft += this._option.offsetLeft;
				adtop += this._option.offsetTop;						
				break;
			case 2: //左中
				adleft += this._option.offsetLeft;
				var mainHeight = this._utility.getClientHeight();
				var myHeight = this._option.winStyle==1?this._option.smallHeight:this._option.bigHeight;
				adtop = Math.round(mainHeight/2)-Math.round(myHeight/2);
				adtop +=this._option.offsetTop;	
				break;
			case 3://左下
				adleft += this._option.offsetLeft;
				var mainHeight = this._utility.getClientHeight();
				var myHeight = this._option.winStyle==1?this._option.smallHeight:this._option.bigHeight;
				adtop = mainHeight-myHeight;
				adtop +=this._option.offsetTop;
				break;
			case 4:// 右上
				adright -= this._option.offsetLeft;
				adtop += this._option.offsetTop;
				break;
			case 5: //右中
				adright -= this._option.offsetLeft;
				var mainHeight = this._utility.getClientHeight();
				var myHeight = this._option.winStyle==1?this._option.smallHeight:this._option.bigHeight;
				adtop = Math.round(mainHeight/2)-Math.round(myHeight/2);
				adtop +=this._option.offsetTop;	
				break;
			case 6: //右下
				adright -= this._option.offsetLeft;
				var mainHeight = this._utility.getClientHeight();
				var myHeight = this._option.winStyle==1?this._option.smallHeight:this._option.bigHeight;
				adtop = mainHeight-myHeight;
				adtop +=this._option.offsetTop;
				break;
		}
		if(this._browser.isie6)
		{
			//添加滚动条的位置
			adtop += this._utility.getScrollTop();
		}
		if(this._option.winStyle==1) //小窗口
		{
			this._dom01.style.position = this._browser.isie6?"absolute":"fixed";
			if(this._option.flowType<=3)
			{
				this._dom01.style.left = adleft+"px";
			}
			else
			{
				this._dom01.style.right = adright+"px";
			}
			this._dom01.style.top = adtop+"px";
		}		
	},
	check_is_in_service:function()
	{
	
		if(this._option.onlinetime && (this._option.onlinetime instanceof Array) && this._option.onlinetime.length>0)
		{
			var now =new Date();
			var mnow= now.getHours()*60+now.getMinutes();
			for(var i =0,l=this._option.onlinetime.length;i<l;i++)
			{
				var start = this._option.onlinetime[i].start.split(":"); 
				var end =   this._option.onlinetime[i].end.split(":");
				var startm = parseInt(start[0],10)*60+parseInt(start[1],10);
				var endm = parseInt(end[0],10)*60+parseInt(end[1],10);
				if( mnow>=startm && mnow<=endm)
				{					
					return true;
				}
			}
			return false;
		}
		return true;
	},
	check_in_service_state:function()
	{
		var me = this;
		var isoutservice =me.check_is_in_service();		
		if(isoutservice)
		{			
			me._dom01.className = "os_widget_mall_disable";
		}
		else
		{			
			me._dom01.className = "os_widget_mall";
		}		
		window.setTimeout(function(){me.check_in_service_state.call(me);},60000);
	}
};
window.snda.oswidget = __snda_os_widget;
//如果是动态加载
if(document.readyState =="complete") {	   
	snda_os_init();
}
else {//常规方式的加载
	window.snda.utility.bind_event(window, "load",snda_os_init);
}
function open_snda_os(appid,source,first_word,ex)
{
	if(window.snda.instance)
	{
		//alert(first_word);
		window.snda.instance.show_service(appid,source,first_word,ex)
	}
	else
	{
		alert("在线客服未初始化完成,请稍后");
	}
}

	function snda_os_init(){var sndaos = new window.snda.oswidget();sndaos.init({"flowType":5,"offsetLeft":0,"offsetTop":0,"defaultAppid":500001,"defaultSource":999999,"firstWord":"来自馨月汇月子会所客服","onlinetime":[{"start":"9:00","end":"17:30"}],"noserviceurl":"http://www.care-bay.com/books_i.asp","smallWidth":100,"smallHeight":159,"dom01Template":"<div class='{smallclass}' id='{id}_small'></div>",cssFileName:"reffiles/os_widget.css"});window.snda.instance = sndaos;}
