﻿var isIE = false;
var req=false;
var req2=false;
var formReq=false;
var messageIDOld="0";
var scrollTop = "0";
var scrollTopOld = "0";

function GetAjax() {
    req = false;
    ieIE = false;
    if(window.XMLHttpRequest && !(window.ActiveXObject)) {
    	try {
			req = new XMLHttpRequest();
        } catch(e) {
			req = false;
        }
    // branch for IE/Windows ActiveX version
    } else if(window.ActiveXObject) {
        
        isIE = true;       
       	try {
        	req = new ActiveXObject("Msxml2.XMLHTTP");
      	} catch(e) {
        	try {
          		req = new ActiveXObject("Microsoft.XMLHTTP");
        	} catch(e) {
          		req = false;
        	}
		}
    }
    return req;
}

function GetChatPage(url,scroll) {
    req = false;
    ieIE = false;
    req = GetAjax();
    var testDiv = document.getElementById('testbox');
    if(!scroll)
    
        testDiv.innerHTML += "scroll undefined"; 
    
    if(req && !isIE) {      
            req.onreadystatechange = processReqChange;
            req.open("GET", url+"&time="+getClockTime()+"&messageID="+messageIDOld+"&scroll="+scroll, true);
            req.send(null);
    
    // branch for IE/Windows ActiveX version
    } else if (req && isIE) {
        req.onreadystatechange = processReqChange;
        req.open("GET", url+"&time="+getClockTime()+"&messageID="+messageIDOld+"&scroll="+scroll, true);
        req.send();
    }
}
                
// handle onreadystatechange event of req object
function processReqChange() {
    // only if req shows "loaded"
    if (req && req.readyState == 4) 
    {
        if (req.status == 200 || req.Status == 0)
        {    
            var testDiv = document.getElementById('testbox');
            // get entire document, root-node of DOM tree 
            var messageXML = req.responseXML.documentElement;   
            if(!messageXML)
            {
                if(testDiv)
                     testDiv.innerHTML += "error with message xml"; 
                messageIDOld = "0";   
            }
            else
            {       
                // get each of child elements of the xml
                var messageIDNodeItems = messageXML.getElementsByTagName("MessageID");
                var messageNodeItems = messageXML.getElementsByTagName("Message"); 
                var dateNodeItems = messageXML.getElementsByTagName("DateTime"); 
                var userNodeItems = messageXML.getElementsByTagName("UserName");
                var chatMessageNode = messageXML.getElementsByTagName("ChatMessage");
                var scrollNodes = messageXML.getElementsByTagName("scroll");   
                // get message id at start of response from chatboxhandler
                var messageID = null;
                var messageIDNode = messageIDNodeItems[0];
                var scrollNode = scrollNodes[0];
                var scroll = 0;
                if(messageIDNodeItems && messageIDNode) 
                    messageID = messageIDNode.firstChild.data;
                
                //alert(scrollNodes[0].firstChild.data);    
                if(scrollNodes && scrollNode) 
                    scroll = scrollNode.firstChild.data;
                
                if(testDiv && (!messageID || !messageIDOld || messageID == null || messageIDOld == null))
                {
                    testDiv.innerHTML += "message id: " + messageID; 
                    testDiv.innerHTML += " ---- message id old: " + messageIDOld + "<br />"; 
                }
                            
                //check if messageID is diff from current message id
                if(messageID && messageIDOld != messageID) {   
                    if(!messageIDOld || messageIDOld == "0" || messageIDOld == "undefined")
                    {
                        // if current message id not set, set it and dont add any table rows
                        messageIDOld = messageID;
                    }
                    else
                    {
                        // get number of chat messages
                        var chatMessageLength = 0;
                        if(chatMessageNode)
                            chatMessageLength = chatMessageNode.length;
                        
                        // get most recent message id retrieved from database
                        chatMessageLength = chatMessageLength - 1; 
                        var messageIDNodeItem = messageIDNodeItems[chatMessageLength];
                        if(messageIDNodeItem)
                            messageIDOld = messageIDNodeItem.firstChild.data;
                        
                        if((!messageIDOld || messageIDOld == null) && testDiv)
                            testDiv.innerHTML += "most recent message id from db: " + messageIDOld + "<br />"; 
                        
                        var newHtml = "";
                        var backgroundColor = "white";
                        
                        // get last table row, and check colour
                        var table = document.getElementById('DataList1');
                        
                        // nunmber of rows in the table
                        var length2 = 0;
                        var modulus = 0;
                        if(table)
                        {
                            length2 = table.tBodies[0].rows.length;
                             modulus = length2 % 2;
                        }
                        oddEven = "";
                        if (modulus == 0)
                        {
                            oddEven = "even";
                            backgroundColor = "white";
                        }
                        else
                        {
                            oddEven = "odd";
                            backgroundColor = "rgb(224, 224, 224)";
                        }
                        
                        if(table)
                        {
                            var scrollDiv = document.getElementById('chat');                   
                            var blnPinScrollbar = false;
                            
                            //if scrollbar at very bottom before updating the div, set pin variable to true                        
                            if((scrollDiv.scrollTop - (scrollDiv.scrollHeight - scroll)) >= 0 ){
                                blnPinScrollbar = true;
                            }
                            
                            if(!blnPinScrollbar && testDiv)
                            {
                                testDiv.innerHTML += "scrollDiv.scrollTop : " + scrollDiv.scrollTop; 
                                testDiv.innerHTML += " --- scrollDiv.scrollHeight - 330 : " + (scrollDiv.scrollHeight - scroll) + "<br />"; 
                            }

                            //Set the new content in the div.
                            var date = "";
                            var message = "";
                            var username = "";
                            var dateNodeItem = null;
                            var userNodeItem = null;
                            var messageNodeItem = null;
                            for(var x = 0; x <= chatMessageLength; x++)
                            {                                   
                                if(dateNodeItems)
                                    dateNodeItem = dateNodeItems[x];  
                                if(messageNodeItems)
                                    messageNodeItem = messageNodeItems[x];
                                if(userNodeItems)
                                    userNodeItem = userNodeItems[x];
                                
                                 date = dateNodeItem.firstChild.data;
                                 username = userNodeItem.firstChild.data;
                                 message = messageNodeItem.firstChild.data;
                                 
                                if (date != "" && message != "" && username != "")
                                {     
                                    newHtml = //"<td style=\"background-color: rgb(224, 224, 224);\" >"+
                                               "<i><span id=\"DataList1_ctl00_DateTimeLabel\">" + date + "</span></i>: "+
                                               "<b><span id=\"DataList1_ctl00_UserNameLabel\">" + username + "</span></b><br />"+
                                               "<span id=\"DataList1_ctl00_MessageLabel\">" + message + "</span>";//</td>";
                                               
                                    if (navigator.appName.indexOf('Microsoft Internet Explorer')!=-1)
                                    {
                                        var tRow = table.tBodies[0].insertRow(); 
                                        var tCell = tRow.insertCell();
                                        tCell.innerHTML = newHtml;
                                        tCell.runtimeStyle.backgroundColor = backgroundColor;
                                    }
                                    else
                                    {
                                        table.tBodies[0].innerHTML += "<tr><td style=\"background-color: "+backgroundColor+";\" >"+newHtml+"</td></tr>";
                                    }
                                                    
                                    if(oddEven == "even")
                                    {                                      
                                        oddEven = "odd";
                                        backgroundColor = "rgb(224, 224, 224)";
                                    }
                                    else
                                    {
                                        oddEven = "even";
                                        backgroundColor = "white";
                                    }
                                }
                                else
                                {
                                    testDiv.innerHTML += "error with xml date,username or message is blank " + "<br />"; 
                                }
                            
                            }  
                                                           
                            //if pin variable true, go ahead and scroll down,otherwise, don't touch the scroll position
                            if(blnPinScrollbar)   
                                scrollDiv.scrollTop = scrollDiv.scrollHeight;
                        }
                    }
                }
            }
         } else {
              if(testDiv)
                 testDiv.innerHTML += "There was a problem retrieving the page: " + req.statusText + "<br />"; 
         } 
     }
}


