﻿var xmlHttp;
var xmlHttpWriter;
var xmlHttpVisibleState;
var xmlHttpDetailState;
var xmlHttpUserStatus;
var timer;
var maxId=0;
var allowRequest=1;
var showDate=false;
var cuid=0;
var raddr="";
var isChatVisible=false;
var timerInterval=5000;
var blinkerTimer; //blinker timer object
var isBlinking=false;  //if is blinking do not call blinkItem
var blinkerStatus=false; //switch colors on
var ckick=0;

function getChatData()
{    
    //debugger;
    allowRequest=0;
    xmlHttp=GetXmlHttpObject();
    var url="http://"+raddr+"/WebServices/wsChatHandler.ashx";
    url=url+"?mode=0";
    url=url+"&id="+maxId;
    url=url+"&uid=0";
    url=url+"&msg=\"\"";
    url=url+"&sid="+Math.random();
    xmlHttp.onreadystatechange=stateChanged;
	xmlHttp.open("GET",url,true);
	xmlHttp.send(null);    
}
function stateChanged()
{
    //debugger;
	if (xmlHttp.readyState==4 && xmlHttp.status==200)
	{
	   addChatRows(xmlHttp.responseText);
       allowRequest=1;
	}
}

function showMainChat()
{    
    
    if(cuid==0)
        return;
    allowRequest=1;
    var mainDiv=$('panelDiv');
    mainDiv.style.display="none";
    restoreChatWndDetails();
    mainDiv.style.display="block";
    setChatVisibility(1);
    isChatVisible=true;
    clearTimeout(timer);
    clearTimeout(blinkerTimer);
    isBlinking=false;
    if(typeof blinkerId != 'undefined')
    {            
     var blk=$('spnChat');
     if(blk!=null){
      blk.style.color="#555555";
      blk.style.visibility="visible";
      }
    }
    timerInterval=1500;
    registerTimer();    
}

function closeChat()
{
    var cht=$('panelDiv');
    cht.style.display="none";
    if(typeof blinkerId != 'undefined')
    {            
     var blk=$('spnChat');
     if(blk!=null){
      blk.style.color="#555555";
      blk.style.visibility="visible";
      isBlinking=false;
      }
    }
    setChatVisibility(0);
    isChatVisible=false;
    clearTimeout(timer);
    timerInterval=5000;
    registerTimer();
}

function getChatVisibility()
{    
    xmlHttpVisibleState=GetXmlHttpObject();
    var url="http://"+raddr+"/WebServices/wsChatHandler.ashx";
    url=url+"?mode=1"; //mode=1->insert visible state;mode=2->retrieve visible state
    url=url+"&sid="+Math.random();
    xmlHttpVisibleState.onreadystatechange=visibilityGetStateChanged;
	xmlHttpVisibleState.open("GET",url,true);
	xmlHttpVisibleState.send(null); 
}
function visibilityGetStateChanged()
{
    //debugger;
	if (xmlHttpVisibleState.readyState==4 && xmlHttpVisibleState.status==200){
	    if(xmlHttpVisibleState.responseText.length>0 && xmlHttpVisibleState.responseText=="1") showMainChat();}
}

function setChatVisibility(state)
{    
    xmlHttpVisibleState=GetXmlHttpObject();
    var url="http://"+raddr+"/WebServices/wsChatHandler.ashx";
    url=url+"?mode=2"; //mode=1->set visible state;mode=2->get visible state
    url=url+"&state=" + state; //state:0 set hidden; state:1 set visible
    url=url+"&sid="+Math.random();
    xmlHttpVisibleState.onreadystatechange=visibilitySetStateChanged;
	xmlHttpVisibleState.open("GET",url,true);
	xmlHttpVisibleState.send(null); 
}
function visibilitySetStateChanged()
{
	
}

//store data about chat window
function storeWndDetails(data)
{
    xmlHttpDetailState=GetXmlHttpObject();
    var url="http://"+raddr+"/WebServices/wsChatHandler.ashx";
    url=url+"?mode=4"; //mode=4->set details ;mode=3->get details
    url=url+"&data=" + data; //state:0 set hidden; state:1 set visible
    url=url+"&sid="+Math.random();
    xmlHttpDetailState.onreadystatechange=setWindowDetailsStateChanged;
	xmlHttpDetailState.open("GET",url,true);
	xmlHttpDetailState.send(null); 
}
function setWindowDetailsStateChanged()
{
	
}

