/**
 * MySmartChannels JavaScript
 *
 * Used by edit-channel.xsl and edit-item.xsl
 * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 * P R O P R I E T A R Y   I N F O R M A T I O N   N O T I C E
 *
 * This file contains CONFIDENTIAL INFORMATION ("Information") from the
 * MySmartTags codebase that belongs to F. Andy Seidl and Bill French
 * ("Owners").  This Information is considered a TRADE SECRET of the
 * Owners. This file may not be divulged to or used by any party without
 * prior written authorization of the Owners.
 *
 * Should the Owners elect to publish this file in such a way as to lose
 * its trade secret status, this file shall remain a copyrighted work
 * bearing the following copyright notice:
 *
 * Copyright (C) 2002 MyST Technology Partners, All rights reserved.
 * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 * $Headerl$
 * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 **/

//---------------------------------------------------------------------------------------------
var g_Keywords      = new Array();
var g_bKeywordsEdit = false;
//---------------------------------------------------------------------------------------------
function addKeyword(keyword_)
{
	g_Keywords = g_Keywords.concat([keyword_]);
}
//---------------------------------------------------------------------------------------------
function compareKeywords(a_, b_)
{
	if (a_.toString().toLowerCase() < b_.toString().toLowerCase())
	{
		return -1;
	}
	else
	{
		return 1;
	}
}
//---------------------------------------------------------------------------------------------
function deleteKeywords()
{
	if (confirm("Okay to delete ALL keywords?"))
	{
		g_Keywords = new Array();
		generateKeywords();
	}
}
//---------------------------------------------------------------------------------------------
// Normalizes a single keyword by
//  - trimming leading and trailing spaces,
//  - converting each internal sequence of white space to a single character, and
//  - removing any semi-colon or comma characters (treat as white space).
//
function normalizeKeyword(keyword_)
{
	var result = "";

	var bSpacePending = false;

	for (i=0; i < keyword_.length; ++i)
	{
		var c = keyword_.charAt(i);

		switch (c)
		{
			case ';':				// semi-colon or comma
			case ',':

			case ' ':				// white-space
			case '\t':
			case '\r':
			case '\n':
				if (result.length > 0)
				{
					bSpacePending = true;
				}
				break;

			default:				// everything else
				if (bSpacePending)
				{
					result += ' ';
					bSpacePending = false;
				}
				result += c;
				break;
		}
	}

	return result;
}
//---------------------------------------------------------------------------------------------
// Parses a string containing keywords delimited by semi-colons and/or commas.  Returns an
// array of normalized keywords.
//
function parseKeywords(keywords_)
{
	// Split string into an array of keywords.
	var aKeywords = keywords_.split(new RegExp("[;,]+", "g"));

	// Normalize each keyword.
	for (var i=0; i < (aKeywords).length; i++)
	{
		aKeywords[i] = normalizeKeyword(aKeywords[i]);
	}

	// Sort the keywords.
	aKeywords.sort(compareKeywords);

	// Remove duplicate keywords.
	var aUniqueKeywords = new Array();
	var lastKeyword     = "";

	for (var i=0; i < (aKeywords).length; i++)
	{
		var keyword = aKeywords[i];

		if (keyword != lastKeyword)
		{
			aUniqueKeywords = aUniqueKeywords.concat([keyword]);
		}

		lastKeyword = keyword;
	}
	return aUniqueKeywords;
}
//---------------------------------------------------------------------------------------------
function genAddKeywords()
{
	var result = 
		"<td class='KeywordAddButtonColumn'>" +
			"<input class='LinkButton' type='button' value='Add Keywords...' name='ID_AddKewords' onClick='editKeywords()'/>" +
		"</td>";

	return result;
}

function genEditKeywords()
{
	var result = 
		"<td class='KeywordEditAreaColumn'>" +
			"<textarea name='ID_Keywords' class='KeywordEditArea' onKeyDown='OnKeyDown(event)'>" + g_Keywords.join(", ") + "</textarea>" +
			"<div><small>NOTE: separate multiple keywords with commas.</small></div>" +
		"</td>" +
		"<td class='KeywordTools'>" +
			"<img src='images/_btn-enter-0.gif'  height='16' width='16' class='KeywordTool' onclick='endKeywordEdit(true)'  title='Save'/>" +
			"<img src='images/_btn-cancel-0.gif' height='16' width='16' class='KeywordTool' onclick='endKeywordEdit(false)' title='Cancel'/>" +
		"</td>";
	return result;
}

