function Anchor_Click(objAnchor){
		if(document.createEvent){
				var evt = document.createEvent('MouseEvents');
				evt.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
				objAnchor.dispatchEvent(evt);
		}else{
				objAnchor.click();
		}
}

/*
	Developed by Robert Nyman, http://www.robertnyman.com
	Code/licensing: http://code.google.com/p/getelementsbyclassname/
*/	
var getElementsByClassName = function (className, tag, elm){
	if (document.getElementsByClassName) {
		getElementsByClassName = function (className, tag, elm) {
			elm = elm || document;
			var elements = elm.getElementsByClassName(className),
				nodeName = (tag)? new RegExp("\\b" + tag + "\\b", "i") : null,
				returnElements = [],
				current;
			for(var i=0, il=elements.length; i<il; i+=1){
				current = elements[i];
				if(!nodeName || nodeName.test(current.nodeName)) {
					returnElements.push(current);
				}
			}
			return returnElements;
		};
	}
	else if (document.evaluate) {
		getElementsByClassName = function (className, tag, elm) {
			tag = tag || "*";
			elm = elm || document;
			var classes = className.split(" "),
				classesToCheck = "",
				xhtmlNamespace = "http://www.w3.org/1999/xhtml",
				namespaceResolver = (document.documentElement.namespaceURI === xhtmlNamespace)? xhtmlNamespace : null,
				returnElements = [],
				elements,
				node;
			for(var j=0, jl=classes.length; j<jl; j+=1){
				classesToCheck += "[contains(concat(' ', @class, ' '), ' " + classes[j] + " ')]";
			}
			try	{
				elements = document.evaluate(".//" + tag + classesToCheck, elm, namespaceResolver, 0, null);
			}
			catch (e) {
				elements = document.evaluate(".//" + tag + classesToCheck, elm, null, 0, null);
			}
			while ((node = elements.iterateNext())) {
				returnElements.push(node);
			}
			return returnElements;
		};
	}
	else {
		getElementsByClassName = function (className, tag, elm) {
			tag = tag || "*";
			elm = elm || document;
			var classes = className.split(" "),
				classesToCheck = [],
				elements = (tag === "*" && elm.all)? elm.all : elm.getElementsByTagName(tag),
				current,
				returnElements = [],
				match;
			for(var k=0, kl=classes.length; k<kl; k+=1){
				classesToCheck.push(new RegExp("(^|\\s)" + classes[k] + "(\\s|$)"));
			}
			for(var l=0, ll=elements.length; l<ll; l+=1){
				current = elements[l];
				match = false;
				for(var m=0, ml=classesToCheck.length; m<ml; m+=1){
					match = classesToCheck[m].test(current.className);
					if (!match) {
						break;
					}
				}
				if (match) {
					returnElements.push(current);
				}
			}
			return returnElements;
		};
	}
	return getElementsByClassName(className, tag, elm);
};

function fireDefaultButton(event, target) {
	if (event.keyCode == 13 && !(event.srcElement && (event.srcElement.tagName.toLowerCase() == "textarea"))) {
		var defaultButton = document.getElementById(target);
		if (defaultButton && typeof(defaultButton.click) != "undefined") {
			defaultButton.click();
			event.cancelBubble = true;
			if (event.stopPropagation) event.stopPropagation();
			return false;
		}
	}
	return true;
}

function beginRequest(sender, args){
	TLC_startAjaxLoading();
}
function endRequest(sender, args) {
	TLC_stopAjaxLoading();
	fb.RetagAll();
	FocusDomainSearchTextBox();
	ToggleButtonVisibility();
}

