﻿// JScript File
	
// local variables
var adText = "Ai,artificial inteligence,Artificial Intelligence,AI,MyBot,chatterbot,chatbot,Virtual friend,virtual agent, intelligent agent,conversational agent,conversational interface,Hal,natural language processing,natural language understanding,NLP,NLU";
var logLines = "";
var text="content of text here";
var delay=50;
var currentChar=1;
var destination="[not defined]";

var isInitialRequest;
var goButton;
var entryBox;
var resultDIV;
var timerID = 0;  
var speech = "on";
var speechGenderParam = "female=0";
var userLine="";
var requestAfterTimeout=0;
// var turnsUntilAd = 5;


//function createAd(text)
//{
//    var tDiv = document.createElement("div");
//    var iframe = document.createElement("iframe");
//    iframe.src = "showsmallad.aspx?text="+text;
//    iframe.className = "inlinead";
//    iframe.frameBorder = 0;
//    iframe.scrolling = "no";
//    tDiv.className = "inlineaddiv";
//    tDiv.appendChild(iframe);
//    return tDiv;
//}

function askNextQuestion()
{
			if (nextQuestion > (questions.length-1)) nextQuestion=0;
			mbGetElementById("entry").value=questions[nextQuestion];
			nextQuestion++;
			goButton.click();
}

function mbGetElementById(e)
{
  if(typeof(e)=='string') {
	if(document.getElementById) e=document.getElementById(e);
	else if(document.all) e=document.all[e];
	else e=null;
  }
  return e;
}

function type()
{
  var dest=destination;
  dest.innerHTML=text.substr(0, currentChar);
  dest.scrollIntoView(true);
  currentChar++
  if (currentChar>text.length)
  {
     return
  }
  else
  {
     setTimeout("type()", delay);
  }
}

function startTyping(textParam, delayParam, destinationParam)
{
  text=textParam;
  delay=delayParam;
  currentChar=1;
  destination=destinationParam;
  type();
}