function calc(formName, formUrl, getUrl,scroll) {

    frm=document.forms[formName];
    var errors = "";
    var nowObj = new Date();
    var timeDiff = nowObj.getTime() - dateObj.getTime();

    if(timeDiff > 1000)
    {
        dateObj = new Date();
        if( frm.elements['txtBoxUserName'].value == "") 
        {
            errors += '- name is required.\n'; 
        }
        else
        {
            var name = frm.elements['txtBoxUserName'].value;
            if( name.length > 64) 
            {
                errors += '- name cannot be longer than 64 characters.\n'; 
            }
        }
        
        if( frm.elements['txtMessage'].value == "") 
        {
            errors += '- message is required.\n'; 
        }
        else
        {
            var message = frm.elements['txtMessage'].value;
            if( message.length > 512) 
            {
                errors += '- message cannot be longer than 512 characters.\n'; 
            }
        }
        if(errors != "")
        {
            alert('The following error(s) occurred:\n'+errors);
        }
        else
        {
            
            url=formUrl+"?name="+escape(frm.elements['txtBoxUserName'].value)+"&message="+
                escape(frm.elements['txtMessage'].value)+"&chatID="+frm.elements['ChatID'].value+"&time="+getClockTime();
                
            formReq = false;
            formReq = GetAjax();
            
            if (formReq)
            {
            //alert(url);
                formReq.open("GET",url,true);
                formReq.onreadystatechange=function() {
               // alert(formReq.readyState);
                    if (formReq.readyState==4) {
                        GetChatPage(getUrl+"?chatID="+frm.elements['ChatID'].value,scroll);
                    }
                }
            
                formReq.setRequestHeader('Accept','message/x-formresult');
                
                if(!isIE)
                    formReq.send(null);
                else
                    formReq.send();
            }
        }
        //frm.elements['txtMessage'].value = "";
        //frm.elements['txtMessage'].focus();
    }
    
    frm.elements['txtMessage'].value = "";
        frm.elements['txtMessage'].focus();

    
    return false;
}

function getClockTime()
{
   var now    = new Date();
   var hour   = now.getHours();
   var minute = now.getMinutes();
   var second = now.getSeconds();
   var timeString = hour + "" +
                    minute + "" +
                    second;
   return timeString;
}
