function AfterCheck(node)
{
	if (node.Nodes.length > 0)
	{
		UpdateAllChildren(node.Nodes, node.Checked)
	}
};

function UpdateAllChildren(nodes, checked)
{
    var i;
    for (i=0; i<nodes.length; i++)
    {
        if (checked)         
            nodes[i].Check();         
        else        
            nodes[i].UnCheck(); 
        
        if (nodes[i].Nodes.length > 0)
        {        
            UpdateAllChildren(nodes[i].Nodes, checked);
        }        
    }
};

function CheckedChanged(checkBox)
{
	var textboxId = checkBox.name.replace("UseQueryStringValue", "ParamValue");
	var textbox = document.getElementById(textboxId);
	
	if (checkBox.checked)
	{
		textbox.disabled="true";
	}
	else
	{
		textbox.removeAttribute("disabled");
	}
};

function registerCustomTools()
{
	RadEditorCommandList["InsertEnumerableContainer"] = function(commandName, editor, oTool)
    {
		editor.PasteHtml("<span id=\"EnumerableContainer\" style=\"border:1px dotted black;display:block\">&nbsp;</span>&nbsp;");
    };
    
    RadEditorCommandList["InsertTableContainer"] = function(commandName, editor, oTool)
    {
		var tableContainer = "<span id=\"TableContainer\">" +
									"<table>" +
										"<tbody>" +
											"<tr><td>Enter Column Headers here</td></tr>" +
											"<tr id=\"TableRowContainer\"><td>&nbsp;</td></tr>" +
										"</tbody>" +
									"</table>" +
							 "</span>";
									
		editor.PasteHtml(tableContainer);
    };
	
	RadEditorCommandList["PlaceHolderDropDown1"] = function(commandName, editor, oTool)
    {
		var selectedValue = oTool.GetSelectedValue();
		var selectedHtml = editor.GetSelectionHtml();
		
		if (!ListItemSelectable(selectedValue))
		{
			return;
		}
		
		// (<a...href="..."...>)(...)(</a>)
		var hyperLinkRegex = /^((?:\s|&nbsp;|<br>)*<a.*\shref=\"[^\"]*\"[^>]*>)((?:.|\n)*)(<\/a>(?:\s|&nbsp;|<br>)*)$/i;
		if (hyperLinkRegex.test(selectedHtml))
		{
			if (RegExp.$2 == "http://")
			{
				selectedHtml = selectedHtml.replace(hyperLinkRegex, "$1$3");
			}
			
			selectedHtml = selectedHtml.replace(hyperLinkRegex, "$1$2" + SetUpPlaceHolder(selectedValue) + "$3");
			editor.PasteHtml(selectedHtml);
		}
		else
		{
			editor.PasteHtml(SetUpPlaceHolder(selectedValue));
		}
    };
    
    RadEditorCommandList["PlaceHolderDropDown2"] = function(commandName, editor, oTool)
    {
		var selectedValue = oTool.GetSelectedValue();
		var selectedHtml = editor.GetSelectionHtml();
		
		if (!ListItemSelectable(selectedValue))
		{
			return;
		}
		
		//r.a.d.editor puts newline amidst the attributes of the span placeholder???
		// (<a ... href=")(...)(" ...>...</a>)
		var hyperLinkRegex = /^((?:\s|&nbsp;|<br>)*<a.*\shref=\")([^\"]*)(\"[^>]*>(?:.|\n)*<\/a>(?:\s|&nbsp;|<br>)*)$/i;
		if (hyperLinkRegex.test(selectedHtml))
		{
			if (RegExp.$2 == "http://" || RegExp.$2 == "http:///")
			{
				selectedHtml = selectedHtml.replace(hyperLinkRegex,"$1$3");
			}

			selectedHtml = selectedHtml.replace(hyperLinkRegex,"$1$2{" + selectedValue + "}$3");
			editor.PasteHtml(selectedHtml);
		}
		else
		{		
			editor.PasteHtml(SetUpImagePlaceHolder(selectedValue));
		}
    };
}

function SetUpPlaceHolder(placeHolderId)
{
	var shortPlaceHolderIdRegex = /.+\.(\(.+\)\s)?(.+)/;
	shortPlaceHolderIdRegex.test(placeHolderId);
	var shortPlaceHolderId = RegExp.$2;
	
	var placeHolder = "<span id=\"{{" + placeHolderId + "}}\" " +
							"unselectable=\"on\" contentEditable=\"false\" style=\"color: red; font-weight: bold\">" +
								shortPlaceHolderId + 
					  "</span>&nbsp;";
				 
	return placeHolder;
};

function SetUpImagePlaceHolder(placeHolderId)
{
	return "<img src=\"{" + placeHolderId + "}\">&nbsp;";
};

function ListItemSelectable(selectedValue)
{
	return (selectedValue != "");
};

