function InsertXmlBoxText(obj, text) {
	var doc=obj.ownerDocument;
	if ( doc.selection ) {
		if ( doc.selection.createRange ) {
			var rng=doc.selection.createRange();
			if ( rng ) {
				var rng=doc.selection.createRange();
				if ( rng ) {
					// Is cursor position set?
					var CursorPos=text.indexOf("{|}");
					if ( CursorPos>-1 ) text=text.replace("{|}", "");
					rng.text = text;
					
					// Move cousor to set location.
					if ( CursorPos>-1 ) {
						rng.move("character", CursorPos -text.length);
						rng.select();
					}
				}
			}
		}
	}
} // InsertXmlBoxText

var XmlBoxKeyAction=false;
function XmlBoxOnKeyDown() {
	XmlBoxKeyAction=false;
	if ( window.event ) {
		var Ctrl=window.event.ctrlKey;
		var Alt=window.event.altKey;
		var Shift=window.event.shiftKey;
		if( window.event.keyCode==9 && !Ctrl && !Alt && !Shift ) {
			InsertXmlBoxText(window.event.srcElement, "    ");
			window.event.returnValue=false;
			window.event.cancelBubble=true;
			window.event.srcElement.focus();
			return false;
		}
		if ( String.fromCharCode(window.event.keyCode)=="A" && Ctrl && !Alt && !Shift ) {
			window.event.returnValue=false;
			window.event.cancelBubble=true;
			window.event.srcElement.select();
			window.event.srcElement.focus();
			return false;
		}
		if ( Ctrl && Alt && !Shift ) {
			if ( String.fromCharCode(window.event.keyCode)=="I" ) {
				InsertXmlBoxText(window.event.srcElement, XmlBoxTag('GsIf'));
				XmlBoxKeyAction=true;
			}
			if ( String.fromCharCode(window.event.keyCode)=="S" ) {
				InsertXmlBoxText(window.event.srcElement, XmlBoxTag('GsSwitch'));
				XmlBoxKeyAction=true;
			}
			if ( String.fromCharCode(window.event.keyCode)=="V" ) {
				InsertXmlBoxText(window.event.srcElement, XmlBoxTag('GsParseVar'));
				XmlBoxKeyAction=true;
			}
			if ( String.fromCharCode(window.event.keyCode)=="F" ) {
				InsertXmlBoxText(window.event.srcElement, XmlBoxTag('GsFor'));
				XmlBoxKeyAction=true;
			}
			if ( String.fromCharCode(window.event.keyCode)=="E" ) {
				InsertXmlBoxText(window.event.srcElement, XmlBoxTag('GsForEach'));
				XmlBoxKeyAction=true;
			}
			if ( String.fromCharCode(window.event.keyCode)=="X" ) {
				InsertXmlBoxText(window.event.srcElement, XmlBoxTag('GsExecute'));
				XmlBoxKeyAction=true;
			}
			if ( String.fromCharCode(window.event.keyCode)=="P" ) {
				InsertXmlBoxText(window.event.srcElement, XmlBoxTag('GsParseTemplate'));
				XmlBoxKeyAction=true;
			}
			if ( String.fromCharCode(window.event.keyCode)=="A" ) {
				InsertXmlBoxText(window.event.srcElement, XmlBoxTag('GsAlterTemplate'));
				XmlBoxKeyAction=true;
			}
			if ( String.fromCharCode(window.event.keyCode)=="N" ) {
				InsertXmlBoxText(window.event.srcElement, XmlBoxTag('GsParseNext'));
				XmlBoxKeyAction=true;
			}
			if ( String.fromCharCode(window.event.keyCode)=="O" ) {
				InsertXmlBoxText(window.event.srcElement, XmlBoxTag('GsForm'));
				XmlBoxKeyAction=true;
			}
			if ( String.fromCharCode(window.event.keyCode)=="C" ) {
				InsertXmlBoxText(window.event.srcElement, XmlBoxTag('CDATA'));
				XmlBoxKeyAction=true;
			}
		}
		if ( Ctrl && Shift && !Alt ) {
			if ( String.fromCharCode(window.event.keyCode)=="O" ) {
				InsertXmlBoxText(window.event.srcElement, XmlBoxVariable('GsObject'));
				XmlBoxKeyAction=true;
			}
			if ( String.fromCharCode(window.event.keyCode)=="C" ) {
				InsertXmlBoxText(window.event.srcElement, XmlBoxVariable('GsContent'));
				XmlBoxKeyAction=true;
			}
			if ( String.fromCharCode(window.event.keyCode)=="V" ) {
				InsertXmlBoxText(window.event.srcElement, XmlBoxVariable('GsParseVar'));
				XmlBoxKeyAction=true;
			}
			if ( String.fromCharCode(window.event.keyCode)=="S" ) {
				InsertXmlBoxText(window.event.srcElement, XmlBoxVariable('GsVar.Site'));
				XmlBoxKeyAction=true;
			}
			if ( String.fromCharCode(window.event.keyCode)=="Y" ) {
				InsertXmlBoxText(window.event.srcElement, XmlBoxVariable('GsVar.System'));
				XmlBoxKeyAction=true;
			}
			if ( String.fromCharCode(window.event.keyCode)=="R" ) {
				InsertXmlBoxText(window.event.srcElement, XmlBoxVariable('GsRequest'));
				XmlBoxKeyAction=true;
			}
		}
	}
} // XmlBoxOnKeyDown

