﻿
Type.registerNamespace("PlainJoeStudios.Web");function $tau(namespacePrefix,templateId,bStatic)
{return new PlainJoeStudios.Web.Tau(namespacePrefix,templateId,bStatic);}
PlainJoeStudios.Web.Tau=function(namespacePrefix,templateId,bStatic){this.ctor(namespacePrefix,templateId,bStatic);};PlainJoeStudios.Web.Tau.prototype={DataBindSourceColumnRegexRequirement:/^\w+(\w|\s)*\w+$/,DATA_SOURCE_DATA_NAME:"DataSource",PAIRED_LABEL_DATA_NAME:"__label",JQUERY_TAU_DATA_NAME:"TauInstance",_jqTemplate:null,_AttributeNamesCache:null,_bStatic:false,ctor:function(namespacePrefix,templateId,bStatic){var This=this;this._bStatic=bStatic||false;this._AttributeNamesCache={};this._AttributeNamesCache["id"]=namespacePrefix+":id";this._AttributeNamesCache["group"]=namespacePrefix+":group";this._AttributeNamesCache["templateid"]=namespacePrefix+":templateid";this._AttributeNamesCache["label"]=namespacePrefix+":label";this._AttributeNamesCache["tab"]=namespacePrefix+":tab";this._AttributeNamesCache["src"]=namespacePrefix+":src";this._AttributeNamesCache["href"]=namespacePrefix+":href";this._AttributeNamesCache["handlers"]=namespacePrefix+":handlers";var strTemplateIdAttributeName=This._AttributeNamesCache["templateid"];$("div, tr").each(function(i,e){e=$(e);var tmp_tid=e.attr(strTemplateIdAttributeName);if(tmp_tid==null||tmp_tid===""||tmp_tid!==templateId){return;}
This._jqTemplate=e;return false;});if(this._jqTemplate===null){throw new Error("Template not found.");}
this.Generate=this.generate;},generate:function(idBase,dataSource,oHandlerInvokeTarget){var This=this;if(idBase==null||idBase==""){idBase=null;}
else if(typeof(idBase)!=="string"&&typeof(idBase)!=="number"){throw new Error("Invalid idBase type");}
oHandlerInvokeTarget=oHandlerInvokeTarget||null;var an=This._AttributeNamesCache;var tauInstance={};tauInstance.root=null;tauInstance.namedElements={};tauInstance.tabGroups={};tauInstance._data={};tauInstance.data=function(a1,a2){if(typeof(a2)==="undefined"){return this._data[a1];}
else{this._data[a1]=a2;}};tauInstance.dataSource=function(oData){if(oData){this.data(This.DATA_SOURCE_DATA_NAME,oData);}
else{return this.data(This.DATA_SOURCE_DATA_NAME);}};var idCounter=0;var jqTemplateCloned=null;if(this._bStatic){var oExistingTauInstance=This._jqTemplate.data("TauInstance");if(oExistingTauInstance!=null){return oExistingTauInstance;}
jqTemplateCloned=This._jqTemplate;}
else{jqTemplateCloned=This._jqTemplate.clone(false);}
if(dataSource!==null){var templateInnerMarkup=jqTemplateCloned.html();templateInnerMarkup=templateInnerMarkup.replace(/%7B%7B(%20)?/g,"{{").replace(/(%20)?%7D%7D/g,"}}");for(var m in dataSource){if(!this.DataBindSourceColumnRegexRequirement.test(m)||typeof(dataSource[m])==="function"){continue;}
var bIsEncoded=false;var strDestinationKey=m;if(m.endsWith("_html")){strDestinationKey=m.substr(0,m.length-"_html".length);bIsEncoded=true;}
var theRegex=new RegExp("\\{\\{(\\s)?"+strDestinationKey+"(\\s)?\\}\\}","g");var dataEncoded;if(bIsEncoded){dataEncoded=dataSource[m];}
else{dataEncoded=$("<div/>").text(dataSource[m]).html();}
templateInnerMarkup=templateInnerMarkup.replace(theRegex,dataEncoded);}
jqTemplateCloned.html(templateInnerMarkup);}
if(idBase){jqTemplateCloned.attr("id",idBase);}
tauInstance.root=jqTemplateCloned;var jqNamedElements=jqTemplateCloned.find("*").each(function(i,e){e=$(e);var tmpId;try{tmpId=e.attr(an["id"]);}
catch(exc){tmpId=null;}
if(tmpId==null||tmpId==""){return;}
tauInstance.namedElements[tmpId]=e;if(idBase){e.attr("id",idBase+"_"+tmpId);}});var attrNameHref=This._AttributeNamesCache["href"];var attrNameSrc=This._AttributeNamesCache["src"];jqTemplateCloned.find("*").each(function(i,e){e=$(e);var href=e.attr(attrNameHref);var src=e.attr(attrNameSrc);if(typeof(href)!=="undefined"&&href!==null){e.attr("href",href);}
if(typeof(src)!=="undefined"&&src!==null){e.attr("src",src);}});jqTemplateCloned.find("input[type=checkbox], input[type=radio]").each(function(i,e){e=$(e);var labelText=e.attr(an["label"]);if(labelText==null){return;};var inputId=e.attr("id");if(idBase&&(inputId==null||inputId=="")){inputId=idBase+(idCounter++);e.attr("id",inputId);}
var labelElement=$('<label for="'+inputId+'">'+labelText+'</label>');e.after(labelElement);e.data(This.PAIRED_LABEL_DATA_NAME,labelElement);});jqTemplateCloned.find("input[type=radio], input[type=checkbox]").each(function(i,e){e=$(e);var groupname=e.attr(an["group"]);if(groupname==null){return;};if(idBase){e.attr("name",idBase+groupname);}});jqTemplateCloned.find("*").each(function(i,e){e=$(e);var tmpTab;try{tmpTab=e.attr(an["tab"]);}
catch(exc){tmpTab=null;}
if(tmpTab==null||tmpTab===""){return;}
tmpTab=tmpTab.split(',');if(tmpTab.length!=3){return;}
if(tauInstance.tabGroups[tmpTab[0]]==null){tauInstance.tabGroups[tmpTab[0]]=new Object();}
if(tauInstance.tabGroups[tmpTab[0]][tmpTab[1]]==null){tauInstance.tabGroups[tmpTab[0]][tmpTab[1]]=new Object();}
if(tmpTab[2].toLowerCase()==="head"){tauInstance.tabGroups[tmpTab[0]][tmpTab[1]].head=e;}
else if(tmpTab[2].toLowerCase()==="body"){tauInstance.tabGroups[tmpTab[0]][tmpTab[1]].body=e;}});for(var groupName in tauInstance.tabGroups){var group=tauInstance.tabGroups[groupName];var heads=[];var bodys=[];for(var tabName in group){var tab=group[tabName];var head=tab["head"];var body=tab["body"];if(head==null||body==null){continue;}
heads.push(head.get(0));bodys.push(body.get(0));}
heads=$(heads);bodys=$(bodys);for(var tabName in group){(function(){var tab=group[tabName];var head=tab["head"];var body=tab["body"];head.click(function(){bodys.hide();body.show();});})();}
bodys.hide();bodys.eq(0).show();}
if(!this._bStatic){jqTemplateCloned.show();}
jqTemplateCloned.data(this.JQUERY_TAU_DATA_NAME,tauInstance);if(dataSource!=null){tauInstance.data(this.DATA_SOURCE_DATA_NAME,dataSource);}
if(oHandlerInvokeTarget){jqTemplateCloned.find("*").andSelf().each(function(i,e){e=$(e);var strValues=e.attr(an["handlers"])||"";strValues=$.trim(strValues);if(strValues.length===0){return;}
var arr_strValuesSplit=strValues.split(";");for(var j=0;j<arr_strValuesSplit.length;++j){var strValue=arr_strValuesSplit[j];if(strValue.length<=1){continue;}
var arr_kvp=strValue.split("=");if(arr_kvp.length!=2){throw new Error("Invalid event handler binding syntax.");}
var strEventName=$.trim(arr_kvp[0]);var strHandlerName=$.trim(arr_kvp[1]);if(strEventName.length===0||strHandlerName===0){throw new Error("Invalid event handler binding syntax.");}
var fnHandler=oHandlerInvokeTarget[strHandlerName]||null;if(fnHandler===null||typeof fnHandler!=="function"){throw new Error("Handler '"+strHandlerName+"' not found or not a function.");}
e.bind(strEventName,null,function(oEventData){fnHandler.call(oHandlerInvokeTarget,tauInstance,e,oEventData);});var eLabel=e.data(This.PAIRED_LABEL_DATA_NAME)||null;if(eLabel!==null){eLabel.bind(strEventName,null,function(oEventData){fnHandler.call(oHandlerInvokeTarget,tauInstance,e,oEventData,true);});}}});}
return tauInstance;}};