function restoreChatWndDetails()
{    
    xmlHttpDetailState=GetXmlHttpObject();
    var url="http://"+raddr+"/WebServices/wsChatHandler.ashx";
    url=url+"?mode=3"; //mode=4->set visible state;mode=3->get visible state
    url=url+"&sid="+Math.random();
    xmlHttpDetailState.onreadystatechange=getWindowDetailsStateChanged;
	xmlHttpDetailState.open("GET",url,true);
	xmlHttpDetailState.send(null); 
}
function getWindowDetailsStateChanged()
{    
    var obj=$('panelDiv');
	if (xmlHttpDetailState.readyState==4 && xmlHttpDetailState.status==200){
	    //debugger;
	    var width=0;var height=0;var top=0;var left=0;
        if(xmlHttpDetailState.responseText=="0:0;0:0"){
            var tblInst=$('tblUseInstructions');
            
            var pos=findPos(tblInst);
            if (navigator.appName.indexOf('Microsoft') != -1){
                obj.style.pixelLeft=pos[0];
                obj.style.pixelTop=0;
               }
            else{
                obj.style.left=pos[0] + "px";        
                obj.style.top="0px";
            }            
        }
        else
        {
            //set details from session
            var arr=xmlHttpDetailState.responseText.split(';');
            if(arr.length==2){
                var det=arr[0].split(':');
                if(det.length==2){
                   top=parseInt(det[0]);
                   left= parseInt(det[1]);
                }
                det=arr[1].split(':');
                if(det.length==2){
                   width=parseInt(det[0]);
                   height= parseInt(det[1]);                   
                }
                if (navigator.appName.indexOf('Microsoft') != -1){
                    obj.style.pixelLeft=left;
                    obj.style.pixelTop=top;                    
                }
                else{
                    obj.style.left=left + "px";        
                    obj.style.top= top + "px";
                }
                obj.style.width=width + "px";
                obj.style.height=height + "px";
                var div=$('divChatList');
                height-=120;
                if(height>0)
                    div.style.height=height + "px";
            }
        }
        
    }
}


function insertChatData(txtArea)
{
    //debugger;
    if(cuid==0)
        return false;
    allowRequest=0;
    var ctrlTextArea=$(txtArea);
    if(trim(ctrlTextArea.value).length==0)
        return false;
    xmlHttpWriter=GetXmlHttpObject();
    var url="http://"+raddr+"/WebServices/wsChatHandler.ashx";
    url=url+"?mode=0";
    url=url+"&id=-1";
    url=url+"&uid="+cuid;
    url=url+"&msg="+escape(trim(ctrlTextArea.value));
    url=url+"&sid="+Math.random();
    xmlHttpWriter.onreadystatechange=writeStateChanged;
	xmlHttpWriter.open("GET",url,true);
	xmlHttpWriter.send(null);
	ctrlTextArea.value="";
}

function writeStateChanged()
{
    if (xmlHttpWriter.readyState==4 && xmlHttpWriter.status==200){	
	    allowRequest=1;
	    getChatData();	    
	}
}


function addChatRows(rowData)
{
    //debugger;
    rowData = rowData.replace(new RegExp( "\\r\\n", "g" ),"<br/>");
    rowData = rowData.replace(new RegExp( "\\n", "g" ),"<br/>");
    var jsonText= rowData.parseJSON();
    if(jsonText!=null)
    {
        var tblChat = $('tblChatList');
                
        if(jsonText.chatList.length>0)
        {
            if(isChatVisible)
            {                
                for(i=0;i<jsonText.chatList.length;i++){
                    var cId=parseInt(jsonText.chatList[i].id);
                    if(cId > maxId){
                        maxId=cId;                        
                    }
                    var lastRowIndex = tblChat.rows.length;
                    var row=tblChat.insertRow(lastRowIndex);
                    var cell_1 = row.insertCell(0);
                    //cell_1.innerHTML=jsonText.chatList[i].date;
                    var spn=document.createElement("div");
                    spn.innerHTML=jsonText.chatList[i].date;
                    //debugger;
                    if(showDate)
                        spn.className="spnDate";
                    else
                        spn.className="spnDateHidden";
                    cell_1.appendChild(spn);
                    cell_1.className="cellDate";
                    var cell_2 = row.insertCell(1);
                    cell_2.innerHTML=jsonText.chatList[i].username +":";
                    cell_2.className="cellUser";
                    var cell_3 = row.insertCell(2);
                    cell_3.innerHTML=jsonText.chatList[i].msg;
                    cell_3.className="cellMsg";
                }
                if(jsonText.chatList.length>0){
                    var dvlist= $('divChatList');
                    dvlist.scrollTop=dvlist.scrollHeight;
                }
            }
            else
            {                
             if(!isBlinking) blinkItem();
            }
        }
        
        //HideDateCells();
    }
    allowRequest=1;
}

