var needToConfirm = true;

var agentMessageDelay = 1000;
var agentReplyDelay = 3000;
var agentMessageAdded = false;
var agentID = 0;
var agentName = "";;
var boxTitle = "";
var leaveMessageContents = "";
var connectedMessage = "";
var initMessage = "";
var boxContents = "";
var siteName = "";
var siteID = 0;
var userID = "";

window.onload = setupMe;
function setupMe()
{
  setupLinks();
  setupVariables();
}

function setupLinks()
{
  var as = document.getElementsByTagName("a");
  for(var i=0, limit = as.length; i < limit; ++i)
  {
    as[i].onclick = cancelConfirm;
  }
  var inputs = document.getElementsByTagName("input");
  for(var i=0, limit = inputs.length; i < limit; ++i)
  {
    if (inputs.type = "submit")
    {
      inputs[i].onclick = cancelConfirm;
    }
  }
}

function setupVariables()
{
  var myURL = document.location.href;
  myURL = myURL.replace("//www.", "");
  myURL = myURL.replace("http://", "");
  myURL = myURL.replace("http:", "");
  myURL = myURL.substr(0, myURL.indexOf("/", 0));
  $.ajax({  
    type: "POST",  
    url: "conversionsaver/getsettings.php",  
    data: "siteurl=" + myURL,  
    success: function(data) { 
      if (data != "Site not found")
      {
        var splitData = data.split("|");
        siteID = splitData[0];
        siteName = splitData[1];
        agentID = splitData[2];
        agentName = splitData[3];
        boxTitle = splitData[4];
        leaveMessageContents = splitData[5].replace("[newline]","\n").replace("[newline]","\n").replace("[newline]","\n").replace("[newline]","\n");
        connectedMessage = splitData[6];
        initMessage = splitData[7];
        var agentImage = " style='background:url(\"conversionsaver/agents/" + siteID + "/" + agentName + ".jpg\");'";
        boxContents = "<div id='cnvs_chat'><div id='cnvs_chatlog'><p>Connecting to agent...</p></div><div id='cnvs_chatpicture'" + agentImage + "></div><div id='cnvs_input'><input id='cnvs_inputtext' type='text' size='69' autocomplete='off' onkeydown='inputKeyPressed(event);' /><input id='cnvs_send' type='submit' value='Send' onclick='submitUserMessage();' /></div><div id='cnvs_status'>" + agentName + " is typing...</div></div>";
        userID = createUUID();
      }
    } 
  });
}

function createUUID() 
{
    // http://www.ietf.org/rfc/rfc4122.txt
    var s = [];
    var hexDigits = "0123456789ABCDEF";
    for (var i = 0; i < 32; i++) {
        s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);
    }
    s[12] = "4";  // bits 12-15 of the time_hi_and_version field to 0010
    s[16] = hexDigits.substr((s[16] & 0x3) | 0x8, 1);  // bits 6-7 of the clock_seq_hi_and_reserved to 01

    var uuid = s.join("");
    return uuid;
}

window.onbeforeunload = confirmExit;
function confirmExit()
{
  if (needToConfirm && siteID > 0 && !getCookie('conversionsaver'))
  {
    cancelConfirm();
    setCookie('conversionsaver', 'done', 150, '/', '', '');
    setTimeout('initChat()', 100);
    new Boxy(boxContents, {title: boxTitle, modal: true});
    return leaveMessageContents;
  }
}

function cancelConfirm()
{
  needToConfirm = false;
}

function initChat()
{
  addMessage(connectedMessage);
  addAgentMessage(initMessage, agentMessageDelay);
}

function inputKeyPressed(event)
{
  if (event.keyCode == 13)
  {
    submitUserMessage()
  }
}

/* USER FUNCTIONS */

function submitUserMessage()
{
  var chatInputBox = document.getElementById('cnvs_inputtext');
  var chatInput = chatInputBox.value;
  if (chatInput == "") return;
  chatInputBox.value = "";
  $.ajax({  
    type: "POST",  
    url: "conversionsaver/processmessage.php",  
    data: "userid=" + userID + "&siteid=" + siteID + "&agentid=" + agentID + "&userresponse=" + chatInput,  
    success: function(data) {  
      addUserMessage(chatInput);
      addDelayedAgentMessage(data, agentReplyDelay);
    } 
  });
}


function addUserMessage(msg)
{
  addMessage("<span style='font-weight:bold; color:blue;'>You:</span> <span style='color:blue;'>" + msg + "</span>", 0);
}

/* AGENT FUNCTIONS */

function showAgentTyping()
{
  document.getElementById('cnvs_status').style.display = 'block'; 
}

function hideAgentTyping()
{
  document.getElementById('cnvs_status').style.display = 'none'; 
}

function addDelayedAgentMessage(msg, delay)
{
  setTimeout('addAgentMessage("' + msg + '", ' + delay + ')', agentMessageDelay);
}

function addAgentMessage(msg, delay)
{
  showAgentTyping();
  var correctedDelay = delay + msg.length * 50;
  if (correctedDelay > 10000) correctedDelay = 10000;
  addMessage("<span style='font-weight:bold; color:black;'>" + agentName + ":</span> <span style='color:black;'>" + msg + "</span>", correctedDelay);
  setTimeout('hideAgentTyping()', correctedDelay);
}

/* GENERIC ADDMESSAGE FUNCTIONS */

function addMessage(msg, delay)
{
  setTimeout('doAddMessage("' + msg + '");', delay);
}

function doAddMessage(msg)
{
  var chatLog = document.getElementById('cnvs_chatlog');
  chatLog.innerHTML = chatLog.innerHTML + "<p>" + msg + "</p>";
  chatLog.scrollTop = chatLog.scrollHeight;
}

/* COOKIE PROCESSING */

function setCookie(name, value, expires, path, domain, secure)
{
  var today = new Date();
  today.setTime(today.getTime());
  if (expires)
  {
    expires = expires * 1000 * 60 * 60 * 24;
  }
  var expires_date = new Date(today.getTime() + (expires));
  document.cookie = name + "=" +escape(value) + ((expires) ? ";expires=" + expires_date.toGMTString() : "") + ((path) ? ";path=" + path : "") + ((domain) ? ";domain=" + domain : "") + ((secure) ? ";secure" : "");
}

function getCookie(check_name) 
{
	var a_all_cookies = document.cookie.split(';');
	var a_temp_cookie = '';
	var cookie_name = '';
	var cookie_value = '';
	var b_cookie_found = false; // set boolean t/f default f

	for (i = 0; i < a_all_cookies.length; i++)
	{
		//now we'll split apart each name=value pair
		a_temp_cookie = a_all_cookies[i].split('=');

		//and trim left/right whitespace while we're at it
		cookie_name = a_temp_cookie[0].replace(/^\s+|\s+$/g, '');

		//if the extracted name matches passed check_name
		if (cookie_name == check_name)
		{
			b_cookie_found = true;
			//we need to handle case where cookie has no value but exists (no = sign, that is):
			if (a_temp_cookie.length > 1)
			{
				cookie_value = unescape(a_temp_cookie[1].replace(/^\s+|\s+$/g, ''));
			}
			//note that in cases where cookie is initialized but no value, null is returned
			return cookie_value;
			break;
		}
		a_temp_cookie = null;
		cookie_name = '';
	}
	
	if (!b_cookie_found)
	{
		return null;
	}
}