function say(text,text1)
{
		speakElement = mbGetElementById("speechSpan");
		if (text1 == "")
		{
		    speakBoth=""
		}
		else
		{
		    speakBoth = "&question="+escape(text1);
		}
		
		speakURL = "speak.aspx?"+speechGenderParam+"&text="+escape(text)+speakBoth;
		if (browser == "IE")
		{
		document.all.bgsound.src = speakURL;
		}
		else
		{
		speakElement.innerHTML = "<embed autoplay='true' hidden='true' src='"+speakURL+"' controller='false' type='audio/wav'></embed>";
		}
}
     
        function setSession (value)
        {
            inSession = value;
            PageMethods.SetSession("inSessionState",inSession);
        }
        
        function setBotName (value)
        {
            botName = value;
            PageMethods.SetSession("botNameState",botName);
        }
        
        function setUserName (value)
        {
            userName = value;
            PageMethods.SetSession("UserNameState",userName);
        }

        function appendLogState (value)
        {
            PageMethods.AppendSession(value);
            logLines = "";
        }

		function init()
		{
	       goButton = mbGetElementById("go");
	       entryBox = mbGetElementById("entry");
	       resultDIV = mbGetElementById("result");
		   updateBotNameDisplay();
	       var endoflog = mbGetElementById("endoflog");
	       if (endoflog) { endoflog.scrollIntoView(true); }
	       if (inSession == "" || !inSession)
	       {
	             userName = "User";
	             isInitialRequest = "1";
	             initialRequest();
	       }
	       if (isAdFree == "1")
	       {
				var adFrame = mbGetElementById("ad");
				adFrame.style.display = 'none';
				resultDIV.style.height = '300px';
	       }
		}
		
            function disableInput()
            {
			   goButton.disabled = true;
            }

            function enableInput()
            {
			   goButton.disabled = false;
			   entryBox.value = "";
    	       entryBox.focus();
            }
            
			function createDiv(text, classname)
			{
			   var tDiv = document.createElement("div");
			   tDiv.innerHTML = text;
			   tDiv.className = classname;
			   return tDiv;
			}
			
			function getNode(xmlDocumentRoot, nodeName)
			{
				var nodeList = xmlDocumentRoot.getElementsByTagName(nodeName);
				if (nodeList.length > 0)
				   {
						return (nodeList[0].childNodes[0].nodeValue);
				   }
				   else
				   {
						return "";
				   }
			}

			function updateBotNameDisplay()
			{
				var botelement = mbGetElementById("botname");
				botelement.innerHTML = botName;
				var userelement = mbGetElementById("displayusername");
				userelement.innerHTML = userName;
			}
			
			function addUserLine(text)
			{
				userLine = text;
				var says = createDiv("User says:", "saysline");
				var user = createDiv(text,"userline");
				resultDIV.appendChild(says);
				resultDIV.appendChild(user);
				logLines = "<div class=saysline>"+says.innerHTML+"</div>" + "<div class=userline>"+user.innerHTML+"</div>";
				user.scrollIntoView(true);
			}
			
			function addMyBotLine(text)
			{
				switch (speech)
				{
				    case "on":
					    say(text,"");
					    break;
					case "both":
					    say(text,userLine);
					    break
				}
				var adFrame = mbGetElementById("ad");
				adFrame.src="showad.aspx?text="+adText;
				userLine="";
				var says = createDiv(botName+" says:","saysline");
				var mybot = createDiv("-","mybotline");
				resultDIV.appendChild(says);
				resultDIV.appendChild(mybot);
				var mybottext = createDiv(text,"mybotline");
				appendLogState(logLines + "<div class=saysline>"+says.innerHTML+"</div>" + "<div class=mybotline>"+mybottext.innerHTML+"</div>");
				mybot.scrollIntoView(true);
				startTyping(text,30, mybot);
			}
			
			function loginRequestText()
			{
                var entryText;
                if (requestAfterTimeout == 1)
				{
				    entryText = "<![CDATA[<SessionTimeout>hi]]>";
				    requestAfterTimeout = 0;
				}
				else
				{
				    entryText = "hi";
				}
			    if (!isFacebookUser)
			    {
			        return "<webLogin><question>"+entryText+"</question><UserID>"+id+"</UserID></webLogin>";
			    }
			    else
			    {
			        if (visitorID == "")
			        {
			            return "<loginOwner><question>"+entryText+"</question><UserID>"+id+"</UserID><OwnerName>"+ownerName+"</OwnerName><numericvariables><Facebook>1</Facebook></numericvariables><stringvariables>"+engineVariables+"</stringvariables><ClientAgent>FB</ClientAgent></loginOwner>";
			        }
			        else
			        {
			            return "<loginVisitor><question>"+entryText+"</question><UserID>"+id+"</UserID><VisitorID>"+visitorID+"</VisitorID><NickName>"+visitorName+"</NickName><numericvariables><Facebook>1</Facebook></numericvariables><ClientAgent>FB</ClientAgent></loginVisitor>";
			        }
			    }
    	    
			}
			
			function initialRequest()
			{
					setTimer();
					disableInput();
    				var says = createDiv("Loading... Please Wait.","saysline");
				    resultDIV.appendChild(says);
					var entryText = loginRequestText();
					entryBox.value="Loading... Please Wait.";
					improxy.requestXMLString(entryText, onOK, onTimeOut, onError);
			}
			
			function request()
			{
				if(!goButton.disabled)
				{
					setTimer();
					disableInput();
					addUserLine(entryBox.value);
					if (inSession == "" || !inSession)
					{
						var entryText = loginRequestText();
					}
					else
					{
						var entryText = "<getAnswer><question>"+entryBox.value+"</question></getAnswer>";
					}
					entryBox.value="";
					improxy.requestXMLString(entryText, onOK, onTimeOut, onError);
				}
			}
			
			function onOK(resultXML)
			{
			   if(isInitialRequest == "1")
			   {
				    resultDIV.innerHTML="";
			        isInitialRequest = "";
			   }
			   
			   var result = resultXML.documentElement.attributes[0].nodeValue;
			   if(result == "OK")
			   {
				   var reply = getNode(resultXML,"answer");
				   
				   var speakResult = getNode(resultXML,"speak");
				   if (speakResult != "")
				   {
				      switch(speakResult)
				      {
				        case "on":
				        case "off":
				        case "both":
        				    speech = speakResult;
				            break
				        case "male":
				            speechGenderParam = "female=0";
				            break
				        case "female":
				            speechGenderParam = "female=1";
				            break
				      }
				   }
				   
				   if (inSession == "" || !inSession)
				   {
					   setSession ("1");
				   }
				   
				   var tName = getNode(resultXML,"botName");
				   if (tName != "")
				   {
				        botName=tName;
          				setBotName(botName);
				   } else
				   {

				       var tName = getNode(resultXML,"name");
				       if (tName != "")
				        {
				            botName=tName;
          				    setBotName(botName);
				        }
				    }
				    
				   var tName = getNode(resultXML,"userName");
				   if (tName != "")
				   {
            			userName = tName;
    	        		setUserName(userName);
				   }
				   updateBotNameDisplay();

				   var tName = getNode(resultXML,"skin");
				   if (tName != "")
				   {
            			mbGetElementById("stylelink").href = "skin/"+tName+".css";
				   }

				   var adResult = getNode(resultXML,"ad");
				   if (adResult != "")
				   {
            			adText = reply;
				   }

				   addMyBotLine(reply);
//                   if (adResult !="" || turnsUntilAd == 0)
//                   {
//    		            turnsUntilAd = 5;
//     				    var ad = createAd(reply);
//    		            resultDIV.appendChild(ad);
//    		       }
//    		       turnsUntilAd = turnsUntilAd - 1;
        		   enableInput();
			   }
			   else
			   {
				   var reply = getNode(resultXML,"answer");
				   addMyBotLine(reply);
				   setSession ("");
        		   enableInput();
			   }
			}
            
			function onTimeOut(resultXML)
			{
			   setSession ("");
			   alert("An answer was not received in reasonable time. Restarting conversation.");
			   enableInput();
			}
			
			function onError(resultXML)
			{
			   setSession ("");
			   alert("An error has occured. Restarting conversation.");
			   enableInput();
			}
            
			function setTimer()
			{
			   if (timerID != 0 )
			   {
				  clearTimeout(timerID);
			   }
			   timerID = setTimeout("clearSession()",4.5*60*1000);
			}
			
			function clearSession()
			{
			   requestAfterTimeout = 1;
			   setSession ("");
			}

