// Copyright © 2005-2006 Water Street USA, LLC.  All rights reserved. --
// ----------------------------------------------------------------------------------
// Water Street USA (WSUSA) software and code [both binary and source 
// (if released)] (Software) is intellectual property owned by WSUSA and is copyright 
// of WSUSA in all countries in the world, and ownership remains with WSWS.
//
// You (Licensee) may use the WSUSA Software and install it only in accordance with 
// use and licensing agreements you have signed with WSWS.  Licenses are distributed 
// only by WSWS. Please send an email to info@waterstreetusa.com for more information.
//
// If you do not have a valid signed license agreement, you may not use, copy or
// distribute the Software for any purpose.
//
// This copyright notice may not be removed or altered or it will constitute a
// violation of any license agreements.
// ----------------------------------------------------------------------------------

var visibleCmtId = null;
var visibleTitleClass = "";
var visibleCmtMode = null; // Content, Edit, Reply

var cmtCommentBoxClass = "";
var cmtPinnedBarClass = "";
var cmtParentBarClass = "";
var cmtChildBarClass = "";
var cmtButtonClass = "";
var cmtTextBoxClass = "";
var cmtBodyTextClass = "";
var cmtTitleLinkClass = "";
var cmtLinkClass = "";
var cmtContentBoxClass = "";
var cmtContentBoxEditClass = "";
var cmtDisabledSubjectClass = "";
var cmtQuoteClass = "";
var cmtCodeClass = "";
var cmtRedClass = "";
var cmtGreenClass = "";
var cmtBlueClass = "";
var cmtOrangeClass = "";
var cmtSelectedBarClass = "";
var cmtDefaultSubject = "";
var cmtFormSentryImageUrl = "";
var cmtAnonymous = "true";
var cmtSubjectFillOverride = "";
var cmtCommentFillOverride = "";
var cmtNameFillOverride = "";
var cmtEmailFillOverride = "";
var cmtUseFillOverrides = "false";

function processComment(id)
{
	if (commentToggleVisible(id, null)) return;
	visibleCmtMode = null;
	hideComment();
	showComment(id);
}
function editComment(id)
{
	if (commentToggleVisible(id, "Edit")) return;
	hideComment();
	visibleCmtMode = "Edit";
	showComment(id);	
}
function newComment(id)
{
	if (commentToggleVisible(id, "Edit")) return;
	hideComment();
	visibleCmtMode = "Edit";
	showComment("New");
}

