var Builder={NODEMAP:{AREA:"map",CAPTION:"table",COL:"table",COLGROUP:"table",LEGEND:"fieldset",OPTGROUP:"select",OPTION:"select",PARAM:"object",TBODY:"table",TD:"table",TFOOT:"table",TH:"table",THEAD:"table",TR:"table"},node:function(elementName){elementName=elementName.toUpperCase();var parentTag=this.NODEMAP[elementName]||"div";var parentElement=document.createElement(parentTag);try{parentElement.innerHTML="<"+elementName+"></"+elementName+">"}catch(e){}var element=parentElement.firstChild||null;if(element&&(element.tagName.toUpperCase()!=elementName)){element=element.getElementsByTagName(elementName)[0]}if(!element){element=document.createElement(elementName)}if(!element){return }if(arguments[1]){if(this._isStringOrNumber(arguments[1])||(arguments[1] instanceof Array)||arguments[1].tagName){this._children(element,arguments[1])}else{var attrs=this._attributes(arguments[1]);if(attrs.length){try{parentElement.innerHTML="<"+elementName+" "+attrs+"></"+elementName+">"}catch(e){}element=parentElement.firstChild||null;if(!element){element=document.createElement(elementName);for(attr in arguments[1]){element[attr=="class"?"className":attr]=arguments[1][attr]}}if(element.tagName.toUpperCase()!=elementName){element=parentElement.getElementsByTagName(elementName)[0]}}}}if(arguments[2]){this._children(element,arguments[2])}parentElement=null;return element},_text:function(text){return document.createTextNode(text)},ATTR_MAP:{"className":"class","htmlFor":"for"},_attributes:function(attributes){var attrs=[];for(attribute in attributes){attrs.push((attribute in this.ATTR_MAP?this.ATTR_MAP[attribute]:attribute)+'="'+attributes[attribute].toString().escapeHTML().gsub(/"/,"&quot;")+'"')}return attrs.join(" ")},_children:function(element,children){if(children.tagName){element.appendChild(children);return }if(typeof children=="object"){children.flatten().each(function(e){if(typeof e=="object"){element.appendChild(e)}else{if(Builder._isStringOrNumber(e)){element.appendChild(Builder._text(e))}}})}else{if(Builder._isStringOrNumber(children)){element.appendChild(Builder._text(children))}}},_isStringOrNumber:function(param){return(typeof param=="string"||typeof param=="number")},build:function(html){var element=this.node("div");$(element).update(html.strip());return element.down()},dump:function(scope){if(typeof scope!="object"&&typeof scope!="function"){scope=window}var tags=("A ABBR ACRONYM ADDRESS APPLET AREA B BASE BASEFONT BDO BIG BLOCKQUOTE BODY BR BUTTON CAPTION CENTER CITE CODE COL COLGROUP DD DEL DFN DIR DIV DL DT EM FIELDSET FONT FORM FRAME FRAMESET H1 H2 H3 H4 H5 H6 HEAD HR HTML I IFRAME IMG INPUT INS ISINDEX KBD LABEL LEGEND LI LINK MAP MENU META NOFRAMES NOSCRIPT OBJECT OL OPTGROUP OPTION P PARAM PRE Q S SAMP SCRIPT SELECT SMALL SPAN STRIKE STRONG STYLE SUB SUP TABLE TBODY TD TEXTAREA TFOOT TH THEAD TITLE TR TT U UL VAR").split(/\s+/);tags.each(function(tag){scope[tag]=function(){return Builder.node.apply(Builder,[tag].concat($A(arguments)))}})}};function validateMask(form){var isValid=true;var focusField=null;var i=0;var fields=new Array();var oMasked=eval("new "+jcv_retrieveFormName(form)+"_mask()");for(var x in oMasked){if(!jcv_verifyArrayElement(x,oMasked[x])){continue}var field=form[oMasked[x][0]];if(!jcv_isFieldPresent(field)){continue}if((field.type=="hidden"||field.type=="text"||field.type=="textarea"||field.type=="file")&&(field.value.length>0)){if(!jcv_matchPattern(field.value,oMasked[x][2]("mask"))){if(i==0){focusField=field}fields[i++]=oMasked[x][1];isValid=false}}}if(fields.length>0){jcv_handleErrors(fields,focusField)}return isValid}function jcv_matchPattern(value,mask){return mask.exec(value)}function validateInteger(form){var bValid=true;var focusField=null;var i=0;var fields=new Array();var oInteger=eval("new "+jcv_retrieveFormName(form)+"_IntegerValidations()");for(var x in oInteger){if(!jcv_verifyArrayElement(x,oInteger[x])){continue}var field=form[oInteger[x][0]];if(!jcv_isFieldPresent(field)){continue}if((field.type=="hidden"||field.type=="text"||field.type=="textarea"||field.type=="select-one"||field.type=="radio")){var value="";if(field.type=="select-one"){var si=field.selectedIndex;if(si>=0){value=field.options[si].value}}else{value=field.value}if(value.length>0){if(!jcv_isDecimalDigits(value)){bValid=false;if(i==0){focusField=field}fields[i++]=oInteger[x][1]}else{var iValue=parseInt(value,10);if(isNaN(iValue)||!(iValue>=-2147483648&&iValue<=2147483647)){if(i==0){focusField=field}fields[i++]=oInteger[x][1];bValid=false}}}}}if(fields.length>0){jcv_handleErrors(fields,focusField)}return bValid}function validateShort(form){var bValid=true;var focusField=null;var i=0;var fields=new Array();var oShort=eval("new "+jcv_retrieveFormName(form)+"_ShortValidations()");for(var x in oShort){if(!jcv_verifyArrayElement(x,oShort[x])){continue}var field=form[oShort[x][0]];if(!jcv_isFieldPresent(field)){continue}if((field.type=="hidden"||field.type=="text"||field.type=="textarea"||field.type=="select-one"||field.type=="radio")){var value="";if(field.type=="select-one"){var si=field.selectedIndex;if(si>=0){value=field.options[si].value}}else{value=field.value}if(value.length>0){if(!jcv_isDecimalDigits(value)){bValid=false;if(i==0){focusField=field}fields[i++]=oShort[x][1]}else{var iValue=parseInt(value,10);if(isNaN(iValue)||!(iValue>=-32768&&iValue<=32767)){if(i==0){focusField=field}fields[i++]=oShort[x][1];bValid=false}}}}}if(fields.length>0){jcv_handleErrors(fields,focusField)}return bValid}function validateByte(form){var bValid=true;var focusField=null;var i=0;var fields=new Array();var oByte=eval("new "+jcv_retrieveFormName(form)+"_ByteValidations()");for(var x in oByte){if(!jcv_verifyArrayElement(x,oByte[x])){continue}var field=form[oByte[x][0]];if(!jcv_isFieldPresent(field)){continue}if((field.type=="hidden"||field.type=="text"||field.type=="textarea"||field.type=="select-one"||field.type=="radio")){var value="";if(field.type=="select-one"){var si=field.selectedIndex;if(si>=0){value=field.options[si].value}}else{value=field.value}if(value.length>0){if(!jcv_isDecimalDigits(value)){bValid=false;if(i==0){focusField=field}fields[i++]=oByte[x][1]}else{var iValue=parseInt(value,10);if(isNaN(iValue)||!(iValue>=-128&&iValue<=127)){if(i==0){focusField=field}fields[i++]=oByte[x][1];bValid=false}}}}}if(fields.length>0){jcv_handleErrors(fields,focusField)}return bValid}function validateCreditCard(form){var bValid=true;var focusField=null;var i=0;var fields=new Array();var oCreditCard=eval("new "+jcv_retrieveFormName(form)+"_creditCard()");for(var x in oCreditCard){if(!jcv_verifyArrayElement(x,oCreditCard[x])){continue}var field=form[oCreditCard[x][0]];if(!jcv_isFieldPresent(field)){continue}if((field.type=="text"||field.type=="textarea")&&(field.value.length>0)){if(!jcv_luhnCheck(field.value)){if(i==0){focusField=field}fields[i++]=oCreditCard[x][1];bValid=false}}}if(fields.length>0){jcv_handleErrors(fields,focusField)}return bValid}function jcv_luhnCheck(cardNumber){if(jcv_isLuhnNum(cardNumber)){var no_digit=cardNumber.length;var oddoeven=no_digit&1;var sum=0;for(var count=0;count<no_digit;count++){var digit=parseInt(cardNumber.charAt(count));if(!((count&1)^oddoeven)){digit*=2;if(digit>9){digit-=9}}sum+=digit}if(sum==0){return false}if(sum%10==0){return true}}return false}function jcv_isLuhnNum(argvalue){argvalue=argvalue.toString();if(argvalue.length==0){return false}for(var n=0;n<argvalue.length;n++){if((argvalue.substring(n,n+1)<"0")||(argvalue.substring(n,n+1)>"9")){return false}}return true}function validateFloat(form){var bValid=true;var focusField=null;var i=0;var fields=new Array();var oFloat=eval("new "+jcv_retrieveFormName(form)+"_FloatValidations()");for(var x in oFloat){if(!jcv_verifyArrayElement(x,oFloat[x])){continue}var field=form[oFloat[x][0]];if(!jcv_isFieldPresent(field)){continue}if((field.type=="hidden"||field.type=="text"||field.type=="textarea"||field.type=="select-one"||field.type=="radio")){var value="";if(field.type=="select-one"){var si=field.selectedIndex;if(si>=0){value=field.options[si].value}}else{value=field.value}if(value.length>0){var tempArray=value.split(".");var zeroIndex=0;var joinedString=tempArray.join("");while(joinedString.charAt(zeroIndex)=="0"){zeroIndex++}var noZeroString=joinedString.substring(zeroIndex,joinedString.length);if(!jcv_isAllDigits(noZeroString)||tempArray.length>2){bValid=false;if(i==0){focusField=field}fields[i++]=oFloat[x][1]}else{var iValue=parseFloat(value);if(isNaN(iValue)){if(i==0){focusField=field}fields[i++]=oFloat[x][1];bValid=false}}}}}if(fields.length>0){jcv_handleErrors(fields,focusField)}return bValid}function validateIntRange(form){var isValid=true;var focusField=null;var i=0;var fields=new Array();var oRange=eval("new "+jcv_retrieveFormName(form)+"_intRange()");for(var x in oRange){if(!jcv_verifyArrayElement(x,oRange[x])){continue}var field=form[oRange[x][0]];if(jcv_isFieldPresent(field)){var value="";if(field.type=="hidden"||field.type=="text"||field.type=="textarea"||field.type=="radio"){value=field.value}if(field.type=="select-one"){var si=field.selectedIndex;if(si>=0){value=field.options[si].value}}if(value.length>0){var iMin=parseInt(oRange[x][2]("min"));var iMax=parseInt(oRange[x][2]("max"));var iValue=parseInt(value,10);if(!(iValue>=iMin&&iValue<=iMax)){if(i==0){focusField=field}fields[i++]=oRange[x][1];isValid=false}}}}if(fields.length>0){jcv_handleErrors(fields,focusField)}return isValid}function jcv_retrieveFormName(form){var formName;if(form.getAttributeNode){if(form.getAttributeNode("id")&&form.getAttributeNode("id").value){formName=form.getAttributeNode("id").value}else{formName=form.getAttributeNode("name").value}}else{if(form.getAttribute){if(form.getAttribute("id")){formName=form.getAttribute("id")}else{formName=form.attributes["name"]}}else{if(form.id){formName=form.id}else{formName=form.name}}}return formName}function jcv_handleErrors(messages,focusField){if(focusField&&focusField!=null){var doFocus=true;if(focusField.disabled||focusField.type=="hidden"){doFocus=false}if(doFocus&&focusField.style&&focusField.style.visibility&&focusField.style.visibility=="hidden"){doFocus=false}if(doFocus){focusField.focus()}}alert(messages.join("\n"))}function jcv_verifyArrayElement(name,element){if(element&&element.length&&element.length==3){return true}else{return false}}function jcv_isFieldPresent(field){var fieldPresent=true;if(field==null||field==undefined){fieldPresent=false}else{if(field.disabled){fieldPresent=false}}return fieldPresent}function jcv_isAllDigits(argvalue){argvalue=argvalue.toString();var validChars="0123456789";var startFrom=0;if(argvalue.substring(0,2)=="0x"){validChars="0123456789abcdefABCDEF";startFrom=2}else{if(argvalue.charAt(0)=="0"){validChars="01234567";startFrom=1}else{if(argvalue.charAt(0)=="-"){startFrom=1}}}for(var n=startFrom;n<argvalue.length;n++){if(validChars.indexOf(argvalue.substring(n,n+1))==-1){return false}}return true}function jcv_isDecimalDigits(argvalue){argvalue=argvalue.toString();var validChars="0123456789";var startFrom=0;if(argvalue.charAt(0)=="-"){startFrom=1}for(var n=startFrom;n<argvalue.length;n++){if(validChars.indexOf(argvalue.substring(n,n+1))==-1){return false}}return true}function validateDate(form){var bValid=true;var focusField=null;var i=0;var fields=new Array();var oDate=eval("new "+jcv_retrieveFormName(form)+"_DateValidations()");for(var x in oDate){if(!jcv_verifyArrayElement(x,oDate[x])){continue}var field=form[oDate[x][0]];if(!jcv_isFieldPresent(field)){continue}var value=field.value;var isStrict=true;var datePattern=oDate[x][2]("datePatternStrict");if(datePattern==null){datePattern=oDate[x][2]("datePattern");isStrict=false}if((field.type=="hidden"||field.type=="text"||field.type=="textarea")&&(value.length>0)&&(datePattern.length>0)){var MONTH="MM";var DAY="dd";var YEAR="yyyy";var orderMonth=datePattern.indexOf(MONTH);var orderDay=datePattern.indexOf(DAY);var orderYear=datePattern.indexOf(YEAR);if((orderDay<orderYear&&orderDay>orderMonth)){var iDelim1=orderMonth+MONTH.length;var iDelim2=orderDay+DAY.length;var delim1=datePattern.substring(iDelim1,iDelim1+1);var delim2=datePattern.substring(iDelim2,iDelim2+1);if(iDelim1==orderDay&&iDelim2==orderYear){dateRegexp=isStrict?new RegExp("^(\\d{2})(\\d{2})(\\d{4})$"):new RegExp("^(\\d{1,2})(\\d{1,2})(\\d{4})$")}else{if(iDelim1==orderDay){dateRegexp=isStrict?new RegExp("^(\\d{2})(\\d{2})["+delim2+"](\\d{4})$"):new RegExp("^(\\d{1,2})(\\d{1,2})["+delim2+"](\\d{4})$")}else{if(iDelim2==orderYear){dateRegexp=isStrict?new RegExp("^(\\d{2})["+delim1+"](\\d{2})(\\d{4})$"):new RegExp("^(\\d{1,2})["+delim1+"](\\d{1,2})(\\d{4})$")}else{dateRegexp=isStrict?new RegExp("^(\\d{2})["+delim1+"](\\d{2})["+delim2+"](\\d{4})$"):new RegExp("^(\\d{1,2})["+delim1+"](\\d{1,2})["+delim2+"](\\d{4})$")}}}var matched=dateRegexp.exec(value);if(matched!=null){if(!jcv_isValidDate(matched[2],matched[1],matched[3])){if(i==0){focusField=field}fields[i++]=oDate[x][1];bValid=false}}else{if(i==0){focusField=field}fields[i++]=oDate[x][1];bValid=false}}else{if((orderMonth<orderYear&&orderMonth>orderDay)){var iDelim1=orderDay+DAY.length;var iDelim2=orderMonth+MONTH.length;var delim1=datePattern.substring(iDelim1,iDelim1+1);var delim2=datePattern.substring(iDelim2,iDelim2+1);if(iDelim1==orderMonth&&iDelim2==orderYear){dateRegexp=isStrict?new RegExp("^(\\d{2})(\\d{2})(\\d{4})$"):new RegExp("^(\\d{1,2})(\\d{1,2})(\\d{4})$")}else{if(iDelim1==orderMonth){dateRegexp=isStrict?new RegExp("^(\\d{2})(\\d{2})["+delim2+"](\\d{4})$"):new RegExp("^(\\d{1,2})(\\d{1,2})["+delim2+"](\\d{4})$")}else{if(iDelim2==orderYear){dateRegexp=isStrict?new RegExp("^(\\d{2})["+delim1+"](\\d{2})(\\d{4})$"):new RegExp("^(\\d{1,2})["+delim1+"](\\d{1,2})(\\d{4})$")}else{dateRegexp=isStrict?new RegExp("^(\\d{2})["+delim1+"](\\d{2})["+delim2+"](\\d{4})$"):new RegExp("^(\\d{1,2})["+delim1+"](\\d{1,2})["+delim2+"](\\d{4})$")}}}var matched=dateRegexp.exec(value);if(matched!=null){if(!jcv_isValidDate(matched[1],matched[2],matched[3])){if(i==0){focusField=field}fields[i++]=oDate[x][1];bValid=false}}else{if(i==0){focusField=field}fields[i++]=oDate[x][1];bValid=false}}else{if((orderMonth>orderYear&&orderMonth<orderDay)){var iDelim1=orderYear+YEAR.length;var iDelim2=orderMonth+MONTH.length;var delim1=datePattern.substring(iDelim1,iDelim1+1);var delim2=datePattern.substring(iDelim2,iDelim2+1);if(iDelim1==orderMonth&&iDelim2==orderDay){dateRegexp=isStrict?new RegExp("^(\\d{4})(\\d{2})(\\d{2})$"):new RegExp("^(\\d{4})(\\d{1,2})(\\d{1,2})$")}else{if(iDelim1==orderMonth){dateRegexp=isStrict?new RegExp("^(\\d{4})(\\d{2})["+delim2+"](\\d{2})$"):new RegExp("^(\\d{4})(\\d{1,2})["+delim2+"](\\d{1,2})$")}else{if(iDelim2==orderDay){dateRegexp=isStrict?new RegExp("^(\\d{4})["+delim1+"](\\d{2})(\\d{2})$"):new RegExp("^(\\d{4})["+delim1+"](\\d{1,2})(\\d{1,2})$")}else{dateRegexp=isStrict?new RegExp("^(\\d{4})["+delim1+"](\\d{2})["+delim2+"](\\d{2})$"):new RegExp("^(\\d{4})["+delim1+"](\\d{1,2})["+delim2+"](\\d{1,2})$")}}}var matched=dateRegexp.exec(value);if(matched!=null){if(!jcv_isValidDate(matched[3],matched[2],matched[1])){if(i==0){focusField=field}fields[i++]=oDate[x][1];bValid=false}}else{if(i==0){focusField=field}fields[i++]=oDate[x][1];bValid=false}}else{if(i==0){focusField=field}fields[i++]=oDate[x][1];bValid=false}}}}}if(fields.length>0){jcv_handleErrors(fields,focusField)}return bValid}function jcv_isValidDate(day,month,year){if(month<1||month>12){return false}if(day<1||day>31){return false}if((month==4||month==6||month==9||month==11)&&(day==31)){return false}if(month==2){var leap=(year%4==0&&(year%100!=0||year%400==0));if(day>29||(day==29&&!leap)){return false}}return true}function validateRequired(form){var isValid=true;var focusField=null;var i=0;var fields=new Array();var oRequired=eval("new "+jcv_retrieveFormName(form)+"_required()");for(var x in oRequired){if(!jcv_verifyArrayElement(x,oRequired[x])){continue}var field=form[oRequired[x][0]];if(!jcv_isFieldPresent(field)){fields[i++]=oRequired[x][1];isValid=false}else{if((field.type=="hidden"||field.type=="text"||field.type=="textarea"||field.type=="file"||field.type=="radio"||field.type=="checkbox"||field.type=="select-one"||field.type=="password")){var value="";if(field.type=="select-one"){var si=field.selectedIndex;if(si>=0){value=field.options[si].value}}else{if(field.type=="radio"||field.type=="checkbox"){if(field.checked){value=field.value}}else{value=field.value}}if(trim(value).length==0){if((i==0)&&(field.type!="hidden")){focusField=field}fields[i++]=oRequired[x][1];isValid=false}}else{if(field.type=="select-multiple"){var numOptions=field.options.length;lastSelected=-1;for(loop=numOptions-1;loop>=0;loop--){if(field.options[loop].selected){lastSelected=loop;value=field.options[loop].value;break}}if(lastSelected<0||trim(value).length==0){if(i==0){focusField=field}fields[i++]=oRequired[x][1];isValid=false}}else{if((field.length>0)&&(field[0].type=="radio"||field[0].type=="checkbox")){isChecked=-1;for(loop=0;loop<field.length;loop++){if(field[loop].checked){isChecked=loop;break}}if(isChecked<0){if(i==0){focusField=field[0]}fields[i++]=oRequired[x][1];isValid=false}}}}}}if(fields.length>0){jcv_handleErrors(fields,focusField)}return isValid}function trim(s){return s.replace(/^\s*/,"").replace(/\s*$/,"")}function validateFloatRange(form){var isValid=true;var focusField=null;var i=0;var fields=new Array();var oRange=eval("new "+jcv_retrieveFormName(form)+"_floatRange()");for(var x in oRange){if(!jcv_verifyArrayElement(x,oRange[x])){continue}var field=form[oRange[x][0]];if(!jcv_isFieldPresent(field)){continue}if((field.type=="hidden"||field.type=="text"||field.type=="textarea")&&(field.value.length>0)){var fMin=parseFloat(oRange[x][2]("min"));var fMax=parseFloat(oRange[x][2]("max"));var fValue=parseFloat(field.value);if(!(fValue>=fMin&&fValue<=fMax)){if(i==0){focusField=field}fields[i++]=oRange[x][1];isValid=false}}}if(fields.length>0){jcv_handleErrors(fields,focusField)}return isValid}function validateMinLength(form){var isValid=true;var focusField=null;var i=0;var fields=new Array();var oMinLength=eval("new "+jcv_retrieveFormName(form)+"_minlength()");for(var x in oMinLength){if(!jcv_verifyArrayElement(x,oMinLength[x])){continue}var field=form[oMinLength[x][0]];if(!jcv_isFieldPresent(field)){continue}if((field.type=="hidden"||field.type=="text"||field.type=="password"||field.type=="textarea")){var lineEndLength=oMinLength[x][2]("lineEndLength");var adjustAmount=0;if(lineEndLength){var rCount=0;var nCount=0;var crPos=0;while(crPos<field.value.length){var currChar=field.value.charAt(crPos);if(currChar=="\r"){rCount++}if(currChar=="\n"){nCount++}crPos++}var endLength=parseInt(lineEndLength);adjustAmount=(nCount*endLength)-(rCount+nCount)}var iMin=parseInt(oMinLength[x][2]("minlength"));if((trim(field.value).length>0)&&((field.value.length+adjustAmount)<iMin)){if(i==0){focusField=field}fields[i++]=oMinLength[x][1];isValid=false}}}if(fields.length>0){jcv_handleErrors(fields,focusField)}return isValid}function validateMaxLength(form){var isValid=true;var focusField=null;var i=0;var fields=new Array();var oMaxLength=eval("new "+jcv_retrieveFormName(form)+"_maxlength()");for(var x in oMaxLength){if(!jcv_verifyArrayElement(x,oMaxLength[x])){continue}var field=form[oMaxLength[x][0]];if(!jcv_isFieldPresent(field)){continue}if((field.type=="hidden"||field.type=="text"||field.type=="password"||field.type=="textarea")){var lineEndLength=oMaxLength[x][2]("lineEndLength");var adjustAmount=0;if(lineEndLength){var rCount=0;var nCount=0;var crPos=0;while(crPos<field.value.length){var currChar=field.value.charAt(crPos);if(currChar=="\r"){rCount++}if(currChar=="\n"){nCount++}crPos++}var endLength=parseInt(lineEndLength);adjustAmount=(nCount*endLength)-(rCount+nCount)}var iMax=parseInt(oMaxLength[x][2]("maxlength"));if((field.value.length+adjustAmount)>iMax){if(i==0){focusField=field}fields[i++]=oMaxLength[x][1];isValid=false}}}if(fields.length>0){jcv_handleErrors(fields,focusField)}return isValid}function validateEmail(form){var bValid=true;var focusField=null;var i=0;var fields=new Array();var oEmail=eval("new "+jcv_retrieveFormName(form)+"_email()");for(var x in oEmail){if(!jcv_verifyArrayElement(x,oEmail[x])){continue}var field=form[oEmail[x][0]];if(!jcv_isFieldPresent(field)){continue}if((field.type=="hidden"||field.type=="text"||field.type=="textarea")&&(field.value.length>0)){if(!jcv_checkEmail(field.value)){if(i==0){focusField=field}fields[i++]=oEmail[x][1];bValid=false}}}if(fields.length>0){jcv_handleErrors(fields,focusField)}return bValid}function jcv_checkEmail(emailStr){if(emailStr.length==0){return true}var checkTLD=0;var knownDomsPat=/^(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum)$/;var emailPat=/^(.+)@(.+)$/;var specialChars='\\(\\)><@,;:\\\\\\"\\.\\[\\]';var validChars="[^\\s"+specialChars+"]";var quotedUser='("[^"]*")';var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;var atom=validChars+"+";var word="("+atom+"|"+quotedUser+")";var userPat=new RegExp("^"+word+"(\\."+word+")*$");var domainPat=new RegExp("^"+atom+"(\\."+atom+")*$");var matchArray=emailStr.match(emailPat);if(matchArray==null){return false}var user=matchArray[1];var domain=matchArray[2];for(i=0;i<user.length;i++){if(user.charCodeAt(i)>127){return false}}for(i=0;i<domain.length;i++){if(domain.charCodeAt(i)>127){return false}}if(user.match(userPat)==null){return false}var IPArray=domain.match(ipDomainPat);if(IPArray!=null){for(var i=1;i<=4;i++){if(IPArray[i]>255){return false}}return true}var atomPat=new RegExp("^"+atom+"$");var domArr=domain.split(".");var len=domArr.length;for(i=0;i<len;i++){if(domArr[i].search(atomPat)==-1){return false}}if(checkTLD&&domArr[domArr.length-1].length!=2&&domArr[domArr.length-1].search(knownDomsPat)==-1){return false}if(len<2){return false}return true}var Log4js={loggerMap:new Map(),version:"0.2",getLogger:function(categoryName){if(!Log4js.loggerMap.contains(categoryName)){Log4js.loggerMap.put(categoryName,new Log4js.Logger(categoryName))}return Log4js.loggerMap.get(categoryName)},attachEvent:function(element,name,observer){if(element.addEventListener){element.addEventListener(name,observer,false)}else{if(element.attachEvent){element.attachEvent("on"+name,observer)}}}};Log4js.Level=function(level,levelStr){this.level=level;this.levelStr=levelStr};Log4js.Level.prototype={toLevel:function(sArg,defaultLevel){if(sArg===null){return defaultLevel}if(typeof sArg=="string"){var s=sArg.toUpperCase();if(s=="ALL"){return Log4js.Level.ALL}if(s=="DEBUG"){return Log4js.Level.DEBUG}if(s=="INFO"){return Log4js.Level.INFO}if(s=="WARN"){return Log4js.Level.WARN}if(s=="ERROR"){return Log4js.Level.ERROR}if(s=="FATAL"){return Log4js.Level.FATAL}if(s=="OFF"){return Log4js.Level.OFF}if(s=="TRACE"){return Log4js.Level.TRACE}return defaultLevel}else{if(typeof sArg=="number"){switch(sArg){case ALL_INT:return Log4js.Level.ALL;case DEBUG_INT:return Log4js.Level.DEBUG;case INFO_INT:return Log4js.Level.INFO;case WARN_INT:return Log4js.Level.WARN;case ERROR_INT:return Log4js.Level.ERROR;case FATAL_INT:return Log4js.Level.FATAL;case OFF_INT:return Log4js.Level.OFF;case TRACE_INT:return Log4js.Level.TRACE;default:return defaultLevel}}else{return defaultLevel}}},toString:function(){return this.levelStr},valueOf:function(){return this.level}};Log4js.Level.OFF_INT=Number.MAX_VALUE;Log4js.Level.FATAL_INT=50000;Log4js.Level.ERROR_INT=40000;Log4js.Level.WARN_INT=30000;Log4js.Level.INFO_INT=20000;Log4js.Level.DEBUG_INT=10000;Log4js.Level.TRACE_INT=5000;Log4js.Level.ALL_INT=Number.MIN_VALUE;Log4js.Level.OFF=new Log4js.Level(Log4js.Level.OFF_INT,"OFF");Log4js.Level.FATAL=new Log4js.Level(Log4js.Level.FATAL_INT,"FATAL");Log4js.Level.ERROR=new Log4js.Level(Log4js.Level.ERROR_INT,"ERROR");Log4js.Level.WARN=new Log4js.Level(Log4js.Level.WARN_INT,"WARN");Log4js.Level.INFO=new Log4js.Level(Log4js.Level.INFO_INT,"INFO");Log4js.Level.DEBUG=new Log4js.Level(Log4js.Level.DEBUG_INT,"DEBUG");Log4js.Level.TRACE=new Log4js.Level(Log4js.Level.TRACE_INT,"TRACE");Log4js.Level.ALL=new Log4js.Level(Log4js.Level.ALL_INT,"ALL");Log4js.CustomEvent=function(){this.listeners=[]};Log4js.CustomEvent.prototype={addListener:function(method){this.listeners.push(method)},removeListener:function(method){var foundIndexes=this._findListenerIndexes(method);for(var i=0;i<foundIndexes.length;i++){this.listeners.splice(foundIndexes[i],1)}},dispatch:function(handler){for(var i=0;i<this.listeners.length;i++){try{this.listeners[i](handler)}catch(e){alert("Could not run the listener "+this.listeners[i]+". \n"+e)}}},_findListenerIndexes:function(method){var indexes=[];for(var i=0;i<this.listeners.length;i++){if(this.listeners[i]==method){indexes.push(i)}}return indexes}};Log4js.LoggingEvent=function(categoryName,level,message,logger){this.startTime=new Date();this.categoryName=categoryName||".";this.message=message||"";this.level=level||Log4js.Level.TRACE;this.logger=logger};Log4js.LoggingEvent.prototype={getRenderedMessage:function(){return this.categoryName+"~"+this.startTime.toLocaleString()+" ["+this.level.toString()+"] "+this.message}};Log4js.Logger=function(name){this.loggingEvents=[];this.appenders=[];this.category=name||"";this.level=Log4js.Level.FATAL;this.onlog=new Log4js.CustomEvent();this.onclear=new Log4js.CustomEvent();this.appenders.push(new Appender(this))};Log4js.Logger.prototype={addAppender:function(appender){this.appenders.push(appender)},setLevel:function(level){this.level=level},log:function(message,logLevel){var loggingEvent=new Log4js.LoggingEvent(this.category,logLevel,message,this);this.loggingEvents.push(loggingEvent);this.onlog.dispatch(loggingEvent)},clear:function(){this.loggingEvents=[];this.onclear.dispatch()},isTraceEnabled:function(){if(this.level.valueOf()<=Log4js.Level.TRACE.valueOf()){return true}return false},trace:function(message){if(this.isTraceEnabled()){this.log(message,Log4js.Level.TRACE)}},isDebugEnabled:function(){if(this.level.valueOf()<=Log4js.Level.DEBUG.valueOf()){return true}return false},debug:function(message){if(this.isDebugEnabled()){this.log(message,Log4js.Level.DEBUG)}},isInfoEnabled:function(){if(this.level.valueOf()<=Log4js.Level.INFO.valueOf()){return true}return false},info:function(message){if(this.isInfoEnabled()){this.log(message,Log4js.Level.INFO)}},isWarnEnabled:function(){if(this.level.valueOf()<=Log4js.Level.WARN.valueOf()){return true}return false},warn:function(message){if(this.isWarnEnabled()){this.log(message,Log4js.Level.WARN)}},isErrorEnabled:function(){if(this.level.valueOf()<=Log4js.Level.ERROR.valueOf()){return true}return false},error:function(message){if(this.isErrorEnabled()){this.log(message,Log4js.Level.ERROR)}},isFatalEnabled:function(){if(this.level.valueOf()<=Log4js.Level.FATAL.valueOf()){return true}return false},fatal:function(message){if(this.isFatalEnabled()){this.log(message,Log4js.Level.FATAL)}},windowError:function(msg,url,line){var message="Error in ("+(url||window.location)+") on line "+line+" with message ("+msg+")";this.log(message,Log4js.Level.FATAL)}};function Appender(logger){logger.onlog.addListener(this.doAppend.bind(this));logger.onclear.addListener(this.doClear.bind(this));this.logger=logger}Appender.prototype={doAppend:function(loggingEvent){return },doClear:function(){return },setLayout:function(layout){this.layout=layout}};function Layout(){return }Layout.prototype={format:function(loggingEvent){return""},getContentType:function(){return"text/plain"},getHeader:function(){return null},getFooter:function(){return null}};function ConsoleAppender(logger,inline){logger.onlog.addListener(this.doAppend.bind(this));logger.onclear.addListener(this.doClear.bind(this));this.logger=logger;this.layout=new SimpleLayout();this.inline=inline||false;if(this.inline){Log4js.attachEvent(window,"load",this.initialize.bind(this))}}ConsoleAppender.superclass=Appender.prototype;ConsoleAppender.prototype={commandHistory:[],commandIndex:0,initialize:function(){var doc=document;var win=window;if(!this.inline){window.top.consoleWindow=window.open("","log4jsconsole","left=0,top=0,width=700,height=700,scrollbars=no,status=no,resizable=no;toolbar=no");window.top.consoleWindow.opener=self;win=window.top.consoleWindow;doc=win.document;doc.open();doc.write("<!DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Transitional//EN ");doc.write("  http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd>\n\n");doc.write("<html><head><title>log4js</title>\n");doc.write('</head><body style="background-color:darkgray"></body>\n');win.blur();win.focus()}this.docReference=doc;this.winReference=win;this.outputCount=0;this.tagPattern=".*";this.logElement=doc.createElement("div");doc.body.appendChild(this.logElement);this.logElement.style.display="none";this.logElement.style.position="absolute";this.logElement.style.left="0px";this.logElement.style.width="100%";this.logElement.style.textAlign="left";this.logElement.style.fontFamily="lucida console";this.logElement.style.fontSize="100%";this.logElement.style.backgroundColor="darkgray";this.logElement.style.opacity=0.9;this.logElement.style.zIndex=2000;this.toolbarElement=doc.createElement("div");this.logElement.appendChild(this.toolbarElement);this.toolbarElement.style.padding="0 0 0 2px";this.buttonsContainerElement=doc.createElement("span");this.toolbarElement.appendChild(this.buttonsContainerElement);if(this.inline){var closeButton=doc.createElement("button");closeButton.style.cssFloat="right";closeButton.style.styleFloat="right";closeButton.style.color="black";closeButton.innerHTML="close";closeButton.onclick=this.toggle.bind(this);this.buttonsContainerElement.appendChild(closeButton)}var clearButton=doc.createElement("button");clearButton.style.cssFloat="right";clearButton.style.styleFloat="right";clearButton.style.color="black";clearButton.innerHTML="clear";clearButton.onclick=this.logger.clear.bind(this.logger);this.buttonsContainerElement.appendChild(clearButton);this.tagFilterContainerElement=doc.createElement("span");this.toolbarElement.appendChild(this.tagFilterContainerElement);this.tagFilterContainerElement.style.cssFloat="left";this.tagFilterContainerElement.appendChild(doc.createTextNode("Level Filter"));this.tagFilterElement=doc.createElement("input");this.tagFilterContainerElement.appendChild(this.tagFilterElement);this.tagFilterElement.style.width="200px";this.tagFilterElement.value=this.tagPattern;this.tagFilterElement.setAttribute("autocomplete","off");Log4js.attachEvent(this.tagFilterElement,"keyup",this.updateTags.bind(this));Log4js.attachEvent(this.tagFilterElement,"click",function(){this.tagFilterElement.select()}.bind(this));this.outputElement=doc.createElement("div");this.logElement.appendChild(this.outputElement);this.outputElement.style.overflow="auto";this.outputElement.style.clear="both";this.outputElement.style.height=(this.inline)?("200px"):("650px");this.outputElement.style.width="100%";this.outputElement.style.backgroundColor="black";this.inputContainerElement=doc.createElement("div");this.inputContainerElement.style.width="100%";this.logElement.appendChild(this.inputContainerElement);this.inputElement=doc.createElement("input");this.inputContainerElement.appendChild(this.inputElement);this.inputElement.style.width="100%";this.inputElement.style.borderWidth="0px";this.inputElement.style.margin="0px";this.inputElement.style.padding="0px";this.inputElement.value="Type command here";this.inputElement.setAttribute("autocomplete","off");Log4js.attachEvent(this.inputElement,"keyup",this.handleInput.bind(this));Log4js.attachEvent(this.inputElement,"click",function(){this.inputElement.select()}.bind(this));if(this.inline){window.setInterval(this.repositionWindow.bind(this),500);this.repositionWindow();var accessElement=doc.createElement("button");accessElement.style.position="absolute";accessElement.style.top="-100px";accessElement.accessKey="d";accessElement.onclick=this.toggle.bind(this);doc.body.appendChild(accessElement)}else{this.show()}},toggle:function(){if(this.logElement.style.display=="none"){this.show()}else{this.hide()}},show:function(){this.logElement.style.display="";this.outputElement.scrollTop=this.outputElement.scrollHeight;this.inputElement.select()},hide:function(){this.logElement.style.display="none"},output:function(message,style){var shouldScroll=(this.outputElement.scrollTop+(2*this.outputElement.clientHeight))>=this.outputElement.scrollHeight;this.outputCount++;style=(style?style+=";":"");style+="padding:1px;margin:0 0 5px 0";if(this.outputCount%2===0){style+=";background-color:#101010"}message=message||"undefined";message=message.toString();this.outputElement.innerHTML+="<pre style='"+style+"'>"+message+"</pre>";if(shouldScroll){this.outputElement.scrollTop=this.outputElement.scrollHeight}},updateTags:function(){var pattern=this.tagFilterElement.value;if(this.tagPattern==pattern){return }try{new RegExp(pattern)}catch(e){return }this.tagPattern=pattern;this.outputElement.innerHTML="";this.outputCount=0;for(var i=0;i<this.logger.loggingEvents.length;i++){this.doAppend(this.logger.loggingEvents[i])}},repositionWindow:function(){var offset=window.pageYOffset||this.docReference.documentElement.scrollTop||this.docReference.body.scrollTop;var pageHeight=self.innerHeight||this.docReference.documentElement.clientHeight||this.docReference.body.clientHeight;this.logElement.style.top=(offset+pageHeight-this.logElement.offsetHeight)+"px"},doAppend:function(loggingEvent){if((!this.inline)&&(!this.winReference||this.winReference.closed)){this.initialize()}if(loggingEvent.level.toString().search(new RegExp(this.tagPattern,"igm"))==-1){return }var style="";if(loggingEvent.level.toString().search(/ERROR/)!=-1){style+="color:red"}else{if(loggingEvent.level.toString().search(/FATAL/)!=-1){style+="color:red"}else{if(loggingEvent.level.toString().search(/WARN/)!=-1){style+="color:orange"}else{if(loggingEvent.level.toString().search(/DEBUG/)!=-1){style+="color:green"}else{if(loggingEvent.level.toString().search(/INFO/)!=-1){style+="color:white"}else{style+="color:yellow"}}}}}this.output(this.layout.format(loggingEvent),style)},doClear:function(){this.outputElement.innerHTML=""},setLayout:function(layout){this.layout=layout},handleInput:function(e){if(e.keyCode==13){var command=this.inputElement.value;switch(command){case"clear":this.logger.clear();break;default:var consoleOutput="";try{consoleOutput=eval(this.inputElement.value)}catch(e){this.logger.error("Problem parsing input <"+command+">"+e.message);break}this.logger.trace(consoleOutput);break}if(this.inputElement.value!==""&&this.inputElement.value!==this.commandHistory[0]){this.commandHistory.unshift(this.inputElement.value)}this.commandIndex=0;this.inputElement.value=""}else{if(e.keyCode==38&&this.commandHistory.length>0){this.inputElement.value=this.commandHistory[this.commandIndex];if(this.commandIndex<this.commandHistory.length-1){this.commandIndex+=1}}else{if(e.keyCode==40&&this.commandHistory.length>0){if(this.commandIndex>0){this.commandIndex-=1}this.inputElement.value=this.commandHistory[this.commandIndex]}else{this.commandIndex=0}}}}};function MetatagAppender(logger){logger.onlog.addListener(this.doAppend.bind(this));logger.onclear.addListener(this.doClear.bind(this));this.logger=logger;this.currentLine=0}MetatagAppender.prototype={doAppend:function(loggingEvent){var now=new Date();var lines=loggingEvent.message.split("\n");var headTag=document.getElementsByTagName("head")[0];for(var i=1;i<=lines.length;i++){var value=lines[i-1];if(i==1){value=loggingEvent.level.toString()+": "+value}else{value="> "+value}var metaTag=document.createElement("meta");metaTag.setAttribute("name","X-log4js:"+this.currentLine);metaTag.setAttribute("content",value);headTag.appendChild(metaTag);this.currentLine+=1}},doClear:function(){return },setLayout:function(layout){this.layout=layout}};function AjaxAppender(logger,loggingUrl){logger.onlog.addListener(this.doAppend.bind(this));logger.onclear.addListener(this.doClear.bind(this));this.logger=logger;this.httpRequest=false;this.loggingUrl=loggingUrl||"log4js.jsp";this.threshold=1;this.currentThreshold=0;this.loggingEventMap=new ArrayList();this.layout=new XMLLayout();if(window.XMLHttpRequest){this.httpRequest=new XMLHttpRequest();if(this.httpRequest.overrideMimeType){this.httpRequest.overrideMimeType(this.layout.getContentType())}}else{if(window.ActiveXObject){try{this.httpRequest=new ActiveXObject("Msxml2.XMLHTTP")}catch(e){this.httpRequest=new ActiveXObject("Microsoft.XMLHTTP")}}}if(!this.httpRequest){alert("Unfortunatelly your browser does not support AjaxAppender for log4js!")}}AjaxAppender.prototype={doAppend:function(loggingEvent){if(this.currentThreshold<=this.threshold){this.loggingEventMap.add(loggingEvent);this.currentThreshold++}if(this.currentThreshold>=this.threshold){this.send()}},doClear:function(){this.threshold=0;this.send()},setLayout:function(layout){this.layout=layout},setThreshold:function(threshold){this.threshold=threshold},send:function(){var content=this.layout.getHeader();for(var i=0;i<this.loggingEventMap.length();i++){content+=this.layout.format(this.loggingEventMap.get(i))}content+=this.layout.getFooter();this.httpRequest.open("POST",this.loggingUrl,true);this.httpRequest.setRequestHeader("Content-type","application/x-www-form-urlencoded");this.httpRequest.setRequestHeader("REFERER",location.href);this.httpRequest.setRequestHeader("Content-length",content.length);this.httpRequest.setRequestHeader("Connection","close");this.httpRequest.send(content);this.currentThreshold=0}};function FileAppender(logger,file){logger.onlog.addListener(this.doAppend.bind(this));logger.onclear.addListener(this.doClear.bind(this));this.logger=logger;this.layout=new SimpleLayout();this.file=file||"C:\\log4js.log";try{this.fso=new ActiveXObject("Scripting.FileSystemObject")}catch(e){}}FileAppender.prototype={doAppend:function(loggingEvent){try{var fileHandle=this.fso.OpenTextFile(this.file,8,true);fileHandle.WriteLine(this.layout.format(loggingEvent));fileHandle.close()}catch(e){}},doClear:function(){try{var fileHandle=this.fso.GetFile(this.file);fileHandle.Delete()}catch(e){}},setLayout:function(layout){this.layout=layout}};function WindowsEventAppender(logger){logger.onlog.addListener(this.doAppend.bind(this));logger.onclear.addListener(this.doClear.bind(this));this.logger=logger;this.layout=new SimpleLayout();try{this.shell=new ActiveXObject("WScript.Shell")}catch(e){}}WindowsEventAppender.prototype={doAppend:function(loggingEvent){var winLevel=4;switch(loggingEvent.level){case Log4js.Level.FATAL:winLevel=1;break;case Log4js.Level.ERROR:winLevel=1;break;case Log4js.Level.WARN:winLevel=2;break;default:winLevel=4;break}try{this.shell.LogEvent(winLevel,this.level.format(loggingEvent))}catch(e){}},doClear:function(){return },setLayout:function(layout){this.layout=layout}};function JSAlertAppender(logger){logger.onlog.addListener(this.doAppend.bind(this));logger.onclear.addListener(this.doClear.bind(this));this.logger=logger;this.layout=new SimpleLayout()}JSAlertAppender.prototype={doAppend:function(loggingEvent){alert(this.layout.getHeader()+this.layout.format(loggingEvent)+this.layout.getFooter())},doClear:function(){return },setLayout:function(layout){this.layout=layout}};function MozJSConsoleAppender(logger){logger.onlog.addListener(this.doAppend.bind(this));logger.onclear.addListener(this.doClear.bind(this));this.logger=logger;this.layout=new SimpleLayout();netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");this.jsConsole=Components.classes["@mozilla.org/consoleservice;1"].getService(Components.interfaces.nsIConsoleService);this.scriptError=Components.classes["@mozilla.org/scripterror;1"].createInstance(Components.interfaces.nsIScriptError)}MozJSConsoleAppender.superclass=Appender.prototype;MozJSConsoleAppender.prototype={doAppend:function(loggingEvent){netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");this.scriptError.init(this.layout.format(loggingEvent),null,null,null,null,this.getFlag(loggingEvent),loggingEvent.categoryName);this.jsConsole.logMessage(this.scriptError)},doClear:function(){return },setLayout:function(layout){this.layout=layout},getFlag:function(loggingEvent){var retval;switch(loggingEvent.level){case Log4js.Level.FATAL:retval=2;break;case Log4js.Level.ERROR:retval=0;break;case Log4js.Level.WARN:retval=1;break;default:retval=1;break}return retval}};function OperaJSConsoleAppender(logger){logger.onlog.addListener(this.doAppend.bind(this));logger.onclear.addListener(this.doClear.bind(this));this.logger=logger;this.layout=new SimpleLayout()}OperaJSConsoleAppender.superclass=Appender.prototype;OperaJSConsoleAppender.prototype={doAppend:function(loggingEvent){opera.postError(this.layout.format(loggingEvent))},doClear:function(){return },setLayout:function(layout){this.layout=layout}};function SafariJSConsoleAppender(logger){logger.onlog.addListener(this.doAppend.bind(this));logger.onclear.addListener(this.doClear.bind(this));this.logger=logger;this.layout=new SimpleLayout()}SafariJSConsoleAppender.superclass=Appender.prototype;SafariJSConsoleAppender.prototype={doAppend:function(loggingEvent){window.console.log(this.layout.format(loggingEvent))},doClear:function(){return },setLayout:function(layout){this.layout=layout}};function SimpleLayout(){this.LINE_SEP="\n";this.LINE_SEP_LEN=1}SimpleLayout.prototype={format:function(loggingEvent){return loggingEvent.level.toString()+" - "+loggingEvent.message+this.LINE_SEP},getContentType:function(){return"text/plain"},getHeader:function(){return""},getFooter:function(){return""}};function BasicLayout(){this.LINE_SEP="\n"}BasicLayout.prototype={format:function(loggingEvent){return loggingEvent.categoryName+"~"+loggingEvent.startTime.toLocaleString()+" ["+loggingEvent.level.toString()+"] "+loggingEvent.message+this.LINE_SEP},getContentType:function(){return"text/plain"},getHeader:function(){return""},getFooter:function(){return""}};function HtmlLayout(){return }HtmlLayout.prototype={format:function(loggingEvent){return'<div style="'+this.getStyle(loggingEvent)+'">'+loggingEvent.level.toString()+" - "+loggingEvent.message+"</div>\n"},getContentType:function(){return"text/html"},getHeader:function(){return"<html><head><title>log4js</head><body>"},getFooter:function(){return"</body></html>"},getStyle:function(loggingEvent){var style;if(loggingEvent.level.toString().search(/ERROR/)!=-1){style="color:red"}else{if(loggingEvent.level.toString().search(/FATAL/)!=-1){style="color:red"}else{if(loggingEvent.level.toString().search(/WARN/)!=-1){style="color:orange"}else{if(loggingEvent.level.toString().search(/DEBUG/)!=-1){style="color:green"}else{if(loggingEvent.level.toString().search(/INFO/)!=-1){style="color:white"}else{style="color:yellow"}}}}}return style}};function XMLLayout(){return }XMLLayout.prototype={format:function(loggingEvent){var content='<log4js:event logger="';content+=loggingEvent.categoryName+'" level="';content+=loggingEvent.level.toString()+'" client="';content+=navigator.userAgent+'" referer="';content+=location.href+'" timestamp="';content+=loggingEvent.startTime+'">\n';content+="<log4js:message><![CDATA["+loggingEvent.message+"]]></log4js:message>\n";content+="</log4js:event>\n";return content},getContentType:function(){return"text/xml"},getHeader:function(){return'<log4js:eventSet version="'+Log4js.version+'" xmlns:log4js="http://log4js.berlios.de/log4js/">\n'},getFooter:function(){return"</log4js:eventSet>\n"}};function JSONLayout(){return }JSONLayout.prototype={format:function(loggingEvent){return JSON.stringify(loggingEvent)},getContentType:function(){return"text/json"},getHeader:function(){return""},getFooter:function(){return""}};function Map(){var keys=new Array();this.contains=function(key){var entry=findEntry(key);return !(entry==null||entry instanceof NullKey)};this.get=function(key){var entry=findEntry(key);if(!(entry==null||entry instanceof NullKey)){return entry.value}else{return null}};this.put=function(key,value){var entry=findEntry(key);if(entry){entry.value=value}else{addNewEntry(key,value)}};this.remove=function(key){for(var i=0;i<keys.length;i++){var entry=keys[i];if(entry instanceof NullKey){continue}if(entry.key==key){keys[i]=NullKey}}};this.size=function(){return keys.length};function findEntry(key){for(var i=0;i<keys.length;i++){var entry=keys[i];if(entry instanceof NullKey){continue}if(entry.key==key){return entry}}return null}function addNewEntry(key,value){var entry=new Object();entry.key=key;entry.value=value;keys[keys.length]=entry}}function NullKey(){}new NullKey();if(!Array.prototype.push){Array.prototype.push=function(){var startLength=this.length;for(var i=0;i<arguments.length;i++){this[startLength+i]=arguments[i]}return this.length}}if(!Function.prototype.bind){Function.prototype.bind=function(object){var __method=this;return function(){return __method.apply(object,arguments)}}}function ArrayList(){this.array=new Array()}ArrayList.prototype={add:function(obj){this.array[this.array.length]=obj},iterator:function(){return new Iterator(this)},length:function(){return this.array.length},get:function(index){return this.array[index]},addAll:function(obj){if(obj instanceof Array){for(var i=0;i<obj.length;i++){this.add(obj[i])}}else{if(obj instanceof ArrayList){for(var j=0;j<obj.length();i++){this.add(obj.get(j))}}}}};function Iterator(arrayList){this.arrayList=arrayList;this.index=0}Iterator.prototype={hasNext:function(){return this.index<this.arrayList.length()},next:function(){return this.arrayList.get(index++)}};var Prototype={Version:"1.5.1",Browser:{IE:!!(window.attachEvent&&!window.opera),Opera:!!window.opera,WebKit:navigator.userAgent.indexOf("AppleWebKit/")>-1,Gecko:navigator.userAgent.indexOf("Gecko")>-1&&navigator.userAgent.indexOf("KHTML")==-1},BrowserFeatures:{XPath:!!document.evaluate,ElementExtensions:!!window.HTMLElement,SpecificElementExtensions:(document.createElement("div").__proto__!==document.createElement("form").__proto__)},ScriptFragment:"<script[^>]*>([\u0001-\uFFFF]*?)<\/script>",JSONFilter:/^\/\*-secure-\s*(.*)\s*\*\/\s*$/,emptyFunction:function(){},K:function(x){return x}};var Class={create:function(){return function(){this.initialize.apply(this,arguments)}}};var Abstract=new Object();Object.extend=function(destination,source){for(var property in source){destination[property]=source[property]}return destination};Object.extend(Object,{inspect:function(object){try{if(object===undefined){return"undefined"}if(object===null){return"null"}return object.inspect?object.inspect():object.toString()}catch(e){if(e instanceof RangeError){return"..."}throw e}},toJSON:function(object){var type=typeof object;switch(type){case"undefined":case"function":case"unknown":return ;case"boolean":return object.toString()}if(object===null){return"null"}if(object.toJSON){return object.toJSON()}if(object.ownerDocument===document){return }var results=[];for(var property in object){var value=Object.toJSON(object[property]);if(value!==undefined){results.push(property.toJSON()+": "+value)}}return"{"+results.join(", ")+"}"},keys:function(object){var keys=[];for(var property in object){keys.push(property)}return keys},values:function(object){var values=[];for(var property in object){values.push(object[property])}return values},clone:function(object){return Object.extend({},object)}});Function.prototype.bind=function(){var __method=this,args=$A(arguments),object=args.shift();return function(){return __method.apply(object,args.concat($A(arguments)))}};Function.prototype.bindAsEventListener=function(object){var __method=this,args=$A(arguments),object=args.shift();return function(event){return __method.apply(object,[event||window.event].concat(args))}};Object.extend(Number.prototype,{toColorPart:function(){return this.toPaddedString(2,16)},succ:function(){return this+1},times:function(iterator){$R(0,this,true).each(iterator);return this},toPaddedString:function(length,radix){var string=this.toString(radix||10);return"0".times(length-string.length)+string},toJSON:function(){return isFinite(this)?this.toString():"null"}});Date.prototype.toJSON=function(){return'"'+this.getFullYear()+"-"+(this.getMonth()+1).toPaddedString(2)+"-"+this.getDate().toPaddedString(2)+"T"+this.getHours().toPaddedString(2)+":"+this.getMinutes().toPaddedString(2)+":"+this.getSeconds().toPaddedString(2)+'"'};var Try={these:function(){var returnValue;for(var i=0,length=arguments.length;i<length;i++){var lambda=arguments[i];try{returnValue=lambda();break}catch(e){}}return returnValue}};var PeriodicalExecuter=Class.create();PeriodicalExecuter.prototype={initialize:function(callback,frequency){this.callback=callback;this.frequency=frequency;this.currentlyExecuting=false;this.registerCallback()},registerCallback:function(){this.timer=setInterval(this.onTimerEvent.bind(this),this.frequency*1000)},stop:function(){if(!this.timer){return }clearInterval(this.timer);this.timer=null},onTimerEvent:function(){if(!this.currentlyExecuting){try{this.currentlyExecuting=true;this.callback(this)}finally{this.currentlyExecuting=false}}}};Object.extend(String,{interpret:function(value){return value==null?"":String(value)},specialChar:{"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r","\\":"\\\\"}});Object.extend(String.prototype,{gsub:function(pattern,replacement){var result="",source=this,match;replacement=arguments.callee.prepareReplacement(replacement);while(source.length>0){if(match=source.match(pattern)){result+=source.slice(0,match.index);result+=String.interpret(replacement(match));source=source.slice(match.index+match[0].length)}else{result+=source,source=""}}return result},sub:function(pattern,replacement,count){replacement=this.gsub.prepareReplacement(replacement);count=count===undefined?1:count;return this.gsub(pattern,function(match){if(--count<0){return match[0]}return replacement(match)})},scan:function(pattern,iterator){this.gsub(pattern,iterator);return this},truncate:function(length,truncation){length=length||30;truncation=truncation===undefined?"...":truncation;return this.length>length?this.slice(0,length-truncation.length)+truncation:this},strip:function(){return this.replace(/^\s+/,"").replace(/\s+$/,"")},stripTags:function(){return this.replace(/<\/?[^>]+>/gi,"")},stripScripts:function(){return this.replace(new RegExp(Prototype.ScriptFragment,"img"),"")},extractScripts:function(){var matchAll=new RegExp(Prototype.ScriptFragment,"img");var matchOne=new RegExp(Prototype.ScriptFragment,"im");return(this.match(matchAll)||[]).map(function(scriptTag){return(scriptTag.match(matchOne)||["",""])[1]})},evalScripts:function(){return this.extractScripts().map(function(script){return eval(script)})},escapeHTML:function(){var self=arguments.callee;self.text.data=this;return self.div.innerHTML},unescapeHTML:function(){var div=document.createElement("div");div.innerHTML=this.stripTags();return div.childNodes[0]?(div.childNodes.length>1?$A(div.childNodes).inject("",function(memo,node){return memo+node.nodeValue}):div.childNodes[0].nodeValue):""},toQueryParams:function(separator){var match=this.strip().match(/([^?#]*)(#.*)?$/);if(!match){return{}}return match[1].split(separator||"&").inject({},function(hash,pair){if((pair=pair.split("="))[0]){var key=decodeURIComponent(pair.shift());var value=pair.length>1?pair.join("="):pair[0];if(value!=undefined){value=decodeURIComponent(value)}if(key in hash){if(hash[key].constructor!=Array){hash[key]=[hash[key]]}hash[key].push(value)}else{hash[key]=value}}return hash})},toArray:function(){return this.split("")},succ:function(){return this.slice(0,this.length-1)+String.fromCharCode(this.charCodeAt(this.length-1)+1)},times:function(count){var result="";for(var i=0;i<count;i++){result+=this}return result},camelize:function(){var parts=this.split("-"),len=parts.length;if(len==1){return parts[0]}var camelized=this.charAt(0)=="-"?parts[0].charAt(0).toUpperCase()+parts[0].substring(1):parts[0];for(var i=1;i<len;i++){camelized+=parts[i].charAt(0).toUpperCase()+parts[i].substring(1)}return camelized},capitalize:function(){return this.charAt(0).toUpperCase()+this.substring(1).toLowerCase()},underscore:function(){return this.gsub(/::/,"/").gsub(/([A-Z]+)([A-Z][a-z])/,"#{1}_#{2}").gsub(/([a-z\d])([A-Z])/,"#{1}_#{2}").gsub(/-/,"_").toLowerCase()},dasherize:function(){return this.gsub(/_/,"-")},inspect:function(useDoubleQuotes){var escapedString=this.gsub(/[\x00-\x1f\\]/,function(match){var character=String.specialChar[match[0]];return character?character:"\\u00"+match[0].charCodeAt().toPaddedString(2,16)});if(useDoubleQuotes){return'"'+escapedString.replace(/"/g,'\\"')+'"'}return"'"+escapedString.replace(/'/g,"\\'")+"'"},toJSON:function(){return this.inspect(true)},unfilterJSON:function(filter){return this.sub(filter||Prototype.JSONFilter,"#{1}")},evalJSON:function(sanitize){var json=this.unfilterJSON();try{if(!sanitize||(/^("(\\.|[^"\\\n\r])*?"|[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t])+?$/.test(json))){return eval("("+json+")")}}catch(e){}throw new SyntaxError("Badly formed JSON string: "+this.inspect())},include:function(pattern){return this.indexOf(pattern)>-1},startsWith:function(pattern){return this.indexOf(pattern)===0},endsWith:function(pattern){var d=this.length-pattern.length;return d>=0&&this.lastIndexOf(pattern)===d},empty:function(){return this==""},blank:function(){return/^\s*$/.test(this)}});if(Prototype.Browser.WebKit||Prototype.Browser.IE){Object.extend(String.prototype,{escapeHTML:function(){return this.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")},unescapeHTML:function(){return this.replace(/&amp;/g,"&").replace(/&lt;/g,"<").replace(/&gt;/g,">")}})}String.prototype.gsub.prepareReplacement=function(replacement){if(typeof replacement=="function"){return replacement}var template=new Template(replacement);return function(match){return template.evaluate(match)}};String.prototype.parseQuery=String.prototype.toQueryParams;Object.extend(String.prototype.escapeHTML,{div:document.createElement("div"),text:document.createTextNode("")});with(String.prototype.escapeHTML){div.appendChild(text)}var Template=Class.create();Template.Pattern=/(^|.|\r|\n)(#\{(.*?)\})/;Template.prototype={initialize:function(template,pattern){this.template=template.toString();this.pattern=pattern||Template.Pattern},evaluate:function(object){return this.template.gsub(this.pattern,function(match){var before=match[1];if(before=="\\"){return match[2]}return before+String.interpret(object[match[3]])})}};var $break={},$continue=new Error('"throw $continue" is deprecated, use "return" instead');var Enumerable={each:function(iterator){var index=0;try{this._each(function(value){iterator(value,index++)})}catch(e){if(e!=$break){throw e}}return this},eachSlice:function(number,iterator){var index=-number,slices=[],array=this.toArray();while((index+=number)<array.length){slices.push(array.slice(index,index+number))}return slices.map(iterator)},all:function(iterator){var result=true;this.each(function(value,index){result=result&&!!(iterator||Prototype.K)(value,index);if(!result){throw $break}});return result},any:function(iterator){var result=false;this.each(function(value,index){if(result=!!(iterator||Prototype.K)(value,index)){throw $break}});return result},collect:function(iterator){var results=[];this.each(function(value,index){results.push((iterator||Prototype.K)(value,index))});return results},detect:function(iterator){var result;this.each(function(value,index){if(iterator(value,index)){result=value;throw $break}});return result},findAll:function(iterator){var results=[];this.each(function(value,index){if(iterator(value,index)){results.push(value)}});return results},grep:function(pattern,iterator){var results=[];this.each(function(value,index){var stringValue=value.toString();if(stringValue.match(pattern)){results.push((iterator||Prototype.K)(value,index))}});return results},include:function(object){var found=false;this.each(function(value){if(value==object){found=true;throw $break}});return found},inGroupsOf:function(number,fillWith){fillWith=fillWith===undefined?null:fillWith;return this.eachSlice(number,function(slice){while(slice.length<number){slice.push(fillWith)}return slice})},inject:function(memo,iterator){this.each(function(value,index){memo=iterator(memo,value,index)});return memo},invoke:function(method){var args=$A(arguments).slice(1);return this.map(function(value){return value[method].apply(value,args)})},max:function(iterator){var result;this.each(function(value,index){value=(iterator||Prototype.K)(value,index);if(result==undefined||value>=result){result=value}});return result},min:function(iterator){var result;this.each(function(value,index){value=(iterator||Prototype.K)(value,index);if(result==undefined||value<result){result=value}});return result},partition:function(iterator){var trues=[],falses=[];this.each(function(value,index){((iterator||Prototype.K)(value,index)?trues:falses).push(value)});return[trues,falses]},pluck:function(property){var results=[];this.each(function(value,index){results.push(value[property])});return results},reject:function(iterator){var results=[];this.each(function(value,index){if(!iterator(value,index)){results.push(value)}});return results},sortBy:function(iterator){return this.map(function(value,index){return{value:value,criteria:iterator(value,index)}}).sort(function(left,right){var a=left.criteria,b=right.criteria;return a<b?-1:a>b?1:0}).pluck("value")},toArray:function(){return this.map()},zip:function(){var iterator=Prototype.K,args=$A(arguments);if(typeof args.last()=="function"){iterator=args.pop()}var collections=[this].concat(args).map($A);return this.map(function(value,index){return iterator(collections.pluck(index))})},size:function(){return this.toArray().length},inspect:function(){return"#<Enumerable:"+this.toArray().inspect()+">"}};Object.extend(Enumerable,{map:Enumerable.collect,find:Enumerable.detect,select:Enumerable.findAll,member:Enumerable.include,entries:Enumerable.toArray});var $A=Array.from=function(iterable){if(!iterable){return[]}if(iterable.toArray){return iterable.toArray()}else{var results=[];for(var i=0,length=iterable.length;i<length;i++){results.push(iterable[i])}return results}};if(Prototype.Browser.WebKit){$A=Array.from=function(iterable){if(!iterable){return[]}if(!(typeof iterable=="function"&&iterable=="[object NodeList]")&&iterable.toArray){return iterable.toArray()}else{var results=[];for(var i=0,length=iterable.length;i<length;i++){results.push(iterable[i])}return results}}}Object.extend(Array.prototype,Enumerable);if(!Array.prototype._reverse){Array.prototype._reverse=Array.prototype.reverse}Object.extend(Array.prototype,{_each:function(iterator){for(var i=0,length=this.length;i<length;i++){iterator(this[i])}},clear:function(){this.length=0;return this},first:function(){return this[0]},last:function(){return this[this.length-1]},compact:function(){return this.select(function(value){return value!=null})},flatten:function(){return this.inject([],function(array,value){return array.concat(value&&value.constructor==Array?value.flatten():[value])})},without:function(){var values=$A(arguments);return this.select(function(value){return !values.include(value)})},indexOf:function(object){for(var i=0,length=this.length;i<length;i++){if(this[i]==object){return i}}return -1},reverse:function(inline){return(inline!==false?this:this.toArray())._reverse()},reduce:function(){return this.length>1?this:this[0]},uniq:function(sorted){return this.inject([],function(array,value,index){if(0==index||(sorted?array.last()!=value:!array.include(value))){array.push(value)}return array})},clone:function(){return[].concat(this)},size:function(){return this.length},inspect:function(){return"["+this.map(Object.inspect).join(", ")+"]"},toJSON:function(){var results=[];this.each(function(object){var value=Object.toJSON(object);if(value!==undefined){results.push(value)}});return"["+results.join(", ")+"]"}});Array.prototype.toArray=Array.prototype.clone;function $w(string){string=string.strip();return string?string.split(/\s+/):[]}if(Prototype.Browser.Opera){Array.prototype.concat=function(){var array=[];for(var i=0,length=this.length;i<length;i++){array.push(this[i])}for(var i=0,length=arguments.length;i<length;i++){if(arguments[i].constructor==Array){for(var j=0,arrayLength=arguments[i].length;j<arrayLength;j++){array.push(arguments[i][j])}}else{array.push(arguments[i])}}return array}}var Hash=function(object){if(object instanceof Hash){this.merge(object)}else{Object.extend(this,object||{})}};Object.extend(Hash,{toQueryString:function(obj){var parts=[];parts.add=arguments.callee.addPair;this.prototype._each.call(obj,function(pair){if(!pair.key){return }var value=pair.value;if(value&&typeof value=="object"){if(value.constructor==Array){value.each(function(value){parts.add(pair.key,value)})}return }parts.add(pair.key,value)});return parts.join("&")},toJSON:function(object){var results=[];this.prototype._each.call(object,function(pair){var value=Object.toJSON(pair.value);if(value!==undefined){results.push(pair.key.toJSON()+": "+value)}});return"{"+results.join(", ")+"}"}});Hash.toQueryString.addPair=function(key,value,prefix){key=encodeURIComponent(key);if(value===undefined){this.push(key)}else{this.push(key+"="+(value==null?"":encodeURIComponent(value)))}};Object.extend(Hash.prototype,Enumerable);Object.extend(Hash.prototype,{_each:function(iterator){for(var key in this){var value=this[key];if(value&&value==Hash.prototype[key]){continue}var pair=[key,value];pair.key=key;pair.value=value;iterator(pair)}},keys:function(){return this.pluck("key")},values:function(){return this.pluck("value")},merge:function(hash){return $H(hash).inject(this,function(mergedHash,pair){mergedHash[pair.key]=pair.value;return mergedHash})},remove:function(){var result;for(var i=0,length=arguments.length;i<length;i++){var value=this[arguments[i]];if(value!==undefined){if(result===undefined){result=value}else{if(result.constructor!=Array){result=[result]}result.push(value)}}delete this[arguments[i]]}return result},toQueryString:function(){return Hash.toQueryString(this)},inspect:function(){return"#<Hash:{"+this.map(function(pair){return pair.map(Object.inspect).join(": ")}).join(", ")+"}>"},toJSON:function(){return Hash.toJSON(this)}});function $H(object){if(object instanceof Hash){return object}return new Hash(object)}if(function(){var i=0,Test=function(value){this.key=value};Test.prototype.key="foo";for(var property in new Test("bar")){i++}return i>1}()){Hash.prototype._each=function(iterator){var cache=[];for(var key in this){var value=this[key];if((value&&value==Hash.prototype[key])||cache.include(key)){continue}cache.push(key);var pair=[key,value];pair.key=key;pair.value=value;iterator(pair)}}}ObjectRange=Class.create();Object.extend(ObjectRange.prototype,Enumerable);Object.extend(ObjectRange.prototype,{initialize:function(start,end,exclusive){this.start=start;this.end=end;this.exclusive=exclusive},_each:function(iterator){var value=this.start;while(this.include(value)){iterator(value);value=value.succ()}},include:function(value){if(value<this.start){return false}if(this.exclusive){return value<this.end}return value<=this.end}});var $R=function(start,end,exclusive){return new ObjectRange(start,end,exclusive)};var Ajax={getTransport:function(){return Try.these(function(){return new XMLHttpRequest()},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Microsoft.XMLHTTP")})||false},activeRequestCount:0};Ajax.Responders={responders:[],_each:function(iterator){this.responders._each(iterator)},register:function(responder){if(!this.include(responder)){this.responders.push(responder)}},unregister:function(responder){this.responders=this.responders.without(responder)},dispatch:function(callback,request,transport,json){this.each(function(responder){if(typeof responder[callback]=="function"){try{responder[callback].apply(responder,[request,transport,json])}catch(e){}}})}};Object.extend(Ajax.Responders,Enumerable);Ajax.Responders.register({onCreate:function(){Ajax.activeRequestCount++},onComplete:function(){Ajax.activeRequestCount--}});Ajax.Base=function(){};Ajax.Base.prototype={setOptions:function(options){this.options={method:"post",asynchronous:true,contentType:"application/x-www-form-urlencoded",encoding:"UTF-8",parameters:""};Object.extend(this.options,options||{});this.options.method=this.options.method.toLowerCase();if(typeof this.options.parameters=="string"){this.options.parameters=this.options.parameters.toQueryParams()}}};Ajax.Request=Class.create();Ajax.Request.Events=["Uninitialized","Loading","Loaded","Interactive","Complete"];Ajax.Request.prototype=Object.extend(new Ajax.Base(),{_complete:false,initialize:function(url,options){this.transport=Ajax.getTransport();this.setOptions(options);this.request(url)},request:function(url){this.url=url;this.method=this.options.method;var params=Object.clone(this.options.parameters);if(!["get","post"].include(this.method)){params["_method"]=this.method;this.method="post"}this.parameters=params;if(params=Hash.toQueryString(params)){if(this.method=="get"){this.url+=(this.url.include("?")?"&":"?")+params}else{if(/Konqueror|Safari|KHTML/.test(navigator.userAgent)){params+="&_="}}}try{if(this.options.onCreate){this.options.onCreate(this.transport)}Ajax.Responders.dispatch("onCreate",this,this.transport);this.transport.open(this.method.toUpperCase(),this.url,this.options.asynchronous);if(this.options.asynchronous){setTimeout(function(){this.respondToReadyState(1)}.bind(this),10)}this.transport.onreadystatechange=this.onStateChange.bind(this);this.setRequestHeaders();this.body=this.method=="post"?(this.options.postBody||params):null;this.transport.send(this.body);if(!this.options.asynchronous&&this.transport.overrideMimeType){this.onStateChange()}}catch(e){this.dispatchException(e)}},onStateChange:function(){var readyState=this.transport.readyState;if(readyState>1&&!((readyState==4)&&this._complete)){this.respondToReadyState(this.transport.readyState)}},setRequestHeaders:function(){var headers={"Accept":"text/javascript, text/html, application/xml, text/xml, */*"};if(this.method=="post"){headers["Content-type"]=this.options.contentType+(this.options.encoding?"; charset="+this.options.encoding:"");if(this.transport.overrideMimeType&&(navigator.userAgent.match(/Gecko\/(\d{4})/)||[0,2005])[1]<2005){headers["Connection"]="close"}}if(typeof this.options.requestHeaders=="object"){var extras=this.options.requestHeaders;if(typeof extras.push=="function"){for(var i=0,length=extras.length;i<length;i+=2){headers[extras[i]]=extras[i+1]}}else{$H(extras).each(function(pair){headers[pair.key]=pair.value})}}for(var name in headers){this.transport.setRequestHeader(name,headers[name])}},success:function(){return !this.transport.status||(this.transport.status>=200&&this.transport.status<300)},respondToReadyState:function(readyState){var state=Ajax.Request.Events[readyState];var transport=this.transport,json=this.evalJSON();if(state=="Complete"){try{this._complete=true;(this.options["on"+this.transport.status]||this.options["on"+(this.success()?"Success":"Failure")]||Prototype.emptyFunction)(transport,json)}catch(e){this.dispatchException(e)}var contentType=this.getHeader("Content-type");if(contentType&&contentType.strip().match(/^(text|application)\/(x-)?(java|ecma)script(;.*)?$/i)){this.evalResponse()}}try{(this.options["on"+state]||Prototype.emptyFunction)(transport,json);Ajax.Responders.dispatch("on"+state,this,transport,json)}catch(e){this.dispatchException(e)}if(state=="Complete"){this.transport.onreadystatechange=Prototype.emptyFunction}},getHeader:function(name){try{return this.transport.getResponseHeader(name)}catch(e){return null}},evalJSON:function(){try{var json=this.getHeader("X-JSON");return json?json.evalJSON():null}catch(e){return null}},evalResponse:function(){try{return eval((this.transport.responseText||"").unfilterJSON())}catch(e){this.dispatchException(e)}},dispatchException:function(exception){(this.options.onException||Prototype.emptyFunction)(this,exception);Ajax.Responders.dispatch("onException",this,exception)}});Ajax.Updater=Class.create();Object.extend(Object.extend(Ajax.Updater.prototype,Ajax.Request.prototype),{initialize:function(container,url,options){this.container={success:(container.success||container),failure:(container.failure||(container.success?null:container))};this.transport=Ajax.getTransport();this.setOptions(options);var onComplete=this.options.onComplete||Prototype.emptyFunction;this.options.onComplete=(function(transport,param){this.updateContent();onComplete(transport,param)}).bind(this);this.request(url)},updateContent:function(){var receiver=this.container[this.success()?"success":"failure"];var response=this.transport.responseText;if(!this.options.evalScripts){response=response.stripScripts()}if(receiver=$(receiver)){if(this.options.insertion){new this.options.insertion(receiver,response)}else{receiver.update(response)}}if(this.success()){if(this.onComplete){setTimeout(this.onComplete.bind(this),10)}}}});Ajax.PeriodicalUpdater=Class.create();Ajax.PeriodicalUpdater.prototype=Object.extend(new Ajax.Base(),{initialize:function(container,url,options){this.setOptions(options);this.onComplete=this.options.onComplete;this.frequency=(this.options.frequency||2);this.decay=(this.options.decay||1);this.updater={};this.container=container;this.url=url;this.start()},start:function(){this.options.onComplete=this.updateComplete.bind(this);this.onTimerEvent()},stop:function(){this.updater.options.onComplete=undefined;clearTimeout(this.timer);(this.onComplete||Prototype.emptyFunction).apply(this,arguments)},updateComplete:function(request){if(this.options.decay){this.decay=(request.responseText==this.lastText?this.decay*this.options.decay:1);this.lastText=request.responseText}this.timer=setTimeout(this.onTimerEvent.bind(this),this.decay*this.frequency*1000)},onTimerEvent:function(){this.updater=new Ajax.Updater(this.container,this.url,this.options)}});function $(element){if(arguments.length>1){for(var i=0,elements=[],length=arguments.length;i<length;i++){elements.push($(arguments[i]))}return elements}if(typeof element=="string"){element=document.getElementById(element)}return Element.extend(element)}if(Prototype.BrowserFeatures.XPath){document._getElementsByXPath=function(expression,parentElement){var results=[];var query=document.evaluate(expression,$(parentElement)||document,null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null);for(var i=0,length=query.snapshotLength;i<length;i++){results.push(query.snapshotItem(i))}return results};document.getElementsByClassName=function(className,parentElement){var q=".//*[contains(concat(' ', @class, ' '), ' "+className+" ')]";return document._getElementsByXPath(q,parentElement)}}else{document.getElementsByClassName=function(className,parentElement){var children=($(parentElement)||document.body).getElementsByTagName("*");var elements=[],child;for(var i=0,length=children.length;i<length;i++){child=children[i];if(Element.hasClassName(child,className)){elements.push(Element.extend(child))}}return elements}}if(!window.Element){var Element={}}Element.extend=function(element){var F=Prototype.BrowserFeatures;if(!element||!element.tagName||element.nodeType==3||element._extended||F.SpecificElementExtensions||element==window){return element}var methods={},tagName=element.tagName,cache=Element.extend.cache,T=Element.Methods.ByTag;if(!F.ElementExtensions){Object.extend(methods,Element.Methods),Object.extend(methods,Element.Methods.Simulated)}if(T[tagName]){Object.extend(methods,T[tagName])}for(var property in methods){var value=methods[property];if(typeof value=="function"&&!(property in element)){element[property]=cache.findOrStore(value)}}element._extended=Prototype.emptyFunction;return element};Element.extend.cache={findOrStore:function(value){return this[value]=this[value]||function(){return value.apply(null,[this].concat($A(arguments)))}}};Element.Methods={visible:function(element){return $(element).style.display!="none"},toggle:function(element){element=$(element);Element[Element.visible(element)?"hide":"show"](element);return element},hide:function(element){$(element).style.display="none";return element},show:function(element){$(element).style.display="";return element},remove:function(element){element=$(element);Element.removeAllChilds(element);return element},removeAllChilds:function(element){if(element){if(element.childNodes){var cn=element.childNodes;for(var i=0;i<cn.length;i++){this.removeAllChilds(cn[i])}}if(element.parentNode){element.parentNode.removeChild(element)}if(element.innerHTML){try{element.innerHTML=""}catch(e){}}if(element.outerHTML){try{element.outerHTML=""}catch(e){}}}element=null},update:function(element,html){html=typeof html=="undefined"?"":html.toString();$(element).innerHTML=html.stripScripts();setTimeout(function(){html.evalScripts()},10);return element},replace:function(element,html){element=$(element);html=typeof html=="undefined"?"":html.toString();if(element.outerHTML){element.outerHTML=html.stripScripts()}else{var range=element.ownerDocument.createRange();range.selectNodeContents(element);element.parentNode.replaceChild(range.createContextualFragment(html.stripScripts()),element)}setTimeout(function(){html.evalScripts()},10);return element},inspect:function(element){element=$(element);var result="<"+element.tagName.toLowerCase();$H({"id":"id","className":"class"}).each(function(pair){var property=pair.first(),attribute=pair.last();var value=(element[property]||"").toString();if(value){result+=" "+attribute+"="+value.inspect(true)}});return result+">"},recursivelyCollect:function(element,property){element=$(element);var elements=[];while(element=element[property]){if(element.nodeType==1){elements.push(Element.extend(element))}}return elements},ancestors:function(element){return $(element).recursivelyCollect("parentNode")},descendants:function(element){return $A($(element).getElementsByTagName("*")).each(Element.extend)},firstDescendant:function(element){element=$(element).firstChild;while(element&&element.nodeType!=1){element=element.nextSibling}return $(element)},immediateDescendants:function(element){if(!(element=$(element).firstChild)){return[]}while(element&&element.nodeType!=1){element=element.nextSibling}if(element){return[element].concat($(element).nextSiblings())}return[]},previousSiblings:function(element){return $(element).recursivelyCollect("previousSibling")},nextSiblings:function(element){return $(element).recursivelyCollect("nextSibling")},siblings:function(element){element=$(element);return element.previousSiblings().reverse().concat(element.nextSiblings())},match:function(element,selector){if(typeof selector=="string"){selector=new Selector(selector)}return selector.match($(element))},up:function(element,expression,index){element=$(element);if(arguments.length==1){return $(element.parentNode)}var ancestors=element.ancestors();return expression?Selector.findElement(ancestors,expression,index):ancestors[index||0]},down:function(element,expression,index){element=$(element);if(arguments.length==1){return element.firstDescendant()}var descendants=element.descendants();return expression?Selector.findElement(descendants,expression,index):descendants[index||0]},previous:function(element,expression,index){element=$(element);if(arguments.length==1){return $(Selector.handlers.previousElementSibling(element))}var previousSiblings=element.previousSiblings();return expression?Selector.findElement(previousSiblings,expression,index):previousSiblings[index||0]},next:function(element,expression,index){element=$(element);if(arguments.length==1){return $(Selector.handlers.nextElementSibling(element))}var nextSiblings=element.nextSiblings();return expression?Selector.findElement(nextSiblings,expression,index):nextSiblings[index||0]},getElementsBySelector:function(){var args=$A(arguments),element=$(args.shift());return Selector.findChildElements(element,args)},getElementsByClassName:function(element,className){return document.getElementsByClassName(className,element)},readAttribute:function(element,name){element=$(element);if(Prototype.Browser.IE){if(!element.attributes){return null}var t=Element._attributeTranslations;if(t.values[name]){return t.values[name](element,name)}if(t.names[name]){name=t.names[name]}var attribute=element.attributes[name];return attribute?attribute.nodeValue:null}return element.getAttribute(name)},getHeight:function(element){return $(element).getDimensions().height},getWidth:function(element){return $(element).getDimensions().width},classNames:function(element){return new Element.ClassNames(element)},hasClassName:function(element,className){if(!(element=$(element))){return }var elementClassName=element.className;if(elementClassName.length==0){return false}if(elementClassName==className||elementClassName.match(new RegExp("(^|\\s)"+className+"(\\s|$)"))){return true}return false},addClassName:function(element,className){if(!(element=$(element))){return }Element.classNames(element).add(className);return element},removeClassName:function(element,className){if(!(element=$(element))){return }Element.classNames(element).remove(className);return element},toggleClassName:function(element,className){if(!(element=$(element))){return }Element.classNames(element)[element.hasClassName(className)?"remove":"add"](className);return element},observe:function(){Event.observe.apply(Event,arguments);return $A(arguments).first()},stopObserving:function(){Event.stopObserving.apply(Event,arguments);return $A(arguments).first()},cleanWhitespace:function(element){element=$(element);var node=element.firstChild;while(node){var nextNode=node.nextSibling;if(node.nodeType==3&&!/\S/.test(node.nodeValue)){element.removeChild(node)}node=nextNode}return element},empty:function(element){return $(element).innerHTML.blank()},descendantOf:function(element,ancestor){element=$(element),ancestor=$(ancestor);while(element=element.parentNode){if(element==ancestor){return true}}return false},scrollTo:function(element){element=$(element);var pos=Position.cumulativeOffset(element);window.scrollTo(pos[0],pos[1]);return element},getStyle:function(element,style){element=$(element);style=style=="float"?"cssFloat":style.camelize();var value=element.style[style];if(!value){var css=document.defaultView.getComputedStyle(element,null);value=css?css[style]:null}if(style=="opacity"){return value?parseFloat(value):1}return value=="auto"?null:value},getOpacity:function(element){return $(element).getStyle("opacity")},setStyle:function(element,styles,camelized){element=$(element);var elementStyle=element.style;for(var property in styles){if(property=="opacity"){element.setOpacity(styles[property])}else{elementStyle[(property=="float"||property=="cssFloat")?(elementStyle.styleFloat===undefined?"cssFloat":"styleFloat"):(camelized?property:property.camelize())]=styles[property]}}return element},setOpacity:function(element,value){element=$(element);element.style.opacity=(value==1||value==="")?"":(value<0.00001)?0:value;return element},getDimensions:function(element){element=$(element);var display=$(element).getStyle("display");if(display!="none"&&display!=null){return{width:element.offsetWidth,height:element.offsetHeight}}var els=element.style;var originalVisibility=els.visibility;var originalPosition=els.position;var originalDisplay=els.display;els.visibility="hidden";els.position="absolute";els.display="block";var originalWidth=element.clientWidth;var originalHeight=element.clientHeight;els.display=originalDisplay;els.position=originalPosition;els.visibility=originalVisibility;return{width:originalWidth,height:originalHeight}},makePositioned:function(element){element=$(element);var pos=Element.getStyle(element,"position");if(pos=="static"||!pos){element._madePositioned=true;element.style.position="relative";if(window.opera){element.style.top=0;element.style.left=0}}return element},undoPositioned:function(element){element=$(element);if(element._madePositioned){element._madePositioned=undefined;element.style.position=element.style.top=element.style.left=element.style.bottom=element.style.right=""}return element},makeClipping:function(element){element=$(element);if(element._overflow){return element}element._overflow=element.style.overflow||"auto";if((Element.getStyle(element,"overflow")||"visible")!="hidden"){element.style.overflow="hidden"}return element},undoClipping:function(element){element=$(element);if(!element._overflow){return element}element.style.overflow=element._overflow=="auto"?"":element._overflow;element._overflow=null;return element}};Object.extend(Element.Methods,{childOf:Element.Methods.descendantOf,childElements:Element.Methods.immediateDescendants});if(Prototype.Browser.Opera){Element.Methods._getStyle=Element.Methods.getStyle;Element.Methods.getStyle=function(element,style){switch(style){case"left":case"top":case"right":case"bottom":if(Element._getStyle(element,"position")=="static"){return null}default:return Element._getStyle(element,style)}}}else{if(Prototype.Browser.IE){Element.Methods.getStyle=function(element,style){element=$(element);style=(style=="float"||style=="cssFloat")?"styleFloat":style.camelize();var value=element.style[style];if(!value&&element.currentStyle){value=element.currentStyle[style]}if(style=="opacity"){if(value=(element.getStyle("filter")||"").match(/alpha\(opacity=(.*)\)/)){if(value[1]){return parseFloat(value[1])/100}}return 1}if(value=="auto"){if((style=="width"||style=="height")&&(element.getStyle("display")!="none")){return element["offset"+style.capitalize()]+"px"}return null}return value};Element.Methods.setOpacity=function(element,value){element=$(element);var filter=element.getStyle("filter"),style=element.style;if(value==1||value===""){style.filter=filter.replace(/alpha\([^\)]*\)/gi,"");return element}else{if(value<0.00001){value=0}}style.filter=filter.replace(/alpha\([^\)]*\)/gi,"")+"alpha(opacity="+(value*100)+")";return element};Element.Methods.update=function(element,html){element=$(element);html=typeof html=="undefined"?"":html.toString();var tagName=element.tagName.toUpperCase();if(["THEAD","TBODY","TR","TD"].include(tagName)){var div=document.createElement("div");switch(tagName){case"THEAD":case"TBODY":div.innerHTML="<table><tbody>"+html.stripScripts()+"</tbody></table>";depth=2;break;case"TR":div.innerHTML="<table><tbody><tr>"+html.stripScripts()+"</tr></tbody></table>";depth=3;break;case"TD":div.innerHTML="<table><tbody><tr><td>"+html.stripScripts()+"</td></tr></tbody></table>";depth=4}$A(element.childNodes).each(function(node){element.removeChild(node)});depth.times(function(){div=div.firstChild});$A(div.childNodes).each(function(node){element.appendChild(node)})}else{element.innerHTML=html.stripScripts()}setTimeout(function(){html.evalScripts()},10);return element}}else{if(Prototype.Browser.Gecko){Element.Methods.setOpacity=function(element,value){element=$(element);element.style.opacity=(value==1)?0.999999:(value==="")?"":(value<0.00001)?0:value;return element}}}}Element._attributeTranslations={names:{colspan:"colSpan",rowspan:"rowSpan",valign:"vAlign",datetime:"dateTime",accesskey:"accessKey",tabindex:"tabIndex",enctype:"encType",maxlength:"maxLength",readonly:"readOnly",longdesc:"longDesc"},values:{_getAttr:function(element,attribute){return element.getAttribute(attribute,2)},_flag:function(element,attribute){return $(element).hasAttribute(attribute)?attribute:null},style:function(element){return element.style.cssText.toLowerCase()},title:function(element){var node=element.getAttributeNode("title");return node.specified?node.nodeValue:null}}};(function(){Object.extend(this,{href:this._getAttr,src:this._getAttr,type:this._getAttr,disabled:this._flag,checked:this._flag,readonly:this._flag,multiple:this._flag})}).call(Element._attributeTranslations.values);Element.Methods.Simulated={hasAttribute:function(element,attribute){var t=Element._attributeTranslations,node;attribute=t.names[attribute]||attribute;node=$(element).getAttributeNode(attribute);return node&&node.specified}};Element.Methods.ByTag={};Object.extend(Element,Element.Methods);if(!Prototype.BrowserFeatures.ElementExtensions&&document.createElement("div").__proto__){window.HTMLElement={};window.HTMLElement.prototype=document.createElement("div").__proto__;Prototype.BrowserFeatures.ElementExtensions=true}Element.hasAttribute=function(element,attribute){if(element.hasAttribute){return element.hasAttribute(attribute)}return Element.Methods.Simulated.hasAttribute(element,attribute)};Element.addMethods=function(methods){var F=Prototype.BrowserFeatures,T=Element.Methods.ByTag;if(!methods){Object.extend(Form,Form.Methods);Object.extend(Form.Element,Form.Element.Methods);Object.extend(Element.Methods.ByTag,{"FORM":Object.clone(Form.Methods),"INPUT":Object.clone(Form.Element.Methods),"SELECT":Object.clone(Form.Element.Methods),"TEXTAREA":Object.clone(Form.Element.Methods)})}if(arguments.length==2){var tagName=methods;methods=arguments[1]}if(!tagName){Object.extend(Element.Methods,methods||{})}else{if(tagName.constructor==Array){tagName.each(extend)}else{extend(tagName)}}function extend(tagName){tagName=tagName.toUpperCase();if(!Element.Methods.ByTag[tagName]){Element.Methods.ByTag[tagName]={}}Object.extend(Element.Methods.ByTag[tagName],methods)}function copy(methods,destination,onlyIfAbsent){onlyIfAbsent=onlyIfAbsent||false;var cache=Element.extend.cache;for(var property in methods){var value=methods[property];if(!onlyIfAbsent||!(property in destination)){destination[property]=cache.findOrStore(value)}}}function findDOMClass(tagName){var klass;var trans={"OPTGROUP":"OptGroup","TEXTAREA":"TextArea","P":"Paragraph","FIELDSET":"FieldSet","UL":"UList","OL":"OList","DL":"DList","DIR":"Directory","H1":"Heading","H2":"Heading","H3":"Heading","H4":"Heading","H5":"Heading","H6":"Heading","Q":"Quote","INS":"Mod","DEL":"Mod","A":"Anchor","IMG":"Image","CAPTION":"TableCaption","COL":"TableCol","COLGROUP":"TableCol","THEAD":"TableSection","TFOOT":"TableSection","TBODY":"TableSection","TR":"TableRow","TH":"TableCell","TD":"TableCell","FRAMESET":"FrameSet","IFRAME":"IFrame"};if(trans[tagName]){klass="HTML"+trans[tagName]+"Element"}if(window[klass]){return window[klass]}klass="HTML"+tagName+"Element";if(window[klass]){return window[klass]}klass="HTML"+tagName.capitalize()+"Element";if(window[klass]){return window[klass]}window[klass]={};window[klass].prototype=document.createElement(tagName).__proto__;return window[klass]}if(F.ElementExtensions){copy(Element.Methods,HTMLElement.prototype);copy(Element.Methods.Simulated,HTMLElement.prototype,true)}if(F.SpecificElementExtensions){for(var tag in Element.Methods.ByTag){var klass=findDOMClass(tag);if(typeof klass=="undefined"){continue}copy(T[tag],klass.prototype)}}Object.extend(Element,Element.Methods);delete Element.ByTag};var Toggle={display:Element.toggle};Abstract.Insertion=function(adjacency){this.adjacency=adjacency};Abstract.Insertion.prototype={initialize:function(element,content){this.element=$(element);this.content=content.stripScripts();if(this.adjacency&&this.element.insertAdjacentHTML){try{this.element.insertAdjacentHTML(this.adjacency,this.content)}catch(e){var tagName=this.element.tagName.toUpperCase();if(["TBODY","TR"].include(tagName)){this.insertContent(this.contentFromAnonymousTable())}else{throw e}}}else{this.range=this.element.ownerDocument.createRange();if(this.initializeRange){this.initializeRange()}this.insertContent([this.range.createContextualFragment(this.content)])}setTimeout(function(){content.evalScripts()},10)},contentFromAnonymousTable:function(){var div=document.createElement("div");div.innerHTML="<table><tbody>"+this.content+"</tbody></table>";return $A(div.childNodes[0].childNodes[0].childNodes)}};var Insertion=new Object();Insertion.Before=Class.create();Insertion.Before.prototype=Object.extend(new Abstract.Insertion("beforeBegin"),{initializeRange:function(){this.range.setStartBefore(this.element)},insertContent:function(fragments){fragments.each((function(fragment){this.element.parentNode.insertBefore(fragment,this.element)}).bind(this))}});Insertion.Top=Class.create();Insertion.Top.prototype=Object.extend(new Abstract.Insertion("afterBegin"),{initializeRange:function(){this.range.selectNodeContents(this.element);this.range.collapse(true)},insertContent:function(fragments){fragments.reverse(false).each((function(fragment){this.element.insertBefore(fragment,this.element.firstChild)}).bind(this))}});Insertion.Bottom=Class.create();Insertion.Bottom.prototype=Object.extend(new Abstract.Insertion("beforeEnd"),{initializeRange:function(){this.range.selectNodeContents(this.element);this.range.collapse(this.element)},insertContent:function(fragments){fragments.each((function(fragment){this.element.appendChild(fragment)}).bind(this))}});Insertion.After=Class.create();Insertion.After.prototype=Object.extend(new Abstract.Insertion("afterEnd"),{initializeRange:function(){this.range.setStartAfter(this.element)},insertContent:function(fragments){fragments.each((function(fragment){this.element.parentNode.insertBefore(fragment,this.element.nextSibling)}).bind(this))}});Insertion.After_FixIE=Class.create();Insertion.After_FixIE.prototype=Object.extend(new Abstract.Insertion("afterEnd"),{initializeRange:function(){this.range.setStartAfter(this.element)},insertContent:function(fragments){for(var i=fragments.length-1;i>=0;i--){this.element.parentNode.insertBefore(fragments[i],this.element.nextSibling)}}});Element.ClassNames=Class.create();Element.ClassNames.prototype={initialize:function(element){this.element=$(element)},_each:function(iterator){this.element.className.split(/\s+/).select(function(name){return name.length>0})._each(iterator)},set:function(className){this.element.className=className},add:function(classNameToAdd){if(this.include(classNameToAdd)){return }this.set($A(this).concat(classNameToAdd).join(" "))},remove:function(classNameToRemove){if(!this.include(classNameToRemove)){return }this.set($A(this).without(classNameToRemove).join(" "))},toString:function(){return $A(this).join(" ")}};Object.extend(Element.ClassNames.prototype,Enumerable);var Selector=Class.create();Selector.prototype={initialize:function(expression){this.expression=expression.strip();this.compileMatcher()},compileMatcher:function(){if(Prototype.BrowserFeatures.XPath&&!(/\[[\w-]*?:/).test(this.expression)){return this.compileXPathMatcher()}var e=this.expression,ps=Selector.patterns,h=Selector.handlers,c=Selector.criteria,le,p,m;if(Selector._cache[e]){this.matcher=Selector._cache[e];return }this.matcher=["this.matcher = function(root) {","var r = root, h = Selector.handlers, c = false, n;"];while(e&&le!=e&&(/\S/).test(e)){le=e;for(var i in ps){p=ps[i];if(m=e.match(p)){this.matcher.push(typeof c[i]=="function"?c[i](m):new Template(c[i]).evaluate(m));e=e.replace(m[0],"");break}}}this.matcher.push("return h.unique(n);\n}");eval(this.matcher.join("\n"));Selector._cache[this.expression]=this.matcher},compileXPathMatcher:function(){var e=this.expression,ps=Selector.patterns,x=Selector.xpath,le,m;if(Selector._cache[e]){this.xpath=Selector._cache[e];return }this.matcher=[".//*"];while(e&&le!=e&&(/\S/).test(e)){le=e;for(var i in ps){if(m=e.match(ps[i])){this.matcher.push(typeof x[i]=="function"?x[i](m):new Template(x[i]).evaluate(m));e=e.replace(m[0],"");break}}}this.xpath=this.matcher.join("");Selector._cache[this.expression]=this.xpath},findElements:function(root){root=root||document;if(this.xpath){return document._getElementsByXPath(this.xpath,root)}return this.matcher(root)},match:function(element){return this.findElements(document).include(element)},toString:function(){return this.expression},inspect:function(){return"#<Selector:"+this.expression.inspect()+">"}};Object.extend(Selector,{_cache:{},xpath:{descendant:"//*",child:"/*",adjacent:"/following-sibling::*[1]",laterSibling:"/following-sibling::*",tagName:function(m){if(m[1]=="*"){return""}return"[local-name()='"+m[1].toLowerCase()+"' or local-name()='"+m[1].toUpperCase()+"']"},className:"[contains(concat(' ', @class, ' '), ' #{1} ')]",id:"[@id='#{1}']",attrPresence:"[@#{1}]",attr:function(m){m[3]=m[5]||m[6];return new Template(Selector.xpath.operators[m[2]]).evaluate(m)},pseudo:function(m){var h=Selector.xpath.pseudos[m[1]];if(!h){return""}if(typeof h==="function"){return h(m)}return new Template(Selector.xpath.pseudos[m[1]]).evaluate(m)},operators:{"=":"[@#{1}='#{3}']","!=":"[@#{1}!='#{3}']","^=":"[starts-with(@#{1}, '#{3}')]","$=":"[substring(@#{1}, (string-length(@#{1}) - string-length('#{3}') + 1))='#{3}']","*=":"[contains(@#{1}, '#{3}')]","~=":"[contains(concat(' ', @#{1}, ' '), ' #{3} ')]","|=":"[contains(concat('-', @#{1}, '-'), '-#{3}-')]"},pseudos:{"first-child":"[not(preceding-sibling::*)]","last-child":"[not(following-sibling::*)]","only-child":"[not(preceding-sibling::* or following-sibling::*)]","empty":"[count(*) = 0 and (count(text()) = 0 or translate(text(), ' \t\r\n', '') = '')]","checked":"[@checked]","disabled":"[@disabled]","enabled":"[not(@disabled)]","not":function(m){var e=m[6],p=Selector.patterns,x=Selector.xpath,le,m,v;var exclusion=[];while(e&&le!=e&&(/\S/).test(e)){le=e;for(var i in p){if(m=e.match(p[i])){v=typeof x[i]=="function"?x[i](m):new Template(x[i]).evaluate(m);exclusion.push("("+v.substring(1,v.length-1)+")");e=e.replace(m[0],"");break}}}return"[not("+exclusion.join(" and ")+")]"},"nth-child":function(m){return Selector.xpath.pseudos.nth("(count(./preceding-sibling::*) + 1) ",m)},"nth-last-child":function(m){return Selector.xpath.pseudos.nth("(count(./following-sibling::*) + 1) ",m)},"nth-of-type":function(m){return Selector.xpath.pseudos.nth("position() ",m)},"nth-last-of-type":function(m){return Selector.xpath.pseudos.nth("(last() + 1 - position()) ",m)},"first-of-type":function(m){m[6]="1";return Selector.xpath.pseudos["nth-of-type"](m)},"last-of-type":function(m){m[6]="1";return Selector.xpath.pseudos["nth-last-of-type"](m)},"only-of-type":function(m){var p=Selector.xpath.pseudos;return p["first-of-type"](m)+p["last-of-type"](m)},nth:function(fragment,m){var mm,formula=m[6],predicate;if(formula=="even"){formula="2n+0"}if(formula=="odd"){formula="2n+1"}if(mm=formula.match(/^(\d+)$/)){return"["+fragment+"= "+mm[1]+"]"}if(mm=formula.match(/^(-?\d*)?n(([+-])(\d+))?/)){if(mm[1]=="-"){mm[1]=-1}var a=mm[1]?Number(mm[1]):1;var b=mm[2]?Number(mm[2]):0;predicate="[((#{fragment} - #{b}) mod #{a} = 0) and ((#{fragment} - #{b}) div #{a} >= 0)]";return new Template(predicate).evaluate({fragment:fragment,a:a,b:b})}}}},criteria:{tagName:'n = h.tagName(n, r, "#{1}", c);   c = false;',className:'n = h.className(n, r, "#{1}", c); c = false;',id:'n = h.id(n, r, "#{1}", c);        c = false;',attrPresence:'n = h.attrPresence(n, r, "#{1}"); c = false;',attr:function(m){m[3]=(m[5]||m[6]);return new Template('n = h.attr(n, r, "#{1}", "#{3}", "#{2}"); c = false;').evaluate(m)},pseudo:function(m){if(m[6]){m[6]=m[6].replace(/"/g,'\\"')}return new Template('n = h.pseudo(n, "#{1}", "#{6}", r, c); c = false;').evaluate(m)},descendant:'c = "descendant";',child:'c = "child";',adjacent:'c = "adjacent";',laterSibling:'c = "laterSibling";'},patterns:{laterSibling:/^\s*~\s*/,child:/^\s*>\s*/,adjacent:/^\s*\+\s*/,descendant:/^\s/,tagName:/^\s*(\*|[\w\-]+)(\b|$)?/,id:/^#([\w\-\*]+)(\b|$)/,className:/^\.([\w\-\*]+)(\b|$)/,pseudo:/^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis)abled|not)(\((.*?)\))?(\b|$|\s|(?=:))/,attrPresence:/^\[([\w]+)\]/,attr:/\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=)\s*((['"])([^\]]*?)\4|([^'"][^\]]*?)))?\]/},handlers:{concat:function(a,b){for(var i=0,node;node=b[i];i++){a.push(node)}return a},mark:function(nodes){for(var i=0,node;node=nodes[i];i++){node._counted=true}return nodes},unmark:function(nodes){for(var i=0,node;node=nodes[i];i++){node._counted=undefined}return nodes},index:function(parentNode,reverse,ofType){parentNode._counted=true;if(reverse){for(var nodes=parentNode.childNodes,i=nodes.length-1,j=1;i>=0;i--){node=nodes[i];if(node.nodeType==1&&(!ofType||node._counted)){node.nodeIndex=j++}}}else{for(var i=0,j=1,nodes=parentNode.childNodes;node=nodes[i];i++){if(node.nodeType==1&&(!ofType||node._counted)){node.nodeIndex=j++}}}},unique:function(nodes){if(nodes.length==0){return nodes}var results=[],n;for(var i=0,l=nodes.length;i<l;i++){if(!(n=nodes[i])._counted){n._counted=true;results.push(Element.extend(n))}}return Selector.handlers.unmark(results)},descendant:function(nodes){var h=Selector.handlers;for(var i=0,results=[],node;node=nodes[i];i++){h.concat(results,node.getElementsByTagName("*"))}return results},child:function(nodes){var h=Selector.handlers;for(var i=0,results=[],node;node=nodes[i];i++){for(var j=0,children=[],child;child=node.childNodes[j];j++){if(child.nodeType==1&&child.tagName!="!"){results.push(child)}}}return results},adjacent:function(nodes){for(var i=0,results=[],node;node=nodes[i];i++){var next=this.nextElementSibling(node);if(next){results.push(next)}}return results},laterSibling:function(nodes){var h=Selector.handlers;for(var i=0,results=[],node;node=nodes[i];i++){h.concat(results,Element.nextSiblings(node))}return results},nextElementSibling:function(node){while(node=node.nextSibling){if(node.nodeType==1){return node}}return null},previousElementSibling:function(node){while(node=node.previousSibling){if(node.nodeType==1){return node}}return null},tagName:function(nodes,root,tagName,combinator){tagName=tagName.toUpperCase();var results=[],h=Selector.handlers;if(nodes){if(combinator){if(combinator=="descendant"){for(var i=0,node;node=nodes[i];i++){h.concat(results,node.getElementsByTagName(tagName))}return results}else{nodes=this[combinator](nodes)}if(tagName=="*"){return nodes}}for(var i=0,node;node=nodes[i];i++){if(node.tagName.toUpperCase()==tagName){results.push(node)}}return results}else{return root.getElementsByTagName(tagName)}},id:function(nodes,root,id,combinator){var targetNode=$(id),h=Selector.handlers;if(!nodes&&root==document){return targetNode?[targetNode]:[]}if(nodes){if(combinator){if(combinator=="child"){for(var i=0,node;node=nodes[i];i++){if(targetNode.parentNode==node){return[targetNode]}}}else{if(combinator=="descendant"){for(var i=0,node;node=nodes[i];i++){if(Element.descendantOf(targetNode,node)){return[targetNode]}}}else{if(combinator=="adjacent"){for(var i=0,node;node=nodes[i];i++){if(Selector.handlers.previousElementSibling(targetNode)==node){return[targetNode]}}}else{nodes=h[combinator](nodes)}}}}for(var i=0,node;node=nodes[i];i++){if(node==targetNode){return[targetNode]}}return[]}return(targetNode&&Element.descendantOf(targetNode,root))?[targetNode]:[]},className:function(nodes,root,className,combinator){if(nodes&&combinator){nodes=this[combinator](nodes)}return Selector.handlers.byClassName(nodes,root,className)},byClassName:function(nodes,root,className){if(!nodes){nodes=Selector.handlers.descendant([root])}var needle=" "+className+" ";for(var i=0,results=[],node,nodeClassName;node=nodes[i];i++){nodeClassName=node.className;if(nodeClassName.length==0){continue}if(nodeClassName==className||(" "+nodeClassName+" ").include(needle)){results.push(node)}}return results},attrPresence:function(nodes,root,attr){var results=[];for(var i=0,node;node=nodes[i];i++){if(Element.hasAttribute(node,attr)){results.push(node)}}return results},attr:function(nodes,root,attr,value,operator){if(!nodes){nodes=root.getElementsByTagName("*")}var handler=Selector.operators[operator],results=[];for(var i=0,node;node=nodes[i];i++){var nodeValue=Element.readAttribute(node,attr);if(nodeValue===null){continue}if(handler(nodeValue,value)){results.push(node)}}return results},pseudo:function(nodes,name,value,root,combinator){if(nodes&&combinator){nodes=this[combinator](nodes)}if(!nodes){nodes=root.getElementsByTagName("*")}return Selector.pseudos[name](nodes,value,root)}},pseudos:{"first-child":function(nodes,value,root){for(var i=0,results=[],node;node=nodes[i];i++){if(Selector.handlers.previousElementSibling(node)){continue}results.push(node)}return results},"last-child":function(nodes,value,root){for(var i=0,results=[],node;node=nodes[i];i++){if(Selector.handlers.nextElementSibling(node)){continue}results.push(node)}return results},"only-child":function(nodes,value,root){var h=Selector.handlers;for(var i=0,results=[],node;node=nodes[i];i++){if(!h.previousElementSibling(node)&&!h.nextElementSibling(node)){results.push(node)}}return results},"nth-child":function(nodes,formula,root){return Selector.pseudos.nth(nodes,formula,root)},"nth-last-child":function(nodes,formula,root){return Selector.pseudos.nth(nodes,formula,root,true)},"nth-of-type":function(nodes,formula,root){return Selector.pseudos.nth(nodes,formula,root,false,true)},"nth-last-of-type":function(nodes,formula,root){return Selector.pseudos.nth(nodes,formula,root,true,true)},"first-of-type":function(nodes,formula,root){return Selector.pseudos.nth(nodes,"1",root,false,true)},"last-of-type":function(nodes,formula,root){return Selector.pseudos.nth(nodes,"1",root,true,true)},"only-of-type":function(nodes,formula,root){var p=Selector.pseudos;return p["last-of-type"](p["first-of-type"](nodes,formula,root),formula,root)},getIndices:function(a,b,total){if(a==0){return b>0?[b]:[]}return $R(1,total).inject([],function(memo,i){if(0==(i-b)%a&&(i-b)/a>=0){memo.push(i)}return memo})},nth:function(nodes,formula,root,reverse,ofType){if(nodes.length==0){return[]}if(formula=="even"){formula="2n+0"}if(formula=="odd"){formula="2n+1"}var h=Selector.handlers,results=[],indexed=[],m;h.mark(nodes);for(var i=0,node;node=nodes[i];i++){if(!node.parentNode._counted){h.index(node.parentNode,reverse,ofType);indexed.push(node.parentNode)}}if(formula.match(/^\d+$/)){formula=Number(formula);for(var i=0,node;node=nodes[i];i++){if(node.nodeIndex==formula){results.push(node)}}}else{if(m=formula.match(/^(-?\d*)?n(([+-])(\d+))?/)){if(m[1]=="-"){m[1]=-1}var a=m[1]?Number(m[1]):1;var b=m[2]?Number(m[2]):0;var indices=Selector.pseudos.getIndices(a,b,nodes.length);for(var i=0,node,l=indices.length;node=nodes[i];i++){for(var j=0;j<l;j++){if(node.nodeIndex==indices[j]){results.push(node)}}}}}h.unmark(nodes);h.unmark(indexed);return results},"empty":function(nodes,value,root){for(var i=0,results=[],node;node=nodes[i];i++){if(node.tagName=="!"||(node.firstChild&&!node.innerHTML.match(/^\s*$/))){continue}results.push(node)}return results},"not":function(nodes,selector,root){var h=Selector.handlers,selectorType,m;var exclusions=new Selector(selector).findElements(root);h.mark(exclusions);for(var i=0,results=[],node;node=nodes[i];i++){if(!node._counted){results.push(node)}}h.unmark(exclusions);return results},"enabled":function(nodes,value,root){for(var i=0,results=[],node;node=nodes[i];i++){if(!node.disabled){results.push(node)}}return results},"disabled":function(nodes,value,root){for(var i=0,results=[],node;node=nodes[i];i++){if(node.disabled){results.push(node)}}return results},"checked":function(nodes,value,root){for(var i=0,results=[],node;node=nodes[i];i++){if(node.checked){results.push(node)}}return results}},operators:{"=":function(nv,v){return nv==v},"!=":function(nv,v){return nv!=v},"^=":function(nv,v){return nv.startsWith(v)},"$=":function(nv,v){return nv.endsWith(v)},"*=":function(nv,v){return nv.include(v)},"~=":function(nv,v){return(" "+nv+" ").include(" "+v+" ")},"|=":function(nv,v){return("-"+nv.toUpperCase()+"-").include("-"+v.toUpperCase()+"-")}},matchElements:function(elements,expression){var matches=new Selector(expression).findElements(),h=Selector.handlers;h.mark(matches);for(var i=0,results=[],element;element=elements[i];i++){if(element._counted){results.push(element)}}h.unmark(matches);return results},findElement:function(elements,expression,index){if(typeof expression=="number"){index=expression;expression=false}return Selector.matchElements(elements,expression||"*")[index||0]},findChildElements:function(element,expressions){var exprs=expressions.join(","),expressions=[];exprs.scan(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$)/,function(m){expressions.push(m[1].strip())});var results=[],h=Selector.handlers;for(var i=0,l=expressions.length,selector;i<l;i++){selector=new Selector(expressions[i].strip());h.concat(results,selector.findElements(element))}return(l>1)?h.unique(results):results}});function $$(){return Selector.findChildElements(document,$A(arguments))}var Form={reset:function(form){$(form).reset();return form},serializeElements:function(elements,getHash){var data=elements.inject({},function(result,element){if(!element.disabled&&element.name){var key=element.name,value=$(element).getValue();if(value!=null){if(key in result){if(result[key].constructor!=Array){result[key]=[result[key]]}result[key].push(value)}else{result[key]=value}}}return result});return getHash?data:Hash.toQueryString(data)}};Form.Methods={serialize:function(form,getHash){return Form.serializeElements(Form.getElements(form),getHash)},getElements:function(form){return $A($(form).getElementsByTagName("*")).inject([],function(elements,child){if(Form.Element.Serializers[child.tagName.toLowerCase()]){elements.push(Element.extend(child))}return elements})},getInputs:function(form,typeName,name){form=$(form);var inputs=form.getElementsByTagName("input");if(!typeName&&!name){return $A(inputs).map(Element.extend)}for(var i=0,matchingInputs=[],length=inputs.length;i<length;i++){var input=inputs[i];if((typeName&&input.type!=typeName)||(name&&input.name!=name)){continue}matchingInputs.push(Element.extend(input))}return matchingInputs},disable:function(form){form=$(form);Form.getElements(form).invoke("disable");return form},enable:function(form){form=$(form);Form.getElements(form).invoke("enable");return form},findFirstElement:function(form){return $(form).getElements().find(function(element){return element.type!="hidden"&&!element.disabled&&["input","select","textarea"].include(element.tagName.toLowerCase())})},focusFirstElement:function(form){form=$(form);form.findFirstElement().activate();return form},request:function(form,options){form=$(form),options=Object.clone(options||{});var params=options.parameters;options.parameters=form.serialize(true);if(params){if(typeof params=="string"){params=params.toQueryParams()}Object.extend(options.parameters,params)}if(form.hasAttribute("method")&&!options.method){options.method=form.method}return new Ajax.Request(form.readAttribute("action"),options)}};Form.Element={focus:function(element){$(element).focus();return element},select:function(element){$(element).select();return element}};Form.Element.Methods={serialize:function(element){element=$(element);if(!element.disabled&&element.name){var value=element.getValue();if(value!=undefined){var pair={};pair[element.name]=value;return Hash.toQueryString(pair)}}return""},getValue:function(element){element=$(element);var method=element.tagName.toLowerCase();return Form.Element.Serializers[method](element)},clear:function(element){$(element).value="";return element},present:function(element){return $(element).value!=""},activate:function(element){element=$(element);try{element.focus();if(element.select&&(element.tagName.toLowerCase()!="input"||!["button","reset","submit"].include(element.type))){element.select()}}catch(e){}return element},disable:function(element){element=$(element);element.blur();element.disabled=true;return element},enable:function(element){element=$(element);element.disabled=false;return element}};var Field=Form.Element;var $F=Form.Element.Methods.getValue;Form.Element.Serializers={input:function(element){switch(element.type.toLowerCase()){case"checkbox":case"radio":return Form.Element.Serializers.inputSelector(element);default:return Form.Element.Serializers.textarea(element)}},inputSelector:function(element){return element.checked?element.value:null},textarea:function(element){return element.value},select:function(element){return this[element.type=="select-one"?"selectOne":"selectMany"](element)},selectOne:function(element){var index=element.selectedIndex;return index>=0?this.optionValue(element.options[index]):null},selectMany:function(element){var values,length=element.length;if(!length){return null}for(var i=0,values=[];i<length;i++){var opt=element.options[i];if(opt.selected){values.push(this.optionValue(opt))}}return values},optionValue:function(opt){return Element.extend(opt).hasAttribute("value")?opt.value:opt.text}};Abstract.TimedObserver=function(){};Abstract.TimedObserver.prototype={initialize:function(element,frequency,callback){this.frequency=frequency;this.element=$(element);this.callback=callback;this.lastValue=this.getValue();this.registerCallback()},registerCallback:function(){setInterval(this.onTimerEvent.bind(this),this.frequency*1000)},onTimerEvent:function(){var value=this.getValue();var changed=("string"==typeof this.lastValue&&"string"==typeof value?this.lastValue!=value:String(this.lastValue)!=String(value));if(changed){this.callback(this.element,value);this.lastValue=value}}};Form.Element.Observer=Class.create();Form.Element.Observer.prototype=Object.extend(new Abstract.TimedObserver(),{getValue:function(){return Form.Element.getValue(this.element)}});Form.Observer=Class.create();Form.Observer.prototype=Object.extend(new Abstract.TimedObserver(),{getValue:function(){return Form.serialize(this.element)}});Abstract.EventObserver=function(){};Abstract.EventObserver.prototype={initialize:function(element,callback){this.element=$(element);this.callback=callback;this.lastValue=this.getValue();if(this.element.tagName.toLowerCase()=="form"){this.registerFormCallbacks()}else{this.registerCallback(this.element)}},onElementEvent:function(){var value=this.getValue();if(this.lastValue!=value){this.callback(this.element,value);this.lastValue=value}},registerFormCallbacks:function(){Form.getElements(this.element).each(this.registerCallback.bind(this))},registerCallback:function(element){if(element.type){switch(element.type.toLowerCase()){case"checkbox":case"radio":Event.observe(element,"click",this.onElementEvent.bind(this));break;default:Event.observe(element,"change",this.onElementEvent.bind(this));break}}}};Form.Element.EventObserver=Class.create();Form.Element.EventObserver.prototype=Object.extend(new Abstract.EventObserver(),{getValue:function(){return Form.Element.getValue(this.element)}});Form.EventObserver=Class.create();Form.EventObserver.prototype=Object.extend(new Abstract.EventObserver(),{getValue:function(){return Form.serialize(this.element)}});if(!window.Event){var Event=new Object()}Object.extend(Event,{KEY_BACKSPACE:8,KEY_TAB:9,KEY_RETURN:13,KEY_ESC:27,KEY_LEFT:37,KEY_UP:38,KEY_RIGHT:39,KEY_DOWN:40,KEY_DELETE:46,KEY_HOME:36,KEY_END:35,KEY_PAGEUP:33,KEY_PAGEDOWN:34,element:function(event){return $(event.target||event.srcElement)},isLeftClick:function(event){return(((event.which)&&(event.which==1))||((event.button)&&(event.button==1)))},pointerX:function(event){return event.pageX||(event.clientX+(document.documentElement.scrollLeft||document.body.scrollLeft))},pointerY:function(event){return event.pageY||(event.clientY+(document.documentElement.scrollTop||document.body.scrollTop))},stop:function(event){if(event.preventDefault){event.preventDefault();event.stopPropagation()}else{event.returnValue=false;event.cancelBubble=true}},findElement:function(event,tagName){var element=Event.element(event);while(element.parentNode&&(!element.tagName||(element.tagName.toUpperCase()!=tagName.toUpperCase()))){element=element.parentNode}return element},observers:false,_observeAndCache:function(element,name,observer,useCapture){if(!this.observers){this.observers=[]}if(element.addEventListener){this.observers.push([element,name,observer,useCapture]);element.addEventListener(name,observer,useCapture)}else{if(element.attachEvent){this.observers.push([element,name,observer,useCapture]);element.attachEvent("on"+name,observer)}}},unloadCache:function(){if(!Event.observers){return }for(var i=0,length=Event.observers.length;i<length;i++){Event.stopObserving.apply(this,Event.observers[i]);Event.observers[i][0]=null}Event.observers=false},observe:function(element,name,observer,useCapture){element=$(element);useCapture=useCapture||false;if(name=="keypress"&&(Prototype.Browser.WebKit||element.attachEvent)){name="keydown"}Event._observeAndCache(element,name,observer,useCapture)},stopObserving:function(element,name,observer,useCapture){element=$(element);useCapture=useCapture||false;if(name=="keypress"&&(Prototype.Browser.WebKit||element.attachEvent)){name="keydown"}if(element.removeEventListener){element.removeEventListener(name,observer,useCapture)}else{if(element.detachEvent){try{element.detachEvent("on"+name,observer)}catch(e){}}}}});if(Prototype.Browser.IE){Event.observe(window,"unload",Event.unloadCache,false)}var Position={includeScrollOffsets:false,prepare:function(){this.deltaX=window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft||0;this.deltaY=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0},realOffset:function(element){var valueT=0,valueL=0;do{valueT+=element.scrollTop||0;valueL+=element.scrollLeft||0;element=element.parentNode}while(element);return[valueL,valueT]},cumulativeOffset:function(element){var valueT=0,valueL=0;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;element=element.offsetParent}while(element);return[valueL,valueT]},positionedOffset:function(element){var valueT=0,valueL=0;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;element=element.offsetParent;if(element){if(element.tagName=="BODY"){break}var p=Element.getStyle(element,"position");if(p=="relative"||p=="absolute"){break}}}while(element);return[valueL,valueT]},offsetParent:function(element){if(element.offsetParent){return element.offsetParent}if(element==document.body){return element}while((element=element.parentNode)&&element!=document.body){if(Element.getStyle(element,"position")!="static"){return element}}return document.body},within:function(element,x,y){if(this.includeScrollOffsets){return this.withinIncludingScrolloffsets(element,x,y)}this.xcomp=x;this.ycomp=y;this.offset=this.cumulativeOffset(element);return(y>=this.offset[1]&&y<this.offset[1]+element.offsetHeight&&x>=this.offset[0]&&x<this.offset[0]+element.offsetWidth)},withinIncludingScrolloffsets:function(element,x,y){var offsetcache=this.realOffset(element);this.xcomp=x+offsetcache[0]-this.deltaX;this.ycomp=y+offsetcache[1]-this.deltaY;this.offset=this.cumulativeOffset(element);return(this.ycomp>=this.offset[1]&&this.ycomp<this.offset[1]+element.offsetHeight&&this.xcomp>=this.offset[0]&&this.xcomp<this.offset[0]+element.offsetWidth)},overlap:function(mode,element){if(!mode){return 0}if(mode=="vertical"){return((this.offset[1]+element.offsetHeight)-this.ycomp)/element.offsetHeight}if(mode=="horizontal"){return((this.offset[0]+element.offsetWidth)-this.xcomp)/element.offsetWidth}},page:function(forElement){var valueT=0,valueL=0;var element=forElement;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;if(element.offsetParent==document.body){if(Element.getStyle(element,"position")=="absolute"){break}}}while(element=element.offsetParent);element=forElement;do{if(!window.opera||element.tagName=="BODY"){valueT-=element.scrollTop||0;valueL-=element.scrollLeft||0}}while(element=element.parentNode);return[valueL,valueT]},clone:function(source,target){var options=Object.extend({setLeft:true,setTop:true,setWidth:true,setHeight:true,offsetTop:0,offsetLeft:0},arguments[2]||{});source=$(source);var p=Position.page(source);target=$(target);var delta=[0,0];var parent=null;if(Element.getStyle(target,"position")=="absolute"){parent=Position.offsetParent(target);delta=Position.page(parent)}if(parent==document.body){delta[0]-=document.body.offsetLeft;delta[1]-=document.body.offsetTop}if(options.setLeft){target.style.left=(p[0]-delta[0]+options.offsetLeft)+"px"}if(options.setTop){target.style.top=(p[1]-delta[1]+options.offsetTop)+"px"}if(options.setWidth){target.style.width=source.offsetWidth+"px"}if(options.setHeight){target.style.height=source.offsetHeight+"px"}},absolutize:function(element){element=$(element);if(element.style.position=="absolute"){return }Position.prepare();var offsets=Position.positionedOffset(element);var top=offsets[1];var left=offsets[0];var width=element.clientWidth;var height=element.clientHeight;element._originalLeft=left-parseFloat(element.style.left||0);element._originalTop=top-parseFloat(element.style.top||0);element._originalWidth=element.style.width;element._originalHeight=element.style.height;element.style.position="absolute";element.style.top=top+"px";element.style.left=left+"px";element.style.width=width+"px";element.style.height=height+"px"},relativize:function(element){element=$(element);if(element.style.position=="relative"){return }Position.prepare();element.style.position="relative";var top=parseFloat(element.style.top||0)-(element._originalTop||0);var left=parseFloat(element.style.left||0)-(element._originalLeft||0);element.style.top=top+"px";element.style.left=left+"px";element.style.height=element._originalHeight;element.style.width=element._originalWidth}};if(Prototype.Browser.WebKit){Position.cumulativeOffset=function(element){var valueT=0,valueL=0;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;if(element.offsetParent==document.body){if(Element.getStyle(element,"position")=="absolute"){break}}element=element.offsetParent}while(element);return[valueL,valueT]}}Element.addMethods();var Rico={Version:"1.1.2",prototypeVersion:parseFloat(Prototype.Version.split(".")[0]+"."+Prototype.Version.split(".")[1])};Rico.Color=Class.create();Rico.Color.prototype={initialize:function(red,green,blue){this.rgb={r:red,g:green,b:blue}},setRed:function(r){this.rgb.r=r},setGreen:function(g){this.rgb.g=g},setBlue:function(b){this.rgb.b=b},blend:function(other){this.rgb.r=Math.floor((this.rgb.r+other.rgb.r)/2);this.rgb.g=Math.floor((this.rgb.g+other.rgb.g)/2);this.rgb.b=Math.floor((this.rgb.b+other.rgb.b)/2)},asRGB:function(){return"rgb("+this.rgb.r+","+this.rgb.g+","+this.rgb.b+")"},asHex:function(){return"#"+this.rgb.r.toColorPart()+this.rgb.g.toColorPart()+this.rgb.b.toColorPart()},toString:function(){return this.asHex()}};Rico.Color.createFromHex=function(hexCode){if(hexCode.length==4){var shortHexCode=hexCode;var hexCode="#";for(var i=1;i<4;i++){hexCode+=(shortHexCode.charAt(i)+shortHexCode.charAt(i))}}if(hexCode.indexOf("#")==0){hexCode=hexCode.substring(1)}var red=hexCode.substring(0,2);var green=hexCode.substring(2,4);var blue=hexCode.substring(4,6);return new Rico.Color(parseInt(red,16),parseInt(green,16),parseInt(blue,16))};Rico.Color.createColorFromBackground=function(elem){var actualColor=RicoUtil.getElementsComputedStyle($(elem),"backgroundColor","background-color");if(actualColor=="transparent"&&elem.parentNode){return Rico.Color.createColorFromBackground(elem.parentNode)}if(actualColor==null){return new Rico.Color(255,255,255)}if(actualColor.indexOf("rgb(")==0){var colors=actualColor.substring(4,actualColor.length-1);var colorArray=colors.split(",");return new Rico.Color(parseInt(colorArray[0]),parseInt(colorArray[1]),parseInt(colorArray[2]))}else{if(actualColor.indexOf("#")==0){return Rico.Color.createFromHex(actualColor)}else{return new Rico.Color(255,255,255)}}};Rico.Corner={round:function(e,options){var e=$(e);this._setOptions(options);var color=this.options.color;if(this.options.color=="fromElement"){color=this._background(e)}var bgColor=this.options.bgColor;if(this.options.bgColor=="fromParent"){bgColor=this._background(e.offsetParent)}this._roundCornersImpl(e,color,bgColor)},_roundCornersImpl:function(e,color,bgColor){if(this.options.border){this._renderBorder(e,bgColor)}if(this._isTopRounded()){this._roundTopCorners(e,color,bgColor)}if(this._isBottomRounded()){this._roundBottomCorners(e,color,bgColor)}},_renderBorder:function(el,bgColor){var borderValue="1px solid "+this._borderColor(bgColor);var borderL="border-left: "+borderValue;var borderR="border-right: "+borderValue;var style="style='"+borderL+";"+borderR+"'";el.innerHTML="<div "+style+">"+el.innerHTML+"</div>"},_roundTopCorners:function(el,color,bgColor){var corner=this._createCorner(bgColor);for(var i=0;i<this.options.numSlices;i++){corner.appendChild(this._createCornerSlice(color,bgColor,i,"top"))}el.style.paddingTop=0;el.insertBefore(corner,el.firstChild)},_roundBottomCorners:function(el,color,bgColor){var corner=this._createCorner(bgColor);for(var i=(this.options.numSlices-1);i>=0;i--){corner.appendChild(this._createCornerSlice(color,bgColor,i,"bottom"))}el.style.paddingBottom=0;el.appendChild(corner)},_createCorner:function(bgColor){var corner=document.createElement("div");corner.style.backgroundColor=(this._isTransparent()?"transparent":bgColor);return corner},_createCornerSlice:function(color,bgColor,n,position){var slice=document.createElement("span");var inStyle=slice.style;inStyle.backgroundColor=color;inStyle.display="block";inStyle.height="1px";inStyle.overflow="hidden";inStyle.fontSize="1px";var borderColor=this._borderColor(color,bgColor);if(this.options.border&&n==0){inStyle.borderTopStyle="solid";inStyle.borderTopWidth="1px";inStyle.borderLeftWidth="0px";inStyle.borderRightWidth="0px";inStyle.borderBottomWidth="0px";inStyle.height="0px";inStyle.borderColor=borderColor}else{if(borderColor){inStyle.borderColor=borderColor;inStyle.borderStyle="solid";inStyle.borderWidth="0px 1px"}}if(!this.options.compact&&(n==(this.options.numSlices-1))){inStyle.height="2px"}this._setMargin(slice,n,position);this._setBorder(slice,n,position);return slice},_setOptions:function(options){this.options={corners:"all",color:"fromElement",bgColor:"fromParent",blend:true,border:false,compact:false};Object.extend(this.options,options||{});this.options.numSlices=this.options.compact?2:4;if(this._isTransparent()){this.options.blend=false}},_whichSideTop:function(){if(this._hasString(this.options.corners,"all","top")){return""}if(this.options.corners.indexOf("tl")>=0&&this.options.corners.indexOf("tr")>=0){return""}if(this.options.corners.indexOf("tl")>=0){return"left"}else{if(this.options.corners.indexOf("tr")>=0){return"right"}}return""},_whichSideBottom:function(){if(this._hasString(this.options.corners,"all","bottom")){return""}if(this.options.corners.indexOf("bl")>=0&&this.options.corners.indexOf("br")>=0){return""}if(this.options.corners.indexOf("bl")>=0){return"left"}else{if(this.options.corners.indexOf("br")>=0){return"right"}}return""},_borderColor:function(color,bgColor){if(color=="transparent"){return bgColor}else{if(this.options.border){return this.options.border}else{if(this.options.blend){return this._blend(bgColor,color)}else{return""}}}},_setMargin:function(el,n,corners){var marginSize=this._marginSize(n);var whichSide=corners=="top"?this._whichSideTop():this._whichSideBottom();if(whichSide=="left"){el.style.marginLeft=marginSize+"px";el.style.marginRight="0px"}else{if(whichSide=="right"){el.style.marginRight=marginSize+"px";el.style.marginLeft="0px"}else{el.style.marginLeft=marginSize+"px";el.style.marginRight=marginSize+"px"}}},_setBorder:function(el,n,corners){var borderSize=this._borderSize(n);var whichSide=corners=="top"?this._whichSideTop():this._whichSideBottom();if(whichSide=="left"){el.style.borderLeftWidth=borderSize+"px";el.style.borderRightWidth="0px"}else{if(whichSide=="right"){el.style.borderRightWidth=borderSize+"px";el.style.borderLeftWidth="0px"}else{el.style.borderLeftWidth=borderSize+"px";el.style.borderRightWidth=borderSize+"px"}}if(this.options.border!=false){el.style.borderLeftWidth=borderSize+"px"}el.style.borderRightWidth=borderSize+"px"},_marginSize:function(n){if(this._isTransparent()){return 0}var marginSizes=[5,3,2,1];var blendedMarginSizes=[3,2,1,0];var compactMarginSizes=[2,1];var smBlendedMarginSizes=[1,0];if(this.options.compact&&this.options.blend){return smBlendedMarginSizes[n]}else{if(this.options.compact){return compactMarginSizes[n]}else{if(this.options.blend){return blendedMarginSizes[n]}else{return marginSizes[n]}}}},_borderSize:function(n){var transparentBorderSizes=[5,3,2,1];var blendedBorderSizes=[2,1,1,1];var compactBorderSizes=[1,0];var actualBorderSizes=[0,2,0,0];if(this.options.compact&&(this.options.blend||this._isTransparent())){return 1}else{if(this.options.compact){return compactBorderSizes[n]}else{if(this.options.blend){return blendedBorderSizes[n]}else{if(this.options.border){return actualBorderSizes[n]}else{if(this._isTransparent()){return transparentBorderSizes[n]}}}}}return 0},_hasString:function(str){for(var i=1;i<arguments.length;i++){if(str.indexOf(arguments[i])>=0){return true}}return false},_blend:function(c1,c2){var cc1=Rico.Color.createFromHex(c1);cc1.blend(Rico.Color.createFromHex(c2));return cc1},_background:function(el){try{return Rico.Color.createColorFromBackground(el).asHex()}catch(err){return"#ffffff"}},_isTransparent:function(){return this.options.color=="transparent"},_isTopRounded:function(){return this._hasString(this.options.corners,"all","top","tl","tr")},_isBottomRounded:function(){return this._hasString(this.options.corners,"all","bottom","bl","br")},_hasSingleTextChild:function(el){return el.childNodes.length==1&&el.childNodes[0].nodeType==3}};Rico.Effect={};Rico.Effect.SizeAndPosition=Class.create();Rico.Effect.SizeAndPosition.prototype={initialize:function(element,x,y,w,h,duration,steps,options){this.element=$(element);this.x=x;this.y=y;this.w=w;this.h=h;this.duration=duration;this.steps=steps;this.options=arguments[7]||{};this.sizeAndPosition()},sizeAndPosition:function(){if(this.isFinished()){if(this.options.complete){this.options.complete(this)}return }if(this.timer){clearTimeout(this.timer)}var stepDuration=Math.round(this.duration/this.steps);var currentX=this.element.offsetLeft;var currentY=this.element.offsetTop;var currentW=this.element.offsetWidth;var currentH=this.element.offsetHeight;this.x=(this.x)?this.x:currentX;this.y=(this.y)?this.y:currentY;this.w=(this.w)?this.w:currentW;this.h=(this.h)?this.h:currentH;var difX=this.steps>0?(this.x-currentX)/this.steps:0;var difY=this.steps>0?(this.y-currentY)/this.steps:0;var difW=this.steps>0?(this.w-currentW)/this.steps:0;var difH=this.steps>0?(this.h-currentH)/this.steps:0;this.moveBy(difX,difY);this.resizeBy(difW,difH);this.duration-=stepDuration;this.steps--;this.timer=setTimeout(this.sizeAndPosition.bind(this),stepDuration)},isFinished:function(){return this.steps<=0},moveBy:function(difX,difY){var currentLeft=this.element.offsetLeft;var currentTop=this.element.offsetTop;var intDifX=parseInt(difX);var intDifY=parseInt(difY);var style=this.element.style;if(intDifX!=0){style.left=(currentLeft+intDifX)+"px"}if(intDifY!=0){style.top=(currentTop+intDifY)+"px"}},resizeBy:function(difW,difH){var currentWidth=this.element.offsetWidth;var currentHeight=this.element.offsetHeight;var intDifW=parseInt(difW);var intDifH=parseInt(difH);var style=this.element.style;if(intDifW!=0){style.width=(currentWidth+intDifW)+"px"}if(intDifH!=0){style.height=(currentHeight+intDifH)+"px"}}};Rico.Effect.Size=Class.create();Rico.Effect.Size.prototype={initialize:function(element,w,h,duration,steps,options){new Rico.Effect.SizeAndPosition(element,null,null,w,h,duration,steps,options)}};Rico.Effect.AccordionSize=Class.create();Rico.Effect.AccordionSize.prototype={initialize:function(e1,e2,start,end,duration,steps,options){this.e1=$(e1);this.e2=$(e2);this.start=start;this.end=end;this.duration=duration;this.steps=steps;this.options=arguments[6]||{};this.accordionSize()},accordionSize:function(){if(this.isFinished()){this.e1.style.height=this.start+"px";this.e2.style.height=this.end+"px";if(this.options.complete){this.options.complete(this)}return }if(this.timer){clearTimeout(this.timer)}var stepDuration=Math.round(this.duration/this.steps);var diff=this.steps>0?(parseInt(this.e1.offsetHeight)-this.start)/this.steps:0;this.resizeBy(diff);this.duration-=stepDuration;this.steps--;this.timer=setTimeout(this.accordionSize.bind(this),stepDuration)},isFinished:function(){return this.steps<=0},resizeBy:function(diff){var h1Height=this.e1.offsetHeight;var h2Height=this.e2.offsetHeight;var intDiff=parseInt(diff);if(diff!=0){this.e1.style.height=(h1Height-intDiff)+"px";this.e2.style.height=(h2Height+intDiff)+"px"}}};var RicoUtil={getElementsComputedStyle:function(htmlElement,cssProperty,mozillaEquivalentCSS){if(arguments.length==2){mozillaEquivalentCSS=cssProperty}var el=$(htmlElement);if(el.currentStyle){return el.currentStyle[cssProperty]}else{return document.defaultView.getComputedStyle(el,null).getPropertyValue(mozillaEquivalentCSS)}}}