function AddDateCellId(id)
{
    //check if item exists in collection
    //debugger;
    if(arrCellId!=null && arrCellId.length>0)
    {
        for(i=0;i<arrCellId.length;i++) {
            if(arrCellId[i]==id)
                return;
        }
    }
    if(arrCellId==null)
            arrCellId=new Array();
    var arrIndex=arrCellId.length;
    arrCellId[arrIndex]=id;
}

function HideDateCells()
{    
    var chk=$('chkShowDate');
    showDate=!chk.checked;
    var tbl=$('tblChatList');
    for(j=0;j<tbl.rows.length;j++){
        //debugger;
        var td=tbl.rows[j].cells[0];
        if(td.childNodes.length==1){
        if(showDate) td.firstChild.className="spnDate";
        else td.firstChild.className="spnDateHidden";
        }
        
    }
}

function restoreChatWnd()
{   
    if(cuid==0)
        return;
    getChatVisibility();
    registerTimer();
}

function registerTimer()
{
    if(allowRequest==1)
        getChatData();
    updateUserStatus();
    timer=setTimeout("registerTimer()",timerInterval);
}

function updateUserStatus()
{
    if(cuid==0)
        return;    
    xmlHttpUserStatus=GetXmlHttpObject();
    var url="http://"+raddr+"/WebServices/wsOnlineUsersHandler.ashx";
    url=url+"?mode=-1";
    url=url+"&id="+cuid;
    url=url+"&sid="+Math.random();
    xmlHttpUserStatus.onreadystatechange=userStatusChanged;
	xmlHttpUserStatus.open("GET",url,true);
	xmlHttpUserStatus.send(null);  
}
function userStatusChanged()
{
}


function chatBoxPress(ev,btn,txtArea)
{
    //debugger;
    var b=$(btn);
    var chatArea=$(txtArea);
    if(ev.keyCode==13 && !ev.shiftKey){
        insertChatData(txtArea);
        return false;
    }    
    return true;    
}


function blinkItem()
{
    isBlinking=true;
    if(typeof blinkerId != 'undefined'){
        //debugger;
        var blk=$('spnChat');
        if(blk!=null){
        blk.style.color="red";
        if(!blinkerStatus){            
            blk.style.visibility="visible";
            blinkerStatus=true;}
        else{
            blk.style.visibility="hidden";
            blinkerStatus=false;}}}
    blinkerTimer=setTimeout("blinkItem()",800);
}


//////////////////////////resize for FF/////////////
var isBtnDown=false;
function beginResize()
{    
   if(isBtnDown){    
        var div=$('divChatList');
        var main=$('panelDiv');
        var height=(parseInt(main.style.height.replace("px",""))-120);
        if(height>0){
            div.style.height=height+"px";
            
        }
   }   
}

function setBtnUp()
{
    //debugger;
    storeWindowDetails();
    isBtnDown=false;
    var dvlist= $('divChatList');
    dvlist.scrollTop=dvlist.scrollHeight;
}


function storeWindowDetails()
{
    //debugger;
    var main=$('panelDiv');
    var tp=main.style.top.replace("px","");
    var lf=main.style.left.replace("px","");
    var wd = main.style.width.replace("px","");
    var ht = main.style.height.replace("px","");
    var data= tp.toString() + ":" + lf.toString() + ";" + wd.toString() + ":" + ht.toString();
    storeWndDetails(data);
}