function genShowKeywords()
{
	var colTemplate =	"<td class='KeywordListColumn'>" + 
							"<ul class='KeywordList'>" +
								"{items}" +
							"</ul>" +
						"</td>" ;

	var itemTemplate = 	"<li class='KeywordListItem'>{item}</li>";

	var tools = 		"<td class='KeywordTools'>" +
							"<img src='images/_btn-edit-0.gif'   height='16' width='16' class='KeywordTool' onclick='editKeywords()'   title='Edit Keywords'/>"  +
							"<img src='images/_btn-delete-0.gif' height='16' width='16' class='KeywordTool' onclick='deleteKeywords()' title='Delete Keywords'/>"+
						"</td>";

	var itemsPerCol = 7;
	if (g_Keywords.length >= itemsPerCol)
	{
		itemsPerCol = Math.floor((g_Keywords.length + 1) / 2);
	}

	var cols   = "";
	var items  = "";
	var nItems = 0; 
	var table  = "";

	for (var i=0; i < g_Keywords.length; i++)
	{
		var item = g_Keywords[i];
		items   += itemTemplate.replace("{item}", htmlEncode(item));
		nItems  += 1;

		if (nItems >= itemsPerCol)
		{
			cols  += colTemplate.replace("{items}", items);
			items  = "";
			nItems = 0;
		}
	}

	if (items != "")
	{
		cols += colTemplate.replace("{items}", items);
	}

	return cols + tools;
}

function generateKeywords()
{
	g_Keywords.sort(compareKeywords);

	var template =	"<table class='KeywordTable' cellpadding='0' cellspacing='0'>" +
						"<tr class='KewordTableRow'>" +
							"{cols}" +
						"</tr>" +
					"</table>";

	var cols = "";

	if (g_bKeywordsEdit)
	{
		cols = genEditKeywords();
	}
	else if (g_Keywords.length == 0)
	{
		cols = genAddKeywords()
	}
	else
	{
		cols = genShowKeywords();
	}

	var html = template.replace("{cols}", cols);

	getObj("ID_KeywordArea").innerHTML = html;

	if (g_bKeywordsEdit)
	{
		document.FORM.ID_Keywords.focus();
	}
}
//---------------------------------------------------------------------------------------------
function editKeywords()
{
	g_bKeywordsEdit = true;
	generateKeywords();
}

function endKeywordEdit(bSave_)
{
	if (g_bKeywordsEdit)
	{
		if (bSave_)
		{
			g_Keywords = parseKeywords(document.FORM.ID_Keywords.value);
		}
		g_bKeywordsEdit = false;
		generateKeywords();
	}
}

function OnKeyDown(event_)
{
	var e = event_;
	if (!e)
	{
		e = window.event;
	}

	var keyCode = 0;
	if (e.keyCode)
	{
		keyCode = e.keyCode;
	}
	else if (e.which)
	{
		keyCode = e.which;
	}

	switch (keyCode)
	{
		case 13:					// CR
			endKeywordEdit(true);
			break;

		case 27:					// Escape
			endKeywordEdit(false);
			break;
	}
}

//---------------------------------------------------------------------------------------------
// Pass keywords as a series of hidden fields.
//
// Always create a field named ID_KeywordCount.  If this value is non-zero,
// create one fields for each keyword:  ID_Keyword<n>
//
function createHiddenFieldsForKeywords()
{
	var nKeywordCount = g_Keywords.length;

	var fields = createHiddenField("ID_KeywordCount", nKeywordCount);
	for (var iKeyword=0; iKeyword < (g_Keywords).length; iKeyword++)
	{
		var keyword = g_Keywords[iKeyword];

		fields += createHiddenField("ID_Keyword" + iKeyword, keyword);  
	}

	return fields;
}