function replyComment(id)
{
	if (commentToggleVisible(id, "Reply")) return;
	hideComment();
	visibleCmtMode = "Reply";
	showComment(id);
}
function disableComment(id)
{
	if (commentToggleVisible(id, "Disable")) return;
	hideComment();
	visibleCmtMode = "Disable";
	showComment(id);
}
function deleteComment(id)
{
	if (commentToggleVisible(id, "Delete")) return;
	hideComment();
	visibleCmtMode = "Delete";
	showComment(id);
}
function enableComment(id)
{
	if (commentToggleVisible(id, "Enable")) return;
	hideComment();
	visibleCmtMode = "Enable";
	showComment(id);
}
function commentToggleVisible(id, mode)
{
	if (id == visibleCmtId && mode == visibleCmtMode)
	{
		hideComment();
		return true;
	}
	else
		return false;

}
function hideComment()
{

	// this hides all the currently displayed comment row, including new comment row
	
	var cmtRow = getObject("cmt" + visibleCmtId);
	var cmt = getObject("cmt" + visibleCmtId + "Content");
	var ipt = getObject("cmt" + visibleCmtId + "Input");
	

	var tcell_1 = getObject("cmt" + visibleCmtId + "Title_1");
	var tcell_2 = getObject("cmt" + visibleCmtId + "Title_2");
	var tcell_3 = getObject("cmt" + visibleCmtId + "Title_3");
	var tcell_4 = getObject("cmt" + visibleCmtId + "Title_4");
	
	if (tcell_1 != null)
	{
		tcell_1.className = visibleTitleClass;
		tcell_2.className = visibleTitleClass;
		tcell_3.className = visibleTitleClass;
		tcell_4.className = visibleTitleClass;
		visibleTitleClass = "";
	}
	
	if (cmtRow != null) cmtRow.style.display = "none";

	if (cmt != null) cmt.style.display = "none";
	if (ipt != null) 
	{
		ipt.style.display = "none";
		ipt.innerHTML = "";
	}
		
	visibleCmtId = null;

}
function showComment(cmtId)
{
	var cmtRow = getObject("cmt" + cmtId);
	var sbj = getObject("cmt" + cmtId + "TitleLink");
	var cmt = getObject("cmt" + cmtId + "Content");
	var ipt = getObject("cmt" + cmtId + "Input");
	var src = getObject("cmt" + cmtId + "Source");


	if (cmtId != 'New')
	{
		var tcell_1 = getObject("cmt" + cmtId + "Title_1");
		var tcell_2 = getObject("cmt" + cmtId + "Title_2");
		var tcell_3 = getObject("cmt" + cmtId + "Title_3");
		var tcell_4 = getObject("cmt" + cmtId + "Title_4");
		if (tcell_1 != null)
		{
			visibleTitleClass = tcell_1.className;
			tcell_1.className = cmtSelectedBarClass;
			tcell_2.className = cmtSelectedBarClass;
			tcell_3.className = cmtSelectedBarClass;
			tcell_4.className = cmtSelectedBarClass;
		}
	}


	if (visibleCmtMode == null || visibleCmtMode == "Content")
	{
		if (cmtRow != null) cmtRow.style.display = "";
		if (cmt != null) 
		{
			cmt.innerHTML = decodeContentTagsToHtml(src.innerHTML);
			cmt.style.display = "";
		}
		
	}
	else if (visibleCmtMode == "Edit")
	{

		if (cmtRow != null) cmtRow.style.display = "";
		if (ipt != null) ipt.style.display = "";
		if (cmtId == 'New')
			fillCommentInputNew(cmt, ipt, cmtId);
		else
			fillCommentInputEdit(sbj, cmt, ipt, src, cmtId);
	}
	else if (visibleCmtMode == "Reply")
	{
		if (cmtRow != null) cmtRow.style.display = "";
		if (ipt != null) ipt.style.display = "";
		fillCommentInputReply(sbj, cmt, src, ipt);
	}
	else if (visibleCmtMode == "Disable")
	{
		if (cmtRow != null) cmtRow.style.display = "";
		if (ipt != null) ipt.style.display = "";
		fillCommentInputDisable(cmt, ipt);
	}
	else if (visibleCmtMode == "Enable")
	{
		if (cmtRow != null) cmtRow.style.display = "";
		if (ipt != null) ipt.style.display = "";
		fillCommentInputEnable(cmt, ipt);
	}
	else if (visibleCmtMode == "Delete")
	{
		if (cmtRow != null) cmtRow.style.display = "";
		if (ipt != null) ipt.style.display = "";
		fillCommentInputDelete(cmt, ipt);
	}
	
	setCurrentComment(cmtId);
	
}
function setCurrentComment(cmtId)
{
	visibleCmtId = cmtId;
	var hdn = getObject("hdnCurrentComment");
	if (hdn != null) hdn.value = cmtId;
}

