function InstantMessenger(k,l,m,n){this.strInstanceName=k;this.intThisUserID=l;this.strThisUserName=m;this.intMinPulsePeriodMS=3000;this.intMaxPulsePeriodMS=15000;this.intMinsToTimeout=15;this.intPulsesBeforeInactive=5;this.intMaxOpenWindows=3;this.intPulsePeriodMS=this.intMaxPulsePeriodMS;this.intLastMsgID=0;this.objSiteTimestampLastPulse=null;this.objBrowserTimestampLastPulse=null;this.bUse24HourClock=false;this.strPageTitle=document.title;this.objJSInterval=null;this.aryWindowStatus=new Array();this.aryUsrIDLookup=new Array();this.bPulseActive=false;this.objJSTimeout=null;this.intPulsesSinceLastInteraction=0;this.intPulseThreadCount=0;this.IMPulse=function(b){if(!this.bPulseActive)return;var c=this;$.ajax({url:'/User/IM/InstantMessage.aspx?action=Pulse',cache:false,dataType:'json',data:{last_msg_id:this.intLastMsgID,user_active_ind:(this.intPulsesSinceLastInteraction<this.intPulsesBeforeInactive)?'1':'0'},type:'POST',success:function(a){c.ProcessPulseResponse(a,b,c)}})};this.ProcessPulseResponse=function(e,f,g){if(!e)return;g.intPulsesSinceLastInteraction++;$('#ulOnline').empty();$('#ulOffline').empty();var h=0;$.each(e.users,function(i,a){if(a){var b,strStatusImgAlt,strAppendID;switch(parseInt(a.online_status)){case 1:b='/User/IM/Images/status-away.png';strStatusImgAlt='Away';strAppendID='#ulOnline';if(a.usr_id!=g.intThisUserID)h++;break;case 2:b='/User/IM/Images/status.png';strStatusImgAlt='Online';strAppendID='#ulOnline';if(a.usr_id!=g.intThisUserID)h++;break;default:b='/User/IM/Images/status-offline.png';strStatusImgAlt='Offline';strAppendID='#ulOffline'}g.aryUsrIDLookup[a.usr_id]={name:a.name,status_img:b,status_img_alt:strStatusImgAlt};if(a.usr_id!=g.intThisUserID){$(' <li />').attr('id','user_'+a.usr_id).html('<a href="javascript:void(0);" onclick="'+k+'.OpenIMWindow('+a.usr_id+', true, true)">'+g.MakeStatusImg(a.usr_id)+a.name+'</a>').appendTo($(strAppendID));$('#liIMBox_'+a.usr_id+' img.IM_status').attr('src',b).attr('alt',strStatusImgAlt)}else{$('#liIMConnectionsPanel a.im img.IM_status').attr('src',b).attr('alt',strStatusImgAlt)}}});$('#liIMConnectionsPanel .im strong').html(h+' online');$('img.IM_unread').hide();var j=false;$.each(e.messages,function(i,a){if(a){var b;var c;var d;if(parseInt(a.from_usr_id)==g.intThisUserID){b=a.to_usr_id;c=g.strThisUserName;d='IM_message_from'}else{b=a.from_usr_id;c=g.aryUsrIDLookup[b].name;d='IM_message_to'}g.OpenIMWindow(b,false,false);$('#divMsg_t'+a.msg_id).remove();if(!$('#divMsg_'+a.msg_id).length){$('<div />').attr('id','divMsg_'+a.msg_id).attr('class',d).html('<span class="IM_message_name">'+c+'</span> <span class="IM_message_timestamp"><img class="IM_unread" src="/Admin/Images/throbber.gif" />'+a.timestamp+'</span><br /><span class="IM_message_message">'+a.message+'</span><br />').appendTo($('#liIMBox_'+b+' .IM_imboxcontent'));j=true;if((a.to_usr_id==g.intThisUserID)&&(parseInt(a.message_read_ind)==0)){$('#liIMBox_'+b+' a:not(.active)').addClass('alert');g.TitleAlert(g.aryUsrIDLookup[b].name+' says...')}}if((a.from_usr_id==g.intThisUserID)&&(parseInt(a.message_read_ind)==0))$('#divMsg_'+a.msg_id+' img.IM_unread').show();g.ResetScrollPosition('#liIMBox_'+b);if(parseInt(a.msg_id)>g.intLastMsgID){g.intLastMsgID=parseInt(a.msg_id)}}});g.objSiteTimestampLastPulse=parseInt(e.timestamp_now)*1000;var d=new Date();g.objBrowserTimestampLastPulse=d.getTime();g.bUse24HourClock=(e.use_24_hour_clock_ind=='True');if(j){g.intPulsePeriodMS=g.intMinPulsePeriodMS}else{g.intPulsePeriodMS+=2000;g.intPulsePeriodMS=Math.min(g.intPulsePeriodMS,g.intMaxPulsePeriodMS)}if((e.last_activity_mins<g.intMinsToTimeout)||(g.intPulsesSinceLastInteraction<g.intPulsesBeforeInactive)){if(f==g.intPulseThreadCount)g.objJSTimeout=setTimeout(function(){g.IMPulse(f)},this.intPulsePeriodMS)}else{g.GoOffline(false)}};this.Init=function(a){if($('#divIMPanel').length)return;$(document).click(function(){this.intPulsesSinceLastInteraction=0});$('<div />').attr('id','divIMPanel').appendTo($('body'));$('<ul />').attr('id','ulIMPanel').addClass('imbox').appendTo($('#divIMPanel'));$('<li />').attr('id','liIMConnectionsPanel').html('<a href="javascript:void(0);" class="im" onclick="'+k+'.ToggleUserWindow()"><img src="/User/IM/Images/balloon.png" class="IM_chatimg" alt="Chat" /><img src="/User/IM/Images/status-offline.png" class="IM_status" alt="Offline" />Chat (<strong>offline</strong>)</a>').appendTo($('#ulIMPanel'));$('<div />').addClass('IM_subpanel').appendTo($('#liIMConnectionsPanel'));$('<h3 />').html('<span onclick="'+k+'.MinimiseUserWindow()"> &ndash; </span>Connections').appendTo($('#liIMConnectionsPanel div.IM_subpanel'));$('<div />').addClass('IM_subpanelcontent').html('<ul id="ulOnline" /><ul id="ulOffline" />').appendTo($('#liIMConnectionsPanel div.IM_subpanel'));$('<span />').addClass('IM_gooffline').html('<a href="javascript:void(0);" onclick="'+k+'.GoOffline(true)"><img src="/User/IM/Images/cross.png" alt="" />Go offline</a>').appendTo($('#liIMConnectionsPanel div.IM_subpanel'));if(a){this.bPulseActive=true;var b=this;this.objJSTimeout=setTimeout(function(){b.IMPulse(++b.intPulseThreadCount)},0)}};this.TitleAlert=function(a){clearInterval(this.objJSInterval);var b=this;this.objJSInterval=setInterval(function(){document.title=(document.title==a?b.strPageTitle:a)},1000)};this.ToggleIMWindow=function(a){$('a.im').removeClass('active');if($('#liIMBox_'+a+' div.IM_subpanel').is(':visible')){this.MinimiseIMWindow(a)}else{$('#liIMBox_'+a).show();$('#liIMBox_'+a+' div.IM_subpanel').show();$('#liIMBox_'+a+' a.im').toggleClass('active');this.ResetScrollPosition('#liIMBox_'+a);for(var i=0;i<this.aryWindowStatus.length;i++){if(this.aryWindowStatus[i].id==a){this.aryWindowStatus[i].open=true;this.aryWindowStatus[i].visible=true;this.aryWindowStatus[i].last_action_time=new Date().getTime();break}}}return false};this.MinimiseIMWindow=function(a){$('#liIMBox_'+a+' div.IM_subpanel').hide();$('#liIMBox_'+a+' a.im').removeClass('active');for(var i=0;i<this.aryWindowStatus.length;i++){if(this.aryWindowStatus[i].id==a){this.aryWindowStatus[i].visible=false;break}}};this.CloseIMWindow=function(a){$('#liIMBox_'+a).hide();for(var i=0;i<this.aryWindowStatus.length;i++){if(this.aryWindowStatus[i].id==a){this.aryWindowStatus[i].open=false;break}}};this.OpenIMWindow=function(a,b,c){var d='#liIMBox_'+a;var e=0;var f;for(var i=0;i<this.aryWindowStatus.length;i++){if('#liIMBox_'+this.aryWindowStatus[i].id==d){f=this.aryWindowStatus[i];f.last_action_time=new Date().getTime();if(f.open)break}if(this.aryWindowStatus[i].open)e++}if(b&&(!f||!(f.open))&&e>=this.intMaxOpenWindows){var g=-1,intOldestMinimisedWindowIndex=-1;for(var i=0;i<this.aryWindowStatus.length;i++){if(this.aryWindowStatus[i].open){if(g=-1||this.aryWindowStatus[i].last_action_time<this.aryWindowStatus[g].last_action_time){g=i}if(!this.aryWindowStatus[i].visible){if(intOldestMinimisedWindowIndex==-1||this.aryWindowStatus[i].last_action_time<this.aryWindowStatus[intOldestMinimisedWindowIndex].last_action_time){intOldestMinimisedWindowIndex=i}}}}if(intOldestMinimisedWindowIndex>-1){this.CloseIMWindow(this.aryWindowStatus[intOldestMinimisedWindowIndex].id)}else{this.CloseIMWindow(this.aryWindowStatus[g].id)}}if(f){if(b&&!f.open){$('#liIMBox_'+a).show();f.open=true}if(b&&!f.visible){this.ToggleIMWindow(a)}if(c)this.ActivateIMWindow(a)}else{$('<li />').attr('id','liIMBox_'+a).html('<a href="javascript:void(0);" onclick="'+k+'.ToggleIMWindow('+a+');" class="im">'+this.MakeStatusImg(a)+this.aryUsrIDLookup[a].name+'</a>').appendTo($('.imbox'));$('<div />').addClass('IM_subpanel').appendTo($('#liIMBox_'+a));$('<h3 />').html('<span onclick="'+k+'.CloseIMWindow('+a+');" class="close"> x </span>').append('<span onclick="'+k+'.MinimiseIMWindow('+a+');" class="minimise"> &ndash; </span>'+this.aryUsrIDLookup[a].name).appendTo($('#liIMBox_'+a+' div.IM_subpanel'));$('<div />').addClass('IM_subpanelcontent').html('<div class="IM_imboxcontent"></div>').appendTo($('#liIMBox_'+a+' div.IM_subpanel'));$('<div />').addClass('IM_imboxinput').html('<textarea class="IM_imboxtextarea" onkeydown="javascript:return '+k+'.ProcessUserInput(event, this,'+a+');"></textarea>').appendTo($('#liIMBox_'+a+' div.IM_subpanel'));var h=new Object();h.id=a;h.open=true;h.visible=false;h.last_action_time=new Date().getTime();this.aryWindowStatus.push(h);if(b)this.ToggleIMWindow(a);if(c)this.ActivateIMWindow(a);this.ResetScrollPosition(d);var j=this;$(d).click(function(){j.ActivateIMWindow(a)})}};this.ActivateIMWindow=function(a){if($('#liIMBox_'+a+' .IM_imboxcontent').is(':visible')){$('a.im').removeClass('active');$('#liIMBox_'+a+' a.im').removeClass('alert');clearInterval(this.objJSInterval);document.title=this.strPageTitle;$('#liIMBox_'+a+' a.im').toggleClass('active');$('#liIMBox_'+a+' .IM_imboxtextarea').focus()}};this.ToggleUserWindow=function(){if($('#liIMConnectionsPanel div.IM_subpanel').is(':visible')){this.MinimiseUserWindow()}else{$('#liIMConnectionsPanel div.IM_subpanel').show();$('#liIMConnectionsPanel a.im').toggleClass('active');if(!this.bPulseActive){this.bPulseActive=true;intSecondsSinceLastMsg=0;this.intPulsesSinceLastInteraction=0;$('#liIMConnectionsPanel a.im img.IM_status').attr('src','/User/IM/Images/status.png').attr('alt','Online');$("#liIMConnectionsPanel .im strong").html('Updating...');this.objJSTimeout=setTimeout(k+'.IMPulse('+ ++this.intPulseThreadCount+');',0)}}return false};this.MinimiseUserWindow=function(){$('#liIMConnectionsPanel div.IM_subpanel').hide();$('#liIMConnectionsPanel a.im').removeClass('active')};this.ProcessUserInput=function(b,c,e){if(b.keyCode==13&&b.shiftKey==0){var f=$(c).val();f=f.replace(/^\s+|\s+$/g,"");f=f.replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/\"/g,"&quot;");$(c).val('');$(c).focus();var g='divMsg_tr'+Math.round(Math.random()*1000000);var d=new Date();var t=new Date(parseInt(this.objSiteTimestampLastPulse)+(d.getTime()-parseInt(this.objBrowserTimestampLastPulse)));var h=this.FormatTime(t);$('<div />').attr('id',g).attr('class','IM_message_from').html('<span class="IM_message_name">'+this.strThisUserName+'</span> <span class="IM_message_timestamp">'+h+'</span><br /><span class="IM_message_message">'+f+'</span><br />').appendTo($('#liIMBox_'+e+' .IM_imboxcontent'));this.ResetScrollPosition('#liIMBox_'+e);if(f!=''){$.post("/User/IM/InstantMessage.aspx?action=SendMessage",{to_usr_id:e,message:f},function(a){$('#'+g).attr('id','divMsg_t'+a.instant_message_id)},'json')}return false}};this.GoOffline=function(a){clearTimeout(this.objJSTimeout);this.bPulseActive=false;for(var i=0;i<this.aryWindowStatus.length;i++){if(this.aryWindowStatus[i].open){this.CloseIMWindow(this.aryWindowStatus[i].id)}}this.MinimiseUserWindow();$('#liIMConnectionsPanel a.im img.IM_status').attr('src','/User/IM/Images/status-offline.png').attr('alt','Offline');$("#liIMConnectionsPanel .im strong").html('offline');$.post('/User/IM/InstantMessage.aspx?action=GoOffline',{user_opted_ind:a?'1':'0'})};this.MakeStatusImg=function(a){return'<img src="'+this.aryUsrIDLookup[a].status_img+'" alt="'+this.aryUsrIDLookup[a].status_img_alt+'" class="IM_status" />'};this.ResetScrollPosition=function(a){if($(a+' .IM_subpanelcontent').length)$(a+' .IM_subpanelcontent').scrollTop($(a+' .IM_subpanelcontent')[0].scrollHeight)};this.FormatTime=function(a){var b=a.getHours();var c='';if(!this.bUse24HourClock){if(b<12){if(b==0)b=12;c='am'}else{if(b>12)b-=12;c='pm'}}return this.PadTimeVal(b)+':'+this.PadTimeVal(a.getMinutes())+':'+this.PadTimeVal(a.getSeconds())+c};this.PadTimeVal=function(a){return(''+a).length==1?'0'+a:a};this.Init(n)}
