var jQueryVersion = '1.2.6';
function includeJavaScript(jsFile)
{
  document.write('<script type="text/javascript" src="'
    + jsFile + '"></script>'); 
}
function includeCSS(cssFile)
{
  document.write('<link rel="stylesheet" type="text/css" href="'
    + cssFile + '" />'); 
}

includeJavaScript('http://ajax.googleapis.com/ajax/libs/jquery/'+jQueryVersion+'/jquery.min.js');


askTheCougarClass = function(){
	  // Properties
	  var instanceName = 'askTheCougar'; 
	  var wsUrl = '/askthecougar/scripts';
	  var sessionId;  
	  var interfaceId = '4';
	  var overrideInterfaceId = null;
	  var responseId;
	  var version;
	  var lblTop = 'Top 10 Questions'; 
	  var lblAsk = 'Ask';
	  var lblGo = 'Go';
	  var lblSuggested = 'You may be interested in...';
	  var lblRelated = 'Related:';
	  var lblLinks = 'Links:';
	  var lblRate = 'Are you satified with your answer?';
	  var lblBtnRate = 'Rate';
	  var defaultResponse = 'There was no response for this question.';
	  var lblRatingResponse = 'Thanks for the rating.';
	  var lblFilterMsg = 'This does not appear to be a question.';
	  var numberOfQuestions = 10;
	  var badWordList = 'viagra,shit,fuck,damn,bitch';
	  var ajaxIndicatorImg = '/askthecougar/images/circle-ball-dark-antialiased.gif';
	  
	  //Methods
	  this.render = function(version,instance){
	  	if(instance != undefined){
	  		instanceName = instance;
		}
		if(version == 'lite'){
			version = 'lite';
		}
		else
		{
			version = 'full';
		}
		this.controller(1);
	  }
	  


	  this.controller = function(phase) {
            switch (phase) {
				case 1:
				    this.getSessionId();
					this.listen();
					this.ajaxStatus();
				    this.form()
					break;
				case 2:

					break;
			}
	  }
	  
	  this.form = function() {
		 var output = '<p id="ask-intructions">Ask the Cougar is designed to assist current and future students in finding information about the College of Charleston, including admissions, residence living, financial aid, student life, and much more. <br /><br />Enter your inquiry in the form of a question and click the Ask button.</p><div id="ask-wrapper"><div id="frmAskTheCougar"><div id="int-txt">You are asking in </div><select id="interface">';
		 output = output + '<option value="4">Undergraduate Students</option>';
		 output = output + '<option value="1">Graduate Students</option>';
		 output = output + '<option value="5">IT Services</option>';
		 output = output + '<option value="6">Faculty &amp; Staff</option>';
		 output = output + '</select>';
		 output = output + '<input id="txtQuestion" type="textbox"></input><input id="btnAsk" type="button" value="'+lblAsk+'" onclick="'+instanceName+'.ask(document.getElementById(\'txtQuestion\').value);"></input><input id="btnTop" type="button" value="'+lblTop+'" onclick="'+instanceName+'.getTopQuestions();"></input>';
		 output = output + '<img id="ajaxIndicator" alt="" src="" style="width:16px;height:16px" /></div>';
	  	 output = output + '<span id="msg"></span><div id="response"><h1 id="response-title"></h1><div id="response-body"></div><h4 id="response-links-title"></h4><div id="response-links"></div><h4 id="response-rate-title"></h4><div id="response-rate"></div><span id="response-rate-msg"></span>';
		 output = output + '<h4 id="response-related-title"></h4><div id="response-related"></div><h4 id="response-suggested-title"></h4><div id="response-suggested"></div></div></div>';
		 document.write(output);
		 var selObj = document.getElementById('interface');
		 var selected4 ='',selected1 = '',selected5 ='',selected6 = '';
		 switch(eval(instanceName).getQueryStr('i')){
		 	case '4':
			 	 selObj.selectedIndex = 0;
			break;
			case '1':
				 selObj.selectedIndex = 1;
			break;
			case '5':
				 selObj.selectedIndex = 2;
			break;
			case '6':
				 selObj.selectedIndex = 3;
			break;
		 }
		 
	  }
	  
	  this.listen = function(){	
		  $(document).ready(function(){
		    $(document.getElementById('txtQuestion')).keypress(function (e) {
		      if (e.which == 13 ){
		 		eval(instanceName).ask(document.getElementById('txtQuestion').value);
		      } 
		    });
		  });
	  }
	  
	  this.ajaxStatus =function(){
		  $(document.getElementById('ajaxIndicator')).ajaxSend(function(evt, request, settings){
		      document.getElementById('ajaxIndicator').src = ajaxIndicatorImg;
		  });
		  $(document.getElementById('ajaxIndicator')).ajaxComplete(function(request, settings){
   			 document.getElementById('ajaxIndicator').src = '/images/blank.gif';
 		  });
	  }
	  
	  
	  this.getSessionId = function(){
	    if(sessionId === undefined) {
		  	var result =$.getJSON(wsUrl+"/askthecougarwebservice.php?method=getSessionId",
	        //console.log(data)
			function(data){
				//console.log(data);
				sessionId = data;
				if(eval(instanceName).getQueryStr('q') !== undefined){
					    if (eval(instanceName).getQueryStr('i') !== undefined) {
							overrideInterfaceId = eval(instanceName).getQueryStr('i');
						}
						eval(instanceName).ask(unescape(eval(instanceName).getQueryStr('q')));
				}
	        }
			);
		}
	  }
	  
	  
	  this.getTopQuestions = function(){
		  	var elSelect  = document.getElementById('interface');
			interfaceId = elSelect.options[elSelect.selectedIndex].value;
		  	$.getJSON(wsUrl+'/askthecougarwebservice.php?method=getTopQuestions&params=interfaceId='+interfaceId+'|numberOfQuestions='+numberOfQuestions,
	        function(data){
				//console.log(data);
				eval(instanceName).response(data);
	        });
	  }
	  
      this.ask = function(question){
	  	 var elSelect  = document.getElementById('interface');
		 if(overrideInterfaceId !== null){
		 	interfaceId = overrideInterfaceId;
			overrideInterfaceId = null;
		 }
		 else {
		 	interfaceId = elSelect.options[elSelect.selectedIndex].value;
		 }
		 if(this.isNumeric(question)) {
			 $.getJSON(wsUrl+'/askthecougarwebservice.php?method=getResponse&params=interfaceId='+interfaceId+'|sessionId='+sessionId+'|responseId='+question,
			 function(data){
				eval(instanceName).response(data);
			 });
		 }
		 else{
		 	 if (this.filter(question)) {
			 	$.getJSON(wsUrl + '/askthecougarwebservice.php?method=ask&params=interfaceId=' + interfaceId + '|sessionId=' + sessionId + '|question=' + question, function(data){
			 		eval(instanceName).response(data);
			 	});
			 }
			 else {
			 	document.getElementById('msg').innerHTML = lblFilterMsg;
				document.getElementById('response-title').innerHTML = '';
				document.getElementById('response-body').innerHTML = '';
				document.getElementById('response-links-title').innerHTML = '';
				document.getElementById('response-links').innerHTML = '';
				document.getElementById('response-rate-title').innerHTML = '';
				document.getElementById('response-rate').innerHTML = '';
				document.getElementById('response-rate-msg').innerHTML = '';
				document.getElementById('response-related-title').innerHTML = '';
				document.getElementById('response-related').innerHTML = '';
				document.getElementById('response-suggested-title').innerHTML = '';
				document.getElementById('response-suggested').innerHTML = '';
				document.getElementById('response-body').innerHTML = '';
			 }
		 }
	  }
	  
	  this.submitRating = function(obj){
             var rating = this.getCheckedValue(obj);
			 if(rating !== false){
				 $.getJSON(wsUrl+'/askthecougarwebservice.php?method=rateResponse&params=interfaceId='+interfaceId+'|sessionId='+sessionId+'|responseId='+responseId+'|rating='+rating,
				 function(data){
					if(data !== false){
						document.getElementById('response-rate-msg').innerHTML = lblRatingResponse;
					}
				 });
			 }
	  }
	  
	  this.response = function(data){
		 	
			//Body
			if(data === false){
				document.getElementById('msg').innerHTML = '';
				document.getElementById('response-title').innerHTML = '';
				document.getElementById('response-body').innerHTML = '';
				document.getElementById('response-links-title').innerHTML = '';
				document.getElementById('response-links').innerHTML = '';
				document.getElementById('response-rate-title').innerHTML = '';
				document.getElementById('response-rate').innerHTML = '';
				document.getElementById('response-rate-msg').innerHTML = '';
				document.getElementById('response-related-title').innerHTML = '';
				document.getElementById('response-related').innerHTML = '';
				document.getElementById('response-suggested-title').innerHTML = '';
				document.getElementById('response-suggested').innerHTML = '';
				document.getElementById('response-body').innerHTML = defaultResponse;
			}
            else if(data['responses'] === undefined || data['responses']['body'] !== undefined ){
                                if(data['responses'] !== undefined){
                                        data = data['responses'];
                                }
                                //console.log(data);
				document.getElementById('msg').innerHTML = '';
				if(data.title === undefined){
					document.getElementById('response-title').innerHTML = '';
				}
				else{
					document.getElementById('response-title').innerHTML = data.title;
				}
				if (data.body === undefined) {
					document.getElementById('response-body').innerHTML = '';
				}
				else {
					document.getElementById('response-body').innerHTML = data.body;
				}
				//Links
				var linksOutput = '<ul id="links">';
				for(j in data.links){
					linksOutput = linksOutput + '<li><a href="'+data.links[j]+'">' + data.links[j] + '</a></li>';
				}
				
				if (typeof(data.links) == 'object') {
					document.getElementById('response-links-title').innerHTML = lblLinks;
					document.getElementById('response-links').innerHTML = linksOutput;
				}
				else if(typeof(data.links) == 'string' && data.links != '') {
					document.getElementById('response-links-title').innerHTML = lblLinks;
					document.getElementById('response-links').innerHTML = '<ul id="links"><li><a href="'+data.links+'">' + data.links + '</a></li></ul>';	
				}
				else {
					document.getElementById('response-links-title').innerHTML = '';
					document.getElementById('response-links').innerHTML = '';
				}
                                linksOutput = linksOutput + '</ul>';
				// Rate
				document.getElementById('response-rate-msg').innerHTML = '';
				if (typeof(data.id) == 'string' && data.id != '') {
					/*responseId = data.id;
					document.getElementById('response-rate-title').innerHTML = lblRate;
					var rateOutput ='<form id="frmRating" name="frmRating">';
					rateOutput = rateOutput + '<input type="radio" value="0" id="rdRating" name="rdRating"/>Poor';
					rateOutput = rateOutput + '<input type="radio" value="20" id="rdRating" name="rdRating"/>Pretty bad';
					rateOutput = rateOutput + '<input type="radio" value="40" id="rdRating" name="rdRating"/>Sort of close';
					rateOutput = rateOutput + '<input type="radio" value="60" id="rdRating" name="rdRating"/>Not bad';
					rateOutput = rateOutput + '<input type="radio" value="80" id="rdRating" name="rdRating"/>Good';
					rateOutput = rateOutput + '<input type="radio" value="100" id="rdRating" name="rdRating"/>Perfect!';
					rateOutput = rateOutput + '<input type="button" onclick="'+instanceName+'.submitRating(document.frmRating.rdRating);" value="'+lblBtnRate+'" id="btnRating"/>';
					rateOutput = rateOutput + '</form>',
					document.getElementById('response-rate').innerHTML = rateOutput;	*/
				}
				else{
					document.getElementById('response-rate-title').innerHTML = '';
					document.getElementById('response-rate').innerHTML = '';	
				}
				
				//Related
				var relatedOutput = '<select id="related" onchange="'+instanceName+'.ask(document.getElementById(\'suggested\').options[document.getElementById(\'related\').selectedIndex].value);">';
				for(i in data.related){
					relatedOutput = relatedOutput + '<option value="'+data.related[i].id+'">' + data.related[i].title + '</option>';
				}
				relatedOutput = relatedOutput + '</select><input id="btnGo0" type="button" value="'+lblGo+'" onclick="'+instanceName+'.ask(document.getElementById(\'related\').options[document.getElementById(\'related\').selectedIndex].value);"></input>';
				 if (typeof(data.related) == 'object') {
				 	if (data.related[0] === undefined) {
						document.getElementById('response-related-title').innerHTML = lblRelated;
						document.getElementById('response-related').innerHTML = '<select id="related" onchange="'+instanceName+'.ask(document.getElementById(\'suggested\').options[document.getElementById(\'related\').selectedIndex].value);"><option value="'+data.related.id+'">' + data.related.title + '</option></select><input id="btnGo0" type="button" value="'+lblGo+'" onclick="'+instanceName+'.ask(document.getElementById(\'related\').options[document.getElementById(\'related\').selectedIndex].value);"></input>';
					}
					else {
						document.getElementById('response-related-title').innerHTML = lblRelated;
						document.getElementById('response-related').innerHTML = relatedOutput;
					}
				}
				else {
					document.getElementById('response-related-title').innerHTML = '';
					document.getElementById('response-related').innerHTML = '';			
				}
				
				//Suggested
				var suggestedOutput = '<select id="suggested" onchange="'+instanceName+'.ask(document.getElementById(\'suggested\').options[document.getElementById(\'suggested\').selectedIndex].value);">';
				for(i in data.suggested){
					suggestedOutput = suggestedOutput + '<option value="'+data.suggested[i].id+'">' + data.suggested[i].title + '</option>';
				}
				suggestedOutput = suggestedOutput + '</select><input id="btnGo" type="button" value="'+lblGo+'" onclick="'+instanceName+'.ask(document.getElementById(\'suggested\').options[document.getElementById(\'suggested\').selectedIndex].value);"></input>';
				if (typeof(data.suggested) == 'object') {
					document.getElementById('response-suggested-title').innerHTML = lblSuggested;
					document.getElementById('response-suggested').innerHTML = suggestedOutput;
				}
				else {
					document.getElementById('response-suggested-title').innerHTML = '';
					document.getElementById('response-suggested').innerHTML = '';			
				}
			}
			else if(data['responses'] !== undefined){
				document.getElementById('msg').innerHTML = '';
				document.getElementById('response-title').innerHTML = '';
				document.getElementById('response-body').innerHTML = '';
				document.getElementById('response-links-title').innerHTML = '';
				document.getElementById('response-links').innerHTML = '';
				document.getElementById('response-rate-title').innerHTML = '';
				document.getElementById('response-rate').innerHTML = '';
				document.getElementById('response-rate-msg').innerHTML = '';
				document.getElementById('response-related-title').innerHTML = '';
				document.getElementById('response-related').innerHTML = '';
				document.getElementById('response-suggested-title').innerHTML = '';
				document.getElementById('response-suggested').innerHTML = '';
				var bestResponsesOutput = '<ol id="bestResponses">';
				data = data['responses'];
				for(k in data){
					bestResponsesOutput = bestResponsesOutput + '<li><a href="javascript:void(0);" onclick="'+instanceName+'.ask(\''+data[k].id+'\');">' + data[k].title + '</a></li>';
				}
				bestResponsesOutput = bestResponsesOutput + '</ol>';
				document.getElementById('response-body').innerHTML = bestResponsesOutput;
			}

	  }
	  
	  // Helpers
	  this.filter = function(str){
	  	var strArr = str.split(' ');
		var badWordArr = badWordList.split(',');
		var badWord = false;
		var wordCount = 0;
		for(i in strArr){
			wordCount++;
			//console.log();
			if(strArr[i] in this.oc(badWordArr)){
				badWord = true;
				break;
			}
		}
		if(wordCount < 2 || badWord == true){
			return false;
		}
		else
		{
			return true;
		}
	  }
	  
	  this.isNumeric = function(val) { 
			    if (val.match(/^\d+$/) == null) 
			        return false; 
			    else 
			        return true; 
	  } 
	  
	  this.getQueryStr = function(ji){
	  	hu = window.location.search.substring(1);
		gy = hu.split("&");
		for (i = 0; i < gy.length; i++) {
			ft = gy[i].split("=");
			if (ft[0] == ji) {
				return ft[1];
			}
		}
	  }
	  
	  

	  this.getCheckedValue = function(radioObj) {
			if(!radioObj)
				return false;
			var radioLength = radioObj.length;
			if(radioLength == undefined)
				if(radioObj.checked)
					return radioObj.value;
				else
					return false;
			for(var i = 0; i < radioLength; i++) {
				if(radioObj[i].checked) {
					return radioObj[i].value;
				}
			}
			return false;
	  }
	  
	  this.oc = function(a){
		  var o = {};
		  for(var i=0;i<a.length;i++)
		  {
		    o[a[i]]='';
		  }
		  return o;
	  }

	  
	  // Getters and Setters
	  this.setWsUrl = function(input) {wsUrl = input;}
      this.getWsUrl = function() {return wsUrl;}
	  this.setLblSuggested = function(input) {lblSuggested = input;}
      this.getLblSuggested = function() {return lblSuggested;}
	  this.setLblRelated = function(input) {lblRelated = input;}
      this.getLblRelated = function() {return lblRelated;}
	  this.setLblLinks = function(input) {lblLinks = input;}
      this.getLblLinks = function() {return lblLinks;}
	  this.setLblTop = function(input) {lblTop = input;}
      this.getLblTop = function() {return lblTop;}
	  this.setLblAsk = function(input) {lblAsk = input;}
      this.getLblAsk = function() {return lblAsk;}
	  this.setLblGo = function(input) {lblGo = input;}
      this.getLblGo = function() {return lblGo;}
	  this.setLblRate = function(input) {lblRate = input;}
      this.getLblRate = function() {return lblRate;}
	  this.setLblBtnRate = function(input) {lblBtnRate = input;}
      this.getLblBtnRate = function() {return lblBtnRate;}
	  this.setLblFilterMsg = function(input) {lblFilterMsg= input;}
      this.getLblFilterMsg = function() {return lblFilterMsg;}
	  this.setDefaultResponse = function(input) {defaultResponse = input;}
      this.getDefaultResponse = function() {return defaultResponse;}
	  this.setlblRatingResponse = function(input) {ratingResponse = input;}
      this.getlblRatingResponse = function() {return ratingResponse;}
	  this.setNumberOfQuestions = function(input) {numberOfQuestions = input;}
      this.getNumberOfQuestions = function() {return numberOfQuestions;}
	  this.setBadWordList = function(input) {badWordList = input;}
      this.getBadWordList = function() {return badWordList;}
	  this.setAjaxIndicatorImg = function(input) {ajaxIndicatorImg = input;}
      this.getAjaxIndicatorImg = function() {return ajaxIndicatorImg;}

} 

var askTheCougar = new askTheCougarClass();
 