function XmlBoxOnKeyPress() {
	if ( XmlBoxKeyAction ) {
		if ( window.event ) {
			window.event.returnValue=false;
			window.event.cancelBubble=true;
			return false;
		}
	}
} // XmlBoxOnKeyPress

function XmlBoxTag(TagName) {
	var ReturnValue='';

	switch (TagName) {
		case 'CDATA': ReturnValue='<![CDATA[{|}]]>'; break;
		case 'GsForm': ReturnValue='<GsForm>{|}</GsForm>'; break;
		case 'GsParseNext': ReturnValue='<GsParseNext />'; break;
		case 'GsAlterTemplate': ReturnValue='<GsAlterTemplate Match="{|}" Operator="AddAttribute|Delete|Add|InsertBefore|InsertAfter|Replace" />'; break;
		case 'GsParseTemplate': ReturnValue='<GsParseTemplate ObjectId="{|}" ParseObjectId="" ParseTemplateObjectId="" ParseTemplateName="" FunctionName="" ParseFunctionName="" />'; break;
		case 'GsExecute': ReturnValue='<GsExecute FileName="/Controls/{|}.ascx" />'; break;
		case 'GsIf': ReturnValue='<GsIf Expression1="{|}" Expression2="" Operator="eq|neq|gt|gte|lt|lte|isnum|isnan|and|or|in|not in|valid object guid|invalid object guid"></GsIf>'; break;
		case 'GsSwitch':
			ReturnValue += '<GsSwitch Value="{|}" Operator="eq|neq|gt|gte|lt|lte|isnum|isnan|in|not in|valid object guid|invalid object guid">';
			ReturnValue += '\n    <GsCase Value="" Operator="eq|neq|gt|gte|lt|lte|isnum|isnan|in|not in|valid object guid|invalid object guid"></GsCase>';
			ReturnValue += '\n    <GsDefault></GsDefault>';
			ReturnValue += '\n</GsSwitch>';
		break;
		case 'GsParseVar': ReturnValue='<GsParseVar Name="{|}" Value="" Type="String|Integer|Decimal|Date" Method="Set|Add|Sub|Div|Mod|Mul|Truncate|Regex Replace" DatePart="Years|Months|Days|Hours|Minutes|Meconds|Milliseconds" />'; break;
		case 'GsFor': ReturnValue='<GsFor Start="{|}" End="" Step="" Name=""></GsFor>'; break;
		case 'GsForEach':
			ReturnValue += '<GsForEach List="{|}" LimitStatement="" SortStatement="" SearchStatement="" SqlQuery="" Name="" Start="" Length="">';
			ReturnValue += '\n    <GsHeader AlwaysShow="False"></GsHeader>';
			ReturnValue += '\n    <GsItem></GsItem>';
			ReturnValue += '\n    <GsFooter AlwaysShow="False"></GsFooter>';
			ReturnValue += '\n</GsForEach>';
		break;
	}

	return ReturnValue;
} // XmlBoxTag

function XmlBoxVariable(VarName) {
	var ReturnValue='';

	switch (VarName) {
		case 'GsObject': ReturnValue='$GsObject.{|}$'; break;
		case 'GsContent': ReturnValue='$GsContent.{|}$'; break;
		case 'GsParseVar': ReturnValue='$GsParseVar.{|}$'; break;
		case 'GsVar.Site': ReturnValue='$GsVar.Site.{|}$'; break;
		case 'GsVar.System': ReturnValue='$GsVar.System.{|}$'; break;
		case 'GsVar.Date': ReturnValue='$GsVar.Date$'; break;
		case 'GsRequest': ReturnValue='$GsRequest.{|}$'; break;
		case 'GsBrowser': ReturnValue='$GsBrowser.{|}$'; break;
		case 'GsObjectId': ReturnValue='$GsObjectId$'; break;
		case 'GsBaseObjectId': ReturnValue='$GsBaseObjectId$'; break;
		case 'GsParseObjectId': ReturnValue='$GsParseObjectId$'; break;
		case 'GsOpenerObjectId': ReturnValue='$GsOpenerObjectId$'; break;
		case 'GsUserObjectId': ReturnValue='$GsUserObjectId$'; break;
		case 'GsSiteObjectId': ReturnValue='$GsSiteObjectId$'; break;
		case 'GsSiteUrl': ReturnValue='$GsSiteUrl$'; break;
		case 'GsSiteRootUrl': ReturnValue='$GsSiteRootUrl$'; break;
	}

	return ReturnValue;
} // XmlBoxVariable


