//curtain.js // JavaScript Document //log.js // Logs user actions //Logs the action function logAction( categoryID, extra ){ try{ var uri = "/index.php?method=jslog&categoryID=" + categoryID + "&extra=" +extra; var ajaxRequest = new AjaxRequest(uri); ajaxRequest.setUseGET(); ajaxRequest.sendRequest(); }catch(err){ //console.log } } //validate_form.js // Similar to validate form used at innovectra // Both inherited from RPI var validationRules = new Array(); function vRule( formField, labelID, ruleParserName , aNull ){ this.formField = formField; this.labelID = labelID; this.ruleParserName = ruleParserName; this.allowNull = aNull; this.passed = false; this.validate = vr_validate this.validationFailureMessage = vr_validationFailureMessage this.displayVisual = vr_displayVisual this.vfmsg = "" this.oldClassName = "" } function vr_displayVisual(problem){ var identity var f f = this.labelID identity=document.getElementById( f ); if (problem == true && isNull( identity ) == false ) { this.oldClassName = identity.className; identity.className='validate_inputProblem'; }else{ if(this.oldClassName !="" ){ identity.className=this.oldClassName ; } } } function vr_validate(){ var r = true var v var cnt cnt = this.formField.length?this.formField.length:0 ; if( cnt != 0 ) { //Is bullet list var v = ""; for (i=0; i< this.formField.length; i++) { if (this.formField[i].checked) { v = this.formField[i].value ; //i; } } }else{ v = trim( this.formField.value ) } this.vfmsg = "" if( this.allowNull == true && v == '' ){ r = true; }else if( this.allowNull == false && v == '' ){ r = false; this.vfmsg = "Must be not be empty " }else{ switch(this.ruleParserName){ case 'money': if( !IsNumeric( v) ){ r = false; this.vfmsg = "Must be formated as money (XX.XX) " } break case 'sqldate': if( !matchEntireRegex( v, /[0-9]+\/[0-9]+\/[0-9]+/) ){ r = false; this.vfmsg = "Must be formated (MM/DD/YYYY)" } break case 'sqltime': if( !matchEntireRegex( v, /[0-9]+:[0-9]+\s*[APap][Mm]/) ){ r = false; this.vfmsg = "Must be formated (HH:MM PM)" } break case 'sqldatetime': if( !matchEntireRegex( v, /[0-9]+\/[0-9]+\/[0-9].\s[0-9]+:[0-9]+\s*[APap][Mm]/) ){ r = false; this.vfmsg = "Must be formated (YYYY/MM/DD HH:MM PM)" } break case 'numeric': if( !IsNumeric( v ) ){ r = false; this.vfmsg = "Must be a number" } break case 'integer': if( hasInvalidChars( v, "0123456789" ) ){ r = false this.vfmsg = "Must be an Integer" } break case 'notnull': if( v == "" ){ r = false this.vfmsg = "Cannot be empty" } break default: } } this.passed = r; return r; } function vr_validationFailureMessage(){ return this.vfmsg ; } function addValidationRule( formField, labelID, ruleParserName, aNull ){ var r r = new vRule( formField, labelID, ruleParserName , aNull ); validationRules.push(r); } function validateForm(){ var passed = true for (i in validationRules ){ if( !validationRules[i].validate() ){ passed = false; } } if ( passed == false){ var r r = "Please enter required values.\n\n" for (i in validationRules ){ if( validationRules[i].passed == false ){ r = r + "\n" + readLayer( validationRules[i].labelID ) + " : " + validationRules[i].validationFailureMessage(); validationRules[i].displayVisual(true) }else{ validationRules[i].displayVisual(false) } } alert(r); } return passed; } function vfr_Required( formField, labelID ){ if( formField.value != "" ){ return true; }else{ return false; } } function IsNumeric(sText){ var ValidChars = "0123456789."; var IsNumber=true; var Char; for (i = 0; i < sText.length && IsNumber == true; i++){ Char = sText.charAt(i); if (ValidChars.indexOf(Char) == -1){ IsNumber = false; } } return IsNumber; } function trim(str){ return str.replace(/^\s*|\s*$/g,""); } function matchEntireRegex( matchString, myRe ){ myArray = myRe.exec(matchString); if ( typeof myArray == 'object' && myArray ) { if( myArray[0] == matchString ){ return true; }else{ return false; } }else{ return false; } } /* case "alnum": case "alphanumeric": { var charpos = objValue.value.search("[^A-Za-z0-9]"); if(objValue.value.length > 0 && charpos >= 0) { if(!strError || strError.length ==0) { strError = objValue.name+": Only alpha-numeric characters allowed "; }//if alert(strError + "\n [Error character position " + eval(charpos+1)+"]"); return false; }//if break; }//case alphanumeric case "num": case "numeric": { var charpos = objValue.value.search("[^0-9]"); if(objValue.value.length > 0 && charpos >= 0) { if(!strError || strError.length ==0) { strError = objValue.name+": Only digits allowed "; }//if alert(strError + "\n [Error character position " + eval(charpos+1)+"]"); return false; }//if break; }//numeric case "alphabetic": case "alpha": { var charpos = objValue.value.search("[^A-Za-z]"); */ function hasInvalidChars( searchSet, allowedChar ){ var charpos = searchSet.search( "[^"+allowedChar+"]" ); if(searchSet.length > 0 && charpos >= 0) { return true; } return false } function preventCharacter( searchSet, disallowedChar ){ var charpos = searchSet.search( "["+disallowedChar+"]" ); if(searchSet.length > 0 && charpos >= 0) { return true; } return false } function isNull(a){ return typeof a == 'object' && !a; } function readLayer(ID,parentID) { if (document.layers) { var oLayer; if(parentID){ oLayer = eval('document.' + parentID + '.document.' + ID + '.document'); }else{ oLayer = document.layers[ID].document; } oLayer.open(); sText = oLayer.read(); oLayer.close(); } else if (parseInt(navigator.appVersion)>=5&&navigator.appName=="Netscape") { sText = document.getElementById(ID).innerHTML; }else if (document.all){ sText = document.all[ID].innerHTML ; } return sText; } //dataRequest.js // requests a variable from the CMS //Logs the action function dataRequest( $dataBlock ){ try{ var uri = "/index.php?method=jsDataRequest&dataBlock=" + $dataBlock ; var ajaxRequest = new AjaxRequest(uri); ajaxRequest.setAsync(false); ajaxRequest.setUseGET(); ajaxRequest.sendRequest(); xmlhttp = ajaxRequest.getXMLHttpRequestObject(); return xmlhttp.responseXML.getElementsByTagName('message')[0].firstChild.data; }catch(err){ //console.log } }// JavaScript Document /* function submitEmailForm( formID ){ if( validateForm() ) { var uri = "/index.php?method=sendemail"; var ajaxRequest = new AjaxRequest(uri); ajaxRequest.setUsePOST(); //ajaxRequest.setPostRequest(onCF_return); ajaxRequest.setPostRequest(submitEmailFormPostback); ajaxRequest.addFormElements( formID ); ajaxRequest.sendRequest(); } return false; //kills form submission } function submitEmailFormPostback(o){ xmlhttp = o.getXMLHttpRequestObject() var message = xmlhttp.responseXML.getElementsByTagName('message')[0].firstChild.data if( message == 1 ){ hideEmailForm(); }else{ } } */ //taconite-client.js /** @fileoverview This JavaScript file represents the core browser-side functionality supplied by Taconite. In general, the tools in this file wrap an instance of XMLHttpRequest object and provide utility methods for gather data from form elements to be sent to the server as par of an Ajax request. */ /** Constructor for the AjaxRequest class.

