﻿// JavaScript Document


if(typeof parkside == "undefined") var parkside = new Object();
if(typeof parkside.tag_suggest == "undefined") parkside.tag_suggest = new Object();

// Constructor
parkside.tag_suggest = function() {
}

/// Class members
parkside.tag_suggest.prototype = {
/// Properties
	tagNavPos: -1,
	tag_suggest_results: null,
	tag_input: null,
	
/// Methods
	request: function(str, evt) 
	{		
		//init
		if(this.tag_suggest_results == "undefined" || this.tag_suggest_results == null)
			this.tag_suggest_results = document.getElementById('tagSuggestResults');
		if(this.tag_input == "undefined" || this.tag_input == null)
			this.tag_input = document.getElementById('tagSuggestInput');
		
		//catch errors
		if(str == "undefined" || str == "")
			return;	
		if( typeof http == "undefined" )
		{
			alert("JSMX not included!");
			return;
		}	
		
		//enter pressed
		if(evt.keyCode == 13)
		{
			this.enterTag();
			return;
		}
		
		//cursors
		if(evt.keyCode == 38 || evt.keyCode == 40)
		{
			this.navigateTag(evt);
			return;
		}
		
		//build tag string
		var params = new Object();
		var last_comma_pos = str.lastIndexOf(',');
		if(last_comma_pos >= 0)
		{
			if(last_comma_pos + 1 > str.length)
				return;
			else
				params.text = this.trim(str.substring(last_comma_pos + 1));
		}
		else
		{
			params.text = this.trim(str);
		}
		if(params.text.length > 0)
			http("POST", "custom/modules/tag/tag.cfc?method=getTagAjax", this.response, params); //notice the third argument = list_response. This is the callback function below.
	}
	,
	response: function(obj) //callback functions always take one argument. This is the result passed back from the server.
	{ 	
		if(obj.error == "false") 
		{
			//reset
			parkside.tagSuggest.tag_suggest_results.innerHTML = '';
			parkside.tagSuggest.tagNavPos = -1;
			if(obj.tags.length > 0)
			{
				parkside.tagSuggest.tag_suggest_results.style.display = 'block';
				
				//build tag result entries
				for(i = 0; i < obj.tags.length; i++) 
				{
					var suggest = '<div class="tagSuggestEntry" onmouseover="parkside.tagSuggest.suggestOver(this);" ';
					suggest += 'onclick="parkside.tagSuggest.addTag(this.innerHTML);">';
					suggest += obj.tags[i] + '</div>';
					parkside.tagSuggest.tag_suggest_results.innerHTML += suggest;
				}	
			}
			else
			{
				parkside.tagSuggest.tag_suggest_results.style.display = 'none';
			}
		}	
	}
	, 
	addTag: function(str) //add tag to input value
	{
		if(str == "undefined" || str == "")
			return;
		
		var last_comma_pos = this.tag_input.value.lastIndexOf(',');
		if(last_comma_pos >= 0)
		{
			this.tag_input.value = this.trim(this.tag_input.value.substring(0, last_comma_pos + 1) + str);
		}
		else
		{
			this.tag_input.value = this.trim(str);
		}
		
		this.tag_suggest_results.innerHTML = '';
		this.tag_suggest_results.style.display = 'none';
		this.tag_input.focus();
	}
	,
	enterTag: function() //press enter or click on entry
	{		
		if(this.tag_suggest_results.childNodes.length > 0)
		{
			if(this.tagNavPos >= 0)
				this.addTag(this.tag_suggest_results.childNodes[this.tagNavPos].innerHTML);
			else
				this.addTag(this.tag_suggest_results.childNodes[0].innerHTML);	
		}
		this.tag_input.focus();
	}
	,
	navigateTag: function(evt) //navigate tag results
	{		
		if(evt.keyCode == 38)
			this.tagNavPos--;
		if(evt.keyCode == 40)
			this.tagNavPos++;
			
		if(this.tagNavPos < 0)
			this.tagNavPos = 0;
		if(this.tagNavPos >= this.tag_suggest_results.childNodes.length)
			this.tagNavPos = this.tag_suggest_results.childNodes.length - 1;
			
		for(i = 0; i < this.tag_suggest_results.childNodes.length; i++)
			this.tag_suggest_results.childNodes[i].className = "tagSuggestEntry";
			
		this.tag_suggest_results.childNodes[this.tagNavPos].className = "tagSuggestEntry-hover";
	}
	,
	suggestOver: function(entry) //mouseover on tag result entry
	{
		for(i = 0; i < this.tag_suggest_results.childNodes.length; i++)
			this.tag_suggest_results.childNodes[i].className = "tagSuggestEntry";
			
		entry.className = "tagSuggestEntry-hover";
	}
	,
	trim: function(str) //trim text
	{		
		if(str == "undefined" || str == "")
			return "";
			
		return str.replace (/^\s+/, '').replace (/\s+$/, '');
	}
}

parkside.tagSuggest = new parkside.tag_suggest();


