
var ezkeywordmanager = {
	isInit: false,
	rootUrl: false,
	editClassID: '',
	ezInputKeywordTimeout: false,
	ezKeywordDropdown: 0,
	ezKeywordIndex: 0,
	ezKeywordDropdownLI: 0,
	ezKeywordDropdownIndex: 0,
	ezInputKeyword: false,
	bannedKeywords: false,

	init: function()
	{
		if( ezkeywordmanager.isInit == true )
			return;
        ezkeywordmanager.isInit = true;
        var w = window;
        if ( w.addEventListener )
            w.addEventListener( 'load', ezkeywordmanager.onload, false );
        else if ( w.attachEvent )
            w.attachEvent( 'onload', ezkeywordmanager.onload );
        else
        {
            var c = w['on' + trigger];
            w['on' + trigger] = typeof c !== 'function' ? ezkeywordmanager.onload : function(){ ezkeywordmanager.onload(); c()};
        }
    },

    onload: function()
    {        
        var ezInputKeyword = YAHOO.util.Dom.getElementsByClassName('ezcca-edit-keyword', 'input', document.body);

		if (ezInputKeyword.length > 0)
		{
			//Create div for suggestions
			newDiv = document.createElement("div");
			newDiv.id = 'ez_keyword_dropdown';
			newDiv.style.display = 'none';
			ezkeywordmanager.ezKeywordDropdown = newDiv;
			ezkeywordmanager.ezInputKeyword = ezInputKeyword;
			
			document.body.appendChild(ezkeywordmanager.ezKeywordDropdown);
			
			//Avoid that enter submits the form while selecting keyword
			var tempForm = document.getElementById('editform');
			
			if (tempForm)
			{
				tempForm.onsubmit = ezkeywordmanager.onSubmit;
				//YAHOO.util.Event.addListener( tempForm.id, 'submit', ezkeywordmanager.onSubmit );
			}
			
			for( var i = 0; i < ezInputKeyword.length; i++ )
			{
				YAHOO.util.Event.addListener( ezInputKeyword[i].id, 'keydown', ezkeywordmanager.ezInputKeywordPress, ezInputKeyword[i]);
				YAHOO.util.Event.addListener( ezInputKeyword[i].id, 'blur', function() { ezkeywordmanager.ezKeywordDropdownLI = 0; ezkeywordmanager.ezKeywordDropdown.style.display = "none";  });
			}
			
			
			
			//event function on keydown on the input element
			//ezInputKeyword.addEvent('keydown', ezInputKeywordPress, ezInputKeyword);
		}
	},
	
	onSubmit: function()
	{
		if( typeof ezkeywordmanager.bannedKeywords == 'object' )
		{
			var keywords, i, j, k, keywordA, keywordB;
			
			for(i = 0; i < ezkeywordmanager.bannedKeywords.length; i++)
			{
				for( j = 0; j < ezkeywordmanager.ezInputKeyword.length; j++ )
				{
					keywords = ezkeywordmanager.ezInputKeyword[j].value.split(',');
					
					for( k = 0; k < keywords.length; k++ )
					{
						keywordA = keywords[k].toLowerCase().replace(/^\s\s*/, '').replace(/\s\s*$/, '');
						keywordB = ezkeywordmanager.bannedKeywords[i].banned_keyword.toLowerCase().replace(/^\s\s*/, '').replace(/\s\s*$/, '');
						
						if( keywordA == keywordB )
						{
							ezkeywordmanager.alertBannedKeyword(keywordA);
							return false;
						}
					}
				}
			}
		}
		
		if (ezkeywordmanager.ezKeywordDropdownLI != 0) 
			return false; 
		else 
			return true;
	},
	
	alertBannedKeyword: function(keyword)
	{
		var div = document.getElementById('banned-keyword-warning');
		var span = document.getElementById('banned-keyword-string');
		
		if( div && span )
		{
			span.innerHTML = keyword;
			div.style.display = "";
		}
	},
	
	ezInputKeywordPress: function(e, el)
	{
		var i = 0;

		clearTimeout(ezkeywordmanager.ezInputKeywordTimeout);

		//cancle that the event bubbles up to the form element
	  	e.cancelBubble = true;
		if (e.stopPropagation) e.stopPropagation();
		
		var c = e.keyCode || e.which;
		var keyword = el.value.split(',').pop().replace(/^\s\s*/, '').replace(/\s\s*$/, '');
		
		//break any futher action on specific keys like backspace
		if (c == 44 || c == 8 || c == 188 || c == 32 || keyword.length < 1) return true;
		else if ((c == 38 || c == 40) && ezkeywordmanager.ezKeywordDropdownLI != 0) return ezkeywordmanager.ezInputKeywordSelect(c);
		else if (c == 13) return ezkeywordmanager.ezInputKeywordEnter(el);
		
		ezkeywordmanager.ezKeywordDropdown.style.display = "none";
		ezkeywordmanager.ezKeywordIndex = i;
		ezkeywordmanager.ezInputKeywordTimeout = setTimeout( 'ezkeywordmanager.getKeywords(\'' + keyword + String.fromCharCode(c) + '\')', ((c == 46) ? 350 : 230));
		return true;
	},
	
	getKeywords: function(keyword)
	{
	    var uri = ezkeywordmanager.rootUrl + '/keyword/' + ezkeywordmanager.editClassID;
	    var params = 'Keyword=' + keyword;
	    
	    YAHOO.util.Connect.asyncRequest( 'post', uri, { success: ezkeywordmanager.getKeywordsCallbacks.success, failure: ezkeywordmanager.getKeywordsCallbacks.failure }, params );
	},
	
	ezInputKeywordMouse: function(el)
	{
	    //ezkeywordmanager.ezKeywordDropdownIndex = i = ezkeywordmanager.ezKeywordDropdownLI.indexOf(el) +1;
	    
	    for( i = 0; i < ezkeywordmanager.ezKeywordDropdownLI.length; i++ )
	    {
	    	if( ezkeywordmanager.ezKeywordDropdownLI[i] == el )
	    	{
	    		ezkeywordmanager.ezKeywordDropdownIndex = i+1;
	    	}
	    }
	    
	    if(ezkeywordmanager.ezKeywordDropdownIndex > 0) 
	    	YAHOO.util.Dom.addClass( ezkeywordmanager.ezKeywordDropdownLI[ezkeywordmanager.ezKeywordDropdownIndex-1], "selected" );
		else 
		{
			for( var j = 0; j < ezkeywordmanager.ezKeywordDropdownLI.length; j++ )
			{
				YAHOO.util.Dom.removeClass( ezkeywordmanager.ezKeywordDropdownLI[j], "selected" );
			}		
		}
	    return false;
	},
	
	ezInputKeywordSelect: function(c, i)
	{
		i = ezkeywordmanager.ezKeywordDropdownIndex;
	    ezkeywordmanager.ezKeywordDropdownIndex = i = (i < 0) ? 0 : i + c - 39;
		ezkeywordmanager.ezKeywordDropdownIndex = i = (ezkeywordmanager.ezKeywordDropdownLI.length <= i) ? ezkeywordmanager.ezKeywordDropdownLI.length : i;
	    if(i > 0) 
	    	YAHOO.util.Dom.addClass( ezkeywordmanager.ezKeywordDropdownLI[i-1], "selected" );
		else 
		{
			for( var j = 0; j < ezkeywordmanager.ezKeywordDropdownLI.length; j++ )
			{
				YAHOO.util.Dom.removeClass( ezkeywordmanager.ezKeywordDropdownLI[j], "selected" );
			}
		}
		
	    return false;
	},

	ezInputKeywordEnter: function(el)
	{
	    if (ezkeywordmanager.ezKeywordDropdownLI != 0 && ezkeywordmanager.ezKeywordDropdownIndex > 0)
	    {
	       var arr = el.value.split(',');
	       arr[arr.length -1] = ' ' + ezkeywordmanager.ezKeywordDropdownLI[ezkeywordmanager.ezKeywordDropdownIndex-1].innerHTML;
	       el.value = arr.join(',').replace(/^\s\s*/, '').replace(/\s\s*$/, '');
	       el.focus();
	    }
	   ezkeywordmanager.ezKeywordDropdownIndex = 0;
	   ezkeywordmanager.ezKeywordDropdown.style.display = "none";
	   return false;
	},

	confirmRemove: function(str)
	{
		return confirm(str);
	},

	showAddForm: function()
	{
		var div = document.getElementById('ezkeywordmanager-addbannedword');
		var button = document.getElementById('ezkeywordmanager-showbannedform-button');
		div.style.display = "";
		button.style.display = "none";
	},

	close: function()
	{
		document.getElementById('ezkeyword-change-form').style.display = "none";
	},
	
	confirm: function(str)
	{
		var count = document.getElementById('ezkeywordmanager-entries').value;
		str = str.replace('%count', count);
		var old_keyword = document.getElementById('ezkeywordmanager-keyword').value;
		str = str.replace('%old', old_keyword);
		var new_keyword = document.getElementById('ezkeywordmanager-keyword-new').value;
		str = str.replace('%new', new_keyword);
		
		return confirm(str);
	},
	
	toggleObjects: function(index)
	{
		var div = document.getElementById('ezkeywordmanager-objects-' + index);
		
		if( div.style.display == "none" )
			div.style.display = "";
		else
			div.style.display = "none";
	},
	
	clickCheckbox: function(index, inverse)
	{
		var inputs = document.getElementsByTagName('input');
		
		var valid_inputs = new Array, j = 0;
		
		for(var i = 0; i < inputs.length; i++)
		{
			if( inputs[i].className == 'ezkeywordmanager-keyword-checkbox' )
			{
				valid_inputs[j] = inputs[i];
				j++;
			}
		}
		
		if( inverse )
		{
		if( valid_inputs[index].checked )
			valid_inputs[index].checked = true;
		else
			valid_inputs[index].checked = false;
		}
		else
		{
			if( valid_inputs[index].checked )
				valid_inputs[index].checked = false;
			else
				valid_inputs[index].checked = true;
		}
		
		ezkeywordmanager.updateKeywords();
	},
	
	change: function(keyword, count)
	{

		document.getElementById('ezkeywordmanager-keyword').value = keyword;
		document.getElementById('ezkeywordmanager-keyword-old').value = keyword;
		document.getElementById('ezkeywordmanager-keyword-new').value = keyword;
		document.getElementById('ezkeywordmanager-entries').value = count;
		document.getElementById('ezkeyword-change-form').style.display = "";
		
		
	},
	
	updateKeywords: function()
	{
		var inputs = document.getElementsByTagName('input');
		
		var keywords = new Array, countArray = new Array, j = 0, tmp;
		var count = 0;
		
		for(var i = 0; i < inputs.length; i++)
		{
			if( inputs[i].className == 'ezkeywordmanager-keyword-checkbox' )
			{
				if(inputs[i].checked)
				{
					tmp = inputs[i].value.split(',');
					keywords[j] = tmp[0];
					count += parseInt(tmp[1]);
					j++;
				}
			}
		}

		document.getElementById('ezkeywordmanager-keyword').value = keywords.join(',');
		document.getElementById('ezkeywordmanager-keyword-old').value = keywords.join(',');
		document.getElementById('ezkeywordmanager-keyword-new').value = keywords[0];
		document.getElementById('ezkeywordmanager-entries').value = count;
		document.getElementById('ezkeyword-change-form').style.display = "";
	},
	
	calculatePos: function(el)
	{
	    //gets the size on element
	    if ( !el ) el = (document.body.clientWidth && !window.opera)? document.body : document.documentElement;

	    var oW = el.offsetWidth, oH = el.offsetHeight, sW = el.scrollWidth, sH = el.scrollHeight; 

	    //gets the position on element
	    var pT = 0, pL = 0, t = -1, o = el, s = {sl:0,st:0};
	    if ( el.style.display == 'none' ) el.style.display = "";
	    do{	pT = pT + el.offsetTop || 0;
	        pL = pL + el.offsetLeft || 0;
	        el = el.offsetParent;
	    } while (el);
	    
	    if (t != -1) el.style.display = "none";
	    
	    return { pl: pL, pt: pT, ow: oW, oh: oH, sw: sW, sh: sH };
		   		    
	    //return {pl: pL, pt: pT};
	}
};

ezkeywordmanager.getKeywordsCallbacks = {
	success: function(o) {

		ezkeywordmanager.ezKeywordDropdown.innerHTML = o.responseText;
		
		var li = ezkeywordmanager.ezKeywordDropdown.getElementsByTagName('li');
		
		for(var i = 0; i < li.length; i++)
		{
			li[i].style.display = "";
		}
		
		ezkeywordmanager.ezKeywordDropdownLI = li;
		
		var pos = ezkeywordmanager.calculatePos( ezkeywordmanager.ezInputKeyword[0] );
		
		ezkeywordmanager.ezKeywordDropdown.style.display = "";
		ezkeywordmanager.ezKeywordDropdown.style.top   = pos.pt + pos.oh + 'px';
		ezkeywordmanager.ezKeywordDropdown.style.left  = pos.pl + 'px';
		ezkeywordmanager.ezKeywordDropdown.style.width = pos.ow + 'px';

	},
	failure: function(o) {
		
	}
};

YAHOO.util.Event.onDOMReady(ezkeywordmanager.init); 