Example:

var ajaxRequest = new AjaxRequest("YOUR_URL"); @class The AjaxRequest object wraps an instance of XMLHttpRequest and provides facilities for setting functions that are called before a request is made and after a request returns. By default, AjaxRequest handles the server response by simply calling eval(), passing to it the responseText from the XMLHttpRequestObject, of course assuming that the response was generated by Taconite on the server side and that running eval() will update the web page.

Example Usage:

var ajaxRequest = new AjaxRequest("YOUR_URL");
ajaxRequest.addFormElements("form_element_id_attribute_value");
ajaxRequest.sendRequest(); @constructor @param {String} a String repesenting the URL to which the Ajax request will be sent. */ function AjaxRequest(url) { /** @private */ var self = this; /** @private */ var xmlHttp = createXMLHttpRequest(); /** @private */ var queryString = ""; /** @private */ var requestURL = url; /** @private */ var method = "GET"; /** @private */ var preRequest = null; /** @private */ var postRequest = null; /** @private */ var debugResponse = false; /** @private */ var async = true; /** @private errorHandler*/ var errorHandler = null; /** Return the instance of the XMLHttpRequest object wrapped by this object. @return XMLHttpRequest */ this.getXMLHttpRequestObject = function() { return xmlHttp; } /** Set the pre-request function. This function will be called prior to sending the Ajax request. The pre-request function is passed a reference to this object. @param {Function} The function to be called prior to sending the Ajax request. The function is passed a refernce of this object. */ this.setPreRequest = function(func) { preRequest = func; } /** Set the post-request function. This function will be called after the response has been received and after eval() has been called using the XMLHttpRequest object's responseText. The post-request function is passed a reference to this object. @param {Function} The function to be called after receiving the Ajax response. The function is passed a refernce of this object. */ this.setPostRequest = function(func) { postRequest = func; } /** Send the Ajax request using the POST method. Use with caution -- some browsers do not support the POST method with the XMLHttpRequest object. */ this.setUsePOST = function() { method = "POST"; } /** Send the Ajax request using the GET method, where parameters are sent as a query string appended to the URL. This is the default behavior. */ this.setUseGET = function() { method = "GET"; } /** Enable client-side debugging. The server's response will be written to a text area appended to the bottom of the page. If parsing is performed on the client side, then the results of the parsing operations are shown in their own text areas. */ this.setEchoDebugInfo = function() { debugResponse = true; } /** Indicate if debugging is enabled. @return boolean */ this.isEchoDebugInfo = function() { return debugResponse; } /** Set the query string that will be sent to the server. For GET requests, the query string is appended to the URL. For POST requests, the query string is sent in the request body. This method is useful, for example, if you want to send an XML string or JSON string to the server. @param {String} qa, the new query string value. */ this.setQueryString = function(qs) { queryString = qs; } /** Return the query string. @return The query string. */ this.getQueryString = function() { return queryString; } /** @param {Boolean} asyncBoolean, set to true if asynchronous request, false synchronous request. */ this.setAsync = function(asyncBoolean){ async = asyncBoolean; } /** @param {Function} Set the error handler function that is called if the server's HTTP response code is something other than 200. */ this.setErrorHandler = function(func){ errorHandler = func; } /** Add all of the form elements under the specified form to the query string to be sent to the server as part of the Ajax request. The values are automatically encoded. @param {String} formID, the value of the id attribute of the form from which you wish to accumulate the form values. */ this.addFormElements = function(formID) { var formElements = document.getElementById(formID).elements; var values = toQueryString(formElements); accumulateQueryString(values); } /** @private */ function accumulateQueryString(newValues) { if(queryString == "") { queryString = newValues; } else { queryString = queryString + "&" + newValues; } } /** Same as addNamedFormElements, except it will filter form elements by form's id. For example, these are all valid uses:

ajaxRequest.addNamedFormElements("form-id""element-name-1");
ajaxRequest.addNamedFormElements("form-id","element-name-1", "element-name-2", "element-name-3"); */ this.addNamedFormElementsByFormID = function() { var elementName = ""; var namedElements = null; for(var i = 1; i < arguments.length; i++) { elementName = arguments[i]; namedElements = document.getElementsByName(elementName); var arNamedElements = new Array(); for(j = 0; j < namedElements.length; j++) { if(namedElements[j].form && namedElements[j].form.getAttribute("id") == arguments[0]){ arNamedElements.push(namedElements[j]); } } if(arNamedElements.length > 0){ elementValues = toQueryString(arNamedElements); accumulateQueryString(elementValues); } } } /** Add the values of the named form elements to the query string to be sent to the server as part of the Ajax request. This method takes any number of Strings representing the form elements for wish you wish to accumulate the values. The Strings must be the value of the element's name attribute.

For example, these are all valid uses:

ajaxRequest.addNamedFormElements("element-name-1");
ajaxRequest.addNamedFormElements("element-name-1", "element-name-2", "element-name-3"); */ this.addNamedFormElements = function() { var elementName = ""; var namedElements = null; for(var i = 0; i < arguments.length; i++) { elementName = arguments[i]; namedElements = document.getElementsByName(elementName); elementValues = toQueryString(namedElements); accumulateQueryString(elementValues); } } /** Add the values of the id'd form elements to the query string to be sent to the server as part of the Ajax request. This method takes any number of Strings representing the ids of the form elements for wish you wish to accumulate the values. The Strings must be the value of the element's name attribute.

For example, these are all valid uses:

ajaxRequest.addFormElementsById("element-id-1");
ajaxRequest.addFormElementsById("element-id-1", "element-id-2", "element-id-3"); */ this.addFormElementsById = function() { var id = ""; var element = null; var elements = new Array(); for(var h = 0; h < arguments.length; h++) { element = document.getElementById(arguments[h]); if(element != null) { elements[h] = element; } } elementValues = toQueryString(elements); accumulateQueryString(elementValues); } /** Send the Ajax request. */ this.sendRequest = function() { if(preRequest) { preRequest(self); } var obj = this; xmlHttp.onreadystatechange = function () { handleStateChange(self) }; if(requestURL.indexOf("?") > 0) { requestURL = requestURL + "&ts=" + new Date().getTime(); } else { requestURL = requestURL + "?ts=" + new Date().getTime(); } if(method == "GET") { if(queryString.length > 0) { requestURL = requestURL + "&" + queryString; } xmlHttp.open(method, requestURL, true); xmlHttp.send(null); } else { //Fix a bug in Firefox when posting if (xmlHttp.overrideMimeType) { xmlHttp.setRequestHeader("Connection", "close"); } xmlHttp.open(method, requestURL, true); xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); xmlHttp.send(queryString); } if(!async) { //synchronous request, handle the state change handleStateChange(self); } if(self.isEchoDebugInfo()) { echoRequestParams(); } } handleStateChange = function(ajaxRequest) { if(ajaxRequest.getXMLHttpRequestObject().readyState != 4) { return; } if(ajaxRequest.getXMLHttpRequestObject().status == 200) { var debug = ajaxRequest.isEchoDebugInfo(); if(debug) { echoResponse(ajaxRequest); } var nodes = ajaxRequest.getXMLHttpRequestObject().responseXML.documentElement.childNodes; var parser = null; var parseInBrowser = ""; for(var i = 0; i < nodes.length; i++) { if(nodes[i].nodeType != 1 || !isTaconiteTag(nodes[i])) { continue; } parseInBrowser = nodes[i].getAttribute("parseInBrowser"); if(parseInBrowser == "true") { parser = new XhtmlToDOMParser(nodes[i]); parser.startParsing(); var js = parser.getJavaScript(); if(debug) { echoParsedJavaScript(js); } eval(parser.getJavaScript()); } else { eval(nodes[i].firstChild.nodeValue); } } if(postRequest) { postRequest(ajaxRequest); } } else { if(errorHandler) { errorHandler(self); } } } /** @private */ function isTaconiteTag(node) { return node.tagName.substring(0, 9) == "taconite-"; } /** @private */ function toQueryString(elements) { var node = null; var qs = ""; var name = ""; var tempString = ""; for(var i = 0; i < elements.length; i++) { tempString = ""; node = elements[i]; name = node.getAttribute("name"); //use id if name is null if (!name) { name = node.getAttribute("id"); } if(node.tagName.toLowerCase() == "input") { if(node.type.toLowerCase() == "radio" || node.type.toLowerCase() == "checkbox") { if(node.checked) { tempString = name + "=" + node.value; } } if(node.type.toLowerCase() == "text" || node.type.toLowerCase() == "hidden") { tempString = name + "=" + encodeURIComponent(node.value); } } else if(node.tagName.toLowerCase() == "select") { tempString = getSelectedOptions(node); } else if(node.tagName.toLowerCase() == "textarea") { tempString = name + "=" + encodeURIComponent(node.value); } if(tempString != "") { if(qs == "") { qs = tempString; } else { qs = qs + "&" + tempString; } } } return qs; } /** @private */ function getSelectedOptions(select) { var options = select.options; var option = null; var qs = ""; var tempString = ""; for(var x = 0; x < options.length; x++) { tempString = ""; option = options[x]; if(option.selected) { tempString = select.name + "=" + option.value; } if(tempString != "") { if(qs == "") { qs = tempString; } else { qs = qs + "&" + tempString; } } } return qs; } /** @private */ function echoResponse(ajaxRequest) { var echoTextArea = document.getElementById("debugResponse"); if(echoTextArea == null) { echoTextArea = createDebugTextArea("Server Response:", "debugResponse"); } var debugText = ajaxRequest.getXMLHttpRequestObject().status + " " + ajaxRequest.getXMLHttpRequestObject().statusText + "\n\n\n"; echoTextArea.value = debugText + ajaxRequest.getXMLHttpRequestObject().responseText; } /** @private */ function echoParsedJavaScript(js) { var echoTextArea = document.getElementById("debugParsedJavaScript"); if(echoTextArea == null) { var echoTextArea = createDebugTextArea("Parsed JavaScript (by JavaScript Parser):", "debugParsedJavaScript"); } echoTextArea.value = js; } /** @private */ function createDebugTextArea(label, id) { echoTextArea = document.createElement("textarea"); echoTextArea.setAttribute("id", id); echoTextArea.setAttribute("rows", "15"); echoTextArea.setAttribute("style", "width:100%"); echoTextArea.style.cssText = "width:100%"; document.getElementsByTagName("body")[0].appendChild(document.createTextNode(label)); document.getElementsByTagName("body")[0].appendChild(echoTextArea); return echoTextArea; } /** @private */ function echoRequestParams() { var qsTextBox = document.getElementById("qsTextBox"); if(qsTextBox == null) { qsTextBox = createDebugTextBox("Query String:", "qsTextBox"); } qsTextBox.value = queryString; var urlTextBox = document.getElementById("urlTextBox"); if(urlTextBox == null) { urlTextBox = createDebugTextBox("URL (Includes query string if GET request):", "urlTextBox"); } urlTextBox.value = requestURL; } /** @private */ function createDebugTextBox(label, id) { textBox = document.createElement("input"); textBox.setAttribute("type", "text"); textBox.setAttribute("id", id); textBox.setAttribute("style", "width:100%"); textBox.style.cssText = "width:100%"; document.getElementsByTagName("body")[0].appendChild(document.createTextNode(label)); document.getElementsByTagName("body")[0].appendChild(textBox); return textBox; } } /** Create an instance of the XMLHttpRequest object, using the appropriate method for the type of browser in which this script is running. For Internet Explorer, it's an ActiveX object, for all others it's a native JavaScript object. @return an instance of the XMLHttpRequest object. */ function createXMLHttpRequest() { var req = false; if (window.XMLHttpRequest) { req = new XMLHttpRequest(); } else if (window.ActiveXObject) { try { req = new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) { try { req = new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) { req = false; } } } return req; } //taconite-parser.js // JavaScript Document var isIE=document.uniqueID; String.prototype.trim = function() { //skip leading and trailing whitespace //and return everything in between var x=this; x=x.replace(/^\s*(.*)/, "$1"); x=x.replace(/(.*?)\s*$/, "$1"); return x; }; function XhtmlToDOMParser(xml){ var xmlTagName=xml.tagName.toLowerCase(); var contextNode=document.getElementById(xml.getAttribute("contextNodeID")); this.startParsing = function(){ switch (xmlTagName) { case "taconite-append-as-children": getReplaceChildren(contextNode,xml,false); break; case "taconite-delete": getDelete(contextNode,xml); break; case "taconite-append-as-first-child": getAppendAsFirstChild(contextNode,xml); break; case "taconite-insert-after": getInsertAfter(contextNode,xml); break; case "taconite-insert-before": getInsertBefore(contextNode,xml); break; case "taconite-replace-children": getReplaceChildren(contextNode,xml,true); break; case "taconite-replace": getReplace(contextNode,xml); break; case "taconite-set-attributes": xml.removeAttribute("contextNodeID"); xml.removeAttribute("parseInBrowser"); handleAttributes(contextNode,xml); break; } }; function isInlineMode(node) { var attrType; if(!node.tagName.toLowerCase() == "input") { return false; } attrType=node.getAttribute("type"); if(attrType=="radio" || attrType=="checkbox") { return true; } return false; } this.getJavaScript= function() { return "var dummy_taconite_variable=0"; }; function handleNode(xmlNode){ var nodeType = xmlNode.nodeType; switch(nodeType) { case 1: //ELEMENT_NODE return handleElement(xmlNode); case 3: //TEXT_NODE case 4: //CDATA_SECTION_NODE return document.createTextNode(xmlNode.nodeValue); } return null; } function handleElement(xmlNode){ var domElemNode=null; var xmlNodeTagName=xmlNode.tagName.toLowerCase(); if(isIE){ if(isInlineMode(xmlNode)) { return document.createElement(""); } if(xmlNodeTagName == "style"){ //In internet explorer, we have to use styleSheets array. var text,rulesArray,styleSheetPtr; var regExp = /\s+/g; text=xmlNode.text.replace(regExp, " "); rulesArray=text.split("}"); domElemNode=document.createElement("style"); styleSheetPtr=document.styleSheets[document.styleSheets.length-1]; for(var i=0;i 0){ domElemNode.text=xmlNode.text; } } else{ for(var z = 0; z < xmlNode.childNodes.length; z++) { var domChildNode=handleNode(xmlNode.childNodes[z]); if(domChildNode!=null) { domElemNode.appendChild(domChildNode); } } } } return domElemNode; } function handleAttributes(domNode,xmlNode) { var attr = null; var attrString = ""; var name = ""; var value = ""; var returnAsText=false; if(arguments.length==3) { returnAsText = true; } for(var x = 0; x < xmlNode.attributes.length; x++) { attr = xmlNode.attributes[x]; name = attr.name.trim(); value = attr.value.trim(); if(!returnAsText){ if(name == "style") { /* IE workaround */ domNode.style.cssText=value; /* Standards compliant */ domNode.setAttribute(name,value); } else if(name.trim().toLowerCase().substring(0, 2) == "on") { /* IE workaround for event handlers */ //domNode.setAttribute(name,value); eval("domNode." + name.trim().toLowerCase() + "=function(){" + value + "}"); } else { /* Standards compliant */ domNode.setAttribute(name,value); } /* class attribute workaround for IE */ if(name == "class") { domNode.setAttribute("className",value); } }else{ attrString = attrString + name + "=\"" + value + "\" " ; } } return attrString; } function getAppendAsFirstChild(domNode,xml){ var firstNode=null; if(domNode.childNodes.length > 0) { firstNode=domNode.childNodes[0]; } for(var i=0;i0){ contextNode.removeChild(contextNode.childNodes[0]); } } for(var i=0;i 0) { //Append this element to its parent var appendParms = {zero: NODE_VAR_NAME + peekFromParents(), one: NODE_VAR_NAME + elementIndex }; var appendToken = replaceParms(appendParms, APPEND_CHILD); domJS = domJS + appendToken; } //Set this element to be the current parent element parents.push(elementIndex); //Do all the elementNode's children for(var z = 0; z < elementNode.childNodes.length; z++) { parseToJavaScript(elementNode.childNodes[z]); } //Done with all this element's children parents.pop(); //Decrement the elementIndex elementIndex = elementIndex - 1; } function handleAttributes(elementNode) { var attr = null; var attrParms; var name = ""; var value = ""; for(var x = 0; x < elementNode.attributes.length; x++) { attr = elementNode.attributes[x]; name = attr.name.trim(); value = attr.value.trim(); if(name == "style") { /* IE workaround */ attrParms = {zero: getCurrentElementVarName(), one: value }; domJS = domJS + replaceParms(attrParms, SET_STYLE_CSSTEXT); /* Standards compliant */ attrParms = {zero: getCurrentElementVarName(), one: name, two: value }; domJS = domJS + replaceParms(attrParms, SET_ATTRIBUTE); } else if(isEventHandler(attr.name)) { /* IE workaround for event handlers */ attrParms = {zero: getCurrentElementVarName(), one: name, two: value }; domJS = domJS + replaceParms(attrParms, EVENT_HANDLER_ATTR); } else { /* Standards compliant */ attrParms = {zero: getCurrentElementVarName(), one: name, two: value }; domJS = domJS + replaceParms(attrParms, SET_ATTRIBUTE); } /* class attribute workaround for IE */ if(name == "class") { attrParms = {zero: getCurrentElementVarName(), one: "className", two: value }; domJS = domJS + replaceParms(attrParms, SET_ATTRIBUTE); } } } function handleTextNode(textNode) { var text = textNode.nodeValue; //Replace all consecutive whitespace chars with a single space var regExp = /\s+/g; text = text.replace(regExp, " "); var parms = {zero: getCurrentElementVarName(), one: text }; var appendTextToken = replaceParms(parms, APPEND_TEXT_NODE_CHILD); domJS = domJS + appendTextToken; } function getNewElementIndex() { if(parents.length == 0) { return 0; } return peekFromParents() + 1; } function peekFromParents() { var peek = parents.pop(); parents.push(peek); return peek; } function getNodeCreationToken(currentIndex) { if(currentIndex > highestNestingLevel) { highestNestingLevel = currentIndex; return "var node" + currentIndex; } else { return "node" + currentIndex; } } function replaceParms(parms, str) { var temp = str; var key; for(var key in parms) { temp = temp.replace(key, parms[key]); } return temp; } function getCurrentElementVarName() { return NODE_VAR_NAME + elementIndex; } function isEventHandler(name) { return name.trim().toLowerCase().substring(0, 2) == "on"; } function isRadioButton(node) { if(!node.tagName.trim().toLowerCase() == "input") { return false; } var attrs = node.attributes; var attr = null; for(var a = 0; a < attrs.length; a++) { attr = attrs[a]; if(attr.name.toLowerCase().trim() == "type") { if(attr.value.toLowerCase().trim() == "radio") { return true; } } } return false; } function isIE() { if(document.uniqueID) { return true; } else { return false; } } function renderIERadioButton(node) { var attrString = ""; var name = ""; var value = ""; var attr = null; for(var q = 0; q < node.attributes.length; q++) { if(q > 0) { attrString = attrString + " "; } attr = node.attributes[q]; name = attr.name.trim(); value = attr.value.trim(); attrString = attrString + name + "='" + value + "'" ; } var radioButton = getCurrentElementVarName() + " = document.createElement(\"\");" ; return radioButton; } function isTaconiteTag(node) { var name = node.tagName.trim(); return name.substring(0, 9) == "taconite-"; } function getPrepend(node) { return ""; } function getAppend(node) { var tagName = node.tagName.toLowerCase().trim(); var appendToken = ""; switch (tagName) { case "taconite-append-as-children": appendToken = getAppendAsChildren(node); break; case "taconite-append-as-first-child": appendToken = getAppendAsFirstChild(node); break; case "taconite-delete": appendToken = getDelete(node); break; case "taconite-insert-after": appendToken = getInsertAfter(node); break; case "taconite-insert-before": appendToken = getInsertBefore(node); break; case "taconite-replace-children": appendToken = getReplaceChildren(node); break; case "taconite-replace": appendToken = getReplace(node); break; } return appendToken; } function getContextNodeID(node) { return node.getAttribute("contextNodeID"); } function getContextNodeDOM(node) { var format = "document.getElementById(\"one\")"; var parms = {one: getContextNodeID(node) } ; return replaceParms(parms, format); } function getAppendAsChildren(node) { return getContextNodeDOM(node) + ".appendChild(node0);"; } function getAppendAsFirstChild(node) { var format = "if(one.childNodes.length > 0) { " + "two.insertBefore(node0, three.childNodes[0]) ; }" + " else { four.appendChild(node0); } "; var parms = {one: getContextNodeDOM(node), two: getContextNodeDOM(node), three: getContextNodeDOM(node), four: getContextNodeDOM(node) } ; return replaceParms(parms, format); } function getDelete(node) { var format = "one.parentNode.removeChild(two);"; var parms = { one: getContextNodeDOM(node), two: getContextNodeDOM(node) }; return replaceParms(parms, format); } function getInsertAfter(node) { var format = "var nextSibling = one.nextSibling;" + "if (nextSibling == null ) { " + "two.parentNode.appendChild(node0); } " + "else { " + "nextSibling.parentNode.insertBefore(node0, nextSibling); } "; var parms = { one: getContextNodeDOM(node), two: getContextNodeDOM(node) }; return replaceParms(parms, format); } function getInsertBefore(node) { var format = "one.parentNode.insertBefore(node0, two);"; var parms = { one: getContextNodeDOM(node), two: getContextNodeDOM(node) }; return replaceParms(parms, format); } function getReplaceChildren(node) { var format = "while (one.childNodes.length > 0) {" + "two.removeChild(three.childNodes[0]); }" + "four.appendChild(node0);"; var parms = { one: getContextNodeDOM(node), two: getContextNodeDOM(node), three: getContextNodeDOM(node), four: getContextNodeDOM(node) }; return replaceParms(parms, format); } function getReplace(node) { var format = "one.parentNode.replaceChild(node0, two);"; var parms = { one: getContextNodeDOM(node), two: getContextNodeDOM(node) }; return replaceParms(parms, format); } } //taconite-parser-min.js var taconite_parser_version="2.0";var isIE=document.uniqueID;var TaconiteDOMUtils={getAllSubElements:function(element){return element.all?element.all:element.getElementsByTagName('*');},setMultipleSelectOptions:function(selectNodeId){var selectNode=document.getElementById(selectNodeId);var options=document.getElementById(selectNodeId).getElementsByTagName("option");var option;for(var i=0;i");} if(xmlNodeTagName=="style"){var text,rulesArray,styleSheetPtr;var regExp=/\s+/g;text=xmlNode.text.replace(regExp," ");rulesArray=text.split("}");domElemNode=document.createElement("style");styleSheetPtr=document.styleSheets[document.styleSheets.length-1];for(var i=0;i0){domElemNode.text=xmlNode.text;}} else{for(var z=0;z");return domElemNode;} function handleAttributes(domNode,xmlNode){var attr=null;var attrString="";var name="";var value="";var returnAsText=false;if(arguments.length==3){returnAsText=true;} for(var x=0;x0){firstNode=domNode.childNodes[0];} for(var i=0;i0){domNode.removeChild(domNode.childNodes[0]);}} for(var i=0;i)/g,'');selector=selector.replace(/>\s*/g,'>');selector=selector.replace(/\s*(?=\+)/g,'');selector=selector.replace(/\+\s*/g,'+');selector=selector.replace(/\s*(?=~)/g,'');selector=selector.replace(/~\s*/g,'~');var splitter=/\s|>|\+|~/g;var combinators=selector.match(splitter);var tokens=selector.split(splitter);var currentContext=new Array(rootContext);var attributesRegexp=/^(\w*)\[(\w+)([=~\|\^\$\*]?)=?"?([^\]"]*)"?\]$/;var pseudoClassesRegexp=/^(\w*)\:(\w+-?\w+)/;var regexpResult=null;for(var i=0;i-1){var tagName=token.substring(0,token.indexOf('#'));var id=token.substring(token.indexOf('#')+1,token.length);var filterFunction=function(e){return(e.id==id);};var found=new Array();for(var h=0;h-1);};break;default:filterFunction=function(e){return e.getAttribute(attrName);};} var found=new Array();var counter=0;for(var h=0;h-1){var tagName=token.substring(0,token.indexOf('.'));var className=token.substring(token.indexOf('.')+1,token.length);var regexp=new RegExp('(\\s|^)'+className+'(\\s|$)');var filterFunction=function(e){return(e.className&&e.className.match(regexp));};var found=new Array();var counter=0;for(var h=0;h"){elements=context.childNodes;}else if(combinator=="+"){var sibling=context.nextSibling;while(sibling&&sibling.nodeType!=1){sibling=sibling.nextSibling;} if(sibling)elements=new Array(sibling);else elements=new Array();}else if(combinator=="~"){var sibling=context.nextSibling;var counter=0;while(sibling){if(sibling.nodeType==1){elements[counter]=sibling;counter++;} sibling=sibling.nextSibling;}} var counter=0;if(!tagName||tagName=='*'){for(var k=0;k0){elementValues=toQueryString(arNamedElements);accumulateQueryString(elementValues);}}} this.addNamedFormElements=function(){var elementName="";var namedElements=null;for(var i=0;i0){requestURL=requestURL+"&ts="+new Date().getTime();} else{requestURL=requestURL+"?ts="+new Date().getTime();} try{if(method=="GET"){if(queryString.length>0){requestURL=requestURL+"&"+queryString;} xmlHttp.open(method,requestURL,async);xmlHttp.send(null);} else{xmlHttp.open(method,requestURL,async);try{if(xmlHttp.overrideMimeType){xmlHttp.setRequestHeader("Connection","close");}} catch(e){} xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");xmlHttp.send(queryString);}} catch(exception){if(errorHandler){errorHandler(self,exception);} else{throw exception;}} if(!async){handleStateChange(self);} if(self.isEchoDebugInfo()){echoRequestParams();}} handleStateChange=function(ajaxRequest){if(ajaxRequest.getXMLHttpRequestObject().readyState!=4){return;} if(ajaxRequest.getXMLHttpRequestObject().status!=200){errorHandler(self);return;} try{var debug=ajaxRequest.isEchoDebugInfo();if(debug){echoResponse(ajaxRequest);} var nodes=null;if(ajaxRequest.getXMLHttpRequestObject().responseXML!=null){nodes=ajaxRequest.getXMLHttpRequestObject().responseXML.documentElement.childNodes;} else{nodes=new Array();} var parser=new XhtmlToDOMParser();var parseInBrowser="";for(var i=0;i