function IsElementContains(p,c) { for(c=c.parentNode;c;c=c.parentNode)if(c==p)return true; } function FindHoverClassElement(e) { while(e) { if(e.getAttribute("hoverclass")) return e; if(e.getAttribute("onhoverenter")) return e; if(e.getAttribute("onhoverleave")) return e; e=e.parentNode; if(e.nodeType!=1) return null; } } document.onmouseover=function(event) { event=window.event||event; if(event.srcElement) { var e=FindHoverClassElement(event.srcElement); if(e==null||e.contains(event.fromElement))return; if(e.getAttribute("hoverclass")) { if(!e.getAttribute("savedclass")) e.setAttribute("savedclass",e.className||"noclass"); e.className=e.getAttribute("hoverclass")+" "+e.getAttribute("savedclass") } if(e.getAttribute("onhoverenter")) { var func=new Function("event",e.getAttribute("onhoverenter")); func.apply(e,[event]); } } if(event.target) { var e=FindHoverClassElement(event.target); if(e==null||(event.relativeTarget!=null&&IsElementContains(e,event.relativeTarget)))return; if(e.getAttribute("hoverclass")) { if(!e.getAttribute("savedclass")) e.setAttribute("savedclass",e.className||"noclass"); e.className=e.getAttribute("hoverclass")+" "+e.getAttribute("savedclass") } if(e.getAttribute("onhoverenter")) { var func=new Function("event",e.getAttribute("onhoverenter")); func.apply(e,[event]); } } } document.onmouseout=function(event) { event=window.event||event; if(event.srcElement) { var e=FindHoverClassElement(event.srcElement); if(e==null||e.contains(event.toElement))return; if(e.getAttribute("savedclass")) e.className=e.getAttribute("savedclass") if(e.getAttribute("onhoverleave")) { var func=new Function("event",e.getAttribute("onhoverleave")); func.apply(e,[event]); } } if(event.target) { var e=FindHoverClassElement(event.target); if(e==null||(event.relativeTarget!=null&&IsElementContains(e,event.relativeTarget)))return; if(e.getAttribute("savedclass")) e.className=e.getAttribute("savedclass") if(e.getAttribute("onhoverleave")) { var func=new Function("event",e.getAttribute("onhoverleave")); func.apply(e,[event]); } } } if(window.opera) { document.onmousedown=function(event) { if(!event.shiftKey)return; for(var c=event.target;c!=null;c=c.parentNode) { if(c.oncontextmenu) { c.oncontextmenu(event); if(event.cancelBubble)break; } else if(c.getAttribute("oncontextmenu")) { c.oncontextmenu=new Function("event",c.getAttribute("oncontextmenu")); c.oncontextmenu(event); if(event.cancelBubble)break; } } event.preventDefault(); event.returnValue=false; } } var soundflash; new function SoundManager_Init() { var isIE = navigator.appName.toLowerCase().indexOf('internet explorer')+1; var isMac = navigator.appVersion.toLowerCase().indexOf('mac')+1; if(isIE && isMac)return; var url=__cc_urlbase+"SoundPlayer.swf"; var div=document.createElement("DIV"); div.style.position="absolute"; div.style.left="-256px"; div.style.width="64px"; div.style.height="64px"; var flash; var http="http"; if(window.location.href.indexOf("https://")!=-1)http="https"; if(isIE) { div.innerHTML='' flash=div.getElementsByTagName('object')[0]; } else { div.innerHTML='' flash=div.getElementsByTagName('embed')[0]; } document.body.insertBefore(div,document.body.firstChild); soundflash=flash; } function SoundManager_Play(soundID) { if(!soundflash)return; var pos1=window.location.href.indexOf("://") var pos2=window.location.href.indexOf("/",pos1+3) var url=//window.location.href.substring(0,pos2)+ __cc_urlbase+"Sound/"+soundID+".mp3"; try { soundflash.SetVariable("_root.action","Play:"+url); } catch(x) { } } function CodeEncode(str) { if(str==null)return ""; var res=''; for(var i=0;i").join("^5"); str=str.split("#").join("^6"); str=str.split("/").join("^7"); str=str.split("%").join("^8"); str=str.split("?").join("^9"); str=str.split("!").join("^a"); return str; } function PropDecode(str) { if(!str)return ""; str=str.split("^a").join("!"); str=str.split("^9").join("?"); str=str.split("^8").join("%"); str=str.split("^7").join("/"); str=str.split("^6").join("#"); str=str.split("^5").join(">"); str=str.split("^4").join("<"); str=str.split("^3").join("|"); str=str.split("^2").join(":"); str=str.split("^1").join(";"); str=str.split("^0").join("^"); return str; } function PropObjToStr(obj) { var sb=[] for(var key in obj) { if(!obj.hasOwnProperty(key))continue; var val=obj[key]; if(val==null)continue; val=String(val); key=PropEncode(key); val=PropEncode(val); sb.push(key+":"+val); } if(sb.length==0)return null; return sb.join("|"); } function PropStrToObj(str) { if(str==null)return null; if(str.length==0)return null; var obj={}; var arr=str.split('|'); for(var i=0;iright if(fmpos.left-fw/2<0) { if((empos.left*2-fmpos.left)+fw/2<=cw) { if(allowjump)fmpos.left=empos.left*2-fmpos.left; } else if(allowmove) { fmpos.left=fw/2+4; } } else if(fmpos.left+fw/2>cw) { if((empos.left*2-fmpos.left)-fw/2>=0) { if(allowjump)fmpos.left=empos.left*2-fmpos.left; } else if(allowmove) { fmpos.left=cw-fw/2-4; } } //top<-->bottom if(fmpos.top-fh/2<0) { if((empos.top*2-fmpos.top)+fh/2<=ch) { if(allowjump)fmpos.top=empos.top*2-fmpos.top; } else if(allowmove) { fmpos.top=fh/2+4; } } else if(fmpos.top+fh/2>ch) { if((empos.top*2-fmpos.top)-fh/2>=0) { if(allowjump)fmpos.top=empos.top*2-fmpos.top; } else if(allowmove) { fmpos.top=ch-fh/2-4; } } pos.left=fmpos.left-pcpos.left-fw/2; pos.top=fmpos.top-pcpos.top-fh/2; } /****************************************************************\ Prototype \****************************************************************/ function Element_GetText() { var r = this.ownerDocument.createRange(); r.selectNodeContents(this); return r.toString(); } if( typeof(Element)!="undefined" && Element) { if(Element.prototype&&Element.prototype.__defineGetter__) { Element.prototype.__defineGetter__("text",Element_GetText); Element.prototype.__defineGetter__("innerText",Element_GetText); } else { } } var __active_element; function __active_element_focus() { window.__isblur=false; } function __active_element_blur() { window.__isblur=true; } if(document.attachEvent) { document.attachEvent("onactivate",function(){ __active_element=document.activeElement; if(!__active_element)return; __active_element.attachEvent("onfocus",__active_element_focus); __active_element.attachEvent("onblur",__active_element_blur); }); document.attachEvent("ondeactivate",function(){ if(!__active_element)return; __active_element.detachEvent("onfocus",__active_element_focus); __active_element.detachEvent("onblur",__active_element_blur); __active_element=null; }); } else { document.addEventListener("focus",__active_element_focus,true); document.addEventListener("blur",__active_element_blur,true); } function GetWindowIsFocus() { return window.__isblur?false:true; } function FocusWindow() { var e=__active_element; //TODO: FireFox doesn't work? window.focus(); if(e && e.focus ) { try { e.focus(); } catch(x) { } } } var OxOffe8=[" \x0D\x0AinnerError: ","message","innerError","Object \x27","\x27 Is Null.","prototype","return this.ConvertTo(\x27","\x27).",".apply(this,arguments);","MethodName",".","SkipStackTrace","Method","string","Name"," Not Implement Interface Method : ","TypeDefine"," Is Protected","_instproto","this","{","}","typename","Type \x27","\x27 Not Found.","_sl_state","_convert_to_","Type","Class","length","Instance","ThisInterfaces","Can Not Convert \x27","\x27 To \x27","\x27","\x3Cpre\x3E","\x3C/pre\x3E","//****************************************************************","//for class ","thefunc=function _SL_CreateInstance_Core(){","var state={InternalToString:_SL_State_InternalToString,_sl_type:typeDef}","var InstanceConstructor=new Function(\x27\x27,\x27\x27);","Prototype","var PrototypeWrapper=new Function(\x27\x27,\x27\x27);","PrototypeWrapper.prototype=typeDef.Prototype;","var _instproto=InstanceConstructor.prototype=new PrototypeWrapper();","var _instproto=InstanceConstructor.prototype","_instproto.toString=_SL_Call_ToString;","_instproto.GetType=_SL_Object_GetType;","_instproto.ConvertAs=_SL_Object_ConvertAs;","_instproto.ConvertTo=_SL_Object_ConvertTo;","state.Instance=new InstanceConstructor();","_instproto._sl_state=state;","_instproto._sl_instance=state.Instance;","","//Define Interface Instances","state.ThisInterfaces=[];","ClassLevel","Interfaces","var interface","=new InstanceConstructor();//let interface has the default methods","state.ThisInterfaces[","]=interface",";//","BaseType","//Define this and base","Interceptor","//","var this","=new InstanceConstructor();","state[\x27","\x27]=this",";","//Define methods , from child to parent","Methods","var method_","_","=__SL_Script_CreateMethod(",",MethodDefs[","]);","method_","_instproto.","=method_","Public","state.Instance.","=StaticItems[","];//not public","//Define base methods , from child to parent","Override","BaseMethod",".base_","//Override interface methods","!","InterfaceMap","interface","=__SL_Script_CreateInterfaceImplement(",",InterfaceMap[","=__SL_Script_CreateInterfaceDefault(interface",",Interfaces[","].Methods[","])","];//NotImplement","//_SL_CreateInterfaces_Core"," ","\x0D\x0A","//Call constructors","Constructor",".base_constructor=__SL_Script_CreateConstructor(",",Constructors[","this1.base_constructor=_SL_ObjectConstructor;","return [state,","] ]","//end class ","base_constructor","className","ConstructFunction","\x27 Is Not Class.","IsAbstract","\x27 Is Abstract.","obj","baseType","Interface","name","descriptor","Object"," \x27","\x27 Is Not Class","SimpleType \x27","\x27 Already Exists","\x27 Already Exists.","Descriptor","descriptor not saved","method","Class \x27","\x27 Already Have Constructor","interceptor","reflector","Reflector","modifier"," Already Contains Method \x27","Abstract","Virtual","Protected","Can Not Define \x27public\x27 after \x27protected\x27","public","Can Not Define \x27protected\x27 after \x27public\x27","protected","Can Not Define \x27virtual\x27 after \x27abstract\x27","Can Not Define \x27virtual\x27 after \x27override\x27","virtual","Can Not Define \x27override\x27 after \x27virtual\x27","abstract","Can Not Define \x27override\x27 after \x27abstract\x27","override","Unknown Modifier \x27","Access","Method \x27","\x27 Must Define As \x27public\x27 Or \x27protected\x27"," Already Contains Virtual Method \x27","\x27 Must Have Same Access With Base Method Definition (\x27","\x27)","VirtualIndex","Base Type Have Not Contains Overridable Method \x27","getMethod","Get","Set","Properties","\x27 Is Not Interface.","Implement \x27","\x27 Beore Implement \x27","ClassName","interfaceName","methodName","InterfaceMap \x27","\x27.\x27","\x27 Already Defined","Interface Should Not Have Base Types , Implement Them Instead","undefined","ScriptExecutor Is Not Defined","ScriptResolver Is Not Defined","Library \x27","\x27 Already Loaded","_sl_instance","ctor","\x27 Not Found","core","IEventSource","AttachEvent","DetachEvent","GetEventHandlers","FireEvent","_IEventSource_maps","constructor","IAttributeParser","ParseAttribute","IChildrenParser","AppendChild","IXmlDataParser","ParseXmlData","ISupportInit","BeginInit","EndInit","IXmlClass","boolean","true","yes","on","1","-1","^","Error parsing expression:","~","$","TEXT_","Microsoft.XMLHTTP","GET","onreadystatechange","readyState","status",":","statusText","responseXML","parseError","errorCode","responseText","documentElement","Unknown Error","childNodes","nodeType","*","tagName","item","text","textContent","nodeValue","xml","Fragment","public virtual","Parent","_parent","_enable","rootOrDom","object","parent","Execute","Property","Arguments","_On","OnEvent","On","/","parentNode","Invalid Element:","Scripts","Error parsing code : ","TypeName","XmlData","String","Value","Number","Unknown Literal Type:","Literal","_class","_property","null","No Parent Object For _property:","Invalid _property:","attributes","nodeName","REM_","_global","No Parent Object For _member:","_member","Invalid Attribute:","AttrNames","AttrValues","Code","Modifiers","Constructor Already Defined","GetCode","SetCode","_DynamicConstructor","Text","this.base_constructor","this.base_constructor.apply(this,arguments);\x0D\x0A","_Constructor_Code","_Get","value","_Set","Error parsing code for ","GetCaller","caller","(","anonymous function"," ... (recursive)","function"," .., (recursive)","\x0A","\x26#39;","quot;","\x26gt;","\x26lt;","\x26amp;","write","\x3Chtml\x3E\x3Ctitle\x3ECLASSES\x3C/title\x3E\x3Cbody\x3E","\x3Cspan style=\x27color:red;font-weight:bold\x27 onclick=\x27var s=div_class_",".style;s.display=s.display?\x22\x22:\x22none\x22;\x27\x3E","\x3C/span\x3E"," - ","\x3Cdiv id=div_class_"," style=\x27display:none\x27\x3E","Interfaces:","\x3Cbr/\x3E"," ","Properties:","Methods:","\x3Cspan style=\x27color:#666666;font-weight:bold\x27 title=\x22","\x22 onclick=\x27alert(this.title)\x27\x3E","public ","protected ","abstract ","virtual ","override ","\x3C/div\x3E","\x3Chr\x3E","\x3C/body\x3E\x3C/html\x3E","document","about:blank"];var _SL_Debug=false;var _SL_Debug_PreEmit=false;var _SL_Debug_InstanceCount_=0;var _SL_Debug_MethodInvoke_=0;var _SL_SaveDescriptor=true;var _SL_Debug_EmitScriptTime_=0;var _SL_Debug_AllocationTime_=0;var _SL_Debug_ConstructTime_=0;var _SL_Debug_AllPublic=false;var _SL_Debug_WriteScript=false;function _SL_Debug_Write(Oxc){document.write(Oxc);} ;if(!_SL_Debug){_SL_Debug_AllPublic=false;_SL_Debug_WriteScript=false;} ;var _SL_GlobalObject=this;var __SL_Variables={};function _SL_Eval(Ox10){return eval(Ox10);} ;function _SL_SetVariable(Ox12,Ox13){__SL_Variables[Ox12]=Ox13;} ;function _SL_GetVariable(Ox12){return __SL_Variables[Ox12];} ;function _SL_ExpandVariables(Ox16){return Ox16.replace(/\%(.+)\%/g,_SL_ExpandVariables_Replace);} ;function _SL_ExpandVariables_Replace(Ox18,Ox19,Ox1a){return __SL_Variables[Ox19]||Ox18;} ;function _SL_CreateException(Ox1c,Ox1d){if(Ox1d){Ox1c+=OxOffe8[0]+Ox1d[OxOffe8[1]];} ;var Ox1e= new Error(Ox1c);Ox1e[OxOffe8[2]]=Ox1d;return Ox1e;} ;function _SL_CheckNullException(Ox20,Ox12){if(Ox20==null){throw (_SL_CreateException(OxOffe8[3]+Ox12+OxOffe8[4]));} ;} ;function _SL_ApplyConstructor(ctor,Ox23){function Ox24(){} ;Ox24[OxOffe8[5]]=ctor[OxOffe8[5]];var obj= new Ox24();return ctor.apply(obj,Ox23||[])||obj;} ;var _SL_SimpleTypes={};var _SL_Types={};var _SL_Libs={};function _SL_CreateInterfaceMethodWrapper(Ox2a,Ox2b){var func= new Function(OxOffe8[6]+Ox2a+OxOffe8[7]+Ox2b+OxOffe8[8]);func[OxOffe8[9]]=Ox2a+OxOffe8[10]+Ox2b;return func;} ;function __SL_Script_CreateConstructor(Ox2e,Ox2f){Ox30[OxOffe8[11]]=true;return Ox30;function Ox30(){var Ox31=Ox2f;_SL_Debug_MethodInvoke_++;return Ox31.apply(Ox2e,arguments);} ;} ;var showed=false;function __SL_Script_CreateMethod(Ox2e,methodDef){Ox35[OxOffe8[11]]=true;return Ox35;function Ox35(){var Ox31=methodDef[OxOffe8[12]];_SL_Debug_MethodInvoke_++;return Ox31.apply(Ox2e,arguments);} ;} ;function __SL_Script_CreateInterfaceDefault(Ox37,methodDef){Ox38[OxOffe8[11]]=true;return Ox38;function Ox38(){var Ox31=methodDef[OxOffe8[12]];if( typeof (Ox31)==OxOffe8[13]){Ox31=_SL_Eval(Ox31);} ;_SL_Debug_MethodInvoke_++;return Ox31.apply(Ox37,arguments);} ;} ;function __SL_Script_CreateInterfaceImplement(Ox2e,Ox2f){Ox3a[OxOffe8[11]]=true;return Ox3a;function Ox3a(){var Ox31=Ox2f;if( typeof (Ox31)==OxOffe8[13]){Ox31=_SL_Eval(Ox31);} ;_SL_Debug_MethodInvoke_++;return Ox31.apply(Ox2e,arguments);} ;} ;function __SL_Script_CreateNotImplementMethod(intfdef,Ox3d){Ox3e[OxOffe8[11]]=true;return Ox3e;function Ox3e(){throw (_SL_CreateException(typeDef[OxOffe8[14]]+OxOffe8[15]+intfdef[OxOffe8[14]]+OxOffe8[10]+Ox3d));} ;} ;function __SL_Script_CreateNonPublicErrorMethod(methodDef){Ox40[OxOffe8[11]]=true;return Ox40;function Ox40(){throw (_SL_CreateException(methodDef[OxOffe8[16]][OxOffe8[14]]+OxOffe8[10]+methodDef[OxOffe8[14]]+OxOffe8[17]));} ;} ;function __SL_Script_GetThisName(level){if(level==0){return OxOffe8[18];} ;return OxOffe8[19]+level;} ;function _SL_CreateInstance_ConstructFunction(typeDef){var StaticItems=[];var Classes=[];var Interfaces=[];var InterfaceMap=[];var MethodDefs=[];var Constructors=[];var Interceptors=null;function _SL_Call_ToString(){return OxOffe8[20]+typeDef[OxOffe8[14]]+OxOffe8[21];} ;function _SL_State_InternalToString(){return OxOffe8[20]+typeDef[OxOffe8[14]]+OxOffe8[21];} ;function _SL_Object_GetType(){return typeDef;} ;function _SL_Object_ConvertAs(typename){_SL_CheckNullException(typename,OxOffe8[22]);var def=_SL_Types[typename];if(def==null){throw (_SL_CreateException(OxOffe8[23]+typename+OxOffe8[24]));} ;var state=this[OxOffe8[25]];var obj=state[OxOffe8[26]+typename];if(obj){if(obj==0){return null;} ;return obj;} ;if(def[OxOffe8[27]]==OxOffe8[28]){for(var level=0;level=0;level--){var thisdef=Classes[level];script1[script1[OxOffe8[29]]]=OxOffe8[67]+Classes[level][OxOffe8[14]];for(var i=0;i=0;level--){var thisdef=Classes[level];for(var i=0;i=0;level--){var thisdef=Classes[level];var func=thisdef[OxOffe8[93]][intfdef[OxOffe8[14]]+OxOffe8[92]+intfmethod];if(func!=null){script2[script2[OxOffe8[29]]]=OxOffe8[94]+n+OxOffe8[10]+intfmethod+OxOffe8[95]+__SL_Script_GetThisName(level)+OxOffe8[96]+InterfaceMap[OxOffe8[29]]+OxOffe8[79];InterfaceMap[InterfaceMap[OxOffe8[29]]]=func;hasimpl=true;break ;} ;} ;if(!hasimpl){if(methodDef[OxOffe8[12]]){script2[script2[OxOffe8[29]]]=OxOffe8[94]+n+OxOffe8[10]+intfmethod+OxOffe8[97]+n+OxOffe8[98]+n+OxOffe8[99]+m+OxOffe8[100];} else {script2[script2[OxOffe8[29]]]=OxOffe8[94]+n+OxOffe8[10]+intfmethod+OxOffe8[85]+StaticItems[OxOffe8[29]]+OxOffe8[101];StaticItems[StaticItems[OxOffe8[29]]]=__SL_Script_CreateNotImplementMethod(intfdef,intfmethod);} ;} ;} ;} ;script1[script1[OxOffe8[29]]]=OxOffe8[54];script1[script1[OxOffe8[29]]]=OxOffe8[102];script1[script1[OxOffe8[29]]]=OxOffe8[54];script1[script1[OxOffe8[29]]]=OxOffe8[103]+script2.join(OxOffe8[104]);} ;script1[script1[OxOffe8[29]]]=OxOffe8[54];script1[script1[OxOffe8[29]]]=OxOffe8[105];script1[script1[OxOffe8[29]]]=OxOffe8[54];for(var level=Classes[OxOffe8[29]]-1;level>=0;level--){var ctor=Classes[level][OxOffe8[106]];if(ctor!=null){Constructors[level]=ctor;} else {Constructors[level]=_SL_DefaultConstructor;} ;if(level>1){script1[script1[OxOffe8[29]]]=__SL_Script_GetThisName(level)+OxOffe8[107]+__SL_Script_GetThisName(level-1)+OxOffe8[108]+(level-1)+OxOffe8[79];} ;} ;if(Classes[OxOffe8[29]]>1){script1[script1[OxOffe8[29]]]=OxOffe8[109];} ;script1[script1[OxOffe8[29]]]=OxOffe8[110]+__SL_Script_GetThisName(Classes[Classes[OxOffe8[29]]-1].ClassLevel)+OxOffe8[108]+(Classes[OxOffe8[29]]-1)+OxOffe8[111];script1[script1[OxOffe8[29]]]=OxOffe8[21];script1[script1[OxOffe8[29]]]=OxOffe8[112]+typeDef[OxOffe8[14]];script1[script1[OxOffe8[29]]]=OxOffe8[37];return script1.join(OxOffe8[104]);} ;} ;function _SL_ObjectConstructor(){} ;function _SL_DefaultConstructor(){if(this[OxOffe8[113]]){this[OxOffe8[113]].apply(this,arguments);} ;} ;function _SL_CreateInstance(Ox46,Ox23){_SL_CheckNullException(Ox46,OxOffe8[114]);var typeDef=_SL_Types[Ox46];if(typeDef==null){throw (_SL_CreateException(OxOffe8[23]+Ox46+OxOffe8[24]));} ;var Ox48,Ox49;if(!typeDef[OxOffe8[115]]){if(typeDef[OxOffe8[27]]!=OxOffe8[28]){throw (_SL_CreateException(OxOffe8[23]+Ox46+OxOffe8[116]));} ;if(typeDef[OxOffe8[117]]){throw (_SL_CreateException(OxOffe8[23]+Ox46+OxOffe8[118]));} ;if(_SL_Debug){Ox48= new Date().getTime();} ;typeDef[OxOffe8[115]]=_SL_CreateInstance_ConstructFunction(typeDef);typeDef[OxOffe8[115]][OxOffe8[11]]=true;if(_SL_Debug){_SL_Debug_EmitScriptTime_+=( new Date().getTime())-Ox48;} ;} ;_SL_Debug_InstanceCount_++;if(_SL_Debug){Ox48= new Date().getTime();} ;var Ox4a=typeDef.ConstructFunction();if(_SL_Debug){time2= new Date().getTime();_SL_Debug_AllocationTime_+=time2-Ox48;Ox48=time2;} ;var ctor=__SL_Script_CreateConstructor(Ox4a[1],Ox4a[2]);ctor[OxOffe8[11]]=true;ctor.apply(window,Ox23||[]);if(_SL_Debug){_SL_Debug_ConstructTime_+=( new Date().getTime()-Ox48);} ;return Ox4a[0][OxOffe8[30]];} ;function _SL_GetClassName(obj){_SL_CheckNullException(obj,OxOffe8[119]);return obj.GetType()[OxOffe8[14]];} ;function _SL_GetClassNames(Ox46){_SL_CheckNullException(Ox46,OxOffe8[114]);var typeDef=_SL_Types[Ox46];if(typeDef==null){throw (_SL_CreateException(OxOffe8[23]+Ox46+OxOffe8[24]));} ;var Ox4d=[];while(typeDef!=null){Ox4d[Ox4d[OxOffe8[29]]]=typeDef[OxOffe8[14]];typeDef=typeDef[OxOffe8[64]];} ;return Ox4d;} ;function _SL_IsClassInherits(Ox46,Ox4f){_SL_CheckNullException(Ox46,OxOffe8[114]);_SL_CheckNullException(Ox4f,OxOffe8[120]);var typeDef=_SL_Types[Ox46];if(typeDef==null){throw (_SL_CreateException(OxOffe8[23]+Ox46+OxOffe8[24]));} ;var Ox50=_SL_Types[Ox4f];if(Ox50==null){throw (_SL_CreateException(OxOffe8[23]+Ox4f+OxOffe8[24]));} ;if(Ox46==Ox4f){return false;} ;if(typeDef[OxOffe8[27]]==OxOffe8[28]){if(Ox50[OxOffe8[27]]==OxOffe8[121]){return !!typeDef.FindInterface(Ox4f);} ;if(Ox50[OxOffe8[27]]==OxOffe8[28]){for(var Ox51=typeDef[OxOffe8[64]];Ox51!=null;Ox51=Ox51[OxOffe8[64]]){if(Ox51[OxOffe8[14]]==Ox4f){return true;} ;} ;} ;} ;if(typeDef[OxOffe8[27]]==OxOffe8[121]){if(Ox50[OxOffe8[27]]==OxOffe8[28]){return false;} ;if(Ox50[OxOffe8[27]]==OxOffe8[121]){return !!typeDef.FindInterface(Ox4f);} ;} ;return false;} ;function _SL_Class(Ox12,Ox53,Ox54){_SL_CheckNullException(Ox12,OxOffe8[122]);_SL_CheckNullException(Ox53,OxOffe8[123]);if(Ox54==null&&Ox12!=OxOffe8[124]){Ox54=OxOffe8[124];} ;var Ox50;if(Ox54!=null){Ox50=_SL_Types[Ox54];if(Ox50==null){throw (_SL_CreateException(OxOffe8[23]+Ox54+OxOffe8[24]));} ;if(Ox50[OxOffe8[27]]!=OxOffe8[28]){throw (_SL_CreateException(Ox50[OxOffe8[27]]+OxOffe8[125]+Ox50[OxOffe8[14]]+OxOffe8[126]));} ;} ;if(_SL_SimpleTypes[Ox12]){throw (_SL_CreateException(OxOffe8[127]+Ox12+OxOffe8[128]));} ;var typeDef=_SL_Types[Ox12];if(typeDef){throw (_SL_CreateException(typeDef[OxOffe8[27]]+OxOffe8[125]+Ox12+OxOffe8[129]));} ;var typeDef={Name:Ox12,Type:OxOffe8[28],ClassLevel:Ox50==null?0:Ox50[OxOffe8[57]]+1,BaseType:Ox50,Prototype:(Ox50?Ox50[OxOffe8[42]]:null),Methods:[],Properties:[],Interfaces:[],InterfaceMap:{},FindMethod:function Ox55(Ox12){_SL_CheckNullException(Ox12,OxOffe8[122]);for(var i=0;i200){break ;} ;var Oxfc=Oxfb[OxOffe8[9]];if(!Oxfc){Oxfc=Oxfb+OxOffe8[54];Oxfc=Oxfc.substr(9,Oxfc.indexOf(OxOffe8[292])-9);} ;if(Oxfb[OxOffe8[170]]){Oxfc=Oxfb[OxOffe8[170]]+OxOffe8[10]+Oxfc;} ;if(Oxfc==OxOffe8[54]){Oxfc=OxOffe8[293];} ;var Oxfd=Oxf7[Oxfc];if(!Oxfd){Oxf7[Oxfc]=Oxfb;} else {if(Oxfb==Oxfd){Oxba+=Oxfc+OxOffe8[294];break ;} else {if( typeof (Oxfd)==OxOffe8[295]){Oxf7[Oxfc]=[Oxfd,Oxfb];} else {var Oxfe=false;for(var i=0;i/g,OxOffe8[300]).replace(/\x22/g,OxOffe8[299]).replace(/\x27/g,OxOffe8[298]);} ;var Ox4d=[];var Ox101=Ox4d;Ox101[OxOffe8[303]]=function (Oxba){for(var i=0;i/g,OxOe27c[65]).replace(/\x22/g,OxOe27c[64]).replace(/\x27/g,OxOe27c[63]).replace(/\n/g,OxOe27c[62]).replace(/\r/g,OxOe27c[52]);if(!Html_Encode_Temp_Div){Html_Encode_Temp_Div=window[OxOe27c[43]].createElement(OxOe27c[68]);} ;if(Html_IsGecko){Html_Encode_Temp_Div[OxOe27c[69]]=OxOe27c[52];Html_Encode_Temp_Div.appendChild(window[OxOe27c[43]].createTextNode(Oxc));} else {Html_Encode_Temp_Div[OxOe27c[70]]=Oxc;} ;return Html_Encode_Temp_Div[OxOe27c[69]].replace(/\n/g,OxOe27c[62]);} ;function Html_GetDocumentScroll(){var Ox51=window[OxOe27c[43]][OxOe27c[72]][OxOe27c[71]];var Ox131=window[OxOe27c[43]][OxOe27c[72]][OxOe27c[73]];if(Html_UseDocumentElement()){Ox51=window[OxOe27c[43]][OxOe27c[74]][OxOe27c[71]];Ox131=window[OxOe27c[43]][OxOe27c[74]][OxOe27c[73]];} ;return {top:Ox51,left:Ox131};} ;function Html_GetDocumentSize(){var Ox133=window[OxOe27c[43]][OxOe27c[72]][OxOe27c[75]];var Ox134=window[OxOe27c[43]][OxOe27c[72]][OxOe27c[76]];if(Html_UseDocumentElement()){Ox133=window[OxOe27c[43]][OxOe27c[74]][OxOe27c[75]];Ox134=window[OxOe27c[43]][OxOe27c[74]][OxOe27c[76]];} ;if(Ox134<200){if(Html_IsGecko){var Ox135=document.createElement(OxOe27c[68]);if(Html_IsGecko){Ox135[OxOe27c[48]][OxOe27c[77]]=OxOe27c[78];Ox135[OxOe27c[48]][OxOe27c[79]]=OxOe27c[80];Ox135[OxOe27c[48]][OxOe27c[81]]=OxOe27c[80];Ox135[OxOe27c[48]][OxOe27c[82]]=OxOe27c[83];Ox135[OxOe27c[48]][OxOe27c[84]]=OxOe27c[83];Ox135[OxOe27c[48]][OxOe27c[85]]=OxOe27c[86];Ox135[OxOe27c[48]][OxOe27c[87]]=OxOe27c[86];} else {Ox135[OxOe27c[48]][OxOe27c[47]]=OxOe27c[88];} ;document[OxOe27c[72]].appendChild(Ox135);Ox133=Ox135[OxOe27c[89]];Ox134=Ox135[OxOe27c[90]];document[OxOe27c[72]].removeChild(Ox135);} ;} ;return {width:Ox133,height:Ox134};} ;function Html_Contains(Ox102,Ox1a){if(Ox1a==null){return false;} ;if(Ox102==Ox1a){return true;} ;for(;Ox1a;Ox1a=Ox1a[OxOe27c[91]]){if(Ox102==Ox1a){return true;} ;} ;return false;} ;function Html_SelectElements(Ox138,Ox139){Ox139=Ox139||OxOe27c[92];var Ox4d=[];var Ox13a=Ox138[OxOe27c[93]];var Ox13b=Ox13a[OxOe27c[50]];if(Ox139==OxOe27c[92]){for(var i=0;i=Ox97[OxOe27c[50]]-1){if(Ox97[OxOe27c[50]]-1==i){return ;} ;Ox97.splice(i,1);Ox97[Ox97[OxOe27c[50]]]=Ox14a;this.GetContentElement().appendChild(Ox14a[OxOe27c[118]]._element);} else {if(Ox209==i){return ;} ;var Ox20e=Ox97[Ox209];Ox97.splice(i,1);Ox97.splice(Ox209,0,Ox14a);this.GetContentElement().insertBefore(Ox14a[OxOe27c[118]]._element,Ox97[Ox209+1][OxOe27c[118]]._element);} ;this.InternalPerformLayout(null);return ;} ;} ;} ;function HtmlComplexControl_SuspendLayout(){if(this[OxOe27c[357]]>0){this[OxOe27c[357]]++;} else {this[OxOe27c[357]]=1;} ;} ;function HtmlComplexControl_ResumeLayout(Ox211,Ox212){if(!this[OxOe27c[357]]){if(Html_Debug){alert(OxOe27c[358]+GetStackTrace());} ;return ;} ;this[OxOe27c[357]]--;this.PerformLayout(Ox211,Ox212);} ;function HtmlComplexControl_PerformLayout(Ox211,Ox212){if(!this[OxOe27c[357]]){var Ox214=(this[OxOe27c[359]]||Ox211);if(Ox214){this.InternalPerformLayout(null,true);} ;if(this[OxOe27c[118]][OxOe27c[352]]&&!Ox212){for(var i=0;i0;} ;function HtmlComplexControl_InternalPerformLayout(Ox13e,Ox217){if(this[OxOe27c[118]][OxOe27c[241]]==null){return ;} ;if(this[OxOe27c[357]]){this[OxOe27c[359]]=(this[OxOe27c[359]]||0)+1;return ;} ;for(var Ox102=this[OxOe27c[118]][OxOe27c[145]];Ox102;Ox102=Ox102[OxOe27c[118]][OxOe27c[145]]){if(Ox102.IsSuspendLayout()){this[OxOe27c[359]]=(this[OxOe27c[359]]||0)+1;return ;} ;} ;this.InternalDoPerformLayout(Ox13e,Ox217);} ;function HtmlComplexControl_InternalDoPerformLayout(Ox13e,Ox217){this[OxOe27c[359]]=0;if(this[OxOe27c[118]][OxOe27c[352]]==null){return ;} ;var Ox1f3=this.GetContentElement();var Ox131=0,Ox51=0,Ox219=Ox1f3[OxOe27c[89]],Ox21a=Ox1f3[OxOe27c[90]];var Ox204=this[OxOe27c[118]][OxOe27c[353]]||Html__ZeroPaddings;Ox131+=Ox204[OxOe27c[85]];Ox51+=Ox204[OxOe27c[87]];Ox219-=Ox204[OxOe27c[85]]+Ox204[OxOe27c[252]];Ox21a-=Ox204[OxOe27c[87]]+Ox204[OxOe27c[254]];var Ox21b;var Ox21c;var Ox21d=null;for(var i=0;iOx219){this[OxOe27c[118]][OxOe27c[117]][OxOe27c[48]][OxOe27c[82]]=Ox219*2-this[OxOe27c[118]][OxOe27c[117]][OxOe27c[89]]+OxOe27c[244];} ;var Ox21a=this.GetCurrentHeight();if(this[OxOe27c[118]][OxOe27c[117]][OxOe27c[90]]>Ox21a){this[OxOe27c[118]][OxOe27c[117]][OxOe27c[48]][OxOe27c[84]]=Ox21a*2-this[OxOe27c[118]][OxOe27c[117]][OxOe27c[90]]+OxOe27c[244];} ;} ;} ;function HtmlComplexControl_Activate(Ox1c7){if(Ox1c7){this.base_Activate(Ox1c7);} else {if(this[OxOe27c[118]][OxOe27c[356]]){this[OxOe27c[118]][OxOe27c[356]].Activate(false);} ;} ;} ;function HtmlComplexControl_GetActiveControl(){return this[OxOe27c[118]][OxOe27c[356]];} ;function HtmlComplexControl_InternalSetActiveControl(Ox14a){this[OxOe27c[118]][OxOe27c[356]]=Ox14a;var Ox102=this[OxOe27c[118]][OxOe27c[145]];if(Ox102){Ox102.InternalSetActiveControl(PublicInstance(this));} ;} ;function HtmlComplexControl_InternalAttachDesktop(){this.base_InternalAttachDesktop();var Ox97=this[OxOe27c[118]][OxOe27c[352]];if(Ox97==null){return ;} ;for(var i=0;i" document.body.appendChild(frame); framebody=frame.firstChild; } else { frame=document.createElement("IFRAME"); frame.frameBorder=0; document.body.appendChild(frame); if(location.href.substr(0,6)=="https:") { frame.src="blank.html"; } else { frame.src="about:blank"; } //TODO:IE5 don't support contentWindow.. var framewin=frame.contentWindow; if(framewin==null) { framedoc=frame.contentDocument; } else { framedoc=framewin.document; } framedoc.open(); framedoc.write(""); framedoc.close(); framebody=framedoc.body; } Html_SetCssText(frame,"visibility:hidden;position:absolute;background-color:white;padding:0px;border:0px;width:"+(const_menuwidth+40)+"px;height:90px;overflow:visible;"); frame.style.zIndex=menuitem.zIndex; var table=framedoc.createElement("TABLE"); table.border=0; table.cellSpacing=0; table.cellPadding=0; Html_SetCssText(table,"cursor:default;width:100%;overflow:visible;"); for(var i=0;i"; tablehtml+=""+childitem.hotkey+""; } else { tablehtml+=""+childitem.html+""; } if(true) { tablehtml+=" 4 "; else tablehtml+=";font-family:arial;font-size:14px;'> > "; } else { if(childitem.items.length==0&&childitem.oninitialize!=null) { tablehtml+=" 4 "; else tablehtml+=";font-family:arial;font-size:14px;'> > "; } } tablehtml+=""; var itemdiv=framedoc.createElement("DIV"); childitem.itemdiv=itemdiv; Html_SetCssText(itemdiv,"cursor:default;margin:1px;width:100%;overflow:visible;"+(childitem.enable?"":"filter:alpha(opacity=40);")); if(!childitem.enable)itemdiv.style.MozOpacity=0.4; itemdiv.innerHTML=tablehtml; if(Html_IsGecko || Html_IsOpera) { itemdiv.onmousedown=new Function("event","event.cancelBubble=true;"); } if(childitem.enable) { itemdiv.onmouseover=Create_MenuItemDiv_OnMouseOver(childitem); itemdiv.onmouseout=Create_MenuItemDiv_OnMouseOut(childitem); itemdiv.onclick=Create_MenuItemDiv_OnClick(childitem); if(childitem.onclick) { itemdiv.style.cursor='hand'; } } else { //itemdiv.disabled=!childitem.enable; } cell.appendChild(itemdiv); } framebody.appendChild(table); frame.style.width=table.offsetWidth+16+"px"; frame.style.height=table.offsetHeight+6+"px"; return frame; } function MenuClass() { var frame=null; var menu=this; menu.menu=menu; menu.items=[]; menu.zIndex=7777777; menu.closed=true; function OnWindowBlur() { setTimeout(CloseIt,250); function CloseIt() { if(menu.Close) menu.Close(); } } function OnDocumentClick() { if(menu.Close) menu.Close(); } function OnWindowUnload() { if(menu.Close) menu.Close(); } menu.Show=function menu_Show(target,offsetX,offsetY) { if(_menuclass_currentmenu) _menuclass_currentmenu.Close(); menu.Close(); window.focus(); if(menu.frame==null) { menu.frame=MenuClass_CreateFrame(menu); } Menu_ShowFrame(menu.frame,target,offsetX,offsetY); _menuclass_currentmenu=menu; //Html_AttachEvent(window,"blur",OnWindowBlur); Html_AttachEvent(document,"mousedown",OnDocumentClick); Html_AttachEvent(window,"beforeunload",OnWindowUnload); menu.opened=true; } menu.Close=function() { if(!menu.opened)return; menu.opened=false; //Html_DetachEvent(window,"blur",OnWindowBlur); Html_DetachEvent(document,"mousedown",OnDocumentClick); Html_DetachEvent(window,"beforeunload",OnWindowUnload); if(_menuclass_currentmenu==menu) _menuclass_currentmenu=null; if(menu.frame==null) return; menu.frame.style.display='none'; if(menu.openitem) menu.openitem.Close(); //Dispose on close.. Dispose(); } menu.HideByClick=function() { if(menu.frame) { menu.frame.style.display='none'; } if(menu.openitem) menu.openitem.Close(); } menu.Dispose=function() { menu.Close(); Dispose(); } function Dispose() { if(menu.isdisposed)return; menu.isdisposed=true; for(var i=0;i0?true:false; childmenu.html=html; childmenu.imgurl=imgurl==null?null:(imgurl.indexOf('.')==-1?(menuimagebase+imgurl+".gif"):imgurl); childmenu.onclick=onclick; childmenu.oninitialize=oninitialize; menu.items[menu.items.length]=childmenu; return childmenu; } function ChildMenuClass() { var menuitem=this; menuitem.items=[]; menuitem.AddSpliter=function() { if(menuitem.items.length==0||menuitem.items[menuitem.items.length-1].html!='-') return menuitem.AddMenuItem(1,"-"); return menuitem.items[menuitem.items.length-1]; } menuitem.AddMenuItem= menuitem.Add=function(state,html,imgurl,onclick,oninitialize) { var childmenu=new ChildMenuClass(); childmenu.zIndex=menuitem.zIndex+1; childmenu.menu=menu; childmenu.owner=menuitem; childmenu.enable=state>0?true:false; childmenu.html=html; childmenu.imgurl=imgurl==null?null:(imgurl.indexOf('.')==-1?(menuimagebase+imgurl+".gif"):imgurl); childmenu.onclick=onclick; childmenu.oninitialize=oninitialize; menuitem.items[menuitem.items.length]=childmenu; return childmenu; } menuitem.Show=function(target,offsetX,offsetY) { if(menuitem.isopen)return; if(menuitem.frame==null) { menuitem.frame=MenuClass_CreateFrame(menuitem); } Menu_ShowFrame(menuitem.frame,target,offsetX,offsetY); menuitem.owner.openitem=menuitem; menuitem.isopen=true; } menuitem.Close=function() { if(!menuitem.isopen)return; if(menuitem.openitem) menuitem.openitem.Close(); MenuItemDiv_OnMouseOut(menuitem.itemdiv); menuitem.frame.style.display='none'; menuitem.frame.style.top='0px' menuitem.frame.style.left='0px' menuitem.owner.openitem=null; menuitem.isopen=false; } menuitem.Dispose=function() { if(menuitem.isdisposed)return; menuitem.isdisposed=true; for(var i=0;i 18) throw (_SL_CreateException(TEXT("UI_CONNECTION_LongNickName"))); for (var i = 0; i < name.length; i++) { var c = name.charCodeAt(i); if (c > 256) continue; if (c >= 48 && c <= 57) continue; if (c >= 65 && c <= 90) continue; if (c >= 97 && c <= 122) continue; throw (_SL_CreateException("unsupport char '" + name.charAt(i) + "'")); } chatclient.guestname = name; } function SetPassword(pwd) { chatclient.password = pwd; } function SetFontName(fontname) { chatclient.fontname = fontname; _InvokeChatEvent("OPTION", ["OPTION", "FONTNAME", fontname]); } function GetFontName() { return chatclient.fontname; } function SetFontSize(fontsize) { chatclient.fontsize = fontsize; _InvokeChatEvent("OPTION", ["OPTION", "FONTSIZE", fontsize]); } function GetFontSize() { return chatclient.fontsize; } function SetFontColor(fontcolor) { chatclient.fontcolor = fontcolor; _InvokeChatEvent("OPTION", ["OPTION", "FONTCOLOR", fontcolor]); } function GetFontColor() { return chatclient.fontcolor; } function SetFontBold(fontbold) { chatclient.fontbold = fontbold; _InvokeChatEvent("OPTION", ["OPTION", "FONTBOLD", fontbold]); } function GetFontBold() { return chatclient.fontbold; } function SetFontItalic(fontitalic) { chatclient.fontitalic = fontitalic; _InvokeChatEvent("OPTION", ["OPTION", "FONTITALIC", fontitalic]); } function GetFontItalic() { return chatclient.fontitalic; } function SetFontUnderline(fontunderline) { chatclient.fontunderline = fontunderline; _InvokeChatEvent("OPTION", ["OPTION", "FONTUNDERLINE", fontunderline]); } function GetFontUnderline() { return chatclient.fontunderline; } function SetWhisper(whisper) { chatclient.whisper = whisper; _InvokeChatEvent("OPTION", ["OPTION", "WHISPER", whisper]); } function GetWhisper() { return chatclient.whisper; } function SetInstantContact(contact) { chatclient.targetContact = contact; } function GetInstantContact() { return chatclient.targetContact; } var chatmessages = []; var chatvars = {}; __ResetChatVars() function __ResetChatVars() { chatvars = {}; chatvars.traces = []; chatvars.errors = []; //chatvars.place=null; //chatvars.myinfo=null; chatvars.itemmap = {}; chatvars.userbyguid = {}; chatvars.userbyname = {} chatvars.userbyid = {}; chatvars.users = []; chatvars.contactbyid = {}; chatvars.contactbyname = {}; chatvars.ignorebyid = {}; chatvars.ignorebyname = {}; chatvars.contacts = []; chatvars.ignores = []; chatvars.tabusers = []; chatvars.cts = []; } function GetTraces() { return chatvars.traces; } function GetErrors() { return chatvars.errors; } function _Trace(message) { chatvars.traces[chatvars.traces.length] = message; _InvokeChatEvent("TRACE", ["TRACE", message]); } function _Error(error) { chatvars.errors[chatvars.errors.length] = error; _InvokeChatEvent("ERROR", ["ERROR", error]); } function _General_Return(res) { } function _General_Error(err) { _Error(err); } function SetItemInfo(guid, name, value) { if (chatvars.tempiteminfomap == null) chatvars.tempiteminfomap = {}; var userinfo = chatvars.tempiteminfomap[guid]; if (userinfo == null) { userinfo = {}; chatvars.tempiteminfomap[guid] = userinfo; } userinfo[name] = value; } function GetItemInfo(guid, name) { if (chatvars.tempiteminfomap == null) return; var userinfo = chatvars.tempiteminfomap[guid]; if (userinfo == null) return; return userinfo[name]; } function IsConnected() { return chatvars.connected; } function IsConnecting() { return chatvars.connecting || chatvars.connectinqueue; } function Connect(placename) { if (chatvars.connecting) return; if (chatvars.connected) return; if (!chatvars.connectinqueue) { if (placename) { chatclient.placename = placename; } __ResetChatVars(); } var cookie = chatvars.cookie = {}; cookie.GuestName = chatclient.guestname; cookie.Password = chatclient.password; chatvars.connecting = true; chatvars.connect_cancelled = false; _Trace("Connecting.."); ChatService_Connect(cookie, chatclient.placename, Connect_Callback, Connect_Error); if (!chatvars.connectinqueue) { _InvokeChatEvent("CONNECTION", ["CONNECTION", "CONNECTING"]); } } function Connect_Callback(res) { if (chatvars.connect_cancelled && res.ReturnCode != "READY") return; chatvars.connecting = false; chatvars.connected = false; if (res.ReturnCode != "INQUEUE") { _Trace("Connect_Callback . " + res.ReturnCode + " , " + res.ServerMessage); } switch (res.ReturnCode) { case "READY": chatvars.cookie = res.Cookie || chatvars.cookie; chatclient.guestname = chatvars.cookie.GuestName; if (chatvars.connect_cancelled) { _Disconnect(); return; } chatvars.connected = true; chatvars.connectedtime = new Date().getTime(); chatvars.connectinqueue = false; _Chat_Start_Sync(); _InvokeChatEvent("CONNECTION", ["CONNECTION", "READY"]); if (IsMessenger()) { PushCTSMessage(JoinToMsg("USER_COMMAND", null, ["LOADHISTORY"])) chatclient.loadedhistories = true; } break; case "INQUEUE"://TODO:not tested.. chatvars.cookie = res.Cookie || chatvars.cookie; chatclient.guestname = chatvars.cookie.GuestName; chatvars.connectTimerid = setTimeout("Connect()", 5000); if (!chatvars.connectinqueue) { chatvars.connectinqueue = true; _InvokeChatEvent("CONNECTION", ["CONNECTION", "INQUEUE"]); } break; case "LIMITED"://there are too many connections.. case "IDEXISTS": case "ERROR": case "NOPLACE": case "KICK": case "REJECTED": case "REMOVED": case "NEEDLOGIN": case "NEEDNAME": case "LOCKED": case "NOTENABLE": case "NEEDPASSWORD": //case "NOCONNECTION"://only when syncing.. chatvars.connectinqueue = false; //_InvokeChatEvent("CONNECTION", ["CONNECTION", res.ReturnCode, res.ServerMessage]);//commented by alok to block the error messages on page break; default: chatvars.connectinqueue = false; _Trace("Unknown connection response code : '" + res.ReturnCode + "'"); _InvokeChatEvent("CONNECTION", ["CONNECTION", "ERROR", "Unknown connection response code : '" + res.ReturnCode + "'"]); break; } } function Connect_Error(err) { chatvars.connecting = false; chatvars.connected = false; chatvars.connectinqueue = false; if (chatvars.connect_cancelled) return; _InvokeChatEvent("CONNECTION", ["CONNECTION", "ERROR", err.message]); _Error(err); } function Disconnect(rightNow) { if (chatvars.connecting) { chatvars.connecting = false; chatvars.connect_cancelled = true; chatvars.connectinqueue = false; _InvokeChatEvent("CONNECTION", ["CONNECTION", "CANCELLED"]); } if (chatvars.connectinqueue) { chatvars.connectinqueue = false; clearTimeout(chatvars.connectTimerid); _InvokeChatEvent("CONNECTION", ["CONNECTION", "CANCELLED"]); return; } if (chatvars.connected) { chatvars.connected = false; _Chat_Stop_Sync(); _Disconnect(rightNow); _InvokeChatEvent("CONNECTION", ["CONNECTION", "DISCONNECT"]); } } function _Disconnect(rightNow) { if (chatvars.cookie == null) return; _Trace("_Disconnect(" + rightNow + ")"); if (rightNow) { try { ChatService_SendRequest(chatvars.cookie, chatclient.placename, "DISCONNECT"); } catch (err) { _Error(err); } } else { ChatService_SendRequest(chatvars.cookie, chatclient.placename, "DISCONNECT", null, null, _Disconnect_Callback, _Disconnect_Error); } } function _Disconnect_Callback() { } function _Disconnect_Error(err) { _Error(err); } function DoSync() { if (chatvars.syncing) { //skip use this flag //chatvars.forcesync=true; return; } else { chatvars.forcesync = false; __CallSync(); } } function __CallSync() { if (!chatvars.sync) return; var resyncforcts = !!chatvars.lastctscount; var sendmsg = chatvars.hasmessagesending; chatvars.hasmessagesending = false; var messages = chatvars.cts; chatvars.lastctscount = messages.length; chatvars.cts = []; var ms1 = new Date().getTime() - (chatvars.typingTime || 0); var ms2 = new Date().getTime() - (chatvars.typingSend || 0); if (ms1 < TYPINGINTERNVAL && ms2 > TYPINGINTERNVAL) { chatvars.typingSend = new Date().getTime() var typingtarget = null; var addtyping = true; if (IsMessenger()) { if (chatvars.typingContact == null) { addtyping = false; } else { typingtarget = chatvars.typingContact.Guid; } } else { if (GetSelectedUser()) { typingtarget = GetSelectedUser().Guid; } } if (addtyping) { _Trace("_CTS:USER_TYPING:" + (typingtarget || "")); messages.push(JoinToMsg("USER_TYPING", null, [typingtarget])); } } var nvc = {}; if (resyncforcts && RequireReSyncForCTS) { nvc["CTSRESYNC"] = "1"; } if (sendmsg) { nvc["HASMESSAGE"] = "1"; } chatvars.syncxh = ChatService_SendRequest(chatvars.cookie, chatclient.placename, "SYNCDATA", messages, nvc, _Sync_Return, _Sync_Error); chatvars.syncing = true; } function _Chat_Start_Sync() { if (chatvars.sync) return; chatvars.sync = true; chatvars.synctimerid = setTimeout(_Chat_Sync_HandleTimeout, Chat_Sync_Timeout); } function _Chat_Stop_Sync() { if (chatvars.sync) { chatvars.sync = false; clearTimeout(chatvars.synctimerid); } } function _Chat_Sync_HandleTimeout() { //sync timeout reset here , just equals interval clearTimeout(chatvars.synctimerid); chatvars.synctimerid = setTimeout(_Chat_Sync_HandleTimeout, Chat_Sync_Timeout); var nowtime = new Date().getTime(); if (chatvars.syncing) { var time = chatvars.lastsynctime || 0; if (nowtime - time < 10000) { return; } else { _Trace("* * * * * * * * re sync for xh timeout."); if (chatvars.syncxh != null) { try { chatvars.syncxh.abort(); } catch (x) { } } } } chatvars.lastsynctime = nowtime; __CallSync(); } function _Sync_Return(res) { chatvars.syncing = false; if (!chatvars.connected) return; //invalid request . if (res.Cookie != null && res.Cookie.ConnectionId != chatvars.cookie.ConnectionId) { return; } _Sync_HandleResponse(res); //if I have send something. if (chatvars.lastctscount && RequireReSyncForCTS) { _Trace("re-sync for CTS Res"); DoSync(); } else if (chatvars.cts.length > 0) { _Trace("re-sync for new CTS"); DoSync(); } else if (chatvars.forcesync) { _Trace("force sync"); DoSync(); //chatvars.forcesync=false; //clearTimeout(chatvars.synctimerid); //chatvars.synctimerid=setTimeout(_Chat_Sync_HandleTimeout,1); _Trace("force sync"); } } function _Sync_HandleResponse(res) { switch (res.ReturnCode) { case "READY": chatvars.cookie = res.Cookie || chatvars.cookie; //TODO:handle items for (var i = 0; i < res.Messages.length; i++) { //try //{ _Sync_HandleSTCMessage(res.Messages[i]); //} //catch(err) //{ // _Error(err); //} } //_Trace("_Sync_ReturnReady:"+chatvars.cookie.ResponseId); break; case "NOCONNECTION": _Trace("_Sync_Return:" + res.ReturnCode + ":" + res.ServerMessage); chatvars.connected = false; _Chat_Stop_Sync(); _InvokeChatEvent("CONNECTION", ["CONNECTION", res.ReturnCode, res.ServerMessage]); break; case "INQUEUE"://only when connecting case "LIMITED"://only when connecting case "IDEXISTS"://only when connecting case "ERROR": case "NOPLACE": case "KICK": case "REJECTED": case "REMOVED": case "NEEDLOGIN": case "NEEDNAME": case "LOCKED": case "NOTENABLE": case "NEEDPASSWORD": _Trace("_Sync_Return:" + res.ReturnCode + ":" + res.ServerMessage); chatvars.connected = false; _Chat_Stop_Sync(); _Disconnect(); _InvokeChatEvent("CONNECTION", ["CONNECTION", res.ReturnCode, res.ServerMessage]); break; default: _Trace("Unknown connection response code : '" + res.ReturnCode + "'"); _InvokeChatEvent("CONNECTION", ["CONNECTION", "ERROR", "Unknown connection response code : '" + res.ReturnCode + "'"]); break; } } function _Sync_Error(err) { chatvars.syncing = false; _Error(err); //TODO:stop if have many error ? or unable to sync for a long time? } function _Sync_HandleSTCMessage(message) { var obj = SplitMsg(message); var msgid = obj.msg; var args = obj.args; var nvc = obj.nvc; //added by alok if (obj != null) { if ((obj.msg == 'ITEM_ADDED') && (obj.args[0] == 'PRIVATEINVITE')) { //if (typeof curusername == 'undefined') { // alert('hi'); //} var chatrequestedby = 'Guest'; var msgArray = message.split(';'); for (var i = 0; i < msgArray.length; i++) { //alert(msgArray[i]); if (msgArray[i].indexOf("User^") != -1) { var sendername = msgArray[i].replace("User^", ""); var sendernameandid = sendername.split("@"); if (sendernameandid[1] != null) chatrequestedby = sendernameandid[1].replace("_", " "); } if (typeof curusername != 'undefined') { if (msgArray[i] == curusername) { var url = '../EnannySourceChannel_Private.aspx?Place=' + obj.args[3] + '&&chatfrom=' + curusername + '&&chatto=' + tocustid + '&&chattoname=' + tocustname; window.open(url, '_blank'); return; } } } //if (confirm(chatrequestedby + " invites you to join a private chat.\n\rIt will open a new window.") == true) { // var chatrequesturl = '../EnannySourceChannel_Private.aspx?Place=' + obj.args[3]; // window.open(chatrequesturl, '_blank'); //} //jConfirm('Can you confirm this?', 'Confirmation Dialog', function (r) { // if (r == true) { // var chatrequesturl = '../EnannySourceChannel_Private.aspx?Place=' + obj.args[3]; // window.open(chatrequesturl, '_blank'); // } //}); if (confirm("An eNannySource.com member has invited you to a private chat.\n\rPlease select 'OK' below to start this chat.\n\rIt will open up into a new window.\n\r(Please turn off any pop-up blockers)") == true) { var chatrequesturl = '../EnannySourceChannel_Private.aspx?Place=' + obj.args[3]; window.open(chatrequesturl, '_blank'); } } } //upto here _Trace("STC:" + message); _InvokeChatEvent("RAWSTCMSG", ["RAWSTCMSG", msgid, args, nvc]); switch (msgid) { case "PLACE_UPDATED": var newplace = {}; newplace.Guid = args[0]; newplace.Name = args[1]; newplace.Title = args[2]; newplace.Location = args[3]; newplace.Locked = args[4] == "1"; newplace.AllowAnonymous = args[5] == "1"; newplace.ModerateMode = args[6] == "1"; var oldplace = chatvars.place; chatvars.place = newplace; _InvokeChatEvent("PLACE", ["PLACE", "UPDATED", newplace, oldplace]); break; case "MYINFO_UPDATED": var newuser = {}; newuser.Guid = args[1]; newuser.UserId = args[2]; newuser.UserName = args[3]; newuser.DisplayName = args[4]; newuser.Description = args[5]; newuser.IsAnonymous = args[6] == "1"; newuser.IsAdmin = newuser.IsModerator = args[7] == "1"; newuser.Moderated = args[8] == "1"; newuser.OnlineStatus = args[9]; newuser.RemoveReason = args[10]; newuser.PublicProperties = PropStrToObj(args[11]) || {} newuser.PrivateProperties = PropStrToObj(args[12]) || {} newuser.IPAddress = args[13];//or ""; newuser.AppearOffline = args[14] == "1"; newuser.Level = args[15]; ConnectAppearOffline = newuser.AppearOffline; newuser.IsOnline = true; var oldinfo = chatvars.myinfo; chatvars.myinfo = newuser; _InvokeChatEvent("MYINFO", ["MYINFO", "UPDATED", newuser, oldinfo]); if (newuser.Moderated) { if (!chatclient.loadedhistories) { PushCTSMessage(JoinToMsg("USER_COMMAND", null, ["LOADHISTORY"])) chatclient.loadedhistories = true; } } break; case "ITEM_ADDED": case "ITEM_UPDATED": case "ITEM_REMOVED": var itemtype = args[0]; var itemguid = args[1]; var newitem = { Type: itemtype, Guid: itemguid, Args: args, Nvc: nvc || {} }; var olditem = chatvars.itemmap[itemguid] chatvars.itemmap[itemguid] = newitem;//save data to itemmap. newitem.Exists = (msgid != "ITEM_REMOVED"); _InvokeChatEvent("ITEM", ["ITEM", msgid.substring(5), newitem, olditem]); if (itemtype == "USER") { var newuser = {}; newuser.Guid = args[1]; newuser.UserId = args[2]; newuser.UserName = args[3]; newuser.DisplayName = args[4]; newuser.Description = args[5]; newuser.IsAnonymous = args[6] == "1"; newuser.IsAdmin = newuser.IsModerator = args[7] == "1"; newuser.Moderated = args[8] == "1"; newuser.OnlineStatus = args[9]; newuser.RemoveReason = args[10]; newuser.PublicProperties = PropStrToObj(args[11]) || {} newuser.PrivateProperties = PropStrToObj(args[12]) || {} newuser.InfoProperties = nvc || {}; newuser.IsAgent = newuser.InfoProperties["IsAgent"] == "1"; newuser.IPAddress = args[13];//or ""; newuser.AppearOffline = args[14] == "1"; newuser.Level = args[15]; newuser.IsOnline = true; if (msgid == "ITEM_REMOVED") { newuser.IsOnline = false; newuser.OnlineStatus = "OFFLINE"; } __UpdateUserTo(newuser, GetContactById(newuser.UserId), true); __UpdateUserTo(newuser, GetIgnoreById(newuser.UserId), true); chatvars.userbyname[newuser.DisplayName.toLowerCase()] = newuser; chatvars.userbyguid[newuser.Guid] = newuser; chatvars.userbyid[newuser.UserId.toLowerCase()] = newuser; for (var i = 0; i < chatvars.users.length; i++) { var user = chatvars.users[i]; if (UserEquals(user, newuser)) { if (msgid == "ITEM_ADDED" || msgid == "ITEM_UPDATED") { chatvars.users[i] = newuser; _InvokeChatEvent("USER", ["USER", "UPDATED", newuser, user]); } else { chatvars.users.splice(i, 1); user.IsOnline = false; _InvokeChatEvent("USER", ["USER", "REMOVED", newuser, user]); } return; } } if (msgid == "ITEM_ADDED" || msgid == "ITEM_UPDATED") { chatvars.users.push(newuser); _InvokeChatEvent("USER", ["USER", "ADDED", newuser]); } }//if(itemtype=="USER") break; case "CONTACT_ADDED": case "CONTACT_UPDATED": case "CONTACT_REMOVED": var newcontact = {}; newcontact.DisplayName = args[0];// or null newcontact.UserId = args[1]; newcontact.UserName = args[2]; newcontact.Description = args[3]; newcontact.PublicProperties = PropStrToObj(args[4]) || {}; newcontact.IsContact = true; __UpdateUserTo(GetUserById(args[1]), newcontact); if (msgid == "CONTACT_REMOVED") { chatvars.contactbyid[newcontact.UserId.toLowerCase()] = null; chatvars.contactbyname[newcontact.DisplayName.toLowerCase()] = null; } else { chatvars.contactbyid[newcontact.UserId.toLowerCase()] = newcontact; chatvars.contactbyname[newcontact.DisplayName.toLowerCase()] = newcontact; } for (var i = 0; i < chatvars.contacts.length; i++) { var contact = chatvars.contacts[i]; if (UserEquals(contact, newcontact)) { if (msgid == "CONTACT_ADDED" || msgid == "CONTACT_UPDATED") { chatvars.contacts[i] = newcontact; _InvokeChatEvent("CONTACT", ["CONTACT", "UPDATED", newcontact, contact]); } else { chatvars.contacts.splice(i, 1); _InvokeChatEvent("CONTACT", ["CONTACT", "REMOVED", newcontact, contact]); } var user = GetUserById(newcontact.UserId); if (user && user.IsOnline) _InvokeChatEvent("USER", ["USER", "UPDATED", user, user]); return; } } if (msgid == "CONTACT_ADDED" || msgid == "CONTACT_UPDATED") { chatvars.contacts.push(newcontact); _InvokeChatEvent("CONTACT", ["CONTACT", "ADDED", newcontact]); var user = GetUserById(newcontact.UserId); if (user && user.IsOnline) _InvokeChatEvent("USER", ["USER", "UPDATED", user, user]); } break; case "IGNORE_ADDED": case "IGNORE_UPDATED": case "IGNORE_REMOVED": var newignore = {}; newignore.DisplayName = args[0];// or null newignore.UserId = args[1]; newignore.Description = args[2]; newignore.PublicProperties = PropStrToObj(args[3]) || {}; newignore.IsIgnore = true; __UpdateUserTo(GetUserById(args[1]), newignore); if (msgid == "IGNORE_REMOVED") { chatvars.ignorebyid[newignore.UserId.toLowerCase()] = null; chatvars.ignorebyname[newignore.DisplayName.toLowerCase()] = null; } else { chatvars.ignorebyid[newignore.UserId.toLowerCase()] = newignore; chatvars.ignorebyname[newignore.DisplayName.toLowerCase()] = newignore; } for (var i = 0; i < chatvars.ignores.length; i++) { var ignore = chatvars.ignores[i]; if (UserEquals(ignore, newignore)) { if (msgid == "IGNORE_ADDED" || msgid == "IGNORE_UPDATED") { chatvars.ignores[i] = newignore; _InvokeChatEvent("IGNORE", ["IGNORE", "UPDATED", newignore, ignore]); } else { chatvars.ignores.splice(i, 1); _InvokeChatEvent("IGNORE", ["IGNORE", "REMOVED", newignore, ignore]); } var user = GetUserById(newignore.UserId); if (user && user.IsOnline) _InvokeChatEvent("USER", ["USER", "UPDATED", user, user]); return; } } if (msgid == "IGNORE_ADDED" || msgid == "IGNORE_UPDATED") { chatvars.ignores.push(newignore); _InvokeChatEvent("IGNORE", ["IGNORE", "ADDED", newignore]); var user = GetUserById(newignore.UserId); if (user && user.IsOnline) _InvokeChatEvent("USER", ["USER", "UPDATED", user, user]); } break; case "USER_RENAME": var guid = args[0]; var newname = args[1]; var oldname = args[2]; var user = GetUserByGuid(guid); _InvokeChatEvent("USER", ["USER", "RENAME", user, newname, oldname]); break; case "USER_TYPING": var guid = args[0]; if (guid == GetMyInfo().Guid) return; var typingTime = new Date().getTime(); SetItemInfo(guid, "TypingTime", typingTime); //IsUserTyping var user = GetUserByGuid(guid); if (user && user.IsOnline) _InvokeChatEvent("USER", ["USER", "UPDATED", user, user]); setTimeout(function () { var user = GetUserByGuid(guid) if (user && GetItemInfo(guid, "TypingTime") == typingTime) { _InvokeChatEvent("USER", ["USER", "UPDATED", user, user]); } }, TYPINGDISPLAYTIME + 1000); break; case "USER_BROADCAST": var user = GetUserById(args[0]); if (user) { if (args[1] == "NOTIFYVIDEOALIVE" || args[1] == "NOTIFYVIDEOSTART") { var oldvn = GetItemInfo(user.Guid, "VideoName"); SetItemInfo(user.Guid, "VideoName", args[2]); SetItemInfo(user.Guid, "VideoTime", new Date().getTime()); if (args[1] == "NOTIFYVIDEOSTART" || oldvn != args[2]) { _InvokeChatEvent("USER", ["USER", "UPDATED", user, user]); } } if (args[1] == "NOTIFYVIDEOCLOSE") { SetItemInfo(user.Guid, "VideoTime", null); _InvokeChatEvent("USER", ["USER", "UPDATED", user, user]); } _InvokeChatEvent("BROADCAST", ["BROADCAST", args[1], args]); } break; case "HISTORY_BEGIN": chatvars.loadingHistory = true; break; case "HISTORY_END": chatvars.loadingHistory = false; break; case "USER_DOEMOTE": case "USER_MESSAGE": var msg = {}; msg.Font = {}; msg.Type = "USER"; msg.ClientDate = new Date(); msg.SenderGuid = args[0]; msg.SenderUserId = args[1]; msg.SenderDisplayName = args[2]; msg.Sender = GetUserById(msg.SenderUserId) || GetContactById(msg.SenderUserId) || GetIgnoreById(msg.SenderUserId) if (msg.Sender == null) { msg.Sender = {}; msg.Sender.UserId = msg.SenderUserId; msg.Sender.UserName = msg.SenderDisplayName; msg.Sender.DisplayName = msg.SenderDisplayName; msg.Sender.PublicProperties = {}; } if (msg.SenderGuid) { msg.Sender.Guid = msg.SenderGuid; } msg.Text = args[3]; msg.Html = args[4]; if (chatvars.loadingHistory) { msg.IsHistory = true; } if (args[5]) { msg.TargetUserId = args[5]; msg.TargetDisplayName = args[6]; msg.Target = GetUserById(msg.TargetUserId) || GetContactById(msg.TargetUserId) || GetIgnoreById(msg.TargetUserId) if (msg.Target == null) { msg.Target = {}; msg.Target.UserId = msg.TargetUserId; msg.Target.UserName = msg.TargetDisplayName; msg.Target.DisplayName = msg.TargetDisplayName; msg.Target.PublicProperties = {}; } msg.Offline = msg.Whisper = args[7] == "1"; } msg.ServerTick = args[8]; msg.ServerTime = new Date(parseFloat(msg.ServerTick) / 10000 - parseFloat("63082281600000") + parseFloat("946684800000")); msg.Properties = nvc; //add user to tab-user if (msg.Target) { var relativeid = null; if (UserEquals(msg.Sender, GetMyInfo())) { relativeid = msg.Target.UserId; } else if (UserEquals(msg.Target, GetMyInfo())) { relativeid = msg.Sender.UserId; } if (relativeid) { var selid = (GetSelectedUser() || {}).UserId; var map = {}; var newarr = []; if (selid) { newarr.push(selid); map[selid] = true; } if (relativeid != selid) { newarr.push(relativeid); map[relativeid] = 1; } for (var i = 0; i < chatvars.tabusers.length; i++) { var tabid = chatvars.tabusers[i]; if (!map[tabid]) { newarr.push(tabid); map[tabid] = true; } } chatvars.tabusers = newarr; } } if (msgid == "USER_DOEMOTE") { msg.Emotion = nvc["Emotion"] msg.Type = "EMOTION"; _InvokeChatEvent("MESSAGE", ["MESSAGE", "DOEMOTE", msg, msg.Emotion]); } else { if (chatvars.loadingHistory && IsMessenger()) { if (msg.Offline) FireMessage(msg); else chatmessages.push(msg); } else { FireMessage(msg); } } break; case "SYS_ANNOUNCEMENT": var msg = {}; msg.Font = {}; msg.Type = "ANNOUNCEMENT"; msg.Text = args[0]; msg.Html = args[1]; msg.Arguments = args; FireMessage(msg); break; case "SYS_INFO_MESSAGE": var msg = {}; msg.Font = {}; msg.Type = "SYS_INFO"; msg.Text = TEXT(args[0]); msg.Html = args[1]; msg.Arguments = args; FireMessage(msg); break; case "SYS_ERROR_MESSAGE": var msg = {}; msg.Font = {}; msg.Type = "SYS_ERROR"; msg.Text = TEXT(args[0]); msg.Arguments = args; FireMessage(msg, true); break; case "SYS_DEBUG_MESSAGE": _Trace(args[0]); break; } } function FireMessage(msg, notpush) { if (!notpush) { chatmessages.push(msg); } _InvokeChatEvent("MESSAGE", ["MESSAGE", "NEW", msg]); } function PushCTSMessage(message) { _Trace("CTS:" + message); chatvars.cts.push(message); DoSync(); } function DoSendMessage() { _InvokeChatEvent("SENDMESSAGE", ["SENDMESSAGE", "COMMAND"]); } function GetMessages() { return chatmessages; } function __SendMessage(text, html, nvc) { var ismessenger = IsMessenger(); //TODO: var targetid = null; var targetname = null; var whisper = null; var seluser = GetSelectedUser(); if (ismessenger && chatclient.targetContact) { targetid = chatclient.targetContact.UserId; targetname = chatclient.targetContact.DisplayName; whisper = "1"; } else if (seluser) { targetid = seluser.UserId; targetname = seluser.DisplayName; if (chatclient.whisper || ismessenger) { whisper = "1"; } } else if (ismessenger) { return false; } else if (chatclient.whisper) { //warning:do not use Desktop.Alert here... Desktop.Alert(null, TEXT("CANTNOTWHISPERTONOTARGET")); return false; } var message = JoinToMsg("USER_MESSAGE", nvc, [text, html, targetid, targetname, whisper ? "1" : "0"]); chatvars.hasmessagesending = true; PushCTSMessage(message); var msg = {}; msg.Text = text; msg.Html = html; _InvokeChatEvent("SENDMESSAGE", ["SENDMESSAGE", "SENDING", msg]) return true; } function SendMessage(text, html) { if (!chatvars.connected) return false; if (html != null) { if (html == text) html = null; else if (text != null) if (html.indexOf('<') == -1) html = null; } if (text != null) text = text.replace(/^\s/g, '').replace(/\s$/g, '') if ((text == null || text.length == 0) && (html == null || html.length == 0)) return false; var nvc = {}; nvc.FontName = chatclient.fontname; nvc.FontSize = chatclient.fontsize; nvc.FontColor = chatclient.fontcolor; nvc.Bold = chatclient.fontbold; nvc.Italic = chatclient.fontitalic; nvc.Underline = chatclient.fontunderline; if (html == null) { html = Html_Encode(text); } var div = "
"; html = div + html + "
"; return __SendMessage(text, html, nvc); } function SendEmotion(emotion) { var nvc = {}; nvc.Emotion = emotion; return __SendMessage(emotion, null, nvc); } function __UpdateUserTo(user, obj, userUpdated) { if (obj == null) return; if (user == null) { obj.OnlineStatus = "OFFLINE"; obj.IsOnline = false; if (!obj.CopyUser && !obj.UserName) { obj.UserName = obj.DisplayName; } return; } obj.IsOnline = user.IsOnline; obj.Guid = user.Guid;//setup runtime guid obj.UserName = user.UserName; obj.DisplayName = user.DisplayName obj.Description = user.Description; obj.OnlineStatus = user.OnlineStatus; obj.PublicProperties = user.PublicProperties; obj.CopyUser = true; if (userUpdated) { if (obj.IsContact) _InvokeChatEvent("CONTACT", ["CONTACT", "UPDATED", obj, obj]); if (obj.IsIgnore) _InvokeChatEvent("IGNORE", ["IGNORE", "UPDATED", obj, obj]); } } function UserEquals(user1, user2) { if (user1 == user2) return true; if (user1 == null || user2 == null) return false; if (user1.UserId.toLowerCase() == user2.UserId.toLowerCase()) return true; //do not check Guid return false; } function GetUsers() { return chatvars.users; } function GetUserByGuid(userguid) { return chatvars.userbyguid[userguid]; } function GetUserByName(name) { if (name) return chatvars.userbyname[name.toLowerCase()]; } function GetUserById(userid) { if (userid) return chatvars.userbyid[userid.toLowerCase()]; } function GetTypingUsers() { var typings = []; for (var i = 0; i < chatvars.users.length; i++) { var user = chatvars.users[i]; var time = GetItemInfo(user.Guid, "TypingTime"); if (time && time > (new Date().getTime() - TYPINGDISPLAYTIME)) { typings.push(user.DisplayName); } } return typings; } function IsUserTyping(user) { if (!user) return false; var time = GetItemInfo(user.Guid, "TypingTime"); if (time && time > (new Date().getTime() - TYPINGDISPLAYTIME)) { return true; } return false; } function GetSelectedUser() { return GetUserById((chatclient.selecteduser || {}).UserId); } function SetSelectedUser(user) { var users = GetUsers(); var olduser; if (chatclient.selecteduser) { for (var i = 0; i < users.length; i++) { if (UserEquals(chatclient.selecteduser, users[i])) { olduser = users[i]; break; } } } if (user == null) { chatclient.selecteduser = null; _InvokeChatEvent("SELECTEDUSER", ["SELECTEDUSER", "UPDATED"]); if (olduser) _InvokeChatEvent("USER", ["USER", "UPDATED", olduser, olduser]); return; } for (var i = 0; i < users.length; i++) { if (UserEquals(user, users[i])) { chatclient.selecteduser = users[i]; if (olduser) _InvokeChatEvent("USER", ["USER", "UPDATED", olduser, olduser]); _InvokeChatEvent("USER", ["USER", "UPDATED", chatclient.selecteduser, chatclient.selecteduser]); _InvokeChatEvent("SELECTEDUSER", ["SELECTEDUSER", "UPDATED"]); } } } function DoTabNextUser() { var sel = GetSelectedUser(); var arr = chatvars.tabusers; var index = -1; if (sel) { for (var i = 0; i < arr.length; i++) { if (arr[i] == sel.UserId) { index = i; break; } } if (index + 1 == arr.length) index = -1; } index++; SetSelectedUser(GetUserById(arr[index])); } function GetContacts() { return chatvars.contacts; } function GetContactByName(name) { if (name) return chatvars.contactbyname[name.toLowerCase()]; } function GetContactById(userid) { if (userid) return chatvars.contactbyid[userid.toLowerCase()]; } function GetIgnores() { return chatvars.ignores; } function GetIgnoreByName(name) { if (name) return chatvars.ignorebyname[name.toLowerCase()]; } function GetIgnoreById(userid) { if (userid) return chatvars.ignorebyid[userid.toLowerCase()]; } function GetSelectedContact() { return chatclient.selectedcontact; } function SetSelectedContact(contact) { if (contact == null) { chatclient.selectedcontact = null; _InvokeChatEvent("SELECTEDCONTACT", ["SELECTEDCONTACT", "UPDATED"]); return; } var contacts = GetContacts(); for (var i = 0; i < contacts.length; i++) { if (UserEquals(contact, contacts[i])) { chatclient.selectedcontact = contacts[i]; _InvokeChatEvent("SELECTEDCONTACT", ["SELECTEDCONTACT", "UPDATED"]); return; } } chatclient.selectedcontact = contact; _InvokeChatEvent("SELECTEDCONTACT", ["SELECTEDCONTACT", "UPDATED"]); } function GetSelectedIgnore() { return chatclient.selectedignore; } function SetSelectedIgnore(ignore) { if (ignore == null) { chatclient.selectedignore = null; _InvokeChatEvent("SELECTEDIGNORE", ["SELECTEDIGNORE", "UPDATED"]); return; } var ignores = GetIgnores(); for (var i = 0; i < ignores.length; i++) { if (UserEquals(ignore, ignores[i])) { chatclient.selectedignore = ignores[i]; _InvokeChatEvent("SELECTEDIGNORE", ["SELECTEDIGNORE", "UPDATED"]); return; } } } function AddContact(user) { if (!chatvars.connected) return; var message = JoinToMsg("USER_COMMAND", null, ["ADDCONTACT", user.UserId]); PushCTSMessage(message); } function RemoveContact(user) { if (!chatvars.connected) return; var message = JoinToMsg("USER_COMMAND", null, ["REMOVECONTACT", user.UserId]); PushCTSMessage(message); } function AddIgnore(user) { if (!chatvars.connected) return; var message = JoinToMsg("USER_COMMAND", null, ["ADDIGNORE", user.UserId]); PushCTSMessage(message); } function RemoveIgnore(user) { if (!chatvars.connected) return; var message = JoinToMsg("USER_COMMAND", null, ["REMOVEIGNORE", user.UserId]); PushCTSMessage(message); } function IsContact(user) { return !!GetContactById(user.UserId); } function IsBlock(user) { return !!GetIgnoreById(user.UserId); } function SetBlock(user, block) { if (block) AddIgnore(user); else RemoveIgnore(user); } function InvitePrivateChat(user) { InvitePrivateChatBatch([user]); } function InvitePrivateChatBatch(users) { if (users.length == 0) return; var args = []; args.push("PRIVATEINVITE"); var added = {}; for (var i = 0; i < users.length; i++) { var userid = users[i].UserId; if (added[userid]) continue; added[userid] = userid; args.push(userid); } var message = JoinToMsg("USER_COMMAND", null, args); PushCTSMessage(message); } function AcceptPrivateChat(item) { var message = JoinToMsg("USER_COMMAND", null, ["ACCEPTPRIVATE", item.Args[2]]); PushCTSMessage(message); } function RejectPrivateChat(item) { var message = JoinToMsg("USER_COMMAND", null, ["REJECTPRIVATE", item.Args[2]]); PushCTSMessage(message); } function InviteIntoPrivateChat(username) { var message = JoinToMsg("USER_COMMAND", null, ["INVITEINTOPRIVATE", username]); PushCTSMessage(message); } /****************************************************************\ Place \****************************************************************/ function GetPlace() { return chatvars.place; } function IsMessenger() { if (chatvars.place == null) return (chatclient.placename || "").toLowerCase() == "messenger"; return chatvars.place.Location == "Messenger"; } function GetLocation() { if (chatvars.place == null) return initializelocation; return chatvars.place.Location; } var initializelocation = "Unknown"; /****************************************************************\ MyInfo \****************************************************************/ function GetMyInfo() { if (chatvars.myinfo) return chatvars.myinfo; var unknown = {}; unknown.IsUnknown = true; unknown.PublicProperties = {} unknown.PrivateProperties = {} unknown.DisplayName = ""; unknown.UserName = ""; unknown.Guid = ""; unknown.UserId = ""; unknown.Description = "" unknown.IsAnonymous = true; unknown.IsAdmin = false unknown.Moderated = true unknown.OnlineStatus = "ONLINE" unknown.RemoveReason = "" unknown.IPAddress = ""; unknown.AppearOffline = false; unknown.Level = "Normal"; return unknown; } function SetOnlineStatus(onlinestatus) { if (!chatvars.connected) return; var message = JoinToMsg("USER_COMMAND", null, ["ONLINESTATUS", onlinestatus]); PushCTSMessage(message); } function ChangeDisplayName(newname) { var message = JoinToMsg("USER_COMMAND", null, ["DISPLAYNAME", newname]); PushCTSMessage(message); } function SetDescription(desc) { var message = JoinToMsg("USER_COMMAND", null, ["DESCRIPTION", desc]); PushCTSMessage(message); } function SetPrivateProperty(name, strval) { var message = JoinToMsg("USER_COMMAND", null, ["PRIVATEPROPERTY", name, strval]); PushCTSMessage(message); } function SetPublicProperty(name, strval) { var message = JoinToMsg("USER_COMMAND", null, ["PUBLICPROPERTY", name, strval]); PushCTSMessage(message); } function SetAvatar(avatar) { SetPublicProperty("Avatar", avatar); } function SetInstantAvatar(avatar) { SetPublicProperty("InstantAvatar", avatar); } function SetIsTyping() { chatvars.typingTime = new Date().getTime(); } function InstantSetIsTyping(contact) { chatvars.typingTime = new Date().getTime(); chatvars.typingContact = contact; } function SaveSkin(skin) { SetPrivateProperty("Skin", skin); SetCookie("CuteChatSkin", skin); } /****************************************************************\ Admin \****************************************************************/ function AdminSetPassword(newpwd) { var message = JoinToMsg("MODERATOR_COMMAND", null, ["SETPASSWORD", newpwd || ""]); PushCTSMessage(message); } function AdminSetMaxOnline(count) { var message = JoinToMsg("MODERATOR_COMMAND", null, ["SETMAXONLINECOUNT", count]); PushCTSMessage(message); } function AdminSetEnableAnonymous() { var message = JoinToMsg("MODERATOR_COMMAND", null, ["SETALLOWANONYMOUS", "1"]); PushCTSMessage(message); } function AdminSetDisableAnonymous() { var message = JoinToMsg("MODERATOR_COMMAND", null, ["SETALLOWANONYMOUS", "0"]); PushCTSMessage(message); } function AdminSetLockChannel(locked) { var message = JoinToMsg("MODERATOR_COMMAND", null, ["SETLOCKCHANNEL", locked ? "1" : "0"]); PushCTSMessage(message); } function AdminAcceptUser(user) { var message = JoinToMsg("MODERATOR_COMMAND", null, ["ACCEPTUSER", user.UserId]); PushCTSMessage(message); } // just reject once. function AdminRejectUser(user) { var message = JoinToMsg("MODERATOR_COMMAND", null, ["REJECTUSER", user.UserId]); PushCTSMessage(message); } //the kick user will make the user into kickeduserlist function AdminKickUser(user) { var message = JoinToMsg("MODERATOR_COMMAND", null, ["KICKUSER", user.UserId]); PushCTSMessage(message); } function AdminUnkickUsers() { var message = JoinToMsg("MODERATOR_COMMAND", null, ["UNKICKUSERS"]); PushCTSMessage(message); } function AdminSetUserLevel(user, level) { var message = JoinToMsg("MODERATOR_COMMAND", null, ["SETUSERLEVEL", user.UserId, level]); PushCTSMessage(message); } function AdminGetUserIP(user) { return user.IPAddress; } function AdminDenyUserIP(user) { var message = JoinToMsg("MODERATOR_COMMAND", null, ["KICKIP", user.UserId]); PushCTSMessage(message); } function AdminUnDenyIPs() { var message = JoinToMsg("MODERATOR_COMMAND", null, ["UNKICKIPS"]); PushCTSMessage(message); } function AdminSetModerateMode(mode) { var message = JoinToMsg("MODERATOR_COMMAND", null, ["SETMODERATORMODE", mode ? "1" : "0"]); PushCTSMessage(message); } function AcceptModerateItem(guid) { var message = JoinToMsg("MODERATOR_COMMAND", null, ["ACCEPTMODERATEITEM", guid]); PushCTSMessage(message); } function RejectModerateItem(guid) { var message = JoinToMsg("MODERATOR_COMMAND", null, ["REJECTMODERATEITEM", guid]); PushCTSMessage(message); } function AdminAddModerator(name) { var message = JoinToMsg("MODERATOR_COMMAND", null, ["ADDMODERATOR", name]); PushCTSMessage(message); } function AdminRemoveModerator(name) { var message = JoinToMsg("MODERATOR_COMMAND", null, ["REMOVEMODERATOR", name]); PushCTSMessage(message); } //