var strSearchTextBoxId = "";
function FocusDomainSearchTextBox(){
	if(strSearchTextBoxId != ""){
		var objTextBox = document.getElementById(strSearchTextBoxId);
		if(objTextBox){
			objTextBox.focus();
			objTextBox.select();
		}
	}
	strSearchTextBoxId = "";
}



								function SelectGroupNTemplate(strGroupName, strTemplateName){
									TGT_SwitchToTab(GetTabIdFromGroupName(strGroupName));
									var objSelectBox = document.getElementById(GetSelectBoxIdFromGroupName(strGroupName));
									
									for(var x = 0; x < objSelectBox.options.length; x ++){
										if(objSelectBox.options[x].value == strTemplateName) objSelectBox.selectedIndex = x;
									}
									
									TemplateSelectBox_Change(objSelectBox, strGroupName);
								}
								
								function TGT_SwitchToTab(strObjID){//TGT is short for TemplateGroupTabs
									Anchor_Click(document.getElementById(strObjID));
									UpdateHiddenChosenTemplateTextBox();
								}
								
								function TGT_GetCurrentTabName(){
									var LIs = getElementsByClassName("productCycleTab", "li", document.getElementById("productCycle8"));
									for(var x = 0; x < LIs.length; x++){
										if(ElementHasClassName(LIs[x], "current")){
											return LIs[x].id.split("_")[1];
										}
									}
									return "";
								}
								
								function ElementHasClassName(objElem, strClassName){
									var classNameArray = objElem.className.split(" ");
									for(var x = 0; x < classNameArray.length; x++ ){
										if(classNameArray[x] == strClassName) return true;
									}
									return false;
								}
								
								function GetGroupNameFromTemplateBoxContainerId(strTemplateBoxContainerId){
									return strTemplateBoxContainerId.replace("TemplateBoxContainer_", "");
								}
								
								function GetTemplateBoxContainerIdFromGroupName(strGroupName){
									return "TemplateBoxContainer_" + strGroupName;
								}
								
								function GenerateTemplateBoxes(){
									var arrTemplateBoxContainers = getElementsByClassName("TemplateBoxContainer", "div", document);
									
									for(var z = 0; z < arrTemplateBoxContainers.length; z ++)
									{
										var objTemplateBoxContainer = arrTemplateBoxContainers[z];
										var strTemplateBoxModel = objTemplateBoxContainer.innerHTML;
										var objTemplateGroup = GetGroup(GetGroupNameFromTemplateBoxContainerId(objTemplateBoxContainer.id));
										
										var strTemplateBoxContainerInnerHTML = "";
										
										var arrTemplates = objTemplateGroup.templates;
										var strGroupName = objTemplateGroup.name;
										
										for(var y=0; y < arrTemplates.length; y++){
											var objTemplate = arrTemplates[y];
											
											var strThumnailImgSrc = TG.thumbnailFolder + objTemplate.fileName + TG.thumbnailExt;
											var strImgSrc = TG.imageFolder + objTemplate.fileName + TG.imageExt;
											var strTemplateName = objTemplate.name;
											var strDemoUrl = objTemplate.demoUrl;
											
											var strCurTemplateBox = strTemplateBoxModel;
											
											strCurTemplateBox = strCurTemplateBox.replace("%7BTemplateThumbnailImg_src%7D", strThumnailImgSrc);//FF
											strCurTemplateBox = strCurTemplateBox.replace("{TemplateThumbnailImg_src}", strThumnailImgSrc);//IE
											
											strCurTemplateBox = strCurTemplateBox.replace("%7BTemplateDemoAnchor_href%7D", strDemoUrl);//FF
											strCurTemplateBox = strCurTemplateBox.replace("{TemplateDemoAnchor_href}", strDemoUrl);//IE
											
											strCurTemplateBox = strCurTemplateBox.replace("%7BTemplatePreviewAnchor_href%7D", strImgSrc);//FF
											strCurTemplateBox = strCurTemplateBox.replace("{TemplatePreviewAnchor_href}", strImgSrc);//IE
											
											strCurTemplateBox = strCurTemplateBox.replace("{TemplateThumbnailImg_alt}", strTemplateName);
											strCurTemplateBox = strCurTemplateBox.replace("{TemplatePreviewAnchor_title}", strTemplateName);
											strCurTemplateBox = strCurTemplateBox.replace("{TemplatePreviewAnchor_group}", strGroupName);
											
											//strCurTemplateBox = strCurTemplateBox.replace("%7BTemplateBox_id%7D", GetTemplateBoxId(strGroupName, strTemplateName));//FF
											strCurTemplateBox = strCurTemplateBox.replace("{TemplateBox_id}", GetTemplateBoxId(strGroupName, strTemplateName));//IE
											
											//strCurTemplateBox = strCurTemplateBox.replace("%7BTemplatePreviewAnchor_id%7D", GetPreviewAnchorId(strGroupName, strTemplateName));//FF
											strCurTemplateBox = strCurTemplateBox.replace("{TemplatePreviewAnchor_id}", GetPreviewAnchorId(strGroupName, strTemplateName));//IE
											
											strTemplateBoxContainerInnerHTML += strCurTemplateBox;
										}
										
										objTemplateBoxContainer.innerHTML = strTemplateBoxContainerInnerHTML;
										
										ShowTemplateBox(objTemplateGroup.name, objTemplateGroup.templates[0].name);
									}
									
									UpdateHiddenChosenTemplateTextBox();
								}
								
								function ShowTemplateBox(strGroupName, strTemplateName){
									var objTemplateBoxContainer = document.getElementById(GetTemplateBoxContainerIdFromGroupName(strGroupName));
									
									var arrTemplateBoxes = getElementsByClassName("TemplateBox", "div", objTemplateBoxContainer);
									
									for(var x = 0; x < arrTemplateBoxes.length; x ++ ){
										var objTemplateBox = arrTemplateBoxes[x];
										//alert("objTemplateBox.id -> \r\n" + objTemplateBox.id + "\r\nGetTemplateBoxId(strGroupName, strTemplateName) -> \r\n" + GetTemplateBoxId(strGroupName, strTemplateName));
										if(objTemplateBox.id == GetTemplateBoxId(strGroupName, strTemplateName))
											objTemplateBox.style.display = "";
										else
											objTemplateBox.style.display = "none";
									}
								}
								
								function GetTemplateBoxId(strGroupName, strTemplateName){
									return "TemplateBox_" + strGroupName + "_" + strTemplateName.replace(/\s/g, "_");
								}
								function GetPreviewAnchorId(strGroupName, strTemplateName){
									return "Anchor_" + strGroupName + "_" + strTemplateName.replace(/\s/g, "_");
								}