function fillCommentInputNew(contentElement, inputElement, cmtId)
{
	if (contentElement == null || inputElement == null)
	{
		alert('Error pre-filling edit field.');
		return;
	}
	var btnText = "Submit New Comment";	
	var subject = ReplaceString(cmtDefaultSubject, "''", "'"); // undo escaping	
	inputElement.innerHTML = getInputHtml(subject, '', btnText, '', '');
}
function fillCommentInputEdit(subjectElement, contentElement, inputElement, sourceElement, cmtId)
{

	if (subjectElement == null || contentElement == null || inputElement == null || sourceElement == null)
	{
		alert('Error pre-filling edit field.');
		return;
	}
	var btnText = "Update";	
	inputElement.innerHTML = getInputHtml(subjectElement.innerHTML, sourceElement.innerHTML, btnText, '', '');

}
function fillCommentInputReply(subjectElement, contentElement, sourceElement, inputElement)
{
	if (subjectElement == null || contentElement == null || inputElement == null || sourceElement == null)
	{
		alert('Error pre-filling reply field.');
		return;		
	}
		
	// subject
	var subject = subjectElement.innerHTML;
	if (subject.indexOf("re: ") != 0)
		subject = "re: " + subject;	
	var quoted = stripQuoteTags(sourceElement.innerHTML);
	var source = "";
	if (quoted != null && quoted != "")
		source = "<quote>" + quoted + "</quote>\r\n\r\n";
	var btnText = "Submit Reply";
	
	inputElement.innerHTML = getInputHtml(subject, source, btnText, '', '');

}
function fillCommentInputDisable(contentElement, inputElement)
{
	if (contentElement == null || inputElement == null)
	{
		alert('Error pre-filling disable field.');
		return;		
	}
	
	// subject
	var btnText = "Disable this comment";	
	inputElement.innerHTML = "<input id=btnSubmit name=btnSubmit type=submit value='" + btnText + "' class='" + cmtButtonClass + "' />";

}
function fillCommentInputEnable(contentElement, inputElement)
{
	if (contentElement == null || inputElement == null)
	{
		alert('Error pre-filling disable field.');
		return;		
	}
	
	// subject
	var btnText = "Enable this comment";	
	inputElement.innerHTML = "<input id=btnSubmit name=btnSubmit type=submit value='" + btnText + "' class='" + cmtButtonClass + "' />";

}
function fillCommentInputDelete(contentElement, inputElement)
{
	if (contentElement == null || inputElement == null)
	{
		alert('Error pre-filling delete field.');
		return;		
	}

	// subject
	var btnText = "Delete this comment";	
	inputElement.innerHTML = "<input id=btnSubmit name=btnSubmit type=submit value='" + btnText + "' class='" + cmtButtonClass + "' />";
}
function getInputHtml(subject, source, buttonText, name, email)
{
	var sSource = decodeContentTags(source);
	var nameRow = "";
		if (cmtUseFillOverrides == 'true')
	{
		subject = ReplaceString(cmtSubjectFillOverride, "''", "'");
		sSource = ReplaceString(cmtCommentFillOverride, "''", "'");
		sSource = decodeContentTags(sSource);
		name = ReplaceString(cmtNameFillOverride, "''", "'");
		email = ReplaceString(cmtEmailFillOverride, "''", "'");
	}
	
	if (cmtAnonymous == 'true')
	  nameRow = "<tr><td>Your name:</td><td><input id=txtUserName name=txtUserName class='" + cmtTextBoxClass + "' type=text value='" + name + "'></td></tr>";
	 	 

	// TODO: email field	  
	  
	var html = "<textarea name=txtCurrentSubject id=txtCurrentSubject style='height:25px;width:100%' class='" + cmtTextBoxClass + "'>" 
		+ subject + "</textarea>"
		+ "<textarea onKeyDown='handleTab(this, event);' name=txtCurrentComment id=txtCurrentComment style='height:150px;width:100%' class='" + cmtTextBoxClass + "'>" 
		//+ "<textarea name=txtCurrentComment id=txtCurrentComment style='height:150px;width:100%' class='" + cmtTextBoxClass + "'>" 
		+ sSource + "</textarea>"
		+ "<table class='" + cmtBodyTextClass + "' cellpadding=0 cellspacing=0 border=0>"
		+ nameRow
		+ "<tr>"
		+ "<td valign=middle style='width:10%'><img src='" + cmtFormSentryImageUrl + "'></td>"
		+ "<td valign=middle><input id=txtFormSentry name=txtFormSentry class='" + cmtTextBoxClass + "' type=text value=''>"
		+ "&nbsp;If you're not a robot, please type text as shown in the image at left.</td>"
		+ "</tr>"
		+ "<tr><td colspan=2>"
		+ "<input id=btnSubmit name=btnSubmit type=submit value='" + buttonText + "' class='" + cmtButtonClass + "' />"
		+ "</td></tr>"
		+ "<tr><td colspan=2><br>"
		+ getLegend()
		+ "</td></tr>"
		+ "</table>";

	return html;
}
function escapeHTML (str)
{
   var div = document.createElement('div');
   var text = document.createTextNode(str);
   div.appendChild(text);
   return div.innerHTML;
}
function ReplaceString(input, oldText, newText)
{
	var re = new RegExp(RegExEscape(oldText), "gi");
	newstr = input.replace(re, newText);
	return newstr;
}
function RegExEscape(text)
{
	if (!arguments.callee.sRE)
	{
		var specials = [
			'/', '.', '*', '+', '?', '|',
			'(', ')', '[', ']', '{', '}', '\\'
			];
		arguments.callee.sRE = new RegExp('(\\' + specials.join('|\\') + ')', 'g');
	}
	return text.replace(arguments.callee.sRE, '\\$1');
}
function getLegend()
{
	var delim = " )  ( ";
	var l = "<span class=" + cmtBodyTextClass + ">"
			+ "<b>Formatting Tags: (these cannot be nested)</b><br/>"
			+ "["
			+ "&lt;quote&gt;A&lt;/quote&gt;</span>"
			//+ "<span style='cursor:hand;' onclick=\"doFormatting('quote');\">&lt;quote&gt;A&lt;/quote&gt;</span>"
			+ delim
			+ "&lt;code&gt;A&lt;/code&gt;"
			+ delim
			+ "<b>&lt;b&gt;A&lt;/b&gt;</b>"
			+ delim
			+ "<i>&lt;i&gt;A&lt;/i&gt;</i>"
			+ delim
			+ "<u>&lt;u&gt;A&lt;/u&gt;</u>"
			+ delim
			+ "<span class='" + cmtRedClass + "'>&lt;red&gt;A&lt;/red&gt;</span>"
			+ delim
			+ "<span class='" + cmtGreenClass + "'>&lt;green&gt;A&lt;/green&gt;</span>"
			+ delim
			+ "<span class='" + cmtBlueClass + "'>&lt;blue&gt;A&lt;/blue&gt;</span>"
			+ delim
			+ "<span class='" + cmtOrangeClass + "'>&lt;orange&gt;A&lt;/orange&gt;</span>"
			+ ")"
			+ "</span>";
	return l;
}
function doFormatting(tag)
{
	var txtArea = getObject('txtCurrentComment');
	txtArea.focus();
	//doSelection(txtArea);

		var preText = "<pre>"
		var postText = "</pre>"
		var text2 = "||blach||"

		//alert(txtArea.getSelection());
		txtArea.caretPos = document.selection.createRange().duplicate();
		var textRangeObject = txtArea.caretPos;
		if (textRangeObject.text.length > 0)
		{
			textRangeObject.text = preText + textRangeObject.text + postText;
		}
		else
		{
			textRangeObject.text = preText + text2 + postText;
		}
	

/*
	var txtArea = getObject('txtCurrentComment');
	if (txtArea != null)
	{
		//insertAtCaret(txtArea, "<" + tag + ">", "", "</" + tag + ">");
		storeCaret(txtArea);
		insertAtCaret(txtArea, "||Blah||");
	}
	*/
}
function decodeContentTags(input)
{
	//var reQuote = new RegExp("&lt;quote&gt;(.*?)&lt;/quote&gt;", "gi");
	//var output = input.replace(reQuote, "<span class=" + cmtQuoteClass + ">$1</span>");	
	var re = new RegExp("&lt;br([/]*)&gt;", "gi");
	var output = input.replace(re, "\r\n");
	// tabs
	var re = new RegExp("&lt;tab(.*?)/&gt;", "gi");
	output = output.replace(re, "\t");

	return output;
}
function stripQuoteTags(input)
{
	var output = input;	
	// quote
	var re = new RegExp("&lt;quote&gt;(.*?)&lt;/quote&gt;", "gi");
	output = output.replace(re, "$1");
	return output;
}
function decodeContentTagsToHtml(input)
{

	var output = input;	
	// tabs
	var re = new RegExp("&lt;tab(.*?)/&gt;", "gi");
	output = output.replace(re, "\t");
	// quote
	re = new RegExp("&lt;quote&gt;(.*?)&lt;/quote&gt;", "gi");
	output = output.replace(re, "<div class=" + cmtQuoteClass + ">$1</div>");
	// code
	re = new RegExp("&lt;code&gt;(.*?)&lt;/code&gt;", "gi");
	output = output.replace(re, "<div class=" + cmtCodeClass + "><pre>$1</pre></div>");
	// bold
	re = new RegExp("&lt;b&gt;(.*?)&lt;/b&gt;", "gi");
	output = output.replace(re, "<b>$1</b>");
	// italics
	re = new RegExp("&lt;i&gt;(.*?)&lt;/i&gt;", "gi");
	output = output.replace(re, "<i>$1</i>");
	// underline
	re = new RegExp("&lt;u&gt;(.*?)&lt;/u&gt;", "gi");
	output = output.replace(re, "<u>$1</u>");
	// br
	re = new RegExp("&lt;br([/]*)&gt;", "gi");
	output = output.replace(re, "<br$1>");	
	// hr
	re = new RegExp("&lt;hr([/]*)&gt;", "gi");
	output = output.replace(re, "<hr$1>");	
	// red
	var re = new RegExp("&lt;red&gt;(.*?)&lt;/red&gt;", "gi");
	var output = output.replace(re, "<span class=" + cmtRedClass + ">$1</span>");
	// blue
	var re = new RegExp("&lt;blue&gt;(.*?)&lt;/blue&gt;", "gi");
	var output = output.replace(re, "<span class=" + cmtBlueClass + ">$1</span>");
	// green
	var re = new RegExp("&lt;green&gt;(.*?)&lt;/green&gt;", "gi");
	var output = output.replace(re, "<span class=" + cmtGreenClass + ">$1</span>");
	// orange
	var re = new RegExp("&lt;orange&gt;(.*?)&lt;/orange&gt;", "gi");
	var output = output.replace(re, "<span class=" + cmtOrangeClass + ">$1</span>");

	return output;
}
function CommentsScrollTrack()
{
	var element = getObject('hdnScrollY');
	if (element == null)
		return;
		
	var scrollX, scrollY;
	if (document.all)
	{
		if (!document.documentElement.scrollTop)
			scrollY = document.body.scrollTop;
		else
			scrollY = document.documentElement.scrollTop;
	}
	else
	{
		scrollY = window.pageYOffset;
	}
	element.value = scrollY;  
}
function Test()
{
 alert('scroll');
}
function getObject(obj)
{
	var theObj;
	if (document.all) {
		if (typeof obj=='string') 
		{
			return document.all(obj);
		} 
		else 
		{
			return obj.style;
		}
	}
	if (document.getElementById) 
	{
		if (typeof obj=='string') 
		{
			return document.getElementById(obj);
		} 
		else 
		{
			return obj.style;
		}
	}
	return null;

}
