function $id(aId){try{return document.getElementById(aId)}catch(ex){return null}}if(typeof console==="undefined"){console={log:function(){var msg="";for(var x=0;x<arguments.length;x++){msg+=arguments[x]+" "}if(document.getElementById("jamlog")){document.getElementById("jamlog").value=msg+"\n"+document.getElementById("jamlog").value}else{window.status=msg}}}}String.EMPTY="";String.prototype.contains=function(argStr){return(this.indexOf(argStr)===-1)?false:true};String.prototype.reEncode=function(){return this.toString().replace(/(["\\\.\|\[\]\^\*\+\?\$\(\)])/g,"\\$1")};String.prototype.trim=function(){return this.toString().replace(/^\s+|\s+$/g,"")};String.prototype.ltrim=function(){return this.replace(/^\s+/,"")};String.prototype.rtrim=function(){return this.replace(/\s+$/,"")};String.prototype.addTimeStamp=function(){var qm=(this.indexOf("?")>-1)?"&":"?";return this+qm+"timeStamp="+new Date().getTime()};String.prototype.addVersion=function(){var qm=(this.indexOf("?")>-1)?"&":"?";return this+qm+"ver="+Jam.ver};if(!Array.prototype.push){Array.prototype.push=function(){for(var i=0;i<arguments.length;++i){this[this.length]=arguments[i]}return this.length}}Array.prototype.distinct=function(argProperty){var getValue=function(item,prop){var aProp=prop.split(".");var curValue=item;for(var j=0;j<aProp.length;j++){curValue=curValue[aProp[j]]}return curValue};if(!argProperty){console.log("Please enter a propery");return}var distinctItems=[];var distinctMap={};var val="";for(var i=0;i<this.length;i++){val=getValue(this[i],argProperty);if(!distinctMap[val]){distinctMap[val]=this[i];distinctItems.push(this[i])}}return distinctItems};Array.prototype.filterEquals=function(argPropertyNames,argString,argClassName){return this.filterByRegExp(argPropertyNames,new RegExp("(^"+argString.reEncode()+"$)","i"),argString,argClassName)};Array.prototype.filterStartsWith=function(argPropertyNames,argString,argClassName){return this.filterByRegExp(argPropertyNames,new RegExp("(^"+argString.reEncode()+")","i"),argString,argClassName)};Array.prototype.filterContains=function(argPropertyNames,argString,argClassName){return this.filterByRegExp(argPropertyNames,new RegExp("("+argString.reEncode()+")","i"),argString,argClassName)};Array.prototype.filterByRegExp=function(argPropertyNames,argRegExp,argString,argClassName,argAndOr){if(typeof(argPropertyNames)==="string"){argPropertyNames=[argPropertyNames]}var propertyNames=[];for(var i=0;i<argPropertyNames.length;i++){if(argPropertyNames[i].indexOf("fn:")===0){propertyNames[i]=argPropertyNames[i]}else{propertyNames[i]=argPropertyNames[i].split(".")}}var filterData=[];var re,val;for(var j=0;j<this.length;j++){for(var k=0;k<propertyNames.length;k++){val=this[j];re=argRegExp;if(propertyNames[k].toString().indexOf("fn:")===0){var fn=eval(propertyNames[k].split(":")[1]);val=fn.call(this,this[j],j)}else{for(var z=0;z<propertyNames[k].length;z++){val=val[propertyNames[k][z]]}}if(val&&val.indexOf("<")>-1&&val.indexOf(">")>-1){re=new RegExp("(>[^<]*?)("+argString.reEncode()+")","gi")}if(typeof val===Util.STRING&&re.test(val)){filterData.push(this[j]);break}}if(this.maxSize&&this.maxSize>0&&filterData.length>=this.maxSize){break}}if(filterData.length>0){if(argClassName&&argString){filterData.bold=new RegExp("(>[^<]*?)("+argString.reEncode()+")","gi");filterData.className=argClassName}}filterData.isFiltered=true;return filterData};Array.prototype.setPK=function(argPK){if(typeof this.$_PK==="undefined"){this.$_PK={};for(var j=0;j<this.length;j++){this.$_PK[this[j][argPK].toString()]=this[j]}}};Array.prototype.outerJoin=function(lookupArray,foreignKey,newPropertyName){if(typeof lookupArray.$_PK==="undefined"){console.log('No primary key as been set. You first have to assign a primary key using: array.setPK("myUniqueId")');return}for(var i=0;i<this.length;i++){if(lookupArray.$_PK[this[i][foreignKey].toString()]){this[i][newPropertyName]=lookupArray.getItemByPK(this[i][foreignKey])}else{this[i][newPropertyName]=null}}};Array.prototype.getItemByPK=function(argId){if(typeof this.$_PK==="undefined"){console.log('No primary key as been set. You first have to assign a primary key using: array.setPK("myUniqueId")');return}if(this.$_PK[argId.toString()]){return this.$_PK[argId.toString()]}return null};Array.prototype.orderBy=function(argSortArray,argDirection){if(this.length<1){return}var getValue=function(item,prop){var aProp=prop.split(".");var curValue=item;for(var j=0;j<aProp.length;j++){curValue=curValue[aProp[j]]}return curValue};var comparator={getCompareFunctionByDataType:function(arg,val){if(arg.substring(0,3)==="fn:"){return"byFunc"}if(!isNaN(val)){return"byNumber"}if(val&&val.toString().indexOf("/")>0&&new Date(val)){return"byDate"}return"byString"},byFunc:function(a,b,obj,i){var fn=obj[i].fn;var fa=fn.call(this,(obj[i].dir===-1?b:a));var fb=fn.call(this,(obj[i].dir===-1?a:b));if(fa<fb){return -1}if(fa>fb){return 1}return(typeof obj[i+1]!="undefined")?comparator[obj[i+1].type](a,b,obj,i+1):(a.$_id-b.$_id)},byDate:function(a,b,obj,i){var fld=obj[i].fld;var da=getValue((obj[i].dir===-1?b:a),fld);var db=getValue((obj[i].dir===-1?a:b),fld);if(!da.getTime&&!db.getTime){da=new Date(da);db=new Date(db)}da=da.getTime();db=db.getTime();if(da<db){return -1}if(da>db){return 1}return(typeof obj[i+1]!="undefined")?comparator[obj[i+1].type](a,b,obj,i+1):(a.$_id-b.$_id)},byString:function(a,b,obj,i){var fld=obj[i].fld;var sa=getValue((obj[i].dir===-1?b:a),fld).toUpperCase();var sb=getValue((obj[i].dir===-1?a:b),fld).toUpperCase();if(sa<sb){return -1}if(sa>sb){return 1}return(typeof obj[i+1]!="undefined")?comparator[obj[i+1].type](a,b,obj,i+1):(a.$_id-b.$_id)},byNumber:function(a,b,obj,i){var fld=obj[i].fld;var na=Number(getValue((obj[i].dir===-1?b:a),fld));var nb=Number(getValue((obj[i].dir===-1?a:b),fld));if(na<nb){return -1}if(na>nb){return 1}return(typeof obj[i+1]!="undefined")?comparator[obj[i+1].type](a,b,obj,i+1):(a.$_id-b.$_id)}};var sortObjects=[];if(typeof argSortArray==="string"){argSortArray=[argSortArray,argDirection||1]}if(argSortArray){for(var k=0;k<argSortArray.length;k=k+2){sortObjects.push({fld:argSortArray[k],dir:(argSortArray[k+1]||1),type:comparator.getCompareFunctionByDataType(argSortArray[k],getValue(this[0],argSortArray[k]))});if(sortObjects[sortObjects.length-1].type==="byFunc"){var fn=eval(argSortArray[k].substring(3));if(!fn){console.log("function() fn:"+fldOrFunc+" has not been implemented");return}sortObjects[sortObjects.length-1].fn=fn}}}if(typeof this.$_id===Util.UNDEFINED){for(var n=0;n<this.length;n++){this.$_id=n}}this.sort(function(a,b){return comparator[sortObjects[0].type](a,b,sortObjects,0)})};var Util={STRING:"string",OBJECT:"object",UNDEFINED:"undefined",FUNCTION:"function",BOOLEAN:"boolean",NUMBER:"number",scrollBarWidth:null,getArguments:function(argObj){var tmp=argObj.toString();var pos1=tmp.indexOf("(");var pos2=tmp.indexOf(")");if((pos2-pos1)===1){return"()"}return tmp.substring(pos1,pos2+1)},addEvent:function(obj,event_name,func_name,argBoolean){if(obj&&func_name){if(obj.attachEvent){obj.attachEvent("on"+event_name,func_name)}else{if(obj.addEventListener){argBoolean=(typeof argBoolean===this.BOOLEAN)?argBoolean:true;obj.addEventListener(event_name,func_name,argBoolean)}else{obj["on"+event_name]=func_name}}}},removeEvent:function(obj,event_name,func_name){if(obj&&func_name){if(obj.detachEvent){obj.detachEvent("on"+event_name,func_name)}else{if(obj.removeEventListener){obj.removeEventListener(event_name,func_name,true)}else{obj["on"+event_name]=null}}}},stopEvent:function(e){e=e||window.event;if(e.stopPropagation){e.stopPropagation();e.preventDefault()}else{if(typeof e.cancelBubble!=this.UNDEFINED){e.cancelBubble=true;e.returnValue=false}}return false},getId:function(arg){if(arg){if(typeof(arg)===this.OBJECT&&arg.id){return arg.id}if(typeof(arg)===this.STRING){return arg}}return null},getElement:function(e){e=e||window.event;return e.srcElement?e.srcElement:e.currentTarget},getTargetElement:function(e){e=e||window.event;return e.srcElement?e.srcElement:e.target},disableSelection:function(argElem){if(argElem){argElem.onselectstart=function(){return false};argElem.unselectable="on";if(argElem.style){argElem.style.MozUserSelect="none";argElem.style.cursor="default"}}},convertToJson:function(argObject){if(argObject===null){return null}else{if(typeof argObject===this.STRING){return'"'+argObject.replace(/\"/g,'\\"')+'"'}else{if(argObject.sort){var arrayMembers=[];for(var arrayIndex=0;arrayIndex<argObject.length;arrayIndex++){arrayMembers.push(this.convertToJson(argObject[arrayIndex]))}return"["+arrayMembers.toString()+"]"}else{if(!isNaN(argObject)){return argObject.toString()}else{var objectProperties=[];for(var prop in argObject){if(prop){objectProperties.push(this.convertToJson(prop)+":"+this.convertToJson(argObject[prop]))}}return"{"+objectProperties.toString()+"}"}}}}},convertFormToObject:function(argInDocForm,argInFormFields){var formElem;var fieldList=[];var object={};if(typeof(argInFormFields)===this.UNDEFINED){for(var n=0;n<argInDocForm.elements.length;n++){fieldList[n]=argInDocForm.elements[n].id}}else{fieldList=argInFormFields}for(var i=0;i<fieldList.length;i++){if(fieldList[i].length===0){continue}formElem=document.forms[argInDocForm.id][fieldList[i]];switch(formElem.type){case"text":case"hidden":case"password":case"textarea":case"select-one":object[formElem.id]=formElem.value;break;case"checkbox":case"radio":if(!formElem.name){object[formElem.id]=formElem.checked}else{if(!object[formElem.name]){object[formElem.name]=[]}if(formElem.checked){object[formElem.name].push(formElem.value)}}break;default:break}}return object},setUseNativeGetElementsByClassName:function(oElm){if(!oElm.getElementsByClassName||!document.body){this.useNativeElementsByClassName=false}else{var clsName="test_"+new Date().getTime();this.appendClass(document.body,clsName);var numberOfClasses=document.getElementsByClassName(clsName).length;this.removeClass(document.body,clsName);this.useNativeElementsByClassName=(numberOfClasses-1===document.getElementsByClassName(clsName).length)}},getElementsByClassName:function(oElm,strClassName,strTagName){if(typeof this.useNativeElementsByClassName===this.UNDEFINED){this.setUseNativeGetElementsByClassName(oElm)}var arrReturnElements=[],arrElements,z;if(this.useNativeElementsByClassName){if(!strTagName||strTagName==="*"){return oElm.getElementsByClassName(strClassName)}else{arrElements=oElm.getElementsByClassName(strClassName);z=0;for(var i=0;i<arrElements.length;i++){if(arrElements[i].tagName!=strTagName.toUpperCase()){arrReturnElements[z++]=arrElements[i]}}return arrReturnElements}}else{strTagName=strTagName||"*";arrElements=(strTagName==="*"&&oElm.all)?oElm.all:oElm.getElementsByTagName(strTagName);z=0;for(var j=0;j<arrElements.length;j++){if(this.containsClass(arrElements[j],strClassName)){arrReturnElements[z++]=arrElements[j]}}return arrReturnElements}return null},getResultingStyle:function(argElem,cssProperty){return(argElem.currentStyle)?argElem.currentStyle[cssProperty]:window.getComputedStyle(argElem,"").getPropertyValue(cssProperty)},toggleClass:function(argElem,argClassName){if(argElem&&typeof argElem=="object"){if(this.containsClass(argElem,argClassName)){this.replaceClass(argElem,argClassName,String.EMPTY);return false}else{this.appendClass(argElem,argClassName);return true}}return null},containsClass:function(argObj,argClass){if(argObj){if(!argObj.className){return false}return((" "+argObj.className+" ").indexOf(" "+argClass+" "))>-1?true:false}return null},replaceClass:function(argObj,argClass1,argClass2){if(argObj){argObj.className=(" "+argObj.className+" ").replace(" "+argClass1+" "," "+argClass2+" ").trim()}},appendClass:function(){if(arguments[0]){for(var i=1;i<arguments.length;i++){this.replaceClass(arguments[0],arguments[i],String.EMPTY);arguments[0].className=(arguments[0].className)?arguments[0].className+" "+arguments[i].trim():arguments[i].trim()}}},removeClass:function(argObj,argClass){if(argObj){this.replaceClass(argObj,argClass,String.EMPTY)}},createStyleRule:function(argSelector,argProperties){if(document.styleSheets.length===0){var elem;var headNode=document.getElementsByTagName("head");if(!headNode||headNode.length===0){elem=document.createElement("head");document.firstChild.parentNode.insertBefore(elem,document.firstChild)}var head=document.getElementsByTagName("head")[0];elem=document.createElement("style");head.appendChild(elem);elem=null}var sheet=document.styleSheets[0];var mRule;if(sheet.addRule){sheet.addRule(argSelector,argProperties,0);mRule=sheet.rules[0]}else{if(sheet.insertRule){sheet.insertRule(argSelector+"{"+argProperties+"}",0);mRule=sheet.cssRules[0]}}Util.CssClassMap[argSelector]=mRule;sheet=null},getWindowHeight:function(){if(typeof window.innerHeight===this.NUMBER){return window.innerHeight}else{if(document.documentElement&&document.documentElement.clientHeight){return document.documentElement.clientHeight}else{if(document.body&&document.body.clientHeight){return document.body.clientHeight}}}},getWindowWidth:function(){if(typeof window.innerWidth===this.NUMBER){return window.innerWidth}else{if(document.documentElement&&document.documentElement.clientWidth){return document.documentElement.clientWidth}else{if(document.body&&document.body.clientWidth){return document.body.clientWidth}}}},getScrollBarWidth:function(){if(!this.scrollBarWidth){var inner=document.createElement("p");inner.style.width="100%";inner.style.height="200px";var outer=document.createElement("div");outer.style.position="absolute";outer.style.top="0px";outer.style.left="0px";outer.style.visibility="hidden";outer.style.width="200px";outer.style.height="150px";outer.style.overflow="hidden";outer.appendChild(inner);document.body.appendChild(outer);var w1=inner.offsetWidth;outer.style.overflow="scroll";var w2=inner.offsetWidth;if(w1==w2){w2=outer.clientWidth}document.body.removeChild(outer);this.scrollBarWidth=(w1-w2)}return this.scrollBarWidth},curTop:function(obj,argIsAbsolute){var mTop=0;if(obj.offsetParent){while(obj){mTop+=obj.offsetTop;if(argIsAbsolute&&this.getResultingStyle(obj,"position")=="absolute"){break}obj=obj.offsetParent}}else{if(obj.y){mTop+=obj.y}}return mTop},curLeft:function(obj,argIsAbsolute){var mLeft=0;if(obj.offsetParent){while(obj){mLeft+=obj.offsetLeft;if(argIsAbsolute&&this.getResultingStyle(obj,"position")=="absolute"){break}obj=obj.offsetParent}}else{if(obj.x){mLeft+=obj.x}}return mLeft},curLeftByNode:function(obj,argIsAbsolute){var mLeft=0;if(obj.parentNode){while(obj&&obj.tagName!="BODY"){mLeft+=obj.offsetLeft;if(argIsAbsolute&&this.getResultingStyle(obj,"position")=="absolute"){break}obj=obj.parentNode}}else{if(obj.x){mLeft+=obj.x}}return mLeft},quoteAttributes:function(argString){var theString=argString;theString=theString.replace(/<[^>]*>/g,function(match){match=match.replace(/( [^=]+=)([^"][^ >]*)/g,'$1"$2"');return match});return theString},curParentScrollTop:function(obj){var elem=obj.parentNode;while(elem&&elem.scrollTop===0){elem=elem.parentNode}return(elem&&elem.scrollTop)?elem.scrollTop:0},curParentScrollLeft:function(obj){var elem=obj.parentNode;while(elem&&elem.scrollLeft===0){elem=elem.parentNode}return(elem&&elem.scrollLeft)?elem.scrollLeft:0},getBodyScroll:function(){var x,y;if(!document.all){x=self.pageXOffset;y=self.pageYOffset}else{if(document.documentElement&&document.documentElement.scrollTop){x=document.documentElement.scrollLeft;y=document.documentElement.scrollTop}else{if(document.body){x=document.body.scrollLeft;y=document.body.scrollTop}}}return{x:x,y:y}},enableShield:function(argId,argScrollBarOnly){var shieldId=argId+"_shield"+((argScrollBarOnly)?"_scrollBar":"");if(!$id(shieldId)){var newElem=document.createElement("div");newElem.id=shieldId;document.body.appendChild(newElem);newElem=null;this.addEvent($id(shieldId),"mousedown",function(){Util.disableShield(argId,argScrollBarOnly)})}if($id(shieldId)){var shieldStyle=$id(shieldId).style;shieldStyle.position="absolute";shieldStyle.zIndex=500;shieldStyle.height=$id(argId).offsetHeight+"px";shieldStyle.backgroundColor="#FFF";shieldStyle.opacity="0.01";shieldStyle.filter="alpha(opacity=1)";shieldStyle.height=$id(argId).offsetHeight+"px";if(argScrollBarOnly){var scrollBarWidth=$id(argId).offsetWidth-$id(argId).clientWidth;shieldStyle.width=scrollBarWidth+"px";shieldStyle.top=this.curTop($id(argId))+"px";shieldStyle.left=this.curLeft($id(argId))+($id(argId).offsetWidth-scrollBarWidth)+"px"}else{shieldStyle.width=($id(argId).tagName==="BODY")?$id(argId).offsetWidth+"px":$id(argId).parentNode.clientWidth+"px";shieldStyle.top=this.curTop($id(argId))+"px";shieldStyle.left=this.curLeft($id(argId))+"px"}shieldStyle.cursor="default";shieldStyle.display="";shieldStyle=null;this.disableSelection(shieldId)}},disableShield:function(argId,argScrollBarOnly){var shieldId=argId+"_shield"+((argScrollBarOnly)?"_scrollBar":"");if($id(shieldId)){$id(shieldId).style.display="none"}},disableScrollBarShield:function(argId){this.disableShield(argId,true)},enableScrollBarShield:function(argId){this.enableShield(argId,true)},isRightClick:function(e){e=e||window.event;if(e.which){return(e.which==3)}else{if(e.button){return(e.button==2)}}return false},isLeftClick:function(e){e=e||window.event;if(e.which){return(e.which==1)}else{if(e.button){return(e.button==1)}}return false},getOuterHTML:function(argNode,argInjectionBeg,argInjectionEnd){argInjectionBeg=argInjectionBeg||"{";argInjectionEnd=argInjectionEnd||"}";var elem=document.createElement("span");elem.appendChild(argNode.cloneNode(true));var html=Util.quoteAttributes(elem.innerHTML.replace(new RegExp(escape(argInjectionBeg),"g"),argInjectionBeg).replace(new RegExp(escape(argInjectionEnd),"g"),argInjectionEnd));elem=null;return html},CssClassMap:{},getCSSClass:function(argClassName){argClassName=(argClassName.substring(0,1)!="."&&argClassName.substring(0,1)!="#")?"."+argClassName:argClassName;var IE8selectorText=argClassName.replace(/\./g,"*.").replace(/\#/g,"*#");if(Util.CssClassMap[argClassName]){return Util.CssClassMap[argClassName]}var mRule=null;for(var j=0;j<document.styleSheets.length;j++){try{mRule=document.styleSheets[j].cssRules?document.styleSheets[j].cssRules:document.styleSheets[j].rules;for(var i=0;i<mRule.length;i++){if(mRule[i].selectorText==argClassName||mRule[i].selectorText==IE8selectorText){Util.CssClassMap[argClassName]=mRule[i];return mRule[i]}}}catch(ex){}}window.status="["+argClassName+"] Class name not found";return false},rowClick:function(elem,argClass){argClass=argClass||"selectedRow";var rows=Util.getElementsByClassName(elem.parentNode.parentNode,argClass);for(var i=0;i<rows.length;i++){Util.removeClass(rows[i],argClass)}if(elem){Util.appendClass(elem,argClass)}},fadeByElement:function(argElem,argStartOpacity,argStopOpacity,argSpeed,argIncrement,callBack){argElem.style.opacity=Number(argStartOpacity);argIncrement=argIncrement||0.01;var increment=(argStartOpacity>argStopOpacity)?Number(-argIncrement):Number(argIncrement);function fade(){if(Number(argElem.style.opacity)==argStopOpacity||Number(argElem.style.opacity)>1||Number(argElem.style.opacity)<0){if(callBack){callBack.call()}return}if(document.all){argElem.style.filter="blendTrans(duration=2)";argElem.filters.item(0).Apply();argElem.style.visibility=(increment>0)?"visible":"hidden";argElem.filters.item(0).play();if(callBack){setTimeout(function(){callBack.call()},1000)}}else{argElem.style.opacity=Number(argElem.style.opacity)+increment;setTimeout(function(){fade()},argSpeed)}}fade()},domOnload:function(callBack,argDoc){argDoc=argDoc||document;if(argDoc.addEventListener&&!argDoc.readyState){argDoc.addEventListener("DOMContentLoaded",callBack,false);return}if(argDoc.readyState&&!argDoc.addEventListener){if(argDoc.onreadystatechange){setTimeout(function(){callBack()},100);return}argDoc.onreadystatechange=function(){if(this.readyState=="complete"){callBack()}};return}if(/WebKit/i.test(navigator.userAgent)){var _timer=setInterval(function(){if(/loaded|complete/.test(argDoc.readyState)){clearInterval(_timer);callBack()}},10);return}if(argDoc.addEventListener&&argDoc.readyState){callBack();return}window.onload=callBack}};var Jam=function(argId){if(!Jam.instance[argId]){Jam.instance[argId]=new Jam.Control(argId)}return Jam.instance[argId]};Jam.instance={};Jam.Control=function Control(argId){this.jsonArray=[];this.ac=false;this.inputId=null;this.groupBy=null;this.templateId=argId;this.initialized=false;this.selectorClass=null;this.showAfterRender=true;this.numberOfChildNodes=0;this.hasTBody=($id(argId)&&$id(argId).tagName==="TABLE"&&$id(argId).getElementsByTagName("TBODY").length===1);this.rowClass=argId+Jam.conf.DELIMITER+"row";this.setData=function(argData){this.jsonArray=argData};this.pager=null;var logPagerError=function(){console.log('Pager has not been created. Use Jam("myId").createPager(pagerId, pageSize)')};this.createPager=function(argId,argPageSize,argClass,argShowFirst){if(!this.pager){this.pager=new Jam.Pager(argId,argClass,argShowFirst)}this.pager.setPageSize(argPageSize);return this.pager};this.setPageSize=function(argPageSize){try{this.pager.setPageSize(argPageSize)}catch(ex){logPagerError()}};this.setPageNum=function(argPageNum){try{this.pager.setPageNum(argPageNum)}catch(ex){logPagerError()}};this.go=function(i){try{this.pager.setPageNum(i);this.render(this.jsonArray);if(GridControl&&GridControl.instance[this.templateId]){GridControl.instance[this.templateId].reApplyColumnHeader()}}catch(ex){logPagerError()}return false};this.next=function(){if(this.pager.next()){this.render(this.jsonArray)}};this.prev=function(){if(this.pager.prev()){this.render(this.jsonArray)}};this.first=function(){this.pager.first();this.render(this.jsonArray)};this.last=function(){this.pager.last();this.render(this.jsonArray)};var template={root:{htmlStr:null,parsedArray:null,property:null,size:0}};var m_templateNode,m_containerNode,m_marker,m_resultContainer,m_selectDefault,m_hasLt=false,m_hasGt=false,m_hasNbsp=false;function getValue(item,prop){var aProp=prop.split(".");var curValue=item;for(var j=0;j<aProp.length;j++){curValue=curValue[aProp[j]]}return curValue}function cleanHTML(argString){return Util.quoteAttributes(argString.replace(new RegExp(escape(Jam.conf.INJECTION_BEG),"g"),Jam.conf.INJECTION_BEG).replace(new RegExp(escape(Jam.conf.INJECTION_END),"g"),Jam.conf.INJECTION_END))}this.parseTemplate=function(argTemplate){var fieldsInTemplate=argTemplate.match(/\{([_A-Za-z\d\.\(\)$,\+<>!='"\ \?:]+)\}/g);var injectArray=[],functionName=0,colObj={},tpl=argTemplate;if(fieldsInTemplate){var propertyName="",pos=0,val,fn;for(var n=0;n<fieldsInTemplate.length;n++){propertyName=fieldsInTemplate[n].substring(1,fieldsInTemplate[n].length-1);pos=tpl.indexOf(fieldsInTemplate[n]);val=tpl.substring(0,pos).replace(/\n/g,"");injectArray.push(val);colObj={};if(propertyName.indexOf("fn:")===0){colObj.type=1;functionName=propertyName.replace("fn:",String.EMPTY).ltrim();if(functionName.substring(0,1)==="("){functionName=functionName.replace(Jam.conf.INJECTION_BEG+"fn:",String.EMPTY).replace(Jam.conf.INJECTION_END,String.EMPTY);functionName=functionName.replace(/&lt;/gi,"<").replace(/&gt;/gi,">");colObj.func=new Function("$this","$i","return "+functionName)}else{if(functionName.indexOf("subtemplate_")>-1){var prop=functionName.split("subtemplate_")[1].split(" ")[0];colObj.func=(function(argProp){return function(argItem,i){return this.getRenderedHTMLString(argItem,argProp)}})(prop)}else{if(Jam.fn[functionName]){colObj.func=Jam.fn[functionName]}else{try{fn=eval(functionName);if(fn){colObj.func=fn}}catch(ex){console.log("Can not invoke {fn:"+functionName+"} - function "+functionName+"(argItem) has not been implemented")}}}}colObj.isDeep=null;colObj.property=null}else{colObj.type=0;colObj.func=null;colObj.isDeep=(propertyName.indexOf(".")===-1)?0:1;colObj.property=propertyName.split(".")}injectArray.push(colObj);tpl=tpl.substring(pos+fieldsInTemplate[n].length)}}injectArray.push(tpl.replace(/\n/g,""));return injectArray};this.init=function(){m_marker=("<ajax:"+this.templateId+" />").toLowerCase();var elem,i=0,templateStr,property,len;var subTemplateNode=Util.getElementsByClassName($id(this.templateId),Jam.conf.SUB_TEMPLATE);var subTemplates=[];if(subTemplateNode.length>0){for(i=0;i<subTemplateNode.length;i++){if(subTemplateNode[i].className.indexOf("property:")>-1){templateStr=Util.getOuterHTML(subTemplateNode[i],Jam.conf.INJECTION_BEG,Jam.conf.INJECTION_END);property=subTemplateNode[i].className.split("property:")[1].split(" ")[0];template[i.toString()]={};template[i.toString()].htmlStr=templateStr;template[i.toString()].property=property}}len=subTemplateNode.length-1;for(i=len;i>=0;i--){if(subTemplateNode[i].className.indexOf("property:")>-1){templateStr=Util.getOuterHTML(subTemplateNode[i],Jam.conf.INJECTION_BEG,Jam.conf.INJECTION_END);property=subTemplateNode[i].className.split("property:")[1].split(" ")[0];template[i.toString()]={};template[i.toString()].htmlStr=templateStr.replace(Jam.conf.SUB_TEMPLATE,"").replace("property:"+property,"").replace(' class=" "',"");template[i.toString()].property=property;subTemplateNode[i].parentNode.replaceChild(document.createTextNode("{fn:subtemplate_"+i+"}"),subTemplateNode[i])}}}var noneFoundNode=Util.getElementsByClassName($id(this.templateId),Jam.conf.NONE_FOUND)[0];if(noneFoundNode){Util.removeClass(noneFoundNode,Jam.conf.NONE_FOUND);template.nonefound={};template.nonefound.htmlStr=Util.getOuterHTML(noneFoundNode.parentNode.removeChild(noneFoundNode),Jam.conf.INJECTION_BEG,Jam.conf.INJECTION_END)}var noMatchNode=Util.getElementsByClassName($id(this.templateId),Jam.conf.NO_MATCH)[0];if(noMatchNode){Util.removeClass(noMatchNode,Jam.conf.NO_MATCH);template.nomatch={};template.nomatch.htmlStr=Util.getOuterHTML(noMatchNode.parentNode.removeChild(noMatchNode),Jam.conf.INJECTION_BEG,Jam.conf.INJECTION_END)}var groupNode=Util.getElementsByClassName($id(this.templateId),Jam.conf.GROUPBY_START)[0];if(groupNode){this.groupBy=groupNode.className.trim().split(" ")[1];if(this.groupBy.indexOf(":")===-1){console.log("Syntax error: use jam:groupby property:propertyName OR jam:groupby fn:functionName");throw ("Syntax error in groupby property")}this.groupBy=this.groupBy.replace("property:",String.EMPTY);template.head={};template.head.htmlStr=Util.getOuterHTML(groupNode.parentNode.removeChild(groupNode),Jam.conf.INJECTION_BEG,Jam.conf.INJECTION_END)}var groupEnd=Util.getElementsByClassName($id(this.templateId),Jam.conf.GROUPBY_END)[0];if(groupEnd){template.foot={};template.foot.htmlStr=Util.getOuterHTML(groupEnd.parentNode.removeChild(groupEnd),Jam.conf.INJECTION_BEG,Jam.conf.INJECTION_END)}if($id(this.templateId).tagName==="SELECT"){var selectDefault=Util.getElementsByClassName($id(this.templateId),Jam.conf.SELECT_DEFAULT)[0];if(selectDefault){m_selectDefault=selectDefault.parentNode.removeChild(selectDefault)}$id(this.templateId).selectedIndex=null;$id(this.templateId).value=null}var replaceHTML=$id(this.templateId).innerHTML;template.root.htmlStr=(this.hasTBody)?$id(this.templateId).getElementsByTagName("TBODY")[0].innerHTML.trim():$id(this.templateId).innerHTML.trim();m_containerNode.appendChild(m_templateNode.cloneNode(true));var childNd=m_templateNode.childNodes;len=childNd.length;for(i=0;i<len;i++){if(childNd[i].nodeType===1){this.numberOfChildNodes++}}m_resultContainer=m_containerNode.innerHTML.replace(replaceHTML,m_marker);template.root.htmlStr=cleanHTML(template.root.htmlStr);template.root.htmlStr=template.root.htmlStr.replace(/ checked="{(.+)}"/g,' jam_checked="{$1}"');template.root.htmlStr=template.root.htmlStr.replace(/ disabled="{(.+)}"/g,' jam_disabled="{$1}"');template.root.htmlStr=template.root.htmlStr.replace(/ selected="{(.+)}"/g,' jam_selected="{$1}"');childNd=elem=null;m_hasLt=/&lt;/.test(template.root.htmlStr);m_hasGt=/&gt;/.test(template.root.htmlStr);m_hasNbsp=/&nbsp;/.test(template.root.htmlStr);this.initialized=true};this.render=function(argJsonArray,argOrderBy,argDirection){if(!argJsonArray.sort&&typeof argJsonArray===Util.OBJECT){argJsonArray=[argJsonArray]}if(typeof argOrderBy==="string"){argOrderBy=[argOrderBy,argDirection||Jam.ASC]}this.jsonArray=argJsonArray;m_templateNode=$id(this.templateId);if("|TR|TD|TH|TBODY|".indexOf("|"+m_templateNode.tagName+"|")>-1){while(m_templateNode.tagName!="TABLE"){m_templateNode=m_templateNode.parentNode}}m_containerNode=document.createElement("span");if(!this.initialized){try{this.init()}catch(e){throw e}}if(argJsonArray.length>0){for(var i in template){if(template[i].htmlStr){if(!template[i].parsedArray){template[i].parsedArray=this.parseTemplate(template[i].htmlStr);template[i].size=template[i].parsedArray.length}}}if(this.groupBy){argOrderBy=argOrderBy||[this.groupBy,Jam.ASC];this.orderBy(argOrderBy)}else{if(argOrderBy){this.orderBy(argOrderBy)}}}if(argJsonArray.length===0&&(template.nonefound||template.nomatch)){if(argJsonArray.isFiltered&&template.nomatch){m_containerNode.innerHTML=m_resultContainer.replace(m_marker,template.nomatch.htmlStr);m_templateNode.parentNode.replaceChild(m_containerNode.childNodes[0],m_templateNode)}else{m_containerNode.innerHTML=m_resultContainer.replace(m_marker,template.nonefound.htmlStr);m_templateNode.parentNode.replaceChild(m_containerNode.childNodes[0],m_templateNode)}$id(this.templateId).style.width="100%"}else{m_containerNode.innerHTML=m_resultContainer.replace(m_marker,this.getRenderedHTMLString(argJsonArray,"root"));m_templateNode.parentNode.replaceChild(m_containerNode.childNodes[0],m_templateNode);if(m_selectDefault){m_selectDefault.selected="selected";if($id(this.templateId).childNodes[0]){$id(this.templateId).insertBefore(m_selectDefault,$id(this.templateId).childNodes[0])}else{$id(this.templateId).appendChild(m_selectDefault)}$id(this.templateId).selectedIndex=null}}m_templateNode=null;m_containerNode=null;if(this.showAfterRender){$id(this.templateId).style.display=String.EMPTY;$id(this.templateId).style.visibility="visible";Util.removeClass($id(this.templateId),"JAM");Util.removeClass($id(this.templateId),"jam:hidden");Util.removeClass($id(this.templateId),"ui-hidden");Util.removeClass($id(this.templateId),"ui-helper-hidden")}if(this.isSelectable){this.activateSelection()}return this};this.getRenderedHTMLString=function(argData,argTemplateId){var rows=[],z=0,foot=null,groupBy=null,currentGroupValue=null,groupFunction=null;var data=argData;if(template[argTemplateId].property){data=(!data[template[argTemplateId].property])?[]:data[template[argTemplateId].property]}else{groupBy=this.groupBy;if(groupBy){groupFunction=(groupBy&&groupBy.substring(0,3)==="fn:")?eval(groupBy.split(":")[1]):false}}if(!data.length){var temp=[];for(var x in data){if(typeof data[x]!=Util.OBJECT){temp=[data];break}else{if(x){temp.push(data[x])}}}data=temp}var range={start:0,stop:data.length};if(argTemplateId==="root"&&this.pager){range=this.pager.getRange(data);this.pager.renderPager(this)}for(var j=range.start;j<range.stop;j++){if(groupBy){var groupValue=(groupFunction)?groupFunction.call(this,data[j]):data[j][groupBy];if(currentGroupValue!=groupValue){currentGroupValue=groupValue;if(foot){rows=rows.concat(foot);foot=null}rows=rows.concat(this.parse(data[j],j,template.head));if(template.foot&&template.foot.size>0){foot=this.parse(data[j],j,template.foot)}}}rows=rows.concat(this.parse(data[j],j,template[argTemplateId]));if(data[j]&&data[j]["jam:append"]){rows[z++]=data[j]["jam:append"]}}if(foot){rows=rows.concat(foot)}if(data.bold){data.bold=data.bold.sort?data.bold:[data.bold];var tmp=rows.join(String.EMPTY).replace(/&nbsp;/gi,"<&nbsp;>");if(m_hasLt||m_hasGt){tmp=tmp.replace(/&lt;/gi,"<&lt;>").replace(/&gt;/gi,"<&gt;>").replace(/&nbsp;/gi,"<&nbsp;>")}for(var i=0;i<data.bold.length;i++){tmp=tmp.replace(data.bold[i],"$1<b"+(data.className?' class="'+data.className+'"':String.EMPTY)+">$2</b>")}if(m_hasLt||m_hasGt){tmp=tmp.replace(/<&lt;>/g,"&lt;").replace(/<&gt;>/g,"&gt;").replace(/<&nbsp;>/g,"&nbsp;")}tmp=tmp.replace(/<&nbsp;>/g,"&nbsp;");return this.removeDisableEqBlank(tmp)}else{return this.removeDisableEqBlank(rows.join(String.EMPTY))}return this};this.parse=function(argItem,argJ,argTemplateObj){var retArray=[];var k=0,xx=1,curItem="";var size=argTemplateObj.size;var parsedArray=argTemplateObj.parsedArray;for(var i=0;i<size;i++){if(i%2){if(parsedArray[i].type===1){retArray[k++]=parsedArray[i].func.call(this,argItem,argJ)}else{curItem="";try{if(argItem[parsedArray[i].property[0]]||argItem[parsedArray[i].property[0]]==0){curItem=argItem[parsedArray[i].property[0]];if(parsedArray[i].isDeep){for(xx=1;xx<parsedArray[i].property.length;xx++){curItem=curItem[parsedArray[i].property[xx]]}}}}catch(ex){}retArray[k++]=curItem}}else{retArray[k++]=parsedArray[i]}}return[retArray.join(String.EMPTY)]};this.removeDisableEqBlank=function(argHTMLStr){return argHTMLStr.replace(/ jam_disabled=/g," disabled=").replace(/ disabled=""/g," ").replace(/ jam_checked=/g," checked=").replace(/ checked=""/g," ").replace(/ jam_selected=/g," selected=").replace(/ selected=""/g," ")};this.sort=function(argSortColumn,argDirection){this.render(this.jsonArray.orderBy(argSortColumn,argDirection))};this.orderBy=function(sortArray){this.jsonArray.orderBy(sortArray)};return this};Jam.ver="2.0.2";Jam.ajax=function(argUrl,argCallBack,argParameters,argErrorCallback){var tmp=new AjaxJsonReq(argUrl,argCallBack,argParameters,argErrorCallback);tmp=null};Jam.ajaxNoCache=function(argUrl,argCallBack,argParameters,argErrorCallback){var tmp=new AjaxJsonReq(argUrl.addTimeStamp(),argCallBack,argParameters,argErrorCallback);tmp=null};Jam.ready=function(argCallBack,argDocument){Util.domOnload(argCallBack,argDocument)};Jam.getScript=function(argUrl,argCharset){var scriptId=argUrl.split("?")[0];if(window[scriptId]){document.getElementsByTagName("head")[0].removeChild(window[scriptId])}window[scriptId]=document.createElement("script");window[scriptId].type="text/javascript";window[scriptId].charset=argCharset?argCharset:"utf-8";window[scriptId].src=argUrl;document.getElementsByTagName("head")[0].appendChild(window[scriptId])};Jam.conf={DELIMITER:"_",GROUPBY_START:"jam:groupby",GROUPBY_END:"jam:groupend",NONE_FOUND:"jam:nonefound",NO_MATCH:"jam:nomatch",SELECT_DEFAULT:"jam:default",INJECTION_BEG:"{",INJECTION_END:"}",EVEN:"even",ODD:"odd",SUB_TEMPLATE:"jam:foreach"};Jam.ASC=1;Jam.DESC=-1;Jam.TOGGLE="TOGGLE";Jam.fn={nbsp:function(argItem,i){return"&nbsp;"},n:function(argItem,i){return i+1},i:function(argItem,i){return i},_id:function(argItem,i){return argItem.$_id?argItem.$_id:i},PK:function(argItem,i){return this.templateId+Jam.conf.DELIMITER+((this.jsonArray.PK)?argItem[this.jsonArray.PK]:i)},uniqueClass:function(argItem,i){return this.templateId+Jam.conf.DELIMITER+i},evenOdd:function(argItem,i){return(i%2)?Jam.conf.ODD:Jam.conf.EVEN},oddEven:function(argItem,i){return(i%2)?Jam.conf.EVEN:Jam.conf.ODD},zeroOne:function(argItem,i){return(i%2)}};Jam.Pager=function(argId,argClass,argShowFirst){this.selectedClass=argClass;this.pagerID=argId;this.size=0;this.offset=0;this.pageSize=null;this.showFirst=argShowFirst||false;this.setPageNum=function(argPageNum){this.offset=parseInt(argPageNum-1,10)};this.setPageSize=function(argPageSize){this.pageSize=parseInt(argPageSize,10)};this.first=function(){this.offset=0};this.last=function(){var plusOne=(this.size%this.pageSize)?1:0;var size=(this.size>0)?parseInt(this.size/this.pageSize,10)+plusOne:1;this.offset=size-1};this.next=function(){if(((this.offset+1)*this.pageSize)>=this.size){return false}this.offset=this.offset+1;return true};this.prev=function(){if(this.offset===0){return false}this.offset=this.offset-1;return true};this.getRange=function(argArray){this.size=argArray.length>0?argArray.length:0;if(this.pageSize===null){this.pageSize=argArray.length}var start=(this.offset*this.pageSize);var stop=(this.offset*this.pageSize)+this.pageSize;if(stop>this.size){stop=this.size}return{start:start,stop:stop}};this.renderPager=function(argControl){if(!this.showFirst&&this.size<=this.pageSize){$id(this.pagerID).innerHTML="";return}var plusOne=(this.size%this.pageSize)?1:0;var size=(this.size>0)?parseInt(this.size/this.pageSize,10)+plusOne:1;Jam(this.pagerID).render(new Array(size));var pagerNodes=$id(this.pagerID).getElementsByTagName("a");var hasMousedown=false;if(pagerNodes[0]){var elem=document.createElement("span");elem.appendChild(pagerNodes[0].cloneNode(false));hasMousedown=elem.innerHTML.contains("onmousedown")}for(var i=0;i<pagerNodes.length;i++){if(!hasMousedown){Util.addEvent(pagerNodes[i],"mousedown",(function(i,templateId){return function(){Jam(templateId).go(i);return false}})(i+1,argControl.templateId))}}Util.appendClass(pagerNodes[this.offset],this.selectedClass)}};if(window.DOMParser&&window.XMLSerializer&&window.Node&&window.Node.prototype&&window.Node.prototype.__defineGetter__){window.Node.prototype.__defineGetter__("xml",function(){return new XMLSerializer().serializeToString(this)})}function AjaxJsonReq(argUrl,argCallBack,argJsonParams,argErrorHandler){if(typeof(argUrl)===Util.UNDEFINED||typeof(argCallBack)===Util.UNDEFINED){console.log("Missing or undefined parameter: AjaxJsonReq(url (String), callBack_or_DOM_id (function or String), [jsonParams (object)], [errorHandler (function)])");return}argJsonParams=(typeof argJsonParams==="undefined")?null:argJsonParams;argErrorHandler=argErrorHandler||null;var jsonText=argJsonParams?Util.convertToJson(argJsonParams):null;if(typeof(jsonText)===Util.STRING&&(jsonText==="{}"||jsonText==="[]")){jsonText=String.empty}var cacheKey=argUrl;if(argJsonParams){cacheKey+=jsonText.replace(/\"/g,"")}var cachedData=AjaxJsonReq.getCache(cacheKey);if(cachedData){AjaxJsonReq.callBack(argCallBack,cachedData,cacheKey);return}var m_self=this;this.aborted=false;this.req=window.XMLHttpRequest?new XMLHttpRequest():(window.navigator.userAgent.indexOf("Mac")==-1)?new ActiveXObject("Microsoft.XMLHTTP"):null;this.cancel=function(){this.aborted=true;this.req.abort()};if(!this.req){return alert("Unsupported browser, please upgrade your browser")}else{if(location.search.indexOf("cache=no")>-1){argUrl+="&time="+new Date().getTime()}var mreq=this.req;this.req.onreadystatechange=function(){if(mreq){if(m_self.aborted){delete mreq.onreadystatechange;mreq=null;return}if(mreq.readyState==4){if(mreq.status==200||(typeof mreq.status===Util.UNDEFINED&&/WebKit/i.test(navigator.userAgent))){AjaxJsonReq.callBack(argCallBack,mreq,cacheKey)}else{if(argErrorHandler){AjaxJsonReq.callBack(argErrorHandler,mreq)}else{if(AjaxJsonReq.genericErrorHandler){AjaxJsonReq.callBack(AjaxJsonReq.genericErrorHandler,mreq)}else{console.log("Error: "+mreq.status+":"+mreq.statusText)}}}mreq=null}}};var url;if(argJsonParams){url=(argUrl+"&").replace(/timeStamp=\d+&/,"");var lastChar=url.substr(url.length-1,1);if(lastChar==="&"||lastChar==="?"){url=url.substr(0,url.length-1)}this.req.open("POST",url,true);this.req.setRequestHeader("Content-Type","application/json; charset=utf-8");this.req.send(jsonText)}else{if(argUrl.length>1000){if(argUrl.indexOf("?")===-1){argUrl+="?jam=true"}url=argUrl.split("?");this.req.open("POST",url[0]+"?jam=true",true);this.req.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");this.req.setRequestHeader("Connection","close");this.req.send(url[1])}else{this.req.open("GET",argUrl,true);this.req.setRequestHeader("Content-Type","text/html; charset=UTF-8");this.req.send(null)}}}return this}AjaxJsonReq.callBack=function(argFunctionOrElementId,argReq,argCacheKey){var returnData=argReq;if(argReq.responseXML&&argReq.responseXML.documentElement){returnData=argReq.responseXML.documentElement;AjaxJsonReq.addCache(argCacheKey,returnData)}else{if(argReq.responseText){if(argReq.responseText.trim().substring(0,1)==="<"){returnData=argReq.responseText}else{try{returnData=eval(argReq.responseText)}catch(e){returnData=eval("("+argReq.responseText+")")}}if(argCacheKey){AjaxJsonReq.addCache(argCacheKey,returnData)}}}if(Util.getArguments(argFunctionOrElementId)=="()"){console.log("Warning : Missing return data argument in the callback function")}argFunctionOrElementId.call(this,returnData,argReq.status,argReq.statusText)};AjaxJsonReq.cacheArray=[];AjaxJsonReq.cacheSize=50;AjaxJsonReq.isCachable=function(argKey){return(argKey&&argKey.indexOf("timeStamp=")===-1)};AjaxJsonReq.addCache=function(argKey,argData){if(argKey&&argData&&AjaxJsonReq.cacheSize>0&&AjaxJsonReq.isCachable(argKey)&&!AjaxJsonReq.getCache(argKey)){var len=AjaxJsonReq.cacheArray.unshift({inputKey:argKey.toUpperCase(),data:argData});if(len>AjaxJsonReq.cacheSize){AjaxJsonReq.cacheArray.pop()}}};AjaxJsonReq.getCache=function(argKey){if(AjaxJsonReq.cacheSize>0&&AjaxJsonReq.isCachable(argKey)){for(var i=0;i<AjaxJsonReq.cacheArray.length;i++){if(AjaxJsonReq.cacheArray[i].inputKey==argKey.toUpperCase()){return AjaxJsonReq.cacheArray[i].data}if(i>AjaxJsonReq.cacheSize){return null}}}return null};