//								String.prototype.replaceAll = function(
//									strTarget, // The substring you want to replace
//									strSubString // The string you want to replace in.
//								){
//									var strText = this;
//									var intIndexOfMatch = strText.indexOf( strTarget );
//									 
//									// Keep looping while an instance of the target string
//									// still exists in the string.
//									while (intIndexOfMatch != -1){
//										// Relace out the current instance.
//										strText = strText.replace( strTarget, strSubString )
//										 
//										// Get the index of any next matching substring.
//										intIndexOfMatch = strText.indexOf( strTarget );
//									}
//									 
//									// Return the updated string with ALL the target strings
//									// replaced out with the new substring.
//									return( strText );
//								}
								
								function InitTemplateSelectBox(strGroupName, strSelectBoxId){
									var objSelectBox = document.getElementById(strSelectBoxId);
									var objGroup = GetGroup(strGroupName);
									for(var x = 0; x < objGroup.templates.length; x ++){
										var objTemplate = objGroup.templates[x];
										AppendOptionToSelect(objTemplate.name, objSelectBox);
									}
									
									objSelectBox.onchange = function(){
										TemplateSelectBox_Change(this, strGroupName);
									};
									
									objSelectBox.selectedIndex = 0;
								}
								
								function TemplateSelectBox_Change(objSelectBox, strGroupName){
										ShowTemplateBox(strGroupName, objSelectBox.options[objSelectBox.selectedIndex].value);
										UpdateHiddenChosenTemplateTextBox();
								}
								
								function AppendOptionToSelect(strOption, objSelect)
								{
									var elOptNew = document.createElement('option');
									elOptNew.text = strOption;
									elOptNew.value = strOption;
								
									try {
										objSelect.add(elOptNew, null); // standards compliant; doesn't work in IE
									}
									catch(ex) {
										objSelect.add(elOptNew); // IE only
									}
								}
								
								function GetGroup(strGroupName){
									for(x = 0; x < TG.groups.length; x ++){
										var objGroup = TG.groups[x];
										if(objGroup.name == strGroupName) return objGroup;
									}
									return null;
								}
								
								function GetSelectBoxIdFromGroupName(strGroupName){
									return "SelectBox_" + strGroupName;
								}
								
								function GetTabIdFromGroupName(strGroupName){
									return "TemplateGroupTab_" + strGroupName;
								}
