
var m_names=new Array("January","February","March","April","May","June","July","August","September","October","November","December");function LTrim(str){if(str==null){return null;}
for(var i=0;str.charAt(i)==" ";i++);return str.substring(i,str.length);} 
function RTrim(str){if(str==null){return null;}
for(var i=str.length-1;str.charAt(i)==" ";i--);return str.substring(0,i+1);}
function Trim(str){return LTrim(RTrim(str));}
function LTrimAll(str){if(str==null){return str;}
for(var i=0;str.charAt(i)==" "||str.charAt(i)=="\n"||str.charAt(i)=="\t";i++);return str.substring(i,str.length);}
function RTrimAll(str){if(str==null){return str;}
for(var i=str.length-1;str.charAt(i)==" "||str.charAt(i)=="\n"||str.charAt(i)=="\t";i--);return str.substring(0,i+1);}
function TrimAll(str){return LTrimAll(RTrimAll(str));}
function isNull(val){return(val==null);}
function isBlank(val){if(val==null){return true;}
for(var i=0;i<val.length;i++){if((val.charAt(i)!=' ')&&(val.charAt(i)!="\t")&&(val.charAt(i)!="\n")&&(val.charAt(i)!="\r")){return false;}}
return true;}
function isInteger(val){if(isBlank(val)){return false;}
for(var i=0;i<val.length;i++){if(!isDigit(val.charAt(i))){return false;}}
return true;}
function isNumeric(val){return(parseFloat(val,10)==(val*1));}
function isArray(obj){return(typeof(obj.length)=="undefined")?false:true;}
function isDigit(num){if(num.length>1){return false;}
var string="1234567890";if(string.indexOf(num)!=-1){return true;}
return false;}
function isMoney(str){var s=str;var moneyPattern=/^\$*\d+\.*\d\d$/;return moneyPattern.test(s);}
function isPercentage(str){var s=str;var moneyPattern=/^\d+\.*\d*%$/;return moneyPattern.test(s);}
function isPhone(str){var s=str;var phonePattern=/^\(?\d\d\d\)?[\s\-]?\d\d\d-\d\d\d\d$/;return phonePattern.test(s);}
function isDate(str){var s=str;var datePattern=/^\d\d\d\d-\d\d-\d\d$/;return datePattern.test(s);}
function isEmail(str){var s=str;var emailPattern=/^.*@{1}.*\.(net|com|org|gov|us|biz|mil|name|info|edu|uk)$/;return emailPattern.test(s);}
function isURL(str){var s=str;var urlPattern=/^http:\/\/.*$/;return urlPattern.test(s);}
function isNoBlankSingleAlphaToken(str){var s=str;var urlPattern=/^\w*$/;return urlPattern.test(s);}
function setNullIfBlank(obj){if(isBlank(obj.value)){obj.value="";}}
function setFieldsToUpperCase(){for(var i=0;i<arguments.length;i++){arguments[i].value=arguments[i].value.toUpperCase();}}
function disallowBlank(obj){var msg=(arguments.length>1)?arguments[1]:"";var dofocus=(arguments.length>2)?arguments[2]:false;if(isBlank(getInputValue(obj))){if(!isBlank(msg)){alert(msg);}
if(dofocus){if(isArray(obj)&&(typeof(obj.type)=="undefined")){obj=obj[0];}
if(obj.type=="text"||obj.type=="textarea"||obj.type=="password"){obj.select();}
obj.focus();}
return true;}
return false;}
function disallowModify(obj){var msg=(arguments.length>1)?arguments[1]:"";var dofocus=(arguments.length>2)?arguments[2]:false;if(getInputValue(obj)!=getInputDefaultValue(obj)){if(!isBlank(msg)){alert(msg);}
if(dofocus){if(isArray(obj)&&(typeof(obj.type)=="undefined")){obj=obj[0];}
if(obj.type=="text"||obj.type=="textarea"||obj.type=="password"){obj.select();}
obj.focus();}
setInputValue(obj,getInputDefaultValue(obj));return true;}
return false;}
function commifyArray(obj,delimiter){if(typeof(delimiter)=="undefined"||delimiter==null){delimiter=",";}
var s="";if(obj==null||obj.length<=0){return s;}
for(var i=0;i<obj.length;i++){s=s+((s=="")?"":delimiter)+obj[i].toString();}
return s;}
function getSingleInputValue(obj,use_default,delimiter){switch(obj.type){case'radio':case'checkbox':return(((use_default)?obj.defaultChecked:obj.checked)?obj.value:null);case'text':case'hidden':case'textarea':return(use_default)?obj.defaultValue:obj.value;case'password':return((use_default)?null:obj.value);case'select-one':if(obj.options==null){return null;}
if(use_default){var o=obj.options;for(var i=0;i<o.length;i++){if(o[i].defaultSelected){return o[i].value;}}
return o[0].value;}
if(obj.selectedIndex<0){return null;}
return(obj.options.length>0)?obj.options[obj.selectedIndex].value:null;case'select-multiple':if(obj.options==null){return null;}
var values=new Array();for(var i=0;i<obj.options.length;i++){if((use_default&&obj.options[i].defaultSelected)||(!use_default&&obj.options[i].selected)){values[values.length]=obj.options[i].value;}}
return(values.length==0)?null:commifyArray(values,delimiter);}
return null;}
function getSingleInputText(obj,use_default,delimiter){switch(obj.type){case'radio':case'checkbox':return"";case'text':case'hidden':case'textarea':return(use_default)?obj.defaultValue:obj.value;case'password':return((use_default)?null:obj.value);case'select-one':if(obj.options==null){return null;}
if(use_default){var o=obj.options;for(var i=0;i<o.length;i++){if(o[i].defaultSelected){return o[i].text;}}
return o[0].text;}
if(obj.selectedIndex<0){return null;}
return(obj.options.length>0)?obj.options[obj.selectedIndex].text:null;case'select-multiple':if(obj.options==null){return null;}
var values=new Array();for(var i=0;i<obj.options.length;i++){if((use_default&&obj.options[i].defaultSelected)||(!use_default&&obj.options[i].selected)){values[values.length]=obj.options[i].text;}}
return(values.length==0)?null:commifyArray(values,delimiter);}
return null;}
function setSingleInputValue(obj,value){switch(obj.type){case'radio':case'checkbox':if(obj.value==value){obj.checked=true;return true;}else{obj.checked=false;return false;}
case'text':case'hidden':case'textarea':case'password':obj.value=value;return true;case'select-one':case'select-multiple':var o=obj.options;for(var i=0;i<o.length;i++){if(o[i].value==value){o[i].selected=true;}
else{o[i].selected=false;}}
return true;}
return false;}
function getInputValue(obj,delimiter){var use_default=(arguments.length>2)?arguments[2]:false;if(isArray(obj)&&(typeof(obj.type)=="undefined")){var values=new Array();for(var i=0;i<obj.length;i++){var v=getSingleInputValue(obj[i],use_default,delimiter);if(v!=null){values[values.length]=v;}}
return commifyArray(values,delimiter);}
return getSingleInputValue(obj,use_default,delimiter);}
function getInputText(obj,delimiter){var use_default=(arguments.length>2)?arguments[2]:false;if(isArray(obj)&&(typeof(obj.type)=="undefined")){var values=new Array();for(var i=0;i<obj.length;i++){var v=getSingleInputText(obj[i],use_default,delimiter);if(v!=null){values[values.length]=v;}}
return commifyArray(values,delimiter);}
return getSingleInputText(obj,use_default,delimiter);}
function getInputDefaultValue(obj,delimiter){return getInputValue(obj,delimiter,true);}
function isChanged(obj){return(getInputValue(obj)!=getInputDefaultValue(obj));}
function setInputValue(obj,value){var use_default=(arguments.length>1)?arguments[1]:false;if(isArray(obj)&&(typeof(obj.type)=="undefined")){for(var i=0;i<obj.length;i++){setSingleInputValue(obj[i],value);}}
else{setSingleInputValue(obj,value);}}
function isFormModified(theform,hidden_fields,ignore_fields){if(hidden_fields==null){hidden_fields="";}
if(ignore_fields==null){ignore_fields="";}
var hiddenFields=new Object();var ignoreFields=new Object();var i,field;var hidden_fields_array=hidden_fields.split(',');for(i=0;i<hidden_fields_array.length;i++){hiddenFields[Trim(hidden_fields_array[i])]=true;}
var ignore_fields_array=ignore_fields.split(',');for(i=0;i<ignore_fields_array.length;i++){ignoreFields[Trim(ignore_fields_array[i])]=true;}
for(i=0;i<theform.elements.length;i++){var changed=false;var name=theform.elements[i].name;if(!isBlank(name)){var type=theform[name].type;if(!ignoreFields[name]){if(type=="hidden"&&hiddenFields[name]){changed=isChanged(theform[name]);}
else if(type=="hidden"){changed=false;}
else{changed=isChanged(theform[name]);}}}
if(changed){return true;}}
return false;}
function isEnterKey(e){var characterCode;if(e&&e.which){e=e;characterCode=e.which;}else{e=event;characterCode=e.keyCode;}
if(characterCode==13){return true;}else{return false;}}
function shortDate(){var d=new Date();return(d.getFullYear()+'-'+d.getMonth()+'-'+d.getDay()+' '+d.getHours()+':'+d.getMinutes()+':'+d.getSeconds());}
function randomString(){var chars="0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz";var string_length=12;var randomstring='';for(var i=0;i<string_length;i++){var rnum=Math.floor(Math.random()*chars.length);randomstring+=chars.substring(rnum,rnum+1);}
return randomstring;}
function basename(path){return path.replace(/.*\//,"");}
function setActiveStyleSheet(title){var i,a,main;for(i=0;(a=document.getElementsByTagName("link")[i]);i++){if(a.getAttribute("rel").indexOf("style")!=-1&&a.getAttribute("title")){a.disabled=true;if(a.getAttribute("title")==title)a.disabled=false;}}}


function purge(d){var a=d.attributes,i,l,n;if(a){l=a.length;for(i=0;i<l;i+=1){n=a[i].name;if(typeof d[n]==='function'){d[n]=null;}}}
a=d.childNodes;if(a){l=a.length;for(i=0;i<l;i+=1){purge(d.childNodes[i]);}}}
function findPos(obj){var curleft=curtop=0;if(obj.offsetParent){curleft=obj.offsetLeft
curtop=obj.offsetTop
while(obj=obj.offsetParent){curleft+=obj.offsetLeft
curtop+=obj.offsetTop}}
return[curleft,curtop];}
function secondsToMinutes(secs){if(isInteger(secs)&&secs>0){if(secs<10)return"00:0"+secs;if(secs<60)return"00:"+secs;var mins=Math.floor(secs/60);if(mins<10)mins="0"+mins;var secs=secs%60;if(secs<10)secs="0"+secs;return mins+":"+secs;}
return"00:00";}
function getQueryStringParams(){var objURL=new Object();window.location.search.replace(new RegExp("([^?=&]+)(=([^&]*))?","g"),function($0,$1,$2,$3){objURL[$1]=$3;});return objURL;}
function getWindowOptions(h,w){return"height="+h+",width="+w+",toolbar=0,titlebar=0,location=0,menubar=0,scrollbars=1,resizable=1";}
function openWin(url,w,h){var thisWin=window.open(url,'thisWin',getWindowOptions(w,h));}
function select_innerHTML(obj,innerHTML){obj.innerHTML=""
var selTemp=document.createElement("micoxselect")
var opt;selTemp.id="micoxselect1"
document.body.appendChild(selTemp)
selTemp=document.getElementById("micoxselect1")
selTemp.style.display="none"
if(innerHTML.toLowerCase().indexOf("<option")<0){innerHTML="<option>"+innerHTML+"</option>"}
innerHTML=innerHTML.toLowerCase().replace(/<option/g,"<span").replace(/<\/option/g,"</span")
selTemp.innerHTML=innerHTML
for(var i=0;i<selTemp.childNodes.length;i++){var spantemp=selTemp.childNodes[i];if(spantemp.tagName){opt=document.createElement("OPTION")
if(document.all){obj.add(opt)}else{obj.appendChild(opt)}
for(var j=0;j<spantemp.attributes.length;j++){var attrName=spantemp.attributes[j].nodeName;var attrVal=spantemp.attributes[j].nodeValue;if(attrVal){try{opt.setAttribute(attrName,attrVal);opt.setAttributeNode(spantemp.attributes[j].cloneNode(true));}catch(e){}}}
if(spantemp.style){for(var y in spantemp.style){try{opt.style[y]=spantemp.style[y];}catch(e){}}}
opt.value=spantemp.getAttribute("value")
opt.text=spantemp.innerHTML
opt.selected=spantemp.getAttribute('selected');opt.className=spantemp.className;}}
document.body.removeChild(selTemp)
selTemp=null}
function setInnerHTML(elem,markup){if(elem){purge(elem);elem.innerHTML=markup;}}

function purge(d){var a=d.attributes,i,l,n;if(a){l=a.length;for(i=0;i<l;i+=1){n=a[i].name;if(typeof d[n]==='function'){d[n]=null;}}}
a=d.childNodes;if(a){l=a.length;for(i=0;i<l;i+=1){purge(d.childNodes[i]);}}}
var Prototype={Version:'1.5.0',BrowserFeatures:{XPath:!!document.evaluate},ScriptFragment:'(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)',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;}},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).concat($A(arguments)));}}
Object.extend(Number.prototype,{toColorPart:function(){var digits=this.toString(16);if(this<16)return'0'+digits;return digits;},succ:function(){return this+1;},times:function(iterator){$R(0,this,true).each(iterator);return this;}});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;}}}}
String.interpret=function(value){return value==null?'':String(value);}
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 div=document.createElement('div');var text=document.createTextNode(this);div.appendChild(text);return 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 name=decodeURIComponent(pair[0]);var value=pair[1]?decodeURIComponent(pair[1]):undefined;if(hash[name]!==undefined){if(hash[name].constructor!=Array)
hash[name]=[hash[name]];if(value)hash[name].push(value);}
else hash[name]=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);},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.replace(/\\/g,'\\\\');if(useDoubleQuotes)
return'"'+escapedString.replace(/"/g,'\\"')+'"';else
return"'"+escapedString.replace(/'/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;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=new Object();var $continue=new Object();var Enumerable={each:function(iterator){var index=0;try{this._each(function(value){try{iterator(value,index++);}catch(e){if(e!=$continue)throw e;}});}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;}}
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(){return this.inject([],function(array,value){return array.include(value)?array:array.concat([value]);});},clone:function(){return[].concat(this);},size:function(){return this.length;},inspect:function(){return'['+this.map(Object.inspect).join(', ')+']';}});Array.prototype.toArray=Array.prototype.clone;function $w(string){string=string.strip();return string?string.split(/\s+/):[];}
if(window.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(obj){Object.extend(this,obj||{});};Object.extend(Hash,{toQueryString:function(obj){var parts=[];this.prototype._each.call(obj,function(pair){if(!pair.key)return;if(pair.value&&pair.value.constructor==Array){var values=pair.value.compact();if(values.length<2)pair.value=values.reduce();else{key=encodeURIComponent(pair.key);values.each(function(value){value=value!=undefined?encodeURIComponent(value):'';parts.push(key+'='+encodeURIComponent(value));});return;}}
if(pair.value==undefined)pair[1]='';parts.push(pair.map(encodeURIComponent).join('='));});return parts.join('&');}});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(', ')+'}>';}});function $H(object){if(object&&object.constructor==Hash)return object;return new Hash(object);};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=this.options.parameters;if(!['get','post'].include(this.method)){params['_method']=this.method;this.method='post';}
params=Hash.toQueryString(params);if(params&&/Konqueror|Safari|KHTML/.test(navigator.userAgent))params+='&_='
if(this.method=='get'&&params)
this.url+=(this.url.indexOf('?')>-1?'&':'?')+params;try{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();var body=this.method=='post'?(this.options.postBody||params):null;this.transport.send(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={'X-Requested-With':'XMLHttpRequest','X-Prototype-Version':Prototype.Version,'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);}
if((this.getHeader('Content-type')||'text/javascript').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?eval('('+json+')'):null;}catch(e){return null}},evalResponse:function(){try{return eval(this.transport.responseText);}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){if(Prototype.BrowserFeatures.XPath){var q=".//*[contains(concat(' ', @class, ' '), ' "+className+" ')]";return document._getElementsByXPath(q,parentElement);}else{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=new Object();Element.extend=function(element){if(!element||_nativeExtensions||element.nodeType==3)return element;if(!element._extended&&element.tagName&&element!=window){var methods=Object.clone(Element.Methods),cache=Element.extend.cache;if(element.tagName=='FORM')
Object.extend(methods,Form.Methods);if(['INPUT','TEXTAREA','SELECT'].include(element.tagName))
Object.extend(methods,Form.Element.Methods);Object.extend(methods,Element.Methods.Simulated);for(var property in methods){var value=methods[property];if(typeof value=='function'&&!(property in element))
element[property]=cache.findOrStore(value);}}
element._extended=true;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.parentNode.removeChild(element);return element;},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('*'));},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){return Selector.findElement($(element).ancestors(),expression,index);},down:function(element,expression,index){return Selector.findElement($(element).descendants(),expression,index);},previous:function(element,expression,index){return Selector.findElement($(element).previousSiblings(),expression,index);},next:function(element,expression,index){return Selector.findElement($(element).nextSiblings(),expression,index);},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(document.all&&!window.opera){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];if(attribute)return attribute.nodeValue;}
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.match(/^\s*$/);},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);if(['float','cssFloat'].include(style))
style=(typeof element.style.styleFloat!='undefined'?'styleFloat':'cssFloat');style=style.camelize();var value=element.style[style];if(!value){if(document.defaultView&&document.defaultView.getComputedStyle){var css=document.defaultView.getComputedStyle(element,null);value=css?css[style]:null;}else if(element.currentStyle){value=element.currentStyle[style];}}
if((value=='auto')&&['width','height'].include(style)&&(element.getStyle('display')!='none'))
value=element['offset'+style.capitalize()]+'px';if(window.opera&&['left','top','right','bottom'].include(style))
if(Element.getStyle(element,'position')=='static')value='auto';if(style=='opacity'){if(value)return parseFloat(value);if(value=(element.getStyle('filter')||'').match(/alpha\(opacity=(.*)\)/))
if(value[1])return parseFloat(value[1])/100;return 1.0;}
return value=='auto'?null:value;},setStyle:function(element,style){element=$(element);for(var name in style){var value=style[name];if(name=='opacity'){if(value==1){value=(/Gecko/.test(navigator.userAgent)&&!/Konqueror|Safari|KHTML/.test(navigator.userAgent))?0.999999:1.0;if(/MSIE/.test(navigator.userAgent)&&!window.opera)
element.style.filter=element.getStyle('filter').replace(/alpha\([^\)]*\)/gi,'');}else if(value===''){if(/MSIE/.test(navigator.userAgent)&&!window.opera)
element.style.filter=element.getStyle('filter').replace(/alpha\([^\)]*\)/gi,'');}else{if(value<0.00001)value=0;if(/MSIE/.test(navigator.userAgent)&&!window.opera)
element.style.filter=element.getStyle('filter').replace(/alpha\([^\)]*\)/gi,'')+'alpha(opacity='+value*100+')';}}else if(['float','cssFloat'].include(name))name=(typeof element.style.styleFloat!='undefined')?'styleFloat':'cssFloat';element.style[name.camelize()]=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});Element._attributeTranslations={};Element._attributeTranslations.names={colspan:"colSpan",rowspan:"rowSpan",valign:"vAlign",datetime:"dateTime",accesskey:"accessKey",tabindex:"tabIndex",enctype:"encType",maxlength:"maxLength",readonly:"readOnly",longdesc:"longDesc"};Element._attributeTranslations.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;}};Object.extend(Element._attributeTranslations.values,{href:Element._attributeTranslations.values._getAttr,src:Element._attributeTranslations.values._getAttr,disabled:Element._attributeTranslations.values._flag,checked:Element._attributeTranslations.values._flag,readonly:Element._attributeTranslations.values._flag,multiple:Element._attributeTranslations.values._flag});Element.Methods.Simulated={hasAttribute:function(element,attribute){var t=Element._attributeTranslations;attribute=t.names[attribute]||attribute;return $(element).getAttributeNode(attribute).specified;}};if(document.all&&!window.opera){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;}};Object.extend(Element,Element.Methods);var _nativeExtensions=false;if(/Konqueror|Safari|KHTML/.test(navigator.userAgent))
['','Form','Input','TextArea','Select'].each(function(tag){var className='HTML'+tag+'Element';if(window[className])return;var klass=window[className]={};klass.prototype=document.createElement(tag?tag.toLowerCase():'div').__proto__;});Element.addMethods=function(methods){Object.extend(Element.Methods,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);}}
if(typeof HTMLElement!='undefined'){copy(Element.Methods,HTMLElement.prototype);copy(Element.Methods.Simulated,HTMLElement.prototype,true);copy(Form.Methods,HTMLFormElement.prototype);[HTMLInputElement,HTMLTextAreaElement,HTMLSelectElement].each(function(klass){copy(Form.Element.Methods,klass.prototype);});_nativeExtensions=true;}}
var Toggle=new Object();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));}});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.params={classNames:[]};this.expression=expression.toString().strip();this.parseExpression();this.compileMatcher();},parseExpression:function(){function abort(message){throw'Parse error in selector: '+message;}
if(this.expression=='')abort('empty expression');var params=this.params,expr=this.expression,match,modifier,clause,rest;while(match=expr.match(/^(.*)\[([a-z0-9_:-]+?)(?:([~\|!]?=)(?:"([^"]*)"|([^\]\s]*)))?\]$/i)){params.attributes=params.attributes||[];params.attributes.push({name:match[2],operator:match[3],value:match[4]||match[5]||''});expr=match[1];}
if(expr=='*')return this.params.wildcard=true;while(match=expr.match(/^([^a-z0-9_-])?([a-z0-9_-]+)(.*)/i)){modifier=match[1],clause=match[2],rest=match[3];switch(modifier){case'#':params.id=clause;break;case'.':params.classNames.push(clause);break;case'':case undefined:params.tagName=clause.toUpperCase();break;default:abort(expr.inspect());}
expr=rest;}
if(expr.length>0)abort(expr.inspect());},buildMatchExpression:function(){var params=this.params,conditions=[],clause;if(params.wildcard)
conditions.push('true');if(clause=params.id)
conditions.push('element.readAttribute("id") == '+clause.inspect());if(clause=params.tagName)
conditions.push('element.tagName.toUpperCase() == '+clause.inspect());if((clause=params.classNames).length>0)
for(var i=0,length=clause.length;i<length;i++)
conditions.push('element.hasClassName('+clause[i].inspect()+')');if(clause=params.attributes){clause.each(function(attribute){var value='element.readAttribute('+attribute.name.inspect()+')';var splitValueBy=function(delimiter){return value+' && '+value+'.split('+delimiter.inspect()+')';}
switch(attribute.operator){case'=':conditions.push(value+' == '+attribute.value.inspect());break;case'~=':conditions.push(splitValueBy(' ')+'.include('+attribute.value.inspect()+')');break;case'|=':conditions.push(splitValueBy('-')+'.first().toUpperCase() == '+attribute.value.toUpperCase().inspect());break;case'!=':conditions.push(value+' != '+attribute.value.inspect());break;case'':case undefined:conditions.push('element.hasAttribute('+attribute.name.inspect()+')');break;default:throw'Unknown operator '+attribute.operator+' in selector';}});}
return conditions.join(' && ');},compileMatcher:function(){this.match=new Function('element','if (!element.tagName) return false; element = $(element); return '+this.buildMatchExpression());},findElements:function(scope){var element;if(element=$(this.params.id))
if(this.match(element))
if(!scope||Element.childOf(element,scope))
return[element];scope=(scope||document).getElementsByTagName(this.params.tagName||'*');var results=[];for(var i=0,length=scope.length;i<length;i++)
if(this.match(element=scope[i]))
results.push(Element.extend(element));return results;},toString:function(){return this.expression;}}
Object.extend(Selector,{matchElements:function(elements,expression){var selector=new Selector(expression);return elements.select(selector.match.bind(selector)).map(Element.extend);},findElement:function(elements,expression,index){if(typeof expression=='number')index=expression,expression=false;return Selector.matchElements(elements,expression||'*')[index||0];},findChildElements:function(element,expressions){return expressions.map(function(expression){return expression.match(/[^\s"]+(?:"[^"]*"[^\s"]+)*/g).inject([null],function(results,expr){var selector=new Selector(expr);return results.inject([],function(elements,result){return elements.concat(selector.findElements(result||element));});});}).flatten();}});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!=undefined){if(result[key]){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().each(function(element){element.blur();element.disabled='true';});return form;},enable:function(form){form=$(form);form.getElements().each(function(element){element.disabled='';});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;}}
Object.extend(Form,Form.Methods);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);element.focus();if(element.select&&(element.tagName.toLowerCase()!='input'||!['button','reset','submit'].include(element.type)))
element.select();return element;},disable:function(element){element=$(element);element.disabled=true;return element;},enable:function(element){element=$(element);element.blur();element.disabled=false;return element;}}
Object.extend(Form.Element,Form.Element.Methods);var Field=Form.Element;var $F=Form.Element.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'&&(navigator.appVersion.match(/Konqueror|Safari|KHTML/)||element.attachEvent))
name='keydown';Event._observeAndCache(element,name,observer,useCapture);},stopObserving:function(element,name,observer,useCapture){element=$(element);useCapture=useCapture||false;if(name=='keypress'&&(navigator.appVersion.match(/Konqueror|Safari|KHTML/)||element.detachEvent))
name='keydown';if(element.removeEventListener){element.removeEventListener(name,observer,useCapture);}else if(element.detachEvent){try{element.detachEvent('on'+name,observer);}catch(e){}}}});if(navigator.appVersion.match(/\bMSIE\b/))
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(/Konqueror|Safari|KHTML/.test(navigator.userAgent)){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 Scriptaculous={Version:'1.7.0',require:function(libraryName){document.write('<script type="text/javascript" src="'+libraryName+'"></script>');},load:function(){if((typeof Prototype=='undefined')||(typeof Element=='undefined')||(typeof Element.Methods=='undefined')||parseFloat(Prototype.Version.split(".")[0]+"."+
Prototype.Version.split(".")[1])<1.5)
throw("script.aculo.us requires the Prototype JavaScript framework >= 1.5.0");$A(document.getElementsByTagName("script")).findAll(function(s){return(s.src&&s.src.match(/scriptaculous\.js(\?.*)?$/))}).each(function(s){var path=s.src.replace(/scriptaculous\.js(\?.*)?$/,'');var includes=s.src.match(/\?.*load=([a-z,]*)/);(includes?includes[1]:'builder,effects,dragdrop,controls,slider').split(',').each(function(include){Scriptaculous.require(path+include+'.js')});});}}
String.prototype.parseColor=function(){var color='#';if(this.slice(0,4)=='rgb('){var cols=this.slice(4,this.length-1).split(',');var i=0;do{color+=parseInt(cols[i]).toColorPart()}while(++i<3);}else{if(this.slice(0,1)=='#'){if(this.length==4)for(var i=1;i<4;i++)color+=(this.charAt(i)+this.charAt(i)).toLowerCase();if(this.length==7)color=this.toLowerCase();}}
return(color.length==7?color:(arguments[0]||this));}
Element.collectTextNodes=function(element){return $A($(element).childNodes).collect(function(node){return(node.nodeType==3?node.nodeValue:(node.hasChildNodes()?Element.collectTextNodes(node):''));}).flatten().join('');}
Element.collectTextNodesIgnoreClass=function(element,className){return $A($(element).childNodes).collect(function(node){return(node.nodeType==3?node.nodeValue:((node.hasChildNodes()&&!Element.hasClassName(node,className))?Element.collectTextNodesIgnoreClass(node,className):''));}).flatten().join('');}
Element.setContentZoom=function(element,percent){element=$(element);element.setStyle({fontSize:(percent/100)+'em'});if(navigator.appVersion.indexOf('AppleWebKit')>0)window.scrollBy(0,0);return element;}
Element.getOpacity=function(element){return $(element).getStyle('opacity');}
Element.setOpacity=function(element,value){return $(element).setStyle({opacity:value});}
Element.getInlineOpacity=function(element){return $(element).style.opacity||'';}
Element.forceRerendering=function(element){try{element=$(element);var n=document.createTextNode(' ');element.appendChild(n);element.removeChild(n);}catch(e){}};Array.prototype.call=function(){var args=arguments;this.each(function(f){f.apply(this,args)});}
var Effect={_elementDoesNotExistError:{name:'ElementDoesNotExistError',message:'The specified DOM element does not exist, but is required for this effect to operate'},tagifyText:function(element){if(typeof Builder=='undefined')
throw("Effect.tagifyText requires including script.aculo.us' builder.js library");var tagifyStyle='position:relative';if(/MSIE/.test(navigator.userAgent)&&!window.opera)tagifyStyle+=';zoom:1';element=$(element);$A(element.childNodes).each(function(child){if(child.nodeType==3){child.nodeValue.toArray().each(function(character){element.insertBefore(Builder.node('span',{style:tagifyStyle},character==' '?String.fromCharCode(160):character),child);});Element.remove(child);}});},multiple:function(element,effect){var elements;if(((typeof element=='object')||(typeof element=='function'))&&(element.length))
elements=element;else
elements=$(element).childNodes;var options=Object.extend({speed:0.1,delay:0.0},arguments[2]||{});var masterDelay=options.delay;$A(elements).each(function(element,index){new effect(element,Object.extend(options,{delay:index*options.speed+masterDelay}));});},PAIRS:{'slide':['SlideDown','SlideUp'],'blind':['BlindDown','BlindUp'],'appear':['Appear','Fade']},toggle:function(element,effect){element=$(element);effect=(effect||'appear').toLowerCase();var options=Object.extend({queue:{position:'end',scope:(element.id||'global'),limit:1}},arguments[2]||{});Effect[element.visible()?Effect.PAIRS[effect][1]:Effect.PAIRS[effect][0]](element,options);}};var Effect2=Effect;Effect.Transitions={linear:Prototype.K,sinoidal:function(pos){return(-Math.cos(pos*Math.PI)/2)+0.5;},reverse:function(pos){return 1-pos;},flicker:function(pos){return((-Math.cos(pos*Math.PI)/4)+0.75)+Math.random()/4;},wobble:function(pos){return(-Math.cos(pos*Math.PI*(9*pos))/2)+0.5;},pulse:function(pos,pulses){pulses=pulses||5;return(Math.round((pos%(1/pulses))*pulses)==0?((pos*pulses*2)-Math.floor(pos*pulses*2)):1-((pos*pulses*2)-Math.floor(pos*pulses*2)));},none:function(pos){return 0;},full:function(pos){return 1;}};Effect.ScopedQueue=Class.create();Object.extend(Object.extend(Effect.ScopedQueue.prototype,Enumerable),{initialize:function(){this.effects=[];this.interval=null;},_each:function(iterator){this.effects._each(iterator);},add:function(effect){var timestamp=new Date().getTime();var position=(typeof effect.options.queue=='string')?effect.options.queue:effect.options.queue.position;switch(position){case'front':this.effects.findAll(function(e){return e.state=='idle'}).each(function(e){e.startOn+=effect.finishOn;e.finishOn+=effect.finishOn;});break;case'with-last':timestamp=this.effects.pluck('startOn').max()||timestamp;break;case'end':timestamp=this.effects.pluck('finishOn').max()||timestamp;break;}
effect.startOn+=timestamp;effect.finishOn+=timestamp;if(!effect.options.queue.limit||(this.effects.length<effect.options.queue.limit))
this.effects.push(effect);if(!this.interval)
this.interval=setInterval(this.loop.bind(this),15);},remove:function(effect){this.effects=this.effects.reject(function(e){return e==effect});if(this.effects.length==0){clearInterval(this.interval);this.interval=null;}},loop:function(){var timePos=new Date().getTime();for(var i=0,len=this.effects.length;i<len;i++)
if(this.effects[i])this.effects[i].loop(timePos);}});Effect.Queues={instances:$H(),get:function(queueName){if(typeof queueName!='string')return queueName;if(!this.instances[queueName])
this.instances[queueName]=new Effect.ScopedQueue();return this.instances[queueName];}}
Effect.Queue=Effect.Queues.get('global');Effect.DefaultOptions={transition:Effect.Transitions.sinoidal,duration:1.0,fps:60.0,sync:false,from:0.0,to:1.0,delay:0.0,queue:'parallel'}
Effect.Base=function(){};Effect.Base.prototype={position:null,start:function(options){this.options=Object.extend(Object.extend({},Effect.DefaultOptions),options||{});this.currentFrame=0;this.state='idle';this.startOn=this.options.delay*1000;this.finishOn=this.startOn+(this.options.duration*1000);this.event('beforeStart');if(!this.options.sync)
Effect.Queues.get(typeof this.options.queue=='string'?'global':this.options.queue.scope).add(this);},loop:function(timePos){if(timePos>=this.startOn){if(timePos>=this.finishOn){this.render(1.0);this.cancel();this.event('beforeFinish');if(this.finish)this.finish();this.event('afterFinish');return;}
var pos=(timePos-this.startOn)/(this.finishOn-this.startOn);var frame=Math.round(pos*this.options.fps*this.options.duration);if(frame>this.currentFrame){this.render(pos);this.currentFrame=frame;}}},render:function(pos){if(this.state=='idle'){this.state='running';this.event('beforeSetup');if(this.setup)this.setup();this.event('afterSetup');}
if(this.state=='running'){if(this.options.transition)pos=this.options.transition(pos);pos*=(this.options.to-this.options.from);pos+=this.options.from;this.position=pos;this.event('beforeUpdate');if(this.update)this.update(pos);this.event('afterUpdate');}},cancel:function(){if(!this.options.sync)
Effect.Queues.get(typeof this.options.queue=='string'?'global':this.options.queue.scope).remove(this);this.state='finished';},event:function(eventName){if(this.options[eventName+'Internal'])this.options[eventName+'Internal'](this);if(this.options[eventName])this.options[eventName](this);},inspect:function(){var data=$H();for(property in this)
if(typeof this[property]!='function')data[property]=this[property];return'#<Effect:'+data.inspect()+',options:'+$H(this.options).inspect()+'>';}}
Effect.Parallel=Class.create();Object.extend(Object.extend(Effect.Parallel.prototype,Effect.Base.prototype),{initialize:function(effects){this.effects=effects||[];this.start(arguments[1]);},update:function(position){this.effects.invoke('render',position);},finish:function(position){this.effects.each(function(effect){effect.render(1.0);effect.cancel();effect.event('beforeFinish');if(effect.finish)effect.finish(position);effect.event('afterFinish');});}});Effect.Event=Class.create();Object.extend(Object.extend(Effect.Event.prototype,Effect.Base.prototype),{initialize:function(){var options=Object.extend({duration:0},arguments[0]||{});this.start(options);},update:Prototype.emptyFunction});Effect.Opacity=Class.create();Object.extend(Object.extend(Effect.Opacity.prototype,Effect.Base.prototype),{initialize:function(element){this.element=$(element);if(!this.element)throw(Effect._elementDoesNotExistError);if(/MSIE/.test(navigator.userAgent)&&!window.opera&&(!this.element.currentStyle.hasLayout))
this.element.setStyle({zoom:1});var options=Object.extend({from:this.element.getOpacity()||0.0,to:1.0},arguments[1]||{});this.start(options);},update:function(position){this.element.setOpacity(position);}});Effect.Move=Class.create();Object.extend(Object.extend(Effect.Move.prototype,Effect.Base.prototype),{initialize:function(element){this.element=$(element);if(!this.element)throw(Effect._elementDoesNotExistError);var options=Object.extend({x:0,y:0,mode:'relative'},arguments[1]||{});this.start(options);},setup:function(){this.element.makePositioned();this.originalLeft=parseFloat(this.element.getStyle('left')||'0');this.originalTop=parseFloat(this.element.getStyle('top')||'0');if(this.options.mode=='absolute'){this.options.x=this.options.x-this.originalLeft;this.options.y=this.options.y-this.originalTop;}},update:function(position){this.element.setStyle({left:Math.round(this.options.x*position+this.originalLeft)+'px',top:Math.round(this.options.y*position+this.originalTop)+'px'});}});Effect.MoveBy=function(element,toTop,toLeft){return new Effect.Move(element,Object.extend({x:toLeft,y:toTop},arguments[3]||{}));};Effect.Scale=Class.create();Object.extend(Object.extend(Effect.Scale.prototype,Effect.Base.prototype),{initialize:function(element,percent){this.element=$(element);if(!this.element)throw(Effect._elementDoesNotExistError);var options=Object.extend({scaleX:true,scaleY:true,scaleContent:true,scaleFromCenter:false,scaleMode:'box',scaleFrom:100.0,scaleTo:percent},arguments[2]||{});this.start(options);},setup:function(){this.restoreAfterFinish=this.options.restoreAfterFinish||false;this.elementPositioning=this.element.getStyle('position');this.originalStyle={};['top','left','width','height','fontSize'].each(function(k){this.originalStyle[k]=this.element.style[k];}.bind(this));this.originalTop=this.element.offsetTop;this.originalLeft=this.element.offsetLeft;var fontSize=this.element.getStyle('font-size')||'100%';['em','px','%','pt'].each(function(fontSizeType){if(fontSize.indexOf(fontSizeType)>0){this.fontSize=parseFloat(fontSize);this.fontSizeType=fontSizeType;}}.bind(this));this.factor=(this.options.scaleTo-this.options.scaleFrom)/100;this.dims=null;if(this.options.scaleMode=='box')
this.dims=[this.element.offsetHeight,this.element.offsetWidth];if(/^content/.test(this.options.scaleMode))
this.dims=[this.element.scrollHeight,this.element.scrollWidth];if(!this.dims)
this.dims=[this.options.scaleMode.originalHeight,this.options.scaleMode.originalWidth];},update:function(position){var currentScale=(this.options.scaleFrom/100.0)+(this.factor*position);if(this.options.scaleContent&&this.fontSize)
this.element.setStyle({fontSize:this.fontSize*currentScale+this.fontSizeType});this.setDimensions(this.dims[0]*currentScale,this.dims[1]*currentScale);},finish:function(position){if(this.restoreAfterFinish)this.element.setStyle(this.originalStyle);},setDimensions:function(height,width){var d={};if(this.options.scaleX)d.width=Math.round(width)+'px';if(this.options.scaleY)d.height=Math.round(height)+'px';if(this.options.scaleFromCenter){var topd=(height-this.dims[0])/2;var leftd=(width-this.dims[1])/2;if(this.elementPositioning=='absolute'){if(this.options.scaleY)d.top=this.originalTop-topd+'px';if(this.options.scaleX)d.left=this.originalLeft-leftd+'px';}else{if(this.options.scaleY)d.top=-topd+'px';if(this.options.scaleX)d.left=-leftd+'px';}}
this.element.setStyle(d);}});Effect.Highlight=Class.create();Object.extend(Object.extend(Effect.Highlight.prototype,Effect.Base.prototype),{initialize:function(element){this.element=$(element);if(!this.element)throw(Effect._elementDoesNotExistError);var options=Object.extend({startcolor:'#ffff99'},arguments[1]||{});this.start(options);},setup:function(){if(this.element.getStyle('display')=='none'){this.cancel();return;}
this.oldStyle={};if(!this.options.keepBackgroundImage){this.oldStyle.backgroundImage=this.element.getStyle('background-image');this.element.setStyle({backgroundImage:'none'});}
if(!this.options.endcolor)
this.options.endcolor=this.element.getStyle('background-color').parseColor('#ffffff');if(!this.options.restorecolor)
this.options.restorecolor=this.element.getStyle('background-color');this._base=$R(0,2).map(function(i){return parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16)}.bind(this));this._delta=$R(0,2).map(function(i){return parseInt(this.options.endcolor.slice(i*2+1,i*2+3),16)-this._base[i]}.bind(this));},update:function(position){this.element.setStyle({backgroundColor:$R(0,2).inject('#',function(m,v,i){return m+(Math.round(this._base[i]+(this._delta[i]*position)).toColorPart());}.bind(this))});},finish:function(){this.element.setStyle(Object.extend(this.oldStyle,{backgroundColor:this.options.restorecolor}));}});Effect.ScrollTo=Class.create();Object.extend(Object.extend(Effect.ScrollTo.prototype,Effect.Base.prototype),{initialize:function(element){this.element=$(element);this.start(arguments[1]||{});},setup:function(){Position.prepare();var offsets=Position.cumulativeOffset(this.element);if(this.options.offset)offsets[1]+=this.options.offset;var max=window.innerHeight?window.height-window.innerHeight:document.body.scrollHeight-
(document.documentElement.clientHeight?document.documentElement.clientHeight:document.body.clientHeight);this.scrollStart=Position.deltaY;this.delta=(offsets[1]>max?max:offsets[1])-this.scrollStart;},update:function(position){Position.prepare();window.scrollTo(Position.deltaX,this.scrollStart+(position*this.delta));}});Effect.Fade=function(element){element=$(element);var oldOpacity=element.getInlineOpacity();var options=Object.extend({from:element.getOpacity()||1.0,to:0.0,afterFinishInternal:function(effect){if(effect.options.to!=0)return;effect.element.hide().setStyle({opacity:oldOpacity});}},arguments[1]||{});return new Effect.Opacity(element,options);}
Effect.Appear=function(element){element=$(element);var options=Object.extend({from:(element.getStyle('display')=='none'?0.0:element.getOpacity()||0.0),to:1.0,afterFinishInternal:function(effect){effect.element.forceRerendering();},beforeSetup:function(effect){effect.element.setOpacity(effect.options.from).show();}},arguments[1]||{});return new Effect.Opacity(element,options);}
Effect.Puff=function(element){element=$(element);var oldStyle={opacity:element.getInlineOpacity(),position:element.getStyle('position'),top:element.style.top,left:element.style.left,width:element.style.width,height:element.style.height};return new Effect.Parallel([new Effect.Scale(element,200,{sync:true,scaleFromCenter:true,scaleContent:true,restoreAfterFinish:true}),new Effect.Opacity(element,{sync:true,to:0.0})],Object.extend({duration:1.0,beforeSetupInternal:function(effect){Position.absolutize(effect.effects[0].element)},afterFinishInternal:function(effect){effect.effects[0].element.hide().setStyle(oldStyle);}},arguments[1]||{}));}
Effect.BlindUp=function(element){element=$(element);element.makeClipping();return new Effect.Scale(element,0,Object.extend({scaleContent:false,scaleX:false,restoreAfterFinish:true,afterFinishInternal:function(effect){effect.element.hide().undoClipping();}},arguments[1]||{}));}
Effect.BlindDown=function(element){element=$(element);var elementDimensions=element.getDimensions();return new Effect.Scale(element,100,Object.extend({scaleContent:false,scaleX:false,scaleFrom:0,scaleMode:{originalHeight:elementDimensions.height,originalWidth:elementDimensions.width},restoreAfterFinish:true,afterSetup:function(effect){effect.element.makeClipping().setStyle({height:'0px'}).show();},afterFinishInternal:function(effect){effect.element.undoClipping();}},arguments[1]||{}));}
Effect.SwitchOff=function(element){element=$(element);var oldOpacity=element.getInlineOpacity();return new Effect.Appear(element,Object.extend({duration:0.4,from:0,transition:Effect.Transitions.flicker,afterFinishInternal:function(effect){new Effect.Scale(effect.element,1,{duration:0.3,scaleFromCenter:true,scaleX:false,scaleContent:false,restoreAfterFinish:true,beforeSetup:function(effect){effect.element.makePositioned().makeClipping();},afterFinishInternal:function(effect){effect.element.hide().undoClipping().undoPositioned().setStyle({opacity:oldOpacity});}})}},arguments[1]||{}));}
Effect.DropOut=function(element){element=$(element);var oldStyle={top:element.getStyle('top'),left:element.getStyle('left'),opacity:element.getInlineOpacity()};return new Effect.Parallel([new Effect.Move(element,{x:0,y:100,sync:true}),new Effect.Opacity(element,{sync:true,to:0.0})],Object.extend({duration:0.5,beforeSetup:function(effect){effect.effects[0].element.makePositioned();},afterFinishInternal:function(effect){effect.effects[0].element.hide().undoPositioned().setStyle(oldStyle);}},arguments[1]||{}));}
Effect.Shake=function(element){element=$(element);var oldStyle={top:element.getStyle('top'),left:element.getStyle('left')};return new Effect.Move(element,{x:20,y:0,duration:0.05,afterFinishInternal:function(effect){new Effect.Move(effect.element,{x:-40,y:0,duration:0.1,afterFinishInternal:function(effect){new Effect.Move(effect.element,{x:40,y:0,duration:0.1,afterFinishInternal:function(effect){new Effect.Move(effect.element,{x:-40,y:0,duration:0.1,afterFinishInternal:function(effect){new Effect.Move(effect.element,{x:40,y:0,duration:0.1,afterFinishInternal:function(effect){new Effect.Move(effect.element,{x:-20,y:0,duration:0.05,afterFinishInternal:function(effect){effect.element.undoPositioned().setStyle(oldStyle);}})}})}})}})}})}});}
Effect.SlideDown=function(element){element=$(element).cleanWhitespace();var oldInnerBottom=element.down().getStyle('bottom');var elementDimensions=element.getDimensions();return new Effect.Scale(element,100,Object.extend({scaleContent:false,scaleX:false,scaleFrom:window.opera?0:1,scaleMode:{originalHeight:elementDimensions.height,originalWidth:elementDimensions.width},restoreAfterFinish:true,afterSetup:function(effect){effect.element.makePositioned();effect.element.down().makePositioned();if(window.opera)effect.element.setStyle({top:''});effect.element.makeClipping().setStyle({height:'0px'}).show();},afterUpdateInternal:function(effect){effect.element.down().setStyle({bottom:(effect.dims[0]-effect.element.clientHeight)+'px'});},afterFinishInternal:function(effect){effect.element.undoClipping().undoPositioned();effect.element.down().undoPositioned().setStyle({bottom:oldInnerBottom});}},arguments[1]||{}));}
Effect.SlideUp=function(element){element=$(element).cleanWhitespace();var oldInnerBottom=element.down().getStyle('bottom');return new Effect.Scale(element,window.opera?0:1,Object.extend({scaleContent:false,scaleX:false,scaleMode:'box',scaleFrom:100,restoreAfterFinish:true,beforeStartInternal:function(effect){effect.element.makePositioned();effect.element.down().makePositioned();if(window.opera)effect.element.setStyle({top:''});effect.element.makeClipping().show();},afterUpdateInternal:function(effect){effect.element.down().setStyle({bottom:(effect.dims[0]-effect.element.clientHeight)+'px'});},afterFinishInternal:function(effect){effect.element.hide().undoClipping().undoPositioned().setStyle({bottom:oldInnerBottom});effect.element.down().undoPositioned();}},arguments[1]||{}));}
Effect.Squish=function(element){return new Effect.Scale(element,window.opera?1:0,{restoreAfterFinish:true,beforeSetup:function(effect){effect.element.makeClipping();},afterFinishInternal:function(effect){effect.element.hide().undoClipping();}});}
Effect.Grow=function(element){element=$(element);var options=Object.extend({direction:'center',moveTransition:Effect.Transitions.sinoidal,scaleTransition:Effect.Transitions.sinoidal,opacityTransition:Effect.Transitions.full},arguments[1]||{});var oldStyle={top:element.style.top,left:element.style.left,height:element.style.height,width:element.style.width,opacity:element.getInlineOpacity()};var dims=element.getDimensions();var initialMoveX,initialMoveY;var moveX,moveY;switch(options.direction){case'top-left':initialMoveX=initialMoveY=moveX=moveY=0;break;case'top-right':initialMoveX=dims.width;initialMoveY=moveY=0;moveX=-dims.width;break;case'bottom-left':initialMoveX=moveX=0;initialMoveY=dims.height;moveY=-dims.height;break;case'bottom-right':initialMoveX=dims.width;initialMoveY=dims.height;moveX=-dims.width;moveY=-dims.height;break;case'center':initialMoveX=dims.width/2;initialMoveY=dims.height/2;moveX=-dims.width/2;moveY=-dims.height/2;break;}
return new Effect.Move(element,{x:initialMoveX,y:initialMoveY,duration:0.01,beforeSetup:function(effect){effect.element.hide().makeClipping().makePositioned();},afterFinishInternal:function(effect){new Effect.Parallel([new Effect.Opacity(effect.element,{sync:true,to:1.0,from:0.0,transition:options.opacityTransition}),new Effect.Move(effect.element,{x:moveX,y:moveY,sync:true,transition:options.moveTransition}),new Effect.Scale(effect.element,100,{scaleMode:{originalHeight:dims.height,originalWidth:dims.width},sync:true,scaleFrom:window.opera?1:0,transition:options.scaleTransition,restoreAfterFinish:true})],Object.extend({beforeSetup:function(effect){effect.effects[0].element.setStyle({height:'0px'}).show();},afterFinishInternal:function(effect){effect.effects[0].element.undoClipping().undoPositioned().setStyle(oldStyle);}},options))}});}
Effect.Shrink=function(element){element=$(element);var options=Object.extend({direction:'center',moveTransition:Effect.Transitions.sinoidal,scaleTransition:Effect.Transitions.sinoidal,opacityTransition:Effect.Transitions.none},arguments[1]||{});var oldStyle={top:element.style.top,left:element.style.left,height:element.style.height,width:element.style.width,opacity:element.getInlineOpacity()};var dims=element.getDimensions();var moveX,moveY;switch(options.direction){case'top-left':moveX=moveY=0;break;case'top-right':moveX=dims.width;moveY=0;break;case'bottom-left':moveX=0;moveY=dims.height;break;case'bottom-right':moveX=dims.width;moveY=dims.height;break;case'center':moveX=dims.width/2;moveY=dims.height/2;break;}
return new Effect.Parallel([new Effect.Opacity(element,{sync:true,to:0.0,from:1.0,transition:options.opacityTransition}),new Effect.Scale(element,window.opera?1:0,{sync:true,transition:options.scaleTransition,restoreAfterFinish:true}),new Effect.Move(element,{x:moveX,y:moveY,sync:true,transition:options.moveTransition})],Object.extend({beforeStartInternal:function(effect){effect.effects[0].element.makePositioned().makeClipping();},afterFinishInternal:function(effect){effect.effects[0].element.hide().undoClipping().undoPositioned().setStyle(oldStyle);}},options));}
Effect.Pulsate=function(element){element=$(element);var options=arguments[1]||{};var oldOpacity=element.getInlineOpacity();var transition=options.transition||Effect.Transitions.sinoidal;var reverser=function(pos){return transition(1-Effect.Transitions.pulse(pos,options.pulses))};reverser.bind(transition);return new Effect.Opacity(element,Object.extend(Object.extend({duration:2.0,from:0,afterFinishInternal:function(effect){effect.element.setStyle({opacity:oldOpacity});}},options),{transition:reverser}));}
Effect.Fold=function(element){element=$(element);var oldStyle={top:element.style.top,left:element.style.left,width:element.style.width,height:element.style.height};element.makeClipping();return new Effect.Scale(element,5,Object.extend({scaleContent:false,scaleX:false,afterFinishInternal:function(effect){new Effect.Scale(element,1,{scaleContent:false,scaleY:false,afterFinishInternal:function(effect){effect.element.hide().undoClipping().setStyle(oldStyle);}});}},arguments[1]||{}));};Effect.Morph=Class.create();Object.extend(Object.extend(Effect.Morph.prototype,Effect.Base.prototype),{initialize:function(element){this.element=$(element);if(!this.element)throw(Effect._elementDoesNotExistError);var options=Object.extend({style:{}},arguments[1]||{});if(typeof options.style=='string'){if(options.style.indexOf(':')==-1){var cssText='',selector='.'+options.style;$A(document.styleSheets).reverse().each(function(styleSheet){if(styleSheet.cssRules)cssRules=styleSheet.cssRules;else if(styleSheet.rules)cssRules=styleSheet.rules;$A(cssRules).reverse().each(function(rule){if(selector==rule.selectorText){cssText=rule.style.cssText;throw $break;}});if(cssText)throw $break;});this.style=cssText.parseStyle();options.afterFinishInternal=function(effect){effect.element.addClassName(effect.options.style);effect.transforms.each(function(transform){if(transform.style!='opacity')
effect.element.style[transform.style.camelize()]='';});}}else this.style=options.style.parseStyle();}else this.style=$H(options.style)
this.start(options);},setup:function(){function parseColor(color){if(!color||['rgba(0, 0, 0, 0)','transparent'].include(color))color='#ffffff';color=color.parseColor();return $R(0,2).map(function(i){return parseInt(color.slice(i*2+1,i*2+3),16)});}
this.transforms=this.style.map(function(pair){var property=pair[0].underscore().dasherize(),value=pair[1],unit=null;if(value.parseColor('#zzzzzz')!='#zzzzzz'){value=value.parseColor();unit='color';}else if(property=='opacity'){value=parseFloat(value);if(/MSIE/.test(navigator.userAgent)&&!window.opera&&(!this.element.currentStyle.hasLayout))
this.element.setStyle({zoom:1});}else if(Element.CSS_LENGTH.test(value))
var components=value.match(/^([\+\-]?[0-9\.]+)(.*)$/),value=parseFloat(components[1]),unit=(components.length==3)?components[2]:null;var originalValue=this.element.getStyle(property);return $H({style:property,originalValue:unit=='color'?parseColor(originalValue):parseFloat(originalValue||0),targetValue:unit=='color'?parseColor(value):value,unit:unit});}.bind(this)).reject(function(transform){return((transform.originalValue==transform.targetValue)||(transform.unit!='color'&&(isNaN(transform.originalValue)||isNaN(transform.targetValue))))});},update:function(position){var style=$H(),value=null;this.transforms.each(function(transform){value=transform.unit=='color'?$R(0,2).inject('#',function(m,v,i){return m+(Math.round(transform.originalValue[i]+
(transform.targetValue[i]-transform.originalValue[i])*position)).toColorPart()}):transform.originalValue+Math.round(((transform.targetValue-transform.originalValue)*position)*1000)/1000+transform.unit;style[transform.style]=value;});this.element.setStyle(style);}});Effect.Transform=Class.create();Object.extend(Effect.Transform.prototype,{initialize:function(tracks){this.tracks=[];this.options=arguments[1]||{};this.addTracks(tracks);},addTracks:function(tracks){tracks.each(function(track){var data=$H(track).values().first();this.tracks.push($H({ids:$H(track).keys().first(),effect:Effect.Morph,options:{style:data}}));}.bind(this));return this;},play:function(){return new Effect.Parallel(this.tracks.map(function(track){var elements=[$(track.ids)||$$(track.ids)].flatten();return elements.map(function(e){return new track.effect(e,Object.extend({sync:true},track.options))});}).flatten(),this.options);}});Element.CSS_PROPERTIES=$w('backgroundColor backgroundPosition borderBottomColor borderBottomStyle '+'borderBottomWidth borderLeftColor borderLeftStyle borderLeftWidth '+'borderRightColor borderRightStyle borderRightWidth borderSpacing '+'borderTopColor borderTopStyle borderTopWidth bottom clip color '+'fontSize fontWeight height left letterSpacing lineHeight '+'marginBottom marginLeft marginRight marginTop markerOffset maxHeight '+'maxWidth minHeight minWidth opacity outlineColor outlineOffset '+'outlineWidth paddingBottom paddingLeft paddingRight paddingTop '+'right textIndent top width wordSpacing zIndex');Element.CSS_LENGTH=/^(([\+\-]?[0-9\.]+)(em|ex|px|in|cm|mm|pt|pc|\%))|0$/;String.prototype.parseStyle=function(){var element=Element.extend(document.createElement('div'));element.innerHTML='<div style="'+this+'"></div>';var style=element.down().style,styleRules=$H();Element.CSS_PROPERTIES.each(function(property){if(style[property])styleRules[property]=style[property];});if(/MSIE/.test(navigator.userAgent)&&!window.opera&&this.indexOf('opacity')>-1){styleRules.opacity=this.match(/opacity:\s*((?:0|1)?(?:\.\d*)?)/)[1];}
return styleRules;};Element.morph=function(element,style){new Effect.Morph(element,Object.extend({style:style},arguments[2]||{}));return element;};['setOpacity','getOpacity','getInlineOpacity','forceRerendering','setContentZoom','collectTextNodes','collectTextNodesIgnoreClass','morph'].each(function(f){Element.Methods[f]=Element[f];});Element.Methods.visualEffect=function(element,effect,options){s=effect.gsub(/_/,'-').camelize();effect_class=s.charAt(0).toUpperCase()+s.substring(1);new Effect[effect_class](element,options);return $(element);};Element.addMethods();if(typeof Effect=='undefined')
throw("controls.js requires including script.aculo.us' effects.js library");var Autocompleter={}
Autocompleter.Base=function(){};Autocompleter.Base.prototype={baseInitialize:function(element,update,options){this.element=$(element);this.update=$(update);this.hasFocus=false;this.changed=false;this.active=false;this.index=0;this.entryCount=0;if(this.setOptions)
this.setOptions(options);else
this.options=options||{};this.options.paramName=this.options.paramName||this.element.name;this.options.tokens=this.options.tokens||[];this.options.frequency=this.options.frequency||0.4;this.options.minChars=this.options.minChars||1;this.options.onShow=this.options.onShow||function(element,update){if(!update.style.position||update.style.position=='absolute'){update.style.position='absolute';Position.clone(element,update,{setHeight:false,offsetTop:element.offsetHeight});}
Effect.Appear(update,{duration:0.15});};this.options.onHide=this.options.onHide||function(element,update){new Effect.Fade(update,{duration:0.15})};if(typeof(this.options.tokens)=='string')
this.options.tokens=new Array(this.options.tokens);this.observer=null;this.element.setAttribute('autocomplete','off');Element.hide(this.update);Event.observe(this.element,"blur",this.onBlur.bindAsEventListener(this));Event.observe(this.element,"keypress",this.onKeyPress.bindAsEventListener(this));},show:function(){if(Element.getStyle(this.update,'display')=='none')this.options.onShow(this.element,this.update);if(!this.iefix&&(navigator.appVersion.indexOf('MSIE')>0)&&(navigator.userAgent.indexOf('Opera')<0)&&(Element.getStyle(this.update,'position')=='absolute')){new Insertion.After(this.update,'<iframe id="'+this.update.id+'_iefix" '+'style="display:none;position:absolute;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);" '+'src="javascript:false;" frameborder="0" scrolling="no"></iframe>');this.iefix=$(this.update.id+'_iefix');}
if(this.iefix)setTimeout(this.fixIEOverlapping.bind(this),50);},fixIEOverlapping:function(){Position.clone(this.update,this.iefix,{setTop:(!this.update.style.height)});this.iefix.style.zIndex=1;this.update.style.zIndex=2;Element.show(this.iefix);},hide:function(){this.stopIndicator();if(Element.getStyle(this.update,'display')!='none')this.options.onHide(this.element,this.update);if(this.iefix)Element.hide(this.iefix);},startIndicator:function(){if(this.options.indicator)Element.show(this.options.indicator);},stopIndicator:function(){if(this.options.indicator)Element.hide(this.options.indicator);},onKeyPress:function(event){if(this.active)
switch(event.keyCode){case Event.KEY_RETURN:this.selectEntry();Event.stop(event);case Event.KEY_ESC:this.hide();this.active=false;Event.stop(event);return;case Event.KEY_LEFT:case Event.KEY_RIGHT:return;case Event.KEY_UP:this.markPrevious();this.render();if(navigator.appVersion.indexOf('AppleWebKit')>0)Event.stop(event);return;case Event.KEY_DOWN:this.markNext();this.render();if(navigator.appVersion.indexOf('AppleWebKit')>0)Event.stop(event);return;}
else
if(event.keyCode==Event.KEY_TAB||event.keyCode==Event.KEY_RETURN||(navigator.appVersion.indexOf('AppleWebKit')>0&&event.keyCode==0))return;this.changed=true;this.hasFocus=true;if(this.observer)clearTimeout(this.observer);this.observer=setTimeout(this.onObserverEvent.bind(this),this.options.frequency*1000);},activate:function(){this.changed=false;this.hasFocus=true;this.getUpdatedChoices();},onHover:function(event){var element=Event.findElement(event,'LI');if(this.index!=element.autocompleteIndex)
{this.index=element.autocompleteIndex;this.render();}
Event.stop(event);},onClick:function(event){var element=Event.findElement(event,'LI');this.index=element.autocompleteIndex;this.selectEntry();this.hide();},onBlur:function(event){if((event.x==undefined)|(event.x<0||event.x>320)|(event.y<0||event.y>150)){setTimeout(this.hide.bind(this),250);this.hasFocus=false;this.active=false;}else if(event.x!=undefined){try{this.element.focus();}catch(ex){}}},render:function(){if(this.entryCount>0){for(var i=0;i<this.entryCount;i++){this.index==i?Element.addClassName(this.getEntry(i),"selected"):Element.removeClassName(this.getEntry(i),"selected");}
if(this.hasFocus){this.show();this.active=true;}}else{this.active=false;this.hide();}},markPrevious:function(){if(this.index>0)this.index--
else this.index=this.entryCount-1;this.getEntry(this.index).scrollIntoView(true);},markNext:function(){if(this.index<this.entryCount-1)this.index++
else this.index=0;this.getEntry(this.index).scrollIntoView(false);},getEntry:function(index){return this.update.firstChild.childNodes[index];},getCurrentEntry:function(){return this.getEntry(this.index);},selectEntry:function(){this.active=false;this.updateElement(this.getCurrentEntry());},updateElement:function(selectedElement){if(this.options.updateElement){this.options.updateElement(selectedElement);return;}
var value='';if(this.options.select){var nodes=document.getElementsByClassName(this.options.select,selectedElement)||[];if(nodes.length>0)value=Element.collectTextNodes(nodes[0],this.options.select);}else
value=Element.collectTextNodesIgnoreClass(selectedElement,'informal');var lastTokenPos=this.findLastToken();if(lastTokenPos!=-1){var newValue=this.element.value.substr(0,lastTokenPos+1);var whitespace=this.element.value.substr(lastTokenPos+1).match(/^\s+/);if(whitespace)
newValue+=whitespace[0];this.element.value=newValue+value;}else{this.element.value=value;}
this.element.focus();if(this.options.afterUpdateElement)
this.options.afterUpdateElement(this.element,selectedElement);},updateChoices:function(choices){if(!this.changed&&this.hasFocus){this.update.innerHTML=choices;Element.cleanWhitespace(this.update);Element.cleanWhitespace(this.update.down());if(this.update.firstChild&&this.update.down().childNodes){this.entryCount=this.update.down().childNodes.length;for(var i=0;i<this.entryCount;i++){var entry=this.getEntry(i);entry.autocompleteIndex=i;this.addObservers(entry);}}else{this.entryCount=0;}
this.stopIndicator();this.index=0;if(this.entryCount==1&&this.options.autoSelect){this.selectEntry();this.hide();}else{this.render();}}},addObservers:function(element){Event.observe(element,"mouseover",this.onHover.bindAsEventListener(this));Event.observe(element,"click",this.onClick.bindAsEventListener(this));},onObserverEvent:function(){this.changed=false;if(this.getToken().length>=this.options.minChars){this.startIndicator();this.getUpdatedChoices();}else{this.active=false;this.hide();}},getToken:function(){var tokenPos=this.findLastToken();if(tokenPos!=-1)
var ret=this.element.value.substr(tokenPos+1).replace(/^\s+/,'').replace(/\s+$/,'');else
var ret=this.element.value;return/\n/.test(ret)?'':ret;},findLastToken:function(){var lastTokenPos=-1;for(var i=0;i<this.options.tokens.length;i++){var thisTokenPos=this.element.value.lastIndexOf(this.options.tokens[i]);if(thisTokenPos>lastTokenPos)
lastTokenPos=thisTokenPos;}
return lastTokenPos;}}
Ajax.Autocompleter=Class.create();Object.extend(Object.extend(Ajax.Autocompleter.prototype,Autocompleter.Base.prototype),{initialize:function(element,update,url,options){this.baseInitialize(element,update,options);this.options.asynchronous=true;this.options.onComplete=this.onComplete.bind(this);this.options.defaultParams=this.options.parameters||null;this.url=url;},getUpdatedChoices:function(){entry=encodeURIComponent(this.options.paramName)+'='+
encodeURIComponent(this.getToken());this.options.parameters=this.options.callback?this.options.callback(this.element,entry):entry;if(this.options.defaultParams)
this.options.parameters+='&'+this.options.defaultParams;new Ajax.Request(this.url,this.options);},onComplete:function(request){this.updateChoices(request.responseText);}});Autocompleter.Local=Class.create();Autocompleter.Local.prototype=Object.extend(new Autocompleter.Base(),{initialize:function(element,update,array,options){this.baseInitialize(element,update,options);this.options.array=array;},getUpdatedChoices:function(){this.updateChoices(this.options.selector(this));},setOptions:function(options){this.options=Object.extend({choices:10,partialSearch:true,partialChars:2,ignoreCase:true,fullSearch:false,selector:function(instance){var ret=[];var partial=[];var entry=instance.getToken();var count=0;for(var i=0;i<instance.options.array.length&&ret.length<instance.options.choices;i++){var elem=instance.options.array[i];var foundPos=instance.options.ignoreCase?elem.toLowerCase().indexOf(entry.toLowerCase()):elem.indexOf(entry);while(foundPos!=-1){if(foundPos==0&&elem.length!=entry.length){ret.push("<li><strong>"+elem.substr(0,entry.length)+"</strong>"+
elem.substr(entry.length)+"</li>");break;}else if(entry.length>=instance.options.partialChars&&instance.options.partialSearch&&foundPos!=-1){if(instance.options.fullSearch||/\s/.test(elem.substr(foundPos-1,1))){partial.push("<li>"+elem.substr(0,foundPos)+"<strong>"+
elem.substr(foundPos,entry.length)+"</strong>"+elem.substr(foundPos+entry.length)+"</li>");break;}}
foundPos=instance.options.ignoreCase?elem.toLowerCase().indexOf(entry.toLowerCase(),foundPos+1):elem.indexOf(entry,foundPos+1);}}
if(partial.length)
ret=ret.concat(partial.slice(0,instance.options.choices-ret.length))
return"<ul>"+ret.join('')+"</ul>";}},options||{});}});Field.scrollFreeActivate=function(field){setTimeout(function(){Field.activate(field);},1);}
Ajax.InPlaceEditor=Class.create();Ajax.InPlaceEditor.defaultHighlightColor="#FFFF99";Ajax.InPlaceEditor.prototype={initialize:function(element,url,options){this.url=url;this.element=$(element);this.options=Object.extend({paramName:"value",okButton:true,okText:"ok",cancelLink:true,cancelText:"cancel",savingText:"Saving...",clickToEditText:"Click to edit",okText:"ok",rows:1,onComplete:function(transport,element){new Effect.Highlight(element,{startcolor:this.options.highlightcolor});},onFailure:function(transport){alert("Error communicating with the server: "+transport.responseText.stripTags());},callback:function(form){return Form.serialize(form);},handleLineBreaks:true,loadingText:'Loading...',savingClassName:'inplaceeditor-saving',loadingClassName:'inplaceeditor-loading',formClassName:'inplaceeditor-form',highlightcolor:Ajax.InPlaceEditor.defaultHighlightColor,highlightendcolor:"#FFFFFF",externalControl:null,submitOnBlur:false,ajaxOptions:{},evalScripts:false},options||{});if(!this.options.formId&&this.element.id){this.options.formId=this.element.id+"-inplaceeditor";if($(this.options.formId)){this.options.formId=null;}}
if(this.options.externalControl){this.options.externalControl=$(this.options.externalControl);}
this.originalBackground=Element.getStyle(this.element,'background-color');if(!this.originalBackground){this.originalBackground="transparent";}
this.element.title=this.options.clickToEditText;this.onclickListener=this.enterEditMode.bindAsEventListener(this);this.mouseoverListener=this.enterHover.bindAsEventListener(this);this.mouseoutListener=this.leaveHover.bindAsEventListener(this);Event.observe(this.element,'click',this.onclickListener);Event.observe(this.element,'mouseover',this.mouseoverListener);Event.observe(this.element,'mouseout',this.mouseoutListener);if(this.options.externalControl){Event.observe(this.options.externalControl,'click',this.onclickListener);Event.observe(this.options.externalControl,'mouseover',this.mouseoverListener);Event.observe(this.options.externalControl,'mouseout',this.mouseoutListener);}},enterEditMode:function(evt){if(this.saving)return;if(this.editing)return;this.editing=true;this.onEnterEditMode();if(this.options.externalControl){Element.hide(this.options.externalControl);}
Element.hide(this.element);this.createForm();this.element.parentNode.insertBefore(this.form,this.element);if(!this.options.loadTextURL)Field.scrollFreeActivate(this.editField);if(evt){Event.stop(evt);}
return false;},createForm:function(){this.form=document.createElement("form");this.form.id=this.options.formId;Element.addClassName(this.form,this.options.formClassName)
this.form.onsubmit=this.onSubmit.bind(this);this.createEditField();if(this.options.textarea){var br=document.createElement("br");this.form.appendChild(br);}
if(this.options.okButton){okButton=document.createElement("input");okButton.type="submit";okButton.value=this.options.okText;okButton.className='editor_ok_button';this.form.appendChild(okButton);}
if(this.options.cancelLink){cancelLink=document.createElement("a");cancelLink.href="#";cancelLink.appendChild(document.createTextNode(this.options.cancelText));cancelLink.onclick=this.onclickCancel.bind(this);cancelLink.className='editor_cancel';this.form.appendChild(cancelLink);}},hasHTMLLineBreaks:function(string){if(!this.options.handleLineBreaks)return false;return string.match(/<br/i)||string.match(/<p>/i);},convertHTMLLineBreaks:function(string){return string.replace(/<br>/gi,"\n").replace(/<br\/>/gi,"\n").replace(/<\/p>/gi,"\n").replace(/<p>/gi,"");},createEditField:function(){var text;if(this.options.loadTextURL){text=this.options.loadingText;}else{text=this.getText();}
var obj=this;if(this.options.rows==1&&!this.hasHTMLLineBreaks(text)){this.options.textarea=false;var textField=document.createElement("input");textField.obj=this;textField.type="text";textField.name=this.options.paramName;textField.value=text;textField.style.backgroundColor=this.options.highlightcolor;textField.className='editor_field';var size=this.options.size||this.options.cols||0;if(size!=0)textField.size=size;if(this.options.submitOnBlur)
textField.onblur=this.onSubmit.bind(this);this.editField=textField;}else{this.options.textarea=true;var textArea=document.createElement("textarea");textArea.obj=this;textArea.name=this.options.paramName;textArea.value=this.convertHTMLLineBreaks(text);textArea.rows=this.options.rows;textArea.cols=this.options.cols||40;textArea.className='editor_field';if(this.options.submitOnBlur)
textArea.onblur=this.onSubmit.bind(this);this.editField=textArea;}
if(this.options.loadTextURL){this.loadExternalText();}
this.form.appendChild(this.editField);},getText:function(){return this.element.innerHTML;},loadExternalText:function(){Element.addClassName(this.form,this.options.loadingClassName);this.editField.disabled=true;new Ajax.Request(this.options.loadTextURL,Object.extend({asynchronous:true,onComplete:this.onLoadedExternalText.bind(this)},this.options.ajaxOptions));},onLoadedExternalText:function(transport){Element.removeClassName(this.form,this.options.loadingClassName);this.editField.disabled=false;this.editField.value=transport.responseText.stripTags();Field.scrollFreeActivate(this.editField);},onclickCancel:function(){this.onComplete();this.leaveEditMode();return false;},onFailure:function(transport){this.options.onFailure(transport);if(this.oldInnerHTML){this.element.innerHTML=this.oldInnerHTML;this.oldInnerHTML=null;}
return false;},onSubmit:function(){var form=this.form;var value=this.editField.value;this.onLoading();if(this.options.evalScripts){new Ajax.Request(this.url,Object.extend({parameters:this.options.callback(form,value),onComplete:this.onComplete.bind(this),onFailure:this.onFailure.bind(this),asynchronous:true,evalScripts:true},this.options.ajaxOptions));}else{new Ajax.Updater({success:this.element,failure:null},this.url,Object.extend({parameters:this.options.callback(form,value),onComplete:this.onComplete.bind(this),onFailure:this.onFailure.bind(this)},this.options.ajaxOptions));}
if(arguments.length>1){Event.stop(arguments[0]);}
return false;},onLoading:function(){this.saving=true;this.removeForm();this.leaveHover();this.showSaving();},showSaving:function(){this.oldInnerHTML=this.element.innerHTML;this.element.innerHTML=this.options.savingText;Element.addClassName(this.element,this.options.savingClassName);this.element.style.backgroundColor=this.originalBackground;Element.show(this.element);},removeForm:function(){if(this.form){if(this.form.parentNode)Element.remove(this.form);this.form=null;}},enterHover:function(){if(this.saving)return;this.element.style.backgroundColor=this.options.highlightcolor;if(this.effect){this.effect.cancel();}
Element.addClassName(this.element,this.options.hoverClassName)},leaveHover:function(){if(this.options.backgroundColor){this.element.style.backgroundColor=this.oldBackground;}
Element.removeClassName(this.element,this.options.hoverClassName)
if(this.saving)return;this.effect=new Effect.Highlight(this.element,{startcolor:this.options.highlightcolor,endcolor:this.options.highlightendcolor,restorecolor:this.originalBackground});},leaveEditMode:function(){Element.removeClassName(this.element,this.options.savingClassName);this.removeForm();this.leaveHover();this.element.style.backgroundColor=this.originalBackground;Element.show(this.element);if(this.options.externalControl){Element.show(this.options.externalControl);}
this.editing=false;this.saving=false;this.oldInnerHTML=null;this.onLeaveEditMode();},onComplete:function(transport){this.leaveEditMode();this.options.onComplete.bind(this)(transport,this.element);},onEnterEditMode:function(){},onLeaveEditMode:function(){},dispose:function(){if(this.oldInnerHTML){this.element.innerHTML=this.oldInnerHTML;}
this.leaveEditMode();Event.stopObserving(this.element,'click',this.onclickListener);Event.stopObserving(this.element,'mouseover',this.mouseoverListener);Event.stopObserving(this.element,'mouseout',this.mouseoutListener);if(this.options.externalControl){Event.stopObserving(this.options.externalControl,'click',this.onclickListener);Event.stopObserving(this.options.externalControl,'mouseover',this.mouseoverListener);Event.stopObserving(this.options.externalControl,'mouseout',this.mouseoutListener);}}};Ajax.InPlaceCollectionEditor=Class.create();Object.extend(Ajax.InPlaceCollectionEditor.prototype,Ajax.InPlaceEditor.prototype);Object.extend(Ajax.InPlaceCollectionEditor.prototype,{createEditField:function(){if(!this.cached_selectTag){var selectTag=document.createElement("select");var collection=this.options.collection||[];var optionTag;collection.each(function(e,i){optionTag=document.createElement("option");optionTag.value=(e instanceof Array)?e[0]:e;if((typeof this.options.value=='undefined')&&((e instanceof Array)?this.element.innerHTML==e[1]:e==optionTag.value))optionTag.selected=true;if(this.options.value==optionTag.value)optionTag.selected=true;optionTag.appendChild(document.createTextNode((e instanceof Array)?e[1]:e));selectTag.appendChild(optionTag);}.bind(this));this.cached_selectTag=selectTag;}
this.editField=this.cached_selectTag;if(this.options.loadTextURL)this.loadExternalText();this.form.appendChild(this.editField);this.options.callback=function(form,value){return"value="+encodeURIComponent(value);}}});Form.Element.DelayedObserver=Class.create();Form.Element.DelayedObserver.prototype={initialize:function(element,delay,callback){this.delay=delay||0.5;this.element=$(element);this.callback=callback;this.timer=null;this.lastValue=$F(this.element);Event.observe(this.element,'keyup',this.delayedListener.bindAsEventListener(this));},delayedListener:function(event){if(this.lastValue==$F(this.element))return;if(this.timer)clearTimeout(this.timer);this.timer=setTimeout(this.onTimerEvent.bind(this),this.delay*1000);this.lastValue=$F(this.element);},onTimerEvent:function(){this.timer=null;this.callback(this.element,$F(this.element));}};
function callInProgress (xmlhttp) {switch (xmlhttp.readyState) {case 1: case 2: case 3:return true;break;default:return false;break;}}Ajax.Responders.register({onCreate: function(request) {request['timeoutId'] = window.setTimeout(function() {if (callInProgress(request.transport)) {request.transport.abort();showFailureMessage();if (request.options['onFailure']) {request.options['onFailure'](request.transport, request.json);}}},7000);},onComplete: function(request) {window.clearTimeout(request['timeoutId']);}});
Scriptaculous.load();String.prototype.trim=function(){return this.replace(/^\s+/g,'').replace(/\s+$/g,'');}
function jt_ShowHideElm(elm,showIt){if(elm)elm.style.visibility=(showIt)?"visible":"hidden";}
function jt_ShowNoneElm(elm,showIt,showStyle){if(!showStyle)showStyle="";if(elm)elm.style.display=(showIt)?showStyle:"none";}
function jt_ShowHide(divName,showIt){jt_ShowHideElm(document.getElementById(divName),showIt);}
function jt_ShowNone(divName,showIt,showStyle){jt_ShowNoneElm(document.getElementById(divName),showIt,showStyle);}
function jt_AddListener(obj,evType,fn){if(obj.addEventListener){obj.addEventListener(evType,fn,false);return true;}
else if(obj.attachEvent)return obj.attachEvent('on'+evType,fn);else return false;}
function jt_fixE(ev){var e=ev?ev:window.event;return e;}
function jt_Point(x,y){this.x=x;this.y=y;}
function jt_getOffsetXY(obj,findID){var xPos=obj.offsetLeft;var yPos=obj.offsetTop;var parent=obj.offsetParent;if(typeof findID=='undefined')findID='!@#$%^&*()';while((parent!=null)&&(parent.id!=findID)){xPos+=parent.offsetLeft;yPos+=parent.offsetTop;parent=parent.offsetParent;}
return new jt_Point(xPos,yPos);}
function jt_moveTo(obj,x,y){obj.style.left=x+"px";obj.style.top=y+"px";}
function jt_getOffsetX(obj){var xPos=obj.offsetLeft;var parent=obj.offsetParent;while(parent!=null){xPos+=parent.offsetLeft;parent=parent.offsetParent;}
return xPos;}
function jt_getOffsetY(obj){var yPos=obj.offsetTop;var parent=obj.offsetParent;while(parent!=null){yPos+=parent.offsetTop;parent=parent.offsetParent;}
return yPos;}
function jt_windowOffsetX(){if(window.screenX)return window.screenX+(window.outerWidth-window.innerWidth)-window.pageXOffset;else return document.body.scrollLeft+window.screenLeft;}
function jt_windowOffsetY(){if(window.screenY)return window.screenY+(window.outerHeight-24-window.innerHeight)-window.pageYOffset;else return document.body.scrollTop+window.screenTop;}
function jt_getChromeY(){return window.screenTop?window.screenTop:(window.outerHeight-window.innerHeight-24);}
function jt_setRadio(radioFld,val){for(var i=0;i<radioFld.length;i++)
if(radioFld[i].value==val)
if(!radioFld[i].disabled){radioFld[i].checked=true;return true;}
return false;}
function jt_getRadio(radioFld){var st="";for(var i=0;i<radioFld.length;i++)
if(radioFld[i].checked){st=radioFld[i].value;break;}
return st;}
function foSelected(pulldown){var st="";for(var i=0;i<pulldown.options.length;i++)
if(pulldown.options[i].selected){if(pulldown.options[i].value)st=pulldown.options[i].value
else st=pulldown.options[i].text;break;}
return st;}
function foPosInList(pulldown,val){if(val!="")
for(var i=0;i<pulldown.options.length;i++){var opVal=pulldown.options[i].value;if(opVal=="")opVal=pulldown.options[i].text;if(opVal==val){return i;break;}}
return-1;}
function foSetSelectVal(pulldown,val){var p=foPosInList(pulldown,val);if(p!=-1)pulldown.options.selectedIndex=p;}
function jt_parseQuery(queryString){var qObj=new Object();var stQuery=(queryString)?queryString:location.search;if(stQuery.indexOf("?")==0)stQuery=stQuery.substring(1);if(stQuery){var nvPairs=stQuery.split("&");for(var i=0;i<nvPairs.length;i++){var posEq=nvPairs[i].indexOf("=");if(posEq!=-1)eval("qObj."+nvPairs[i].substring(0,posEq)+"='"+nvPairs[i].substring(posEq+1)+"'");}}
return qObj;}
function jt_safeHTML(st){if(st.length==0)return"";st=st.replace(/</gi,"&lt;");st=st.replace(/>/gi,"&gt;");st=st.replace(/\"/gi,'&quot;');st=st.replace(/\'/gi,"&#39;");st=st.replace(/\\/gi,"&#92;");return st;}
function jt_unsafeHTML(st){if(st.length==0)return"";st=st.replace(/&lt;/gi,"<");st=st.replace(/&gt;/gi,">");st=st.replace(/&quot;/gi,'"');st=st.replace(/&#39;/gi,"'");st=st.replace(/&#92;/gi,"\\");return st;}
function jt_plural(qty,lbl){var stPlural=(qty==1)?"":"s";if(lbl)stPlural=qty+" "+lbl+stPlural;return stPlural;}
function objToString(anObj,sep){if(!sep)sep=' ][ ';var st="";for(var prop in anObj){if((prop.charAt(0)=='$')||((typeof anObj[prop])=='function'))continue;if(st!="")st+=sep;st+=prop+':'+anObj[prop];}
return st;}
function jt_alignCorner(elmToMove,elmAnchor,TlTrBlBr,xOffset,yOffset){xOffset=xOffset?xOffset:0;yOffset=yOffset?yOffset:0;var anchorXY=jt_getOffsetXY(elmAnchor);var xxOffset=(TlTrBlBr.indexOf('R')!=-1)?elmToMove.offsetWidth-elmAnchor.offsetWidth:0;var yyOffset=(TlTrBlBr.indexOf('B')!=-1)?elmToMove.offsetHeight:0;jt_moveTo(elmToMove,anchorXY.x-xxOffset+xOffset,anchorXY.y-yyOffset+yOffset);}
function jt_boxOverlap(objectA,objectB,mode){var xyA=jt_getOffsetXY(objectA);var xyB=jt_getOffsetXY(objectB);var objAxTL=xyA.x;var objAyTL=xyA.y;var objAxBR=xyA.x+objectA.offsetWidth;var objAyBR=xyA.y+objectA.offsetHeight;var objBxTL=xyB.x;var objByTL=xyB.y;var objBxBR=xyB.x+objectB.offsetWidth;var objByBR=xyB.y+objectB.offsetHeight;if(mode!='Y'){if(objAxBR<objBxTL)return-1;if(objBxBR<objAxTL)return-1;}
if(mode!='X'){if(objAyBR<objByTL)return-1;if(objByBR<objAyTL)return-1;}
var objCxTL;var objCyTL;var objCxBR;var objCyBR;if(objAxTL<objBxTL){objCxTL=objBxTL;objCxBR=objAxBR;}
else{objCxTL=objAxTL;objCxBR=objBxBR;}
if(objAyTL<objByTL){objCyTL=objByTL;objCyBR=objAyBR;}
else{objCyTL=objAyTL;objCyBR=objByBR;}
var olX=objCxBR-objCxTL;var olY=objCyBR-objCyTL;if(mode=='X')return olX;else if(mode=='Y')return olY;else return olX*olY;}
function jt_currStyle(divToRead){var cs=divToRead.style;if(window.getComputedStyle)cs=window.getComputedStyle(divToRead,null);else if(divToRead.currentStyle)cs=divToRead.currentStyle;return cs;}
function jt_divOnScrn(divOnScrn){var divPos=jt_getOffsetXY(divOnScrn);var newX=divPos.x;var newY=divPos.y;if(divPos.x+divOnScrn.offsetWidth-document.body.scrollLeft>document.body.clientWidth)newX=document.body.scrollLeft+document.body.clientWidth-divOnScrn.offsetWidth;if(divPos.x<document.body.scrollLeft)newX=document.body.scrollLeft;if(divPos.y+divOnScrn.offsetHeight-document.body.scrollTop>document.body.clientHeight)newY=document.body.scrollTop+document.body.clientHeight-divOnScrn.offsetHeight;if(divPos.y<document.body.scrollTop)newY=document.body.scrollTop;if((newX!=divPos.x)||(newY!=divPos.y))jt_moveTo(divOnScrn,newX,newY);}
var dragDialogs = new Object();
jt_DialogBox=function(isModal,isBalloon){if(arguments.length==0)return;this.isModal=isModal;this.uniqid=Math.abs(Math.random());this.clearDraggables=false;if(isModal)jt_DialogBox.veilInit();this.container=document.createElement('div');if(isBalloon)this.container.className=jt_DialogBox.balloonClassName;else this.container.className=jt_DialogBox.className;this.container.dialogBox=this;var mainTable=document.createElement('table');mainTable.setAttribute('cellSpacing','0');mainTable.setAttribute('cellPadding','0');mainTable.setAttribute('border','0');var tBodyM=document.createElement('tbody');var rowM=document.createElement('tr');var cellM=document.createElement('td');if(!isBalloon){var titleTable=document.createElement('table');titleTable.setAttribute('cellSpacing','0');titleTable.setAttribute('cellPadding','0');titleTable.setAttribute('border','0');titleTable.setAttribute('width','100%');var tBodyT=document.createElement('tbody');var rowT=document.createElement('tr');var cellT=document.createElement('td');cellT.className="tbLeft";rowT.appendChild(cellT);this.titleCell=document.createElement('td');this.titleCell.className="Title";rowT.appendChild(this.titleCell);cellT=document.createElement('td');cellT.className="tbRight";jt_DialogBox.initCloseIcon();var closeIcon=document.createElement('img');closeIcon.src=jt_DialogBox.closeIcon.src;closeIcon.setAttribute('border','0');closeIcon.dialogBox=this;var aLink=document.createElement('A');aLink.setAttribute('href','#');aLink.appendChild(closeIcon);aLink.onclick=jt_DialogBox.closeBox;cellT.appendChild(aLink);rowT.appendChild(cellT);tBodyT.appendChild(rowT);titleTable.appendChild(tBodyT);cellM.appendChild(titleTable);}
rowM.appendChild(cellM);tBodyM.appendChild(rowM);rowM=document.createElement('tr');cellM=document.createElement('td');cellM.className="MainPanel";this.contentArea=document.createElement('div');this.contentArea.className="ContentArea";cellM.appendChild(this.contentArea);rowM.appendChild(cellM);tBodyM.appendChild(rowM);mainTable.appendChild(tBodyM);this.container.appendChild(mainTable);document.body.appendChild(this.container);}
jt_DialogBox.imagePath="/web/images/default/";jt_DialogBox.prototype.show=function(){this.container.style.display="block";this.topZ();jt_divOnScrn(this.container);if(this.isModal)jt_DialogBox.veilShow(true);dialSearchSuspended=true;if(dragDialogs) dragDialogs[this.uniqid] = new Draggable(this.container, {revert:false,handle:this.titleCell});}
jt_DialogBox.prototype.hide=function(ok,keepVeil){this.container.style.display="none";if(!keepVeil&&this.isModal)jt_DialogBox.veilShow(false);dialSearchSuspended=false;var posInList=this.listPos();if(posInList!=-1){jt_DialogBox.openList[posInList]=jt_DialogBox.openList[jt_DialogBox.openList.length-1];jt_DialogBox.openList.pop();}
if(ok){if(this.callOK)
if(this.returnData)this.callOK(this.returnData);else this.callOK();}
else if(this.callCancel)this.callCancel();if(this.resetUpdate)doUpdate=true;}
jt_DialogBox.prototype.moveTo=function(x,y){var scrollTop = 0; if(isWebkit) scrollTop = document.body.scrollTop; else scrollTop = document.documentElement.scrollTop; if(x==-1)x=Math.round((document.body.clientWidth-this.container.offsetWidth)/2);if(y==-1)y=Math.round((document.body.clientHeight-this.container.offsetHeight)/2)+document.body.scrollTop;if(x!=-1){if(x+this.container.offsetWidth>document.body.clientWidth)x-=(x+this.container.offsetWidth)-document.body.clientWidth;}
if(y!=-1){if(y+this.container.offsetHeight>(document.documentElement.clientHeight+scrollTop)){y-=(y+this.container.offsetHeight)-(document.documentElement.clientHeight+scrollTop);}}
if(x>10)x-=10;if(y>10)y-=10;this.container.style.left=x+"px";this.container.style.top=y+"px";}
jt_DialogBox.prototype.setTitle=function(title){if(this.titleCell)this.titleCell.innerHTML='<div style="overflow:hidden;max-width:400px;">'+title+'</div>';}
jt_DialogBox.prototype.setContent=function(htmlContent){this.contentArea.innerHTML=htmlContent;}
jt_DialogBox.prototype.setContentNode=function(htmlContent){this.contentArea.innerHTML='';this.contentArea.appendChild(htmlContent);this.contentArea.parentNode.innerHTML=this.contentArea.parentNode.innerHTML;}
jt_DialogBox.prototype.setWidth=function(width){this.contentArea.style.width=width+"px";}
jt_DialogBox.prototype.resetUpdateOnClose=function(bool){this.resetUpdate=bool;}
jt_DialogBox.prototype.setCallOK=function(callOK){this.callOK=callOK;}
jt_DialogBox.prototype.setCallCancel=function(callCancel){this.callCancel=callCancel;}
jt_DialogBox.prototype.getContentNode=function(){return this.contentArea;}
jt_DialogBox.initCloseIcon=function(){if(jt_DialogBox.closeIcon==null){jt_DialogBox.closeIcon=new Image();jt_DialogBox.closeIcon.src=jt_DialogBox.imagePath+"window_close.gif";}}
jt_DialogBox.veilInit=function(){if(jt_DialogBox.veilOverlay==null){jt_DialogBox.veilOverlay=document.createElement('div');jt_DialogBox.veilOverlay.className="jtDialogBoxVeil";jt_DialogBox.veilOverlay.style.zIndex=jt_DialogBox.veilZ;jt_DialogBox.veilOverlay.innerHTML="<div onclick=\"hideOpenDialogues();\">&nbsp;</div>";jt_DialogBox.veilOverlay.setAttribute('onclick','hideOpenDialogues();');document.body.appendChild(jt_DialogBox.veilOverlay);jt_DialogBox.veilOverlay.innerHTML=jt_DialogBox.veilOverlay.innerHTML;jt_DialogBox.addListener(window,"resize",jt_DialogBox.veilSetWidth);}}
jt_DialogBox.veilShow=function(showIt){jt_DialogBox.veilSetWidth();jt_DialogBox.veilOverlay.style.display=showIt?"block":"none";}
jt_DialogBox.className="jtDialogBox";jt_DialogBox.balloonClassName="jtDialogBoxBalloon";jt_DialogBox.closeIcon=null;jt_DialogBox.veilOverlay=null;jt_DialogBox.veilZ=2000000;jt_DialogBox.openList=new Array();jt_DialogBox.maxDepth=5;jt_DialogBox.closeBox=function(e){if(!e)e=window.event;var node=e.target?e.target:e.srcElement;var count=0;while((node!=null)&&(count<jt_DialogBox.maxDepth)){if(node.dialogBox){node.dialogBox.hide();hideOpenDialogues();return false;}
node=node.parentNode;count++;}
return false;}
jt_DialogBox.prototype.listPos=function(){var posInList=-1;for(var i=0;i<jt_DialogBox.openList.length;i++)
if(jt_DialogBox.openList[i]==this){posInList=i;break;}
return posInList;}
jt_DialogBox.prototype.topZ=function(){var posInList=this.listPos();if(posInList==-1)jt_DialogBox.openList[jt_DialogBox.openList.length]=this;else if(posInList<jt_DialogBox.openList.length-1){for(var i=posInList;i<jt_DialogBox.openList.length-1;i++)jt_DialogBox.openList[i]=jt_DialogBox.openList[i+1];jt_DialogBox.openList[jt_DialogBox.openList.length-1]=this;var newZ=jt_DialogBox.veilZ;for(var i=jt_DialogBox.openList.length-1;i>0;i--){newZ--;jt_DialogBox.openList[i].style.zIndex=newZ;}}
this.container.style.zIndex=jt_DialogBox.veilZ+1;}
jt_DialogBox.veilSetWidth=function(){jt_DialogBox.veilOverlay.style.width=document.body.scrollWidth+'px';jt_DialogBox.veilOverlay.style.height=document.body.scrollHeight+'px';jt_DialogBox.veilOverlay.firstChild.style.width=document.body.scrollWidth+'px';jt_DialogBox.veilOverlay.firstChild.style.height=document.body.scrollHeight+'px';}
jt_DialogBox.addListener=function(obj,evType,fn){if(obj.addEventListener){obj.addEventListener(evType,fn,false);return true;}
else if(obj.attachEvent)return obj.attachEvent('on'+evType,fn);else return false;}
var TCP=new TColorPicker();function TCPopup(field,palette){this.field=field;this.initPalette=!palette||palette>3?0:palette;var w=194,h=240,move=screen?',left='+((screen.width-w)>>1)+',top='+((screen.height-h)>>1):'',o_colWindow=window.open('/web/scripts/picker.html',null,"help=no,status=no,scrollbars=no,resizable=no"+move+",width="+w+",height="+h+",dependent=yes",true);o_colWindow.opener=window;o_colWindow.focus();}
function TCBuildCell(R,G,B,w,h){return'<td bgcolor="#'+this.dec2hex((R<<16)+(G<<8)+B)+'"><a href="javascript:P.S(\''+this.dec2hex((R<<16)+(G<<8)+B)+'\')" onmouseover="P.P(\''+this.dec2hex((R<<16)+(G<<8)+B)+'\')"><img src="pixel.gif" width="'+w+'" height="'+h+'" border="0"></a></td>';}
function opposite(c){var result='';var list1='0123456789ABCDEF';var list2='FEDCBA9876543210';var ch='';for(var i=0;i<c.length;i++){ch=c.charAt(i);for(var n=0;n<list1.length;n++){if(ch==list1.charAt(n))result+=list2.charAt(n);}}return result;}
function TCSelect(c){this.field.value='#'+c.toUpperCase();this.field.style.backgroundColor=this.field.value;this.field.style.color='#'+opposite(c.toUpperCase());this.win.close();}
function TCPaint(c,b_noPref){c=(b_noPref?'':'#')+c.toUpperCase();if(this.o_samp)
this.o_samp.innerHTML='<font face=Tahoma size=2>'+c+' <font color=white>'+c+'</font></font>'
if(this.doc.layers)
this.sample.bgColor=c;else{if(this.sample.backgroundColor!=null)this.sample.backgroundColor=c;else if(this.sample.background!=null)this.sample.background=c;}}
function TCGenerateSafe(){var s='';for(j=0;j<12;j++){s+="<tr>";for(k=0;k<3;k++)
for(i=0;i<=5;i++)
s+=this.bldCell(k*51+(j%2)*51*3,Math.floor(j/2)*51,i*51,8,10);s+="</tr>";}
return s;}
function TCGenerateWind(){var s='';for(j=0;j<12;j++){s+="<tr>";for(k=0;k<3;k++)
for(i=0;i<=5;i++)
s+=this.bldCell(i*51,k*51+(j%2)*51*3,Math.floor(j/2)*51,8,10);s+="</tr>";}
return s}
function TCGenerateMac(){var s='';var c=0,n=1;var r,g,b;for(j=0;j<15;j++){s+="<tr>";for(k=0;k<3;k++)
for(i=0;i<=5;i++){if(j<12){s+=this.bldCell(255-(Math.floor(j/2)*51),255-(k*51+(j%2)*51*3),255-(i*51),8,10);}else{if(n<=14){r=255-(n*17);g=b=0;}else if(n>14&&n<=28){g=255-((n-14)*17);r=b=0;}else if(n>28&&n<=42){b=255-((n-28)*17);r=g=0;}else{r=g=b=255-((n-42)*17);}
s+=this.bldCell(r,g,b,8,10);n++;}}
s+="</tr>";}
return s;}
function TCGenerateGray(){var s='';for(j=0;j<=15;j++){s+="<tr>";for(k=0;k<=15;k++){g=Math.floor((k+j*16)%256);s+=this.bldCell(g,g,g,9,7);}
s+='</tr>';}
return s}
function TCDec2Hex(v){v=v.toString(16);for(;v.length<6;v='0'+v);return v;}
function TCChgMode(v){for(var k in this.divs)this.hide(k);this.show(v);}
function TColorPicker(field){this.build0=TCGenerateSafe;this.build1=TCGenerateWind;this.build2=TCGenerateGray;this.build3=TCGenerateMac;this.show=document.layers?function(div){this.divs[div].visibility='show'}:function(div){this.divs[div].visibility='visible'};this.hide=document.layers?function(div){this.divs[div].visibility='hide'}:function(div){this.divs[div].visibility='hidden'};this.C=TCChgMode;this.S=TCSelect;this.P=TCPaint;this.popup=TCPopup;this.draw=TCDraw;this.dec2hex=TCDec2Hex;this.bldCell=TCBuildCell;this.divs=[];}
function TCDraw(o_win,o_doc){this.win=o_win;this.doc=o_doc;var
s_tag_openT=o_doc.layers?'layer visibility=hidden top=54 left=5 width=182':'div style=visibility:hidden;position:absolute;left:6px;top:54px;width:182px;height:0',s_tag_openS=o_doc.layers?'layer top=32 left=6':'div',s_tag_close=o_doc.layers?'layer':'div'
this.doc.write('<'+s_tag_openS+' id=sam name=sam><table cellpadding=0 cellspacing=0 border=1 width=181 align=center class=bd><tr><td align=center height=18><div id="samp"><font face=Tahoma size=2>sample <font color=white>sample</font></font></div></td></tr></table></'+s_tag_close+'>');this.sample=o_doc.layers?o_doc.layers['sam']:o_doc.getElementById?o_doc.getElementById('sam').style:o_doc.all['sam'].style
for(var k=0;k<4;k++){this.doc.write('<'+s_tag_openT+' id="p'+k+'" name="p'+k+'"><table cellpadding=0 cellspacing=0 border=1 align=center>'+this['build'+k]()+'</table></'+s_tag_close+'>');this.divs[k]=o_doc.layers?o_doc.layers['p'+k]:o_doc.all?o_doc.all['p'+k].style:o_doc.getElementById('p'+k).style}
if(!o_doc.layers&&o_doc.body.innerHTML)
this.o_samp=o_doc.all?o_doc.all.samp:o_doc.getElementById('samp');this.C(this.initPalette);if(this.field.value)this.P(this.field.value,true)}



var dispositions=new Object();dispositions[-1]='Still To Do';dispositions[1]='Completed';dispositions[2]='Attempted';dispositions[3]='Left Message';


function errFunc(xmlObj){
	alert('AJAX Failure: Response Code is ' + xmlObj.status + '; Response Status is ' + xmlObj.statusText + '; Response Text is ' + xmlObj.responseText);
}


var currentDialogues=new Array();
var isWebkit = false;

var BrowserDetect={init:function(){this.browser=this.searchString(this.dataBrowser)||"An unknown browser";this.version=this.searchVersion(navigator.userAgent)||this.searchVersion(navigator.appVersion)||"an unknown version";this.OS=this.searchString(this.dataOS)||"an unknown OS";},searchString:function(data){for(var i=0;i<data.length;i++){var dataString=data[i].string;var dataProp=data[i].prop;this.versionSearchString=data[i].versionSearch||data[i].identity;if(dataString){if(dataString.indexOf(data[i].subString)!=-1)return data[i].identity;}else if(dataProp)return data[i].identity;}},searchVersion:function(dataString){var index=dataString.indexOf(this.versionSearchString);if(index==-1)return;return parseFloat(dataString.substring(index+this.versionSearchString.length+1));},dataBrowser:[{string:navigator.userAgent,subString:"OmniWeb",versionSearch:"OmniWeb/",identity:"OmniWeb"},{string:navigator.vendor,subString:"Apple",identity:"Safari"},{string:navigator.vendor,subString:"Google",identity:"Chrome"},{prop:window.opera,identity:"Opera"},{string:navigator.vendor,subString:"iCab",identity:"iCab"},{string:navigator.vendor,subString:"KDE",identity:"Konqueror"},{string:navigator.userAgent,subString:"Firefox",identity:"Firefox"},{string:navigator.vendor,subString:"Camino",identity:"Camino"},{string:navigator.userAgent,subString:"Netscape",identity:"Netscape"},{string:navigator.userAgent,subString:"MSIE",identity:"Explorer",versionSearch:"MSIE"},{string:navigator.userAgent,subString:"Gecko",identity:"Mozilla",versionSearch:"rv"},{string:navigator.userAgent,subString:"Mozilla",identity:"Netscape",versionSearch:"Mozilla"}],dataOS:[{string:navigator.platform,subString:"Win",identity:"Windows"},{string:navigator.platform,subString:"Mac",identity:"Mac"},{string:navigator.platform,subString:"Linux",identity:"Linux"}]};var showBrowserWarn=false;BrowserDetect.init();if(BrowserDetect.browser=='Explorer'&&BrowserDetect.version<7){ showBrowserWarn=true; } else if (BrowserDetect.browser=='Safari' || BrowserDetect.browser=='Chrome') { isWebkit = true; }


function showFailureMessage(){/*alert("The remote server is unavailable.");*/}

function purgeObj(obj){if(obj){for(i in obj){delete obj[i];}}}
Ajax.Responders.register({onCreate:ajaxCreateFunc,onComplete:ajaxCompleteFunc});





var formStateTimer=null;

var niftyOk=(document.getElementById&&document.createElement&&Array.prototype.push);var niftyCss=false;String.prototype.find=function(what){return(this.indexOf(what)>=0?true:false);}
var oldonload=window.onload;if(typeof(NiftyLoad)!='function')NiftyLoad=function(){};if(typeof(oldonload)=='function')
window.onload=function(){oldonload();AddCss();NiftyLoad()};else window.onload=function(){AddCss();NiftyLoad()};function AddCss(){return;niftyCss=true;var l=CreateEl("link");l.setAttribute("type","text/css");l.setAttribute("rel","stylesheet");l.setAttribute("href","/web/css/nifty/niftyCorners.css");l.setAttribute("media","screen");document.getElementsByTagName("head")[0].appendChild(l);}
function Nifty(selector,options){if(niftyOk==false)return;if(niftyCss==false)AddCss();var i,v=selector.split(","),h=0;if(options==null)options="";if(options.find("fixed-height"))
h=getElementsBySelector(v[0])[0].offsetHeight;for(i=0;i<v.length;i++)
Rounded(v[i],options);if(options.find("height"))SameHeight(selector,h);}
function Rounded(selector,options){var i,top="",bottom="",v=new Array();if(options!=""){options=options.replace("left","tl bl");options=options.replace("right","tr br");options=options.replace("top","tr tl");options=options.replace("bottom","br bl");options=options.replace("transparent","alias");if(options.find("tl")){top="both";if(!options.find("tr"))top="left";}
else if(options.find("tr"))top="right";if(options.find("bl")){bottom="both";if(!options.find("br"))bottom="left";}
else if(options.find("br"))bottom="right";}
if(top==""&&bottom==""&&!options.find("none")){top="both";bottom="both";}
v=getElementsBySelector(selector);for(i=0;i<v.length;i++){FixIE(v[i]);if(top!="")AddTop(v[i],top,options);if(bottom!="")AddBottom(v[i],bottom,options);}}
function AddTop(el,side,options){var d=CreateEl("b"),lim=4,border="",p,i,btype="r",bk,color;d.style.marginLeft="-"+getPadding(el,"Left")+"px";d.style.marginRight="-"+getPadding(el,"Right")+"px";if(options.find("alias")||(color=getBk(el))=="transparent"){color="transparent";bk="transparent";border=getParentBk(el);btype="t";}
else{bk=getParentBk(el);border=Mix(color,bk);}
d.style.background=bk;d.className="niftycorners";p=getPadding(el,"Top");if(options.find("small")){d.style.marginBottom=(p-2)+"px";btype+="s";lim=2;}
else if(options.find("big")){d.style.marginBottom=(p-10)+"px";btype+="b";lim=8;}
else d.style.marginBottom=(p-5)+"px";for(i=1;i<=lim;i++)
d.appendChild(CreateStrip(i,side,color,border,btype));el.style.paddingTop="0";el.insertBefore(d,el.firstChild);}
function AddBottom(el,side,options){var d=CreateEl("b"),lim=4,border="",p,i,btype="r",bk,color;d.style.marginLeft="-"+getPadding(el,"Left")+"px";d.style.marginRight="-"+getPadding(el,"Right")+"px";if(options.find("alias")||(color=getBk(el))=="transparent"){color="transparent";bk="transparent";border=getParentBk(el);btype="t";}
else{bk=getParentBk(el);border=Mix(color,bk);}
d.style.background=bk;d.className="niftycorners";p=getPadding(el,"Bottom");if(options.find("small")){d.style.marginTop=(p-2)+"px";btype+="s";lim=2;}
else if(options.find("big")){d.style.marginTop=(p-10)+"px";btype+="b";lim=8;}
else d.style.marginTop=(p-5)+"px";for(i=lim;i>0;i--)
d.appendChild(CreateStrip(i,side,color,border,btype));el.style.paddingBottom=0;el.appendChild(d);}
function CreateStrip(index,side,color,border,btype){var x=CreateEl("b");x.className=btype+index;x.style.backgroundColor=color;x.style.borderColor=border;if(side=="left"){x.style.borderRightWidth="0";x.style.marginRight="0";}
else if(side=="right"){x.style.borderLeftWidth="0";x.style.marginLeft="0";}
return(x);}
function CreateEl(x){return(document.createElement(x));}
function FixIE(el){if(el.currentStyle!=null&&el.currentStyle.hasLayout!=null&&el.currentStyle.hasLayout==false)
el.style.display="inline-block";}
function SameHeight(selector,maxh){var i,v=selector.split(","),t,j,els=[],gap;for(i=0;i<v.length;i++){t=getElementsBySelector(v[i]);els=els.concat(t);}
for(i=0;i<els.length;i++){if(els[i].offsetHeight>maxh)maxh=els[i].offsetHeight;els[i].style.height="auto";}
for(i=0;i<els.length;i++){gap=maxh-els[i].offsetHeight;if(gap>0){t=CreateEl("b");t.className="niftyfill";t.style.height=gap+"px";nc=els[i].lastChild;if(nc.className=="niftycorners")
els[i].insertBefore(t,nc);else els[i].appendChild(t);}}}
function getElementsBySelector(selector){var i,j,selid="",selclass="",tag=selector,tag2="",v2,k,f,a,s=[],objlist=[],c;if(selector.find("#")){if(selector.find(" ")){s=selector.split(" ");var fs=s[0].split("#");if(fs.length==1)return(objlist);f=document.getElementById(fs[1]);if(f){v=f.getElementsByTagName(s[1]);for(i=0;i<v.length;i++)objlist.push(v[i]);}
return(objlist);}
else{s=selector.split("#");tag=s[0];selid=s[1];if(selid!=""){f=document.getElementById(selid);if(f)objlist.push(f);return(objlist);}}}
if(selector.find(".")){s=selector.split(".");tag=s[0];selclass=s[1];if(selclass.find(" ")){s=selclass.split(" ");selclass=s[0];tag2=s[1];}}
var v=document.getElementsByTagName(tag);if(selclass==""){for(i=0;i<v.length;i++)objlist.push(v[i]);return(objlist);}
for(i=0;i<v.length;i++){c=v[i].className.split(" ");for(j=0;j<c.length;j++){if(c[j]==selclass){if(tag2=="")objlist.push(v[i]);else{v2=v[i].getElementsByTagName(tag2);for(k=0;k<v2.length;k++)objlist.push(v2[k]);}}}}
return(objlist);}
function getParentBk(x){var el=x.parentNode,c;while(el.tagName.toUpperCase()!="HTML"&&(c=getBk(el))=="transparent")
el=el.parentNode;if(c=="transparent")c="#FFFFFF";return(c);}
function getBk(x){var c=getStyleProp(x,"backgroundColor");if(c==null||c=="transparent"||c.find("rgba(0, 0, 0, 0)"))
return("transparent");if(c.find("rgb"))c=rgb2hex(c);return(c);}
function getPadding(x,side){var p=getStyleProp(x,"padding"+side);if(p==null||!p.find("px"))return(0);return(parseInt(p));}
function getStyleProp(x,prop){if(x.currentStyle)
return(x.currentStyle[prop]);if(document.defaultView.getComputedStyle)
return(document.defaultView.getComputedStyle(x,'')[prop]);return(null);}
function rgb2hex(value){var hex="",v,h,i;var regexp=/([0-9]+)[, ]+([0-9]+)[, ]+([0-9]+)/;var h=regexp.exec(value);for(i=1;i<4;i++){v=parseInt(h[i]).toString(16);if(v.length==1)hex+="0"+v;else hex+=v;}
return("#"+hex);}
function Mix(c1,c2){var i,step1,step2,x,y,r=new Array(3);if(c1.length==4)step1=1;else step1=2;if(c2.length==4)step2=1;else step2=2;for(i=0;i<3;i++){x=parseInt(c1.substr(1+step1*i,step1),16);if(step1==1)x=16*x+x;y=parseInt(c2.substr(1+step2*i,step2),16);if(step2==1)y=16*y+y;r[i]=Math.floor((x*50+y*50)/100);r[i]=r[i].toString(16);if(r[i].length==1)r[i]="0"+r[i];}
return("#"+r[0]+r[1]+r[2]);}
function adjustContainerHeight(){var d=document.getElementById('content');var a=document.getElementById('accountInfo');if(d&&a&&d.offsetHeight<a.offsetHeight){d.style.height=a.offsetHeight-20+'px';}}
function createCompanyItem(t,cid){if(t&&t.selectedIndex>0){switch(t.selectedIndex){case 1:top.document.location.href='?form=startcompanyorder&cid='+escape(cid);break;case 2:document.location.href='?form=createactivity&altdoc=true&cid='+escape(cid);break;case 3:document.location.href='?form=createnote&altdoc=true&cid='+escape(cid);break;case 4:document.location.href='?form=createmessage&altdoc=true&cid='+escape(cid);break;}}}
function createCustomerItem(t,cid){if(t&&t.selectedIndex>0){switch(t.selectedIndex){case 1:top.document.location.href='?form=startcompanyorder&contact=true&cid='+escape(cid);break;case 2:document.location.href='?form=createactivity&altdoc=true&contact=true&cid='+escape(cid);break;case 3:document.location.href='?form=createnote&altdoc=true&contact=true&ccid='+escape(cid);break;case 4:document.location.href='?form=createmessage&altdoc=true&contact=true&ccid='+escape(cid);break;}}}
function updateRUBaseSize(t){if(t){var d=document.getElementById('base_size');if(d&&t.options[t.selectedIndex].text=='EACH'){d.value=1;}}}
function checkSelectedRecipeUnit(t){if(t){var d=document.getElementById('recipe_unit');if(d&&d.options[d.selectedIndex].text=='EACH'){alert('When the recipe unit is set to \'EACH\', the base size defaults to "1" and cannot be changed.');t.value=1;t.blur();return false;}}}
function checkPrepFormModified(f,i){if(f&&i){if(isFormModified(f)){if(confirm('You have made some changes to your selected prep items, but have not saved them.  Do you want to save these changes before leaving this page to create the new prep item?')){f.createPrepItem.value=1;f.submit();return;}}}
document.location.href='?form=createprepitem&id='+i;}
function updateSearchFormOptions(t){var d=document.getElementById('search_options');if(d&&t){switch(t.selectedIndex){case 1:d.innerHTML='<table class="search_options"><tr><td>Ordering Customer Name: </td><td><input name="param_customer~name_s_n_125" /></td></tr><tr><td>Restaurant Name: </td><td><input name="param_restaurant~name_s_n_125" /></td></tr></table>';break;case 2:d.innerHTML='<table class="search_options"><tr><td>Company Name: </td><td><input name="param_company~name_s_n_125" /></td></tr><tr><td>Department Name: </td><td><input name="param_department~name_s_n_125" /></td></tr><tr><td>Email: </td><td><input name="param_email_s_n_125" /></td></tr><tr><td>Any part of address: </td><td><input name="param_address_s_n_125" /></td></tr></table>';break;case 3:d.innerHTML='<table class="search_options"><tr><td>First Name: </td><td><input name="param_contact~first~name_s_n_35" /></td></tr><tr><td>Last Name: </td><td><input name="param_contact~last~name_s_n_28" /></td></tr><tr><td>Email: </td><td><input name="param_email_s_n_125" /></td></tr><tr><td>Any part of address: </td><td><input name="param_address_s_n_125" /></td></tr></table>';break;case 4:d.innerHTML='<table class="search_options"><tr><td>Location Name: </td><td><input name="param_location~name_s_n_125" /></td></tr><tr><td>Phone: </td><td><input name="param_primary~phone_s_n_28" /></td></tr><tr><td>Any part of address: </td><td><input name="param_address_s_n_125" /></td></tr></table>';break;case 5:d.innerHTML='<table class="search_options"><tr><td>Display Name: </td><td><input name="param_event~name_s_n_125" /></td></tr><tr><td>Is Public: </td><td><input type="checkbox" name="param_is~public_b_n_1" value="1" /></td></tr></table>';break;case 6:d.innerHTML='<table class="search_options"><tr><td>Title: </td><td><input name="param_note~title_s_n_125" /></td></tr><tr><td>Message: </td><td><input name="param_message_s_n_125" /></td></tr></table>';break;default:d.innerHTML='';break;}}}
function successSIC2Codes(xmlObj){if(xmlObj&&xmlObj.responseText){var d=document.getElementById('sic2_codes');if(d){d.innerHTML=xmlObj.responseText;}}}
function showSIC2Codes(division){var d=document.getElementById('sic4_codes');if(d)d.innerHTML='';new Ajax.Request('/'+IDString,{method:'post',parameters:'form=getsiccodes&division='+escape(division),onSuccess:successSIC2Codes,onFailure:errFunc});}
function successSIC4Codes(xmlObj){if(xmlObj&&xmlObj.responseText){var d=document.getElementById('sic4_codes');if(d){d.innerHTML=xmlObj.responseText;}}}
function showSIC4Codes(code){new Ajax.Request('/'+IDString,{method:'post',parameters:'form=getsiccodes&sic2code='+escape(code),onSuccess:successSIC4Codes,onFailure:errFunc});}
function openHelpItem (ev,key){
    var e=jt_fixE(ev);
    selectBox=new jt_DialogBox(true);
    selectBox.setWidth(370);
    selectBox.setTitle('Help Topic');
    selectBox.setContent('<div class="dialogue" style="height:100px;overflow:auto;"><div id="helpTopicContent"><img src="/web/images/default/busy.gif" />Loading Help Topic...</div></div>');
    currentDialogues.unshift(selectBox);
    selectBox.show();
    pos = getPosition(ev);
    selectBox.moveTo(pos.x, pos.y); //e.clientX
    new Ajax.Request('/'+IDString,{method:'post',parameters:'form=helptopic&key='+escape(key),onSuccess:successHelpTopicAction,onFailure:errFunc});
}

function getPosition(e) {
    e = e || window.event;
    var cursor = {x:0, y:0};
    if (e.pageX || e.pageY) {
        cursor.x = e.pageX;
        cursor.y = e.pageY;
    } else {
        var de = document.documentElement;
        var b = document.body;
        cursor.x = e.clientX + (de.scrollLeft || b.scrollLeft) - (de.clientLeft || 0);
        cursor.y = e.clientY + (de.scrollTop || b.scrollTop) - (de.clientTop || 0);
    }
    return cursor;
}

var dispositions=new Object();dispositions[-1]='Still To Do';dispositions[1]='Completed';dispositions[2]='Attempted';dispositions[3]='Left Message';function updateActivityCompletion(ev,aid,disposition){if(aid){var e=jt_fixE(ev);selectBox=new jt_DialogBox(true);selectBox.setWidth(450);selectBox.setTitle('Update Activity Disposition');selectBox.setContent('<div class="dialogue" style="height:200px;overflow:auto;"><div id="disposition_status"><img src="/web/images/default/busy.gif" /> Updating...</div><div id="dispositionContent"><form action="" method="post"><div><div class="formLabel">Activity Disposition: </div><div class="formInput">'+dispositions[disposition]+' <input type="hidden" name="disposition" value="'+disposition+'" /></div><div class="formDivider"></div></div><div><div class="formLabel">Notes: </div><div class="formInput"><textarea name="notes" style="width:97%;height:70px;" cols="1" rows="1"></textarea></div><div class="clb"></div><div class="formDivider"></div></div><div><div class="formLabel">&nbsp;</div><div class="formInput"><input type="button" onclick="addNoteToActivity('+aid+', this.form.notes.value);" name="updatedisposition" value="Save Changes" /></div><div class="clb"></div><div class="formDivider"></div></div></form></div></div>');currentDialogues.unshift(selectBox);selectBox.show();selectBox.moveTo(-1,-1);new Ajax.Request('/'+IDString,{method:'get',parameters:'form=eventdetails&actid='+escape(aid)+'&disposition='+escape(disposition),onSuccess:successDispositionUpdate,onFailure:errFunc});}}
function addNoteToActivity(aid,note){if(aid&&!isBlank(note)){note=Trim(note);new Ajax.Request('/'+IDString,{method:'get',parameters:'form=eventdetails&actid='+escape(aid)+'&addnote='+escape(note),onSuccess:successDispositionUpdate,onFailure:errFunc});}}
function toggleActivityCompletion(aid){if(aid){new Ajax.Request('/'+IDString,{method:'post',parameters:'form=eventdetails&toggleactivity='+escape(aid),onSuccess:successToggleActivity,onFailure:errFunc});}}
function successDispositionUpdate(xmlObj){if(xmlObj&&xmlObj.responseText){var d=document.getElementById('disposition_status');if(d)d.innerHTML=xmlObj.responseText;new Effect.Highlight(d);}}
function successToggleActivity(xmlObj){if(xmlObj&&xmlObj.responseText){tokens=xmlObj.responseText.split(/:/);if(tokens.length==2){var d=document.getElementById('act_state_'+tokens[0]);if(d)d.innerHTML=tokens[1];new Effect.Highlight(d);}}}
function showFullCalendarEvent(ev,eid,ic){var e=jt_fixE(ev);selectBox=new jt_DialogBox(true,false);selectBox.setWidth(550);selectBox.setTitle('Item Details');selectBox.setContent('<div class="dialogue" style="height:200px;overflow:auto;"><div id="helpTopicContent"><img src="/web/images/default/busy.gif" />Loading Details...</div></div>');currentDialogues.unshift(selectBox);selectBox.show();pos = getPosition(ev);selectBox.moveTo(pos.x, pos.y);if(ic)new Ajax.Request('/'+IDString,{method:'post',parameters:'form=customereventdetails&eid='+escape(eid),onSuccess:successHelpTopicAction,onFailure:errFunc});else new Ajax.Request('/'+IDString,{method:'post',parameters:'form=eventdetails&eid='+escape(eid),onSuccess:successHelpTopicAction,onFailure:errFunc});}

function doAddonAssignment(ev,t,iid,aid,altBtn){if(t&&iid&&aid){t.parentNode.lastChild.innerHTML='<img src="/web/images/default/busy.gif" />Updating...';if(t.checked==true){var multiplicity=1;if(altBtn){var multiplicityElem=document.getElementById('multiplicity_'+aid);if(multiplicityElem)multiplicity=multiplicityElem.value;if(!isInteger(multiplicity))multiplicity=1;}
new Ajax.Request('/'+IDString,{method:'post',parameters:'form=addaddontoitem&item='+escape(iid)+'&addon='+escape(aid)+'&multiplicity='+escape(multiplicity),onSuccess:successAssignAddonAction,onFailure:errFunc});}else{new Ajax.Request('/'+IDString,{method:'post',parameters:'form=removeaddonfromitem&item='+escape(iid)+'&addon='+escape(aid),onSuccess:successAssignAddonAction,onFailure:errFunc});}}}

function doGroupAssignment(ev,t,iid,aid,altBtn){if(t&&iid&&aid){t.parentNode.lastChild.innerHTML='<img src="/web/images/default/busy.gif" />Updating...';if(t.checked==true){var multiplicity=1;if(altBtn){var multiplicityElem=document.getElementById('multiplicity_'+aid);if(multiplicityElem)multiplicity=multiplicityElem.value;if(!isInteger(multiplicity))multiplicity=1;}
new Ajax.Request('/'+IDString,{method:'post',parameters:'form=addaddontoitem&item='+escape(iid)+'&addon='+escape(aid)+'&multiplicity='+escape(multiplicity)+'&group=true',onSuccess:successAssignAddonAction,onFailure:errFunc});}else{new Ajax.Request('/'+IDString,{method:'post',parameters:'form=removeaddonfromitem&item='+escape(iid)+'&addon='+escape(aid)+'&group=true',onSuccess:successAssignAddonAction,onFailure:errFunc});}}}


function doAddonGroupAssignment(ev,t,gid,aid){if(t&&gid&&aid){t.parentNode.lastChild.innerHTML='<img src="/web/images/default/busy.gif" /> Updating...';if(t.checked==true){new Ajax.Request('/'+IDString,{method:'post',parameters:'form=addaddontogroup&group='+escape(gid)+'&addon='+escape(aid),onSuccess:successAssignAddonGroupAction,onFailure:errFunc});}else{new Ajax.Request('/'+IDString,{method:'post',parameters:'form=removeaddonfromgroup&group='+escape(gid)+'&addon='+escape(aid),onSuccess:successAssignAddonGroupAction,onFailure:errFunc});}}}
function getUnitOptionFromServer(t){if(t){var ti=t.options[t.selectedIndex].value;if(ti){new Ajax.Request('/'+IDString,{method:'post',parameters:'form=getunitoptionlist&id='+escape(ti),onSuccess:successUnitOptionListAction,onFailure:errFunc});}}}
function saveAjaxForm(form_id,target_url,busy_msg_elem_id,successFunc,other_params){if(form_id&&target_url&&busy_msg_elem_id){var d=document.getElementById('busy_msg_elem_id');if(d)d.innerHTML='<img src="/web/images/default/busy.gif" />Updating...';var serializedForm=$(form_id).serialize();new Ajax.Request('/'+IDString,{method:'post',parameters:'form='+target_url+'&'+serializedForm+'&'+other_params,onSuccess:successFunc,onFailure:errFunc});}}
function hideInnerHTML(elem){if(elem){var e=document.getElementById(elem);if(e&&e.innerHTML)e.innerHTML='';}}
function successAssignAddonAction(xmlObj){if(xmlObj.responseText&&isInteger(Trim(xmlObj.responseText))){var e=document.getElementById('addon_msg_'+Trim(xmlObj.responseText));if(e){e.innerHTML='<strong> Changes Saved...</strong>';setTimeout('hideInnerHTML(\''+'addon_msg_'+Trim(xmlObj.responseText)+'\')',1500);}else{alert('Cannot find update element');}}else{alert('There was an error performing this action: '+xmlObj.responseText);}}
function successAssignAddonGroupAction(xmlObj){if(xmlObj.responseText&&isInteger(Trim(xmlObj.responseText))){var e=document.getElementById('addon_msg_'+Trim(xmlObj.responseText));if(e){e.innerHTML='<strong>&nbsp;Changes Saved...</strong>';setTimeout('hideInnerHTML(\''+'addon_msg_'+Trim(xmlObj.responseText)+'\')',1500);}else{alert('Cannot find update element');}}else{alert('There was an error performing this action: '+xmlObj.responseText);}}
function successUnitOptionListAction(xmlObj){if(xmlObj.responseText){var d=document.getElementById('menu_item_unit_select');if(d){select_innerHTML(d,xmlObj.responseText);}}}
function successLocOrderSendAction(xmlObj){if(xmlObj.responseText&&xmlObj.responseText.indexOf('ERROR:')==-1){var e=document.getElementById('locsendingcontent');if(e){e.innerHTML=xmlObj.responseText;e.parentNode.scrollTop=0;
new Ajax.Updater('restaurant_location_list', '/'+IDString+'/?form=locationlist');
}if(xmlObj.responseText.indexOf('DO_EMAIL_VERIFY') != -1){showEmailVerifyDialogue();}}else{alert('There was an error performing this action: '+xmlObj.responseText);}}
function successLocContactInfoAction(xmlObj){if(xmlObj.responseText&&xmlObj.responseText.indexOf('ERROR:')==-1){var e=document.getElementById('loccontactcontent');if(e){e.innerHTML=xmlObj.responseText;e.parentNode.scrollTop=0;}}else{alert('There was an error performing this action: '+xmlObj.responseText);}}
function successAssignRepAction(xmlObj){if(xmlObj.responseText&&xmlObj.responseText.indexOf('ERROR:')==-1){var e=document.getElementById('rep_change_status');if(e){e.innerHTML=xmlObj.responseText;e.parentNode.scrollTop=0;setTimeout('hideInnerHTML(\'rep_change_status\')',2000);}}else{alert('There was an error performing this action.');}}
function updateSalesRep(c,r){if(c&&r){new Ajax.Request('/'+IDString,{method:'post',parameters:'form=assignsalesrep&cid='+escape(c)+'&rid='+escape(r),onSuccess:successAssignRepAction,onFailure:errFunc});}}

function showAddOnsForItem(ev,aid,iname, gonly){hideOpenDialogues();var d=document.getElementById('addoncontent');if(d){d.parentNode.removeChild(d);}
var e=jt_fixE(ev);selectBox=new jt_DialogBox(true);selectBox.setWidth(400);selectBox.setTitle('Add Ons for '+iname);selectBox.setContent('<div class="dialogue" style="height:350px;overflow:auto;"><div id="addoncontent"><img src="/web/images/default/busy.gif" />Loading Add-Ons...</div></div>');currentDialogues.unshift(selectBox);selectBox.show();pos = getPosition(ev);selectBox.moveTo(pos.x, pos.y);new Ajax.Request('/'+IDString,{method:'post',parameters:'form=showaddonsforitem&id='+escape(aid)+'&gonly='+(gonly?'1':'0'),onSuccess:successAddOnForItemAction,onFailure:errFunc});}

function showAddOnsForGroup(ev,aid,iname){hideOpenDialogues();var d=document.getElementById('addoncontent');if(d){d.parentNode.removeChild(d);}
var e=jt_fixE(ev);selectBox=new jt_DialogBox(true);selectBox.setWidth(400);selectBox.setTitle('Extras for the '+iname+' Group');selectBox.setContent('<div class="dialogue" style="height:350px;overflow:auto;"><div id="addoncontent"><img src="/web/images/default/busy.gif" />Loading Extras...</div></div>');currentDialogues.unshift(selectBox);selectBox.show();pos = getPosition(ev);selectBox.moveTo(pos.x, pos.y);new Ajax.Request('/'+IDString,{method:'post',parameters:'form=showaddonsforgroup&id='+escape(aid),onSuccess:successAddOnForGroupAction,onFailure:errFunc});}
function showEditOrderSendMethods(ev,lid,lname){var e=jt_fixE(ev);selectBox=new jt_DialogBox(true);selectBox.setWidth(450);selectBox.setTitle('Order sending methods for '+unescape(lname));selectBox.setContent('<div class="dialogue" style="height:170px;overflow:auto;"><div id="locsendingcontent"><img src="/web/images/default/busy.gif" />Loading Form...</div></div>');currentDialogues.unshift(selectBox);selectBox.show();pos = getPosition(ev);selectBox.moveTo(pos.x, pos.y);new Ajax.Request('/'+IDString,{method:'post',parameters:'form=showordersendmethods&id='+escape(lid),onSuccess:successLocOrderSendAction,onFailure:errFunc});}
function showEditLocationAddress(ev,lid,lname){var e=jt_fixE(ev);selectBox=new jt_DialogBox(true);selectBox.setWidth(450);selectBox.setTitle('Change contact info for '+unescape(lname));selectBox.setContent('<div class="dialogue" style="height:200px;overflow:auto;"><div id="loccontactcontent"><img src="/web/images/default/busy.gif" />Loading Contact Info...</div></div>');currentDialogues.unshift(selectBox);selectBox.show();pos = getPosition(ev);selectBox.moveTo(pos.x, pos.y);new Ajax.Request('/'+IDString,{method:'post',parameters:'form=showlocationcontactinfo&id='+escape(lid),onSuccess:successLocContactInfoAction,onFailure:errFunc});}
function showEditLocationTimezone(ev,lid,lname){var e=jt_fixE(ev);selectBox=new jt_DialogBox(true);selectBox.setWidth(450);selectBox.setTitle('Change time zone and sales tax for '+unescape(lname));selectBox.setContent('<div class="dialogue" style="height:320px;overflow:auto;"><div id="loccontactcontent"><img src="/web/images/default/busy.gif" />Loading...</div></div>');currentDialogues.unshift(selectBox);selectBox.show();pos = getPosition(ev);selectBox.moveTo(pos.x, pos.y);new Ajax.Request('/'+IDString,{method:'post',parameters:'form=showlocationtimezone&id='+escape(lid),onSuccess:successLocContactInfoAction,onFailure:errFunc});}
function changeMenu(t){if(t){document.location.href='?form=ordering&mid='+escape(t.options[t.selectedIndex].value);}}
function emptyCart(){document.getElementById('cartHeader').innerHTML='Updating My Cart <img src="/web/images/'+template+'/busy.gif" alt="Please Wait" />';new Ajax.Request('/'+IDString,{method:'post',parameters:'form=ajaxcart&cartaction=empty',onSuccess:successCartAction,onFailure:errFunc});}

function addPageItemToCart(item_id){var errMsg='';var d=document.getElementById('min_type');var e=document.getElementById('min_required');var q=document.getElementById('quantity');if(d&&d.value==1&&e&&(q.value*1)<(e.value*1)){errMsg+='\t - You must select at least '+e.value+' to purchase this item.\n';}
if(item_id){try{var prices=document.getElementsByClassName('itemPrice');var selectedPrice;if(prices&&prices.length){for(i=0;i<prices.length;i++){if(prices[i].checked==true){selectedPrice=prices[i].id.replace(/MENU_ITEM_PRICE_/,'');break;}}}
if (!isInteger(selectedPrice)) {
				var pElem = document.getElementById('hidden_price_value');
				if(pElem) {
					selectedPrice = pElem.value;
				}
			}
if(!isInteger(selectedPrice))errMsg+='\t - You must select a price!\n';var optionChoices=document.getElementsByClassName('optionChoice');var optionsOK=true;if(optionChoices&&optionChoices.length){for(i=0;i<optionChoices.length;i++){if(optionChoices[i].selectedIndex==0&&optionChoices[i].parentNode.parentNode.parentNode.visible()){optionsOK=false;break;}}}
if(!optionsOK)errMsg+='\t - Options in drop-down select-boxes are required!';if(!errMsg){var serializedForm=$('menuItemForm').serialize();if(document.getElementById('cartHeader')) {document.getElementById('cartHeader').innerHTML='Updating My Cart <img src="/web/images/'+template+'/busy.gif" alt="Please Wait" />';}new Ajax.Request('/'+IDString,{method:'post',parameters:'form=ajaxcart&cartaction=add&item='+escape(item_id)+'&'+serializedForm,onSuccess:successCartAction,onFailure:errFunc});}else{alert('Please correct the following errors before adding this item to your cart: \n\n'+errMsg);}}catch(ex){alert(ex.description);}}}
function hideTemporaryNotice() {
	var d = $('temporaryNotice');
	new Effect.Fade(d);
}
function successCartAction(xmlObj){if(xmlObj){if(xmlObj.responseText){if(document.getElementById('attachedCart')) {
	try{if(formname=='checkout'){document.location.reload();return;}
// fire off an AJAX request to get any unredeemed specials and show them if there are any
new Ajax.Request('/'+IDString,{method:'post',parameters:'form=unredeemedspecials',onSuccess:showUnredeemedSpecials});
document.getElementById('attachedCart').innerHTML=xmlObj.responseText;showCartWidget(true);}catch(ex){}}}
var d = $('temporaryNotice');
d.innerHTML = 'Your cart has been updated';
var scrollTop = 0;
if(isWebkit) scrollTop = document.body.scrollTop;
else scrollTop = document.documentElement.scrollTop;
d.style.top = (scrollTop + 40) + 'px';
new Effect.Appear(d, {afterFinish:hideTemporaryNotice});
adjustContainerHeight(); } else if(parent) { var d = parent.document.getElementById('temporaryNotice');
d.innerHTML = 'Your cart has been updated'; } else {alert('Your cart has been updated');}}

function successCalendarEventAction(xmlObj){if(xmlObj){if(xmlObj.responseText){try{document.getElementById('calendarEventContent').innerHTML=xmlObj.responseText;}catch(ex){}}}
adjustContainerHeight();}
function successHelpTopicAction(xmlObj){if(xmlObj){if(xmlObj.responseText){try{document.getElementById('helpTopicContent').innerHTML=xmlObj.responseText;}catch(ex){}}}
adjustContainerHeight();}
function successRefreshCheckoutCart(xmlObj){if(xmlObj){document.getElementById('checkoutCart').innerHTML=xmlObj.responseText;}}
function successAddOnForItemAction(xmlObj){if(xmlObj){if(xmlObj.responseText){try{document.getElementById('addoncontent').innerHTML=xmlObj.responseText;}catch(ex){showAlert(ex);}}}else{alert('NO XML OBJECT WAS RETURNED');}
adjustContainerHeight();}
function successAddOnForGroupAction(xmlObj){if(xmlObj){if(xmlObj.responseText){try{document.getElementById('addoncontent').innerHTML=xmlObj.responseText;}catch(ex){showAlert(ex);}}}else{alert('NO XML OBJECT WAS RETURNED');}
adjustContainerHeight();}
function showAlert(ex){if(ex){if(ex.description)alert(ex.description);else if(ex.message)alert(ex.message);}}
function removeCustomer(cid){if(confirm('Are you sure you want to remove this customer?')){}}
function removeCartItem(uuid){if(confirm('Are you sure you want to remove this item from your cart?')){new Ajax.Request('/'+IDString,{method:'post',parameters:'form=ajaxcart&cartaction=remove&item='+escape(uuid),onSuccess:successCartAction,onFailure:errFunc});}}
function openEventWindow(ev,eid){hideOpenDialogues();if(eid>0){var e=jt_fixE(ev);selectBox=new jt_DialogBox(true);selectBox.setWidth(370);selectBox.setTitle('Calendar Event');selectBox.setContent('<div class="dialogue"><div id="calendarEventContent"><img src="/web/images/default/busy.gif" />Loading Event Details...</div></div>');currentDialogues.unshift(selectBox);selectBox.show();pos = getPosition(ev);selectBox.moveTo(pos.x, pos.y);new Ajax.Request('/'+IDString,{method:'post',parameters:'form=calendarevent&id='+escape(eid),onSuccess:successCalendarEventAction,onFailure:errFunc});}else{alert('Invalid Event Selected');}}
function successAddCalendarEventAction(xmlObj){if(xmlObj){if(xmlObj.responseText){try{if(xmlObj.responseText.charAt(0)=='!'){alert('There was a problem adding this event to the calendar: '+xmlObj.responseText.substr(1));}else{hideOpenDialogues();document.getElementById('calendar_container').innerHTML=xmlObj.responseText;}}catch(ex){alert(ex.message);}}}
adjustContainerHeight();}
function editCalendarEvent(ev,eid,title,desc,date){selectBox=new jt_DialogBox(true);selectBox.setWidth(370);selectBox.setTitle('Edit Calendar Event');selectBox.setContent('<div class="dialogue"><form action="#" method="get"><table><tr><td>Event Title: </td><td><input type="text" name="event_title" id="event_title" value="'+title+'" /></td></tr><tr><td>Date and Time: </td><td><input type="text" name="event_date" id="event_date" value="'+date+'" /></td></tr><tr><td>Description: </td><td><textarea name="event_description" id="event_description" style="width:90%;height:30px;">'+desc+'</textarea></td></tr><tr><td>&nbsp;</td><td><input class="optionButton" type="button" name="addevent" id="addevent" style="width:180px;" value="Edit this Event" onclick="editEvent(this.form)" />&nbsp;<input type="button" class="optionButton" name="cancelAddEvent" id="cancelAddEvent" value="Cancel" onclick="hideOpenDialogues();" /></td></tr></table><input type="hidden" name="edit_event_id" value="'+eid+'" /></form></div>');currentDialogues.unshift(selectBox);selectBox.show();selectBox.moveTo(-1,document.documentElement.scrollTop+60);}
function deleteCalendarEvent(ev,eid,title,desc,date){if(confirm('Are you sure you want to delete this calendar event?')){new Ajax.Request('/'+IDString,{method:'post',parameters:'form=deletecalendarevent&view='+escape(viewType)+'&id='+escape(eid),onSuccess:successAddCalendarEventAction,onFailure:errFunc});}}
function editEvent(f){if(f){var title=f.event_title.value;var desc=f.event_description.value;var date=f.event_date.value;var eid=f.edit_event_id.value;if(!isBlank(title)&&!isBlank(date)&&eid>0){new Ajax.Request('/'+IDString,{method:'post',parameters:'form=addcalendarevent&id='+escape(eid)+'&view='+escape(viewType)+'&name='+escape(title)+'&desc='+escape(desc)+'&date='+escape(date),onSuccess:successAddCalendarEventAction,onFailure:errFunc});}else{alert('Title and Date are required.  Please complete both of these fields.');}}}
function updateCheckoutCart(){document.location.reload();}
function addEvent(f){if(f){var title=f.event_title.value;var desc=f.event_description.value;var date=f.event_date.value;if(!isBlank(title)&&!isBlank(date)){new Ajax.Request('/'+IDString,{method:'post',parameters:'form=addcalendarevent&view='+escape(viewType)+'&name='+escape(title)+'&desc='+escape(desc)+'&date='+escape(date),onSuccess:successAddCalendarEventAction,onFailure:errFunc});}else{alert('Title and Date are required.  Please complete both of these fields.');}}}
function showAddEvent(ev,t){var val='';selectBox=new jt_DialogBox(true);selectBox.setWidth(370);selectBox.setTitle('Add a New Calendar Event');selectBox.setContent('<div class="dialogue"><form action="#" method="get"><table><tr><td>Event Title: </td><td><input type="text" name="event_title" id="event_title" value="'+val+'" /></td></tr><tr><td>Date and Time: </td><td><input type="text" name="event_date" id="event_date" value="" /></td></tr><tr><td>Description: </td><td><textarea name="event_description" id="event_description" style="width:90%;height:30px;"></textarea></td></tr><tr><td>&nbsp;</td><td><input class="optionButton" type="button" name="addevent" id="addevent" style="width:180px;" value="Add this Event" onclick="addEvent(this.form)" />&nbsp;<input type="button" class="optionButton" name="cancelAddEvent" id="cancelAddEvent" value="Cancel" onclick="hideOpenDialogues();" /></td></tr></table></form></div>');currentDialogues.unshift(selectBox);selectBox.show();selectBox.moveTo(-1,document.documentElement.scrollTop+60);}
var currentDialogues=new Array();
function hideOpenDialogues(b){var box;while(box=currentDialogues.shift()){box.hide();setInnerHTML(box.contentArea,'');}var elems = document.getElementsByClassName('dialogue'); if(elems&&elems.length){for(i=0;i<elems.length;i++){elems[i].innerHTML = '';var parentElem = elems[i].parentNode; if(parentElem){parentElem.innerHTML = '';parentElem.removeChild(elems[i]);}}}if(dragDialogs) {
		for(i in dragDialogs) {
			if(dragDialogs[i] && dragDialogs[i].destroy) {
				dragDialogs[i].destroy();
				dragDialogs[i] = null;
			}
		}
	}}
function enableOptionChoices(t){if(t){var s=t.selectedIndex;if(s!=0){}}}
function filterCompanyItems(cid){var d1=document.getElementById('show_notes');var d2=document.getElementById('show_activities');var d3=document.getElementById('show_msgs');var d4=document.getElementById('show_orders');var d5=document.getElementById('show_history');var d6=document.getElementById('companyitems');if(d1&&d2&&d3&&d4&&d5&&d6){d6.src='?form=companyitems&cid='+cid+'&altdoc=true&n='+d1.checked+'&a='+d2.checked+'&o='+d4.checked+'&m='+d3.checked+'&h='+d5.checked;}}
function ajaxCreateFunc(request){if(request){request['timeoutId']=window.setTimeout(function(){if(callInProgress(request.transport)){request.transport.abort();showFailureMessage();if(request.options['onFailure']){request.options['onFailure'](request.transport,request.json);}}},10000);}}
function viewLargerImage(elem){}
function showFailureMessage(){/*alert("The remote server is unavailable.");*/}
function ajaxCompleteFunc(request){window.clearTimeout(request['timeoutId']);}
function purgeObj(obj){if(obj){for(i in obj){delete obj[i];}}}
Ajax.Responders.register({onCreate:ajaxCreateFunc,onComplete:ajaxCompleteFunc});function doBlinds(elemId){if(elemId){var d=document.getElementById(elemId);if(d){if(d.style.display=='none'){new Effect.BlindDown(elemId);var d2=document.getElementById('showLink');if(d2)d2.innerHTML='Click to Hide';}else{new Effect.BlindUp(elemId);var d2=document.getElementById('showLink');if(d2)d2.innerHTML='Click to Show';}}}}
function goToCRMCustomer(elem){if(elem){var cid=elem.firstChild.firstChild.nextSibling;document.location.href='?form=customerdetails&id='+Trim(cid.innerHTML)+'&show=';}}
function selectExistingCompanyIntoFormFields(elem){var d=document.getElementById('company_id');var e=document.getElementById('company_name');if(d&&e)selectCompanyForCustomer(elem.firstChild.innerHTML,elem.firstChild.nextSibling.innerHTML,'company_name','company_id','company_msg');else alert('Error: Cannot assign company at this time!');}
function prepareCRMSearch(field,qs){return qs+'&search_field=true&fieldname='+escape(field.name);}
function prepareCompanySearch(field,qs){if(true||Trim(field.value)==''){var d=document.getElementById('company_id');if(d){d.value=-1;var e=document.getElementById('company_msg');e.innerHTML='You have de-selected the company you previously selected.  A new company will be created for this contact unless you select an existing company from the list.';e.style.display='block';}}
return qs+'&search_field=true&fieldname=company_only';}
function selectCompanyForCustomer(cid,cname,cnameField,cidField,msgField){if(cid&&cname){var d=document.getElementById(cnameField);var e=document.getElementById(cidField);if(d&&e){d.value=cname;e.value=cid;d=document.getElementById(msgField);if(d){d.innerHTML='';d.style.display='none';}}else{alert('Error: Cannot assign company at this time!');}}}
var formStateTimer=null;

function saveFormState(n,v){
    new Ajax.Request('/'+IDString,{method:'post',parameters:'form=saveformfields&'+n+'='+escape(v)});
}

function scheduleFormStateSave(n,v) {
    window.clearTimeout(formStateTimer);
    var func='saveFormState(\''+n+'\',\''+v+'\')';
    formStateTimer=window.setTimeout(func,200);
}

function successLibraryAction(xmlObj){if(xmlObj){if(xmlObj.responseText){try{document.getElementById('librarycontent').innerHTML=xmlObj.responseText;}catch(ex){}}}
adjustContainerHeight();}
function doLibrarySelect(img,eid){if(eid){var d=document.getElementById(eid);var d2=document.getElementById(eid+'_preview');if(d&&d2){d.value=img;d2.innerHTML='<img style="width:150px;" src="/web/documents/library/'+IDString+'/'+img+'" alt="Library Image" />';alert('Image has been selected.');}}
hideOpenDialogues();}
function showMailingLibraryImages(ev,eid){var e=jt_fixE(ev);selectBox=new jt_DialogBox(true);selectBox.setWidth(450);selectBox.setTitle('Show Mailing Library Images');selectBox.setContent('<div class="dialogue" style="height:170px;overflow:auto;"><div id="librarycontent"><img src="/web/images/default/busy.gif" />Loading Data...</div></div>');currentDialogues.unshift(selectBox);selectBox.show();pos = getPosition(ev);selectBox.moveTo(pos.x, pos.y);new Ajax.Request('/'+IDString,{method:'post',parameters:'form=showmailinglibrary&eid='+eid,onSuccess:successLibraryAction,onFailure:errFunc});}
function successReminders(xmlObj) {if(xmlObj && xmlObj.responseText) {var html = xmlObj.responseText;if(html.indexOf('</div>') != -1) {selectBox = new jt_DialogBox(true);selectBox.setWidth(450);selectBox.setTitle('Reminder!');selectBox.setContent('<div class="dialogue" style="height:300px;overflow:auto;"><div style="padding:8px;"><h3>Your Activity Reminders</h3>'+html+'</div></div>');currentDialogues.unshift(selectBox);selectBox.show();selectBox.moveTo(-1, document.documentElement.scrollTop + 60);	}}}
function checkForReminders() {return; new Ajax.Request('/'+IDString, {method:'post',parameters:'form=getreminders',onSuccess:successReminders});setTimeout('checkForReminders()', 30000);}
function hideDayEvents() {
	var ce = document.getElementById('calFullCell');
	if(ce) {
		new Effect.BlindUp(ce);	
	}
}
function showDayEvents(ev,elem_id) {
	var d = document.getElementById(elem_id);
	if(d) {
		var ce = document.getElementById('calFullCell');
		if(d.innerHTML && ce) {
			ce.style.display = 'none';
			var e=jt_fixE(ev);
            pos = getPosition(ev);
			ce.style.top = pos.y + 'px';
			ce.style.left = pos.x + 'px';
			var ceWidth = document.body.offsetWidth - pos.x - 20;
			ce.style.width = ceWidth + 'px';
			var content = d.innerHTML.replace(/1px;/g, '10px;');
			ce.innerHTML = '<div class="calFullCellHeader"><a href="javascript:hideDayEvents();"><img src="/web/images/default/cancel.png" alt="Close" style="border:0;" /></a></div>' + content.replace(/100%;/g, Math.round(ceWidth - 1) + 'px;');
			new Effect.BlindDown(ce);
		}
	}
}

function showEditTemplateAccounts(ev, lid, lname) {
    var e = jt_fixE(ev);
    selectBox = new jt_DialogBox(true);
    selectBox.setWidth(450);
    selectBox.setTitle('Authorized accounts for: '+unescape(lname));selectBox.setContent('<div class="dialogue" style="height:200px;overflow:auto;"><div id="loctemplateaccountcontent"><img src="/web/images/default/busy.gif" />Loading Account Info...</div></div>');
    currentDialogues.unshift(selectBox);
    selectBox.show();
    pos = getPosition(ev);
    selectBox.moveTo(pos.x, pos.y);
    new Ajax.Request('/'+IDString,{method:'post',parameters:'form=showtemplateaccountinfo&id='+escape(lid),onSuccess:successTemplateAccountInfoAction,onFailure:errFunc});
}

function successTemplateAccountInfoAction(xmlObj) {
    if (xmlObj.responseText&&xmlObj.responseText.indexOf('ERROR:')==-1) {
        var e=document.getElementById('loctemplateaccountcontent');
        if (e) {
            e.innerHTML=xmlObj.responseText;e.parentNode.scrollTop=0;
        }
    } else {
        alert('There was an error performing this action: '+xmlObj.responseText);
    } 
}

function deleteAccountTemplate(aIDString, templateaccountid, template_id) {
    if (confirm('Are you sure you wish to delete this association?')) {
        new Ajax.Request('/'+aIDString,{method:'post',parameters:'form=showtemplateaccountinfo&action=delete&template_id='+escape(template_id)+'&template_account_id='+escape(templateaccountid),onSuccess:successTemplateAccountInfoAction,onFailure:errFunc});
    }
}function addAccountTemplate(template_id) {
    var accountId = document.getElementById("new_account_id_selector").value;
    new Ajax.Request('/'+IDString,{method:'post', parameters:'form=showtemplateaccountinfo&action=add&template_id='+escape(template_id)+'&account_id='+escape(accountId), onSuccess:successTemplateAccountInfoAction,onFailure:errFunc});
}

function successCartRedirectAction(xmlObj){
    if (xmlObj) {
        if (xmlObj.responseText) {
            document.location.href = '?form=viewcart';
        }
    }
}

function addPageItemToCartAndRedirect(item_id) {
    var errMsg = '';
    var d = document.getElementById('min_type');
    var e = document.getElementById('min_required');
    var q = document.getElementById('quantity');
    if (d && d.value == 1 && e && (q.value * 1) < (e.value * 1)) {
        errMsg += '\t - You must select at least ' + e.value + ' to purchase this item.\n';
    }
    if (item_id) {
        var prices = document.getElementsByClassName('itemPrice');
        var selectedPrice;
        if (prices && prices.length) {
            for (i = 0; i < prices.length; i++) {
                if (prices[i].checked == true) {
                    selectedPrice = prices[i].id.replace(/MENU_ITEM_PRICE_/, '');
                    break;
                }
            }
        }
		if (!isInteger(selectedPrice)) {
				var pElem = document.getElementById('hidden_price_value');
				if(pElem) {
					selectedPrice = pElem.value;
				}
			}
        if (!isInteger(selectedPrice)) errMsg += '\t - You must select a price!\n';
        var optionChoices = document.getElementsByClassName('optionChoice');
        var optionsOK = true;
        if (optionChoices && optionChoices.length) {
            for (i = 0; i < optionChoices.length; i++) {
                if (optionChoices[i].selectedIndex == 0 && optionChoices[i].parentNode.parentNode.parentNode.visible()) {
                    optionsOK = false;
                    break;
                }
            }
        }
        if (!optionsOK) errMsg += '\t - Options in drop-down select-boxes are required!';
        if (!errMsg) {
            var serializedForm = $('menuItemForm').serialize();
            new Ajax.Request('/' + IDString, {
                method: 'post',
                parameters: 'form=ajaxcart&cartaction=add&item=' + escape(item_id) + '&' + serializedForm,
                onSuccess: successCartRedirectAction,
                onFailure: errFunc
            });
        } else {
            alert('Please correct the following errors before adding this item to your cart: \n\n' + errMsg);
        }
    }
}

function removeCartItemAndRedirect(uuid) {
    if (confirm('Are you sure you want to remove this item from your cart?')) {
        new Ajax.Request('/' + IDString, {
            method: 'post',
            parameters: 'form=ajaxcart&cartaction=remove&item=' + escape(uuid),
            onSuccess: successCartRedirectAction,
            onFailure: errFunc
        });
    }
}

function updateCartFromPageItem(item_unique_id, iid){var errMsg='';if(item_unique_id){try{var prices=document.getElementsByClassName('itemPrice');var selectedPrice;if(prices&&prices.length){for(i=0;i<prices.length;i++){if(prices[i].checked==true){selectedPrice=prices[i].id.replace(/MENU_ITEM_PRICE_/,'');break;}}}
if (!isInteger(selectedPrice)) {
				var pElem = document.getElementById('hidden_price_value');
				if(pElem) {
					selectedPrice = pElem.value;
				}
			}
if(!isInteger(selectedPrice))errMsg+='\t - You must select a price!\n';var optionChoices=document.getElementsByClassName('optionChoice');var optionsOK=true;if(optionChoices&&optionChoices.length){for(i=0;i<optionChoices.length;i++){if(optionChoices[i].selectedIndex==0&&optionChoices[i].parentNode.parentNode.parentNode.visible()){optionsOK=false;break;}}}
if(!optionsOK)errMsg+='\t - Options in drop-down select-boxes are required!';if(!errMsg){var serializedForm=$('menuItemForm').serialize();document.getElementById('cartHeader').innerHTML='Updating My Cart <img src="/web/images/'+template+'/busy.gif" alt="Please Wait" />';new Ajax.Request('/'+IDString,{method:'post',parameters:'form=ajaxcart&cartaction=update&iid='+escape(iid)+'&item='+escape(item_unique_id)+'&'+serializedForm,onSuccess:successCartAction,onFailure:errFunc});}else{alert('Please correct the following errors before updating this item in your cart: \n\n'+errMsg);}}catch(ex){alert(ex.description);}}}

function updateCartFromPageItemAndRedirect(item_unique_id, iid) {
    var errMsg = '';
    if (item_unique_id) {
        try {
            var prices = document.getElementsByClassName('itemPrice');
            var selectedPrice;
            if (prices && prices.length) {
                for (i = 0; i < prices.length; i++) {
                    if (prices[i].checked == true) {
                        selectedPrice = prices[i].id.replace(/MENU_ITEM_PRICE_/, '');
                        break;
                    }
                }
            }
			if (!isInteger(selectedPrice)) {
				var pElem = document.getElementById('hidden_price_value');
				if(pElem) {
					selectedPrice = pElem.value;
				}
			}
            if (!isInteger(selectedPrice)) errMsg += '\t - You must select a price!\n';
            var optionChoices = document.getElementsByClassName('optionChoice');
            var optionsOK = true;
            if (optionChoices && optionChoices.length) {
                for (i = 0; i < optionChoices.length; i++) {
                    if (optionChoices[i].selectedIndex == 0 && optionChoices[i].parentNode.parentNode.parentNode.visible()) {
                        optionsOK = false;
                        break;
                    }
                }
            }
            if (!optionsOK) errMsg += '\t - Options in drop-down select-boxes are required!';
            if (!errMsg) {
                var serializedForm = $('menuItemForm').serialize();
                new Ajax.Request('/' + IDString, {
                    method: 'post',
                    parameters: 'form=ajaxcart&cartaction=update&iid='+escape(iid)+'&item=' + escape(item_unique_id) + '&' + serializedForm,
                    onSuccess: successCartRedirectAction,
                    onFailure: errFunc
                });
            } else {
                alert('Please correct the following errors before updating this item in your cart: \n\n' + errMsg);
            }
        } catch(ex) {
            alert(ex.description);
        }
    }
}

function accountIdLookup() {
    new Ajax.Request('/'+IDString, {
           method:'get',
           parameters:'form=accountidlookup&qrystr=' + escape(document.getElementById("param_unique~id_s_r_28").value),
           onSuccess:handleAccountIdLookup,
           onFailure:errFunc,
           onReadyStateChange:handleAccountIdLookup
        });
}

function handleAccountIdLookup(xmlObj) {
    if (xmlObj) {
        if (xmlObj.responseText) {
            var elm = document.getElementById("account_id_availability");
            elm.innerHTML = xmlObj.responseText;
            if (xmlObj.responseText == "Good!") {
                elm.style.color = "green";
            } else {
                elm.style.color = "red";
            }
        }
    }
}

var datePickerDivID = "datepicker";
var iFrameDivID = "datepickeriframe";

var dayArrayShort = new Array('Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa');
var dayArrayMed = new Array('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat');
var dayArrayLong = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday');
var monthArrayShort = new Array('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec');
var monthArrayMed = new Array('Jan', 'Feb', 'Mar', 'Apr', 'May', 'June', 'July', 'Aug', 'Sept', 'Oct', 'Nov', 'Dec');
var monthArrayLong = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December');
 
// these variables define the date formatting we're expecting and outputting.
// If you want to use a different format by default, change the defaultDateSeparator
// and defaultDateFormat variables either here or on your HTML page.
var defaultDateSeparator = "/";        // common values would be "/" or "."
var defaultDateFormat = "mdy"    // valid values are "mdy", "dmy", and "ymd"
var dateSeparator = defaultDateSeparator;
var dateFormat = defaultDateFormat;

function displayDatePicker(dateFieldName, displayBelowThisObject, dtFormat, dtSep) {
  var targetDateField = document.getElementsByName (dateFieldName).item(0);
 
  // if we weren't told what node to display the datepicker beneath, just display it
  // beneath the date field we're updating
  if (!displayBelowThisObject)
    displayBelowThisObject = targetDateField;
 
  // if a date separator character was given, update the dateSeparator variable
  if (dtSep)
    dateSeparator = dtSep;
  else
    dateSeparator = defaultDateSeparator;
 
  // if a date format was given, update the dateFormat variable
  if (dtFormat)
    dateFormat = dtFormat;
  else
    dateFormat = defaultDateFormat;
 
  var x = displayBelowThisObject.offsetLeft;
  var y = displayBelowThisObject.offsetTop + displayBelowThisObject.offsetHeight ;
 
  // deal with elements inside tables and such
  var parent = displayBelowThisObject;
  while (parent.offsetParent) {
    parent = parent.offsetParent;
    x += parent.offsetLeft;
    y += parent.offsetTop ;
  }
 
  drawDatePicker(targetDateField, x, y);
}


/**
Draw the datepicker object (which is just a table with calendar elements) at the
specified x and y coordinates, using the targetDateField object as the input tag
that will ultimately be populated with a date.

This function will normally be called by the displayDatePicker function.
*/
function drawDatePicker(targetDateField, x, y) {
  var dt = getFieldDate(targetDateField.value );
 
  // the datepicker table will be drawn inside of a <div> with an ID defined by the
  // global datePickerDivID variable. If such a div doesn't yet exist on the HTML
  // document we're working with, add one.
  if (!document.getElementById(datePickerDivID)) {
    // don't use innerHTML to update the body, because it can cause global variables
    // that are currently pointing to objects on the page to have bad references
    //document.body.innerHTML += "<div id='" + datePickerDivID + "' class='dpDiv'></div>";
    var newNode = document.createElement("div");
    newNode.setAttribute("id", datePickerDivID);
    newNode.setAttribute("class", "dpDiv");
    newNode.setAttribute("style", "visibility: hidden;");
    document.body.appendChild(newNode);
  }
 
  // move the datepicker div to the proper x,y coordinate and toggle the visiblity
  var pickerDiv = document.getElementById(datePickerDivID);
  pickerDiv.style.position = "absolute";
  pickerDiv.style.left = x + "px";
  pickerDiv.style.top = y + "px";
  pickerDiv.style.visibility = (pickerDiv.style.visibility == "visible" ? "hidden" : "visible");
  pickerDiv.style.display = (pickerDiv.style.display == "block" ? "none" : "block");
  pickerDiv.style.zIndex = 10000;
 
  // draw the datepicker table
  refreshDatePicker(targetDateField.name, dt.getFullYear(), dt.getMonth(), dt.getDate());
}


/**
This is the function that actually draws the datepicker calendar.
*/
function refreshDatePicker(dateFieldName, year, month, day) {
  // if no arguments are passed, use today's date; otherwise, month and year
  // are required (if a day is passed, it will be highlighted later)
  var thisDay = new Date();
 
  if ((month >= 0) && (year > 0)) {
    thisDay = new Date(year, month, 1);
  } else {
    day = thisDay.getDate();
    thisDay.setDate(1);
  }
 
  // the calendar will be drawn as a table
  // you can customize the table elements with a global CSS style sheet,
  // or by hardcoding style and formatting elements below
  var crlf = "\r\n";
  var TABLE = "<table cols=7 class='dpTable'>" + crlf;
  var xTABLE = "</table>" + crlf;
  var TR = "<tr class='dpTR'>";
  var TR_title = "<tr class='dpTitleTR'>";
  var TR_days = "<tr class='dpDayTR'>";
  var TR_todaybutton = "<tr class='dpTodayButtonTR'>";
  var xTR = "</tr>" + crlf;
  var TD = "<td class='dpTD' onMouseOut='this.className=\"dpTD\";' onMouseOver=' this.className=\"dpTDHover\";' ";    // leave this tag open, because we'll be adding an onClick event
  var TD_title = "<td colspan=5 class='dpTitleTD'>";
  var TD_buttons = "<td class='dpButtonTD'>";
  var TD_todaybutton = "<td colspan=7 class='dpTodayButtonTD'>";
  var TD_days = "<td class='dpDayTD'>";
  var TD_selected = "<td class='dpDayHighlightTD' onMouseOut='this.className=\"dpDayHighlightTD\";' onMouseOver='this.className=\"dpTDHover\";' ";    // leave this tag open, because we'll be adding an onClick event
  var xTD = "</td>" + crlf;
  var DIV_title = "<div class='dpTitleText'>";
  var DIV_selected = "<div class='dpDayHighlight'>";
  var xDIV = "</div>";
 
  // start generating the code for the calendar table
  var html = TABLE;
 
  // this is the title bar, which displays the month and the buttons to
  // go back to a previous month or forward to the next month
  html += TR_title;
  html += TD_buttons + getButtonCode(dateFieldName, thisDay, -1, "&lt;") + xTD;
  html += TD_title + DIV_title + monthArrayLong[ thisDay.getMonth()] + " " + thisDay.getFullYear() + xDIV + xTD;
  html += TD_buttons + getButtonCode(dateFieldName, thisDay, 1, "&gt;") + xTD;
  html += xTR;
 
  // this is the row that indicates which day of the week we're on
  html += TR_days;
  for(i = 0; i < dayArrayShort.length; i++)
    html += TD_days + dayArrayShort[i] + xTD;
  html += xTR;
 
  // now we'll start populating the table with days of the month
  html += TR;
 
  // first, the leading blanks
  for (i = 0; i < thisDay.getDay(); i++)
    html += TD + "&nbsp;" + xTD;
 
  // now, the days of the month
  do {
    dayNum = thisDay.getDate();
    TD_onclick = " onclick=\"updateDateField('" + dateFieldName + "', '" + getDateString(thisDay) + "');\">";
    
    if (dayNum == day)
      html += TD_selected + TD_onclick + DIV_selected + dayNum + xDIV + xTD;
    else
      html += TD + TD_onclick + dayNum + xTD;
    
    // if this is a Saturday, start a new row
    if (thisDay.getDay() == 6)
      html += xTR + TR;
    
    // increment the day
    thisDay.setDate(thisDay.getDate() + 1);
  } while (thisDay.getDate() > 1)
 
  // fill in any trailing blanks
  if (thisDay.getDay() > 0) {
    for (i = 6; i > thisDay.getDay(); i--)
      html += TD + "&nbsp;" + xTD;
  }
  html += xTR;
 
  // add a button to allow the user to easily return to today, or close the calendar
  var today = new Date();
  var todayString = "Today is " + dayArrayMed[today.getDay()] + ", " + monthArrayMed[ today.getMonth()] + " " + today.getDate();
  html += TR_todaybutton + TD_todaybutton;
  html += "<button class='dpTodayButton' onClick='refreshDatePicker(\"" + dateFieldName + "\");'>this month</button> ";
  html += "<button class='dpTodayButton' onClick='updateDateField(\"" + dateFieldName + "\");'>close</button>";
  html += xTD + xTR;
 
  // and finally, close the table
  html += xTABLE;
 
  document.getElementById(datePickerDivID).innerHTML = html;
  // add an "iFrame shim" to allow the datepicker to display above selection lists
  adjustiFrame();
}


/**
Convenience function for writing the code for the buttons that bring us back or forward
a month.
*/
function getButtonCode(dateFieldName, dateVal, adjust, label)
{
  var newMonth = (dateVal.getMonth () + adjust) % 12;
  var newYear = dateVal.getFullYear() + parseInt((dateVal.getMonth() + adjust) / 12);
  if (newMonth < 0) {
    newMonth += 12;
    newYear += -1;
  }
 
  return "<button class='dpButton' onClick='refreshDatePicker(\"" + dateFieldName + "\", " + newYear + ", " + newMonth + ");'>" + label + "</button>";
}


/**
Convert a JavaScript Date object to a string, based on the dateFormat and dateSeparator
variables at the beginning of this script library.
*/
function getDateString(dateVal)
{
  var dayString = "00" + dateVal.getDate();
  var monthString = "00" + (dateVal.getMonth()+1);
  dayString = dayString.substring(dayString.length - 2);
  monthString = monthString.substring(monthString.length - 2);
 
  switch (dateFormat) {
    case "dmy" :
      return dayString + dateSeparator + monthString + dateSeparator + dateVal.getFullYear();
    case "ymd" :
      return dateVal.getFullYear() + dateSeparator + monthString + dateSeparator + dayString;
    case "mdy" :
    default :
      return monthString + dateSeparator + dayString + dateSeparator + dateVal.getFullYear();
  }
}


/**
Convert a string to a JavaScript Date object.
*/
function getFieldDate(dateString)
{
  var dateVal;
  var dArray;
  var d, m, y;
 
  try {
    dArray = splitDateString(dateString);
    if (dArray) {
      switch (dateFormat) {
        case "dmy" :
          d = parseInt(dArray[0], 10);
          m = parseInt(dArray[1], 10) - 1;
          y = parseInt(dArray[2], 10);
          break;
        case "ymd" :
          d = parseInt(dArray[2], 10);
          m = parseInt(dArray[1], 10) - 1;
          y = parseInt(dArray[0], 10);
          break;
        case "mdy" :
        default :
          d = parseInt(dArray[1], 10);
          m = parseInt(dArray[0], 10) - 1;
          y = parseInt(dArray[2], 10);
          break;
      }
      dateVal = new Date(y, m, d);
    } else if (dateString) {
      dateVal = new Date(dateString);
    } else {
      dateVal = new Date();
    }
  } catch(e) {
    dateVal = new Date();
  }
 
  return dateVal;
}

function splitDateString(dateString) {
  var dArray;
  if (dateString.indexOf("/") >= 0)
    dArray = dateString.split("/");
  else if (dateString.indexOf(".") >= 0)
    dArray = dateString.split(".");
  else if (dateString.indexOf("-") >= 0)
    dArray = dateString.split("-");
  else if (dateString.indexOf("\\") >= 0)
    dArray = dateString.split("\\");
  else
    dArray = false;
 
  return dArray;
}

function updateDateField(dateFieldName, dateString) {
  var targetDateField = document.getElementsByName (dateFieldName).item(0);
  if (dateString)
    targetDateField.value = dateString;
 
  var pickerDiv = document.getElementById(datePickerDivID);
  pickerDiv.style.visibility = "hidden";
  pickerDiv.style.display = "none";
 
  adjustiFrame();
  targetDateField.focus();
 
  // after the datepicker has closed, optionally run a user-defined function called
  // datePickerClosed, passing the field that was just updated as a parameter
  // (note that this will only run if the user actually selected a date from the datepicker)
  if ((dateString) && (typeof(datePickerClosed) == "function"))
    datePickerClosed(targetDateField);
}


/**
Use an "iFrame shim" to deal with problems where the datepicker shows up behind
selection list elements, if they're below the datepicker. The problem and solution are
described at:

http://dotnetjunkies.com/WebLog/jking/archive/2003/07/21/488.aspx
http://dotnetjunkies.com/WebLog/jking/archive/2003/10/30/2975.aspx
*/
function adjustiFrame(pickerDiv, iFrameDiv) {
  // we know that Opera doesn't like something about this, so if we
  // think we're using Opera, don't even try
  var is_opera = (navigator.userAgent.toLowerCase().indexOf("opera") != -1);
  if (is_opera)
    return;
  
  // put a try/catch block around the whole thing, just in case
  try {
    if (!document.getElementById(iFrameDivID)) {
      // don't use innerHTML to update the body, because it can cause global variables
      // that are currently pointing to objects on the page to have bad references
      //document.body.innerHTML += "<iframe id='" + iFrameDivID + "' src='javascript:false;' scrolling='no' frameborder='0'>";
      var newNode = document.createElement("iFrame");
      newNode.setAttribute("id", iFrameDivID);
      newNode.setAttribute("src", "javascript:false;");
      newNode.setAttribute("scrolling", "no");
      newNode.setAttribute ("frameborder", "0");
      document.body.appendChild(newNode);
    }
    
    if (!pickerDiv)
      pickerDiv = document.getElementById(datePickerDivID);
    if (!iFrameDiv)
      iFrameDiv = document.getElementById(iFrameDivID);
    
    try {
      iFrameDiv.style.position = "absolute";
      iFrameDiv.style.width = pickerDiv.offsetWidth;
      iFrameDiv.style.height = pickerDiv.offsetHeight ;
      iFrameDiv.style.top = pickerDiv.style.top;
      iFrameDiv.style.left = pickerDiv.style.left;
      iFrameDiv.style.zIndex = pickerDiv.style.zIndex - 1;
      iFrameDiv.style.visibility = pickerDiv.style.visibility ;
      iFrameDiv.style.display = pickerDiv.style.display;
    } catch(e) {
    }
 
  } catch (ee) {
  }
 
}

/* CSS drop shadow script */

/*------------------------------------
	Title: Cross-Browser Text Drop Shadows
	Author: Scott Jehl, www.scottjehl.com, scott@scottjehl.com
	Date: 7/19/06
http://creativecommons.org/licenses/by-nc-sa/2.5/
--------------------------------------*/

/*
getElementsByClass function (credit Dustin Diaz, www.dustindiaz.com)
*/
function getElementsByClass(searchClass,node,tag) {
	var classElements = new Array();
	if ( node == null )
		node = document;
	if ( tag == null )
		tag = '*';
	var els = node.getElementsByTagName(tag);
	var elsLen = els.length;
	var pattern = new RegExp('(^|\\s)'+searchClass+'(\\s|$)');
	for (i = 0, j = 0; i < elsLen; i++) {
		if ( pattern.test(els[i].className) ) {
			classElements[j] = els[i];
			j++;
		}
	}
	return classElements;
}




/*
createDropShadows function 
*/

createDropShadows = function(){
//get the elements with the classname highContrast
var highContrast = getElementsByClass('highContrast');

	for(i = 0; i < highContrast.length; i++){
		//current element
		var currentElement = highContrast[i];
		//current element's text
		var hcContent = currentElement.firstChild.data;
		//create a new span to replace the content text
		var contentSpan = document.createElement('span');
		var contentSpanText = document.createTextNode(hcContent);
		contentSpan.appendChild(contentSpanText);
		//create another span for the shadow text and give it the class "shadow"
		var shadowSpan = document.createElement('span');
		var shadowSpanText = document.createTextNode(hcContent);
		shadowSpan.appendChild(shadowSpanText);
		shadowSpan.className = "shadow";
		
		
		//kill the original text and toss the spans in there with the content on top
		currentElement.firstChild.data = '';
		currentElement.appendChild(shadowSpan);
		currentElement.appendChild(contentSpan);
	}
}

function showEmailVerifyDialogue() {
		
}

pointer = function(event) {
      var docElement = document.documentElement,
      body = document.body || { scrollLeft: 0, scrollTop: 0 };
      return {
        x: event.pageX || (event.clientX +
          (docElement.scrollLeft || body.scrollLeft) -
          (docElement.clientLeft || 0)),
        y: event.pageY || (event.clientY +
          (docElement.scrollTop || body.scrollTop) -
          (docElement.clientTop || 0))
      };
    };

pointerX = function(event) { return pointer(event).x };
pointerY = function(event) { return pointer(event).y };

/* functions for reseller web service selection */

function updateWebServiceForRestaurant(rid, sid) {
	if(rid > 0) {
		new Ajax.Request('/'+IDString, {
			method: 'post',
			parameters: 'form=updatewebservice&rid='+escape(rid)+'&sid='+escape(sid),
			onSuccess: function(transport) {$('web_service_notification').innerHTML = transport.responseText; new Effect.Highlight('web_service_notification');},
			onFailure: errFunc
		});	
	}
}

function showUnredeemedSpecials(xmlObj) {
	if(xmlObj && xmlObj.responseText && xmlObj.responseText.indexOf('discounts') != -1) {
		var selectBox=new jt_DialogBox(true);
		selectBox.setWidth(470);
		selectBox.setTitle('You have some specials');
		selectBox.setContent('<div class="dialogue" style="height:470px;overflow:auto;">'+xmlObj.responseText+'</div>');
		currentDialogues.unshift(selectBox);
		selectBox.show();
		selectBox.moveTo(-1, -1);
	}
}

function doCustomPriceCalc(count) {
		var selected_price = $('menuItemForm').getInputs('radio','MENU_ITEM_PRICE').find(function(radio) { return radio.checked; }).value;
		if(!selected_price) {
			var prices = $$('.itemPrice');
			if(prices && prices.length) {
				prices[0].checked = true;
				selected_price = prices[0].value;
			}
		}
		if(selected_price) {
			try {
				custom_price_array = eval('alternate_prices_'+selected_price);
				if(custom_price_array && custom_price_array.length > 0) {
					if(custom_price_array.length < count -1) count = custom_price_array.length -1;
					var custom_price = custom_price_array[count];
					var elem = $('additional_notice');
					elem.innerHTML = 'This item is priced based upon the number of extras/toppings you choose.  For the current selections, the price will be $' + custom_price / 100;
					new Effect.Appear(elem);
				}
			} catch (ex) {}
		}
	}

function calculatePriceFromExtraCount() {
	var elems = $$('.menu_item_extra');
	var count = 0;
	if(elems && elems.length > 0) {
		for(i=0;i<elems.length;i++) {
			if(elems[i].checked) {
				var assoc_elem = $(elems[i].id + '_count');
				if(assoc_elem && assoc_elem.value) count += (assoc_elem.value * 1);
				else count++;
			}
		}
	}
	if(doCustomPriceCalc) doCustomPriceCalc(count);
}

function toggleConditionalAddon(elem, option, child, item_id, edit_mode, is_conditional, do_price_calc) {
	if(do_price_calc) calculatePriceFromExtraCount();
	if(is_conditional) return;
	if(elem) {
		if(elem.type == 'checkbox') {
			var targetElem = $('conditional_addon_'+option+'_'+child);
			if(targetElem) {
				if(elem.checked == true) {
					// we want to display the conditional add-on element
					targetElem.style.display = 'block';
				} else {
					// we want to hide the conditional add-on element
					try {
						var v = targetElem.firstChild.nextSibling.firstChild.firstChild.nextSibling.nextSibling;
						if(v.tagName == 'SELECT') {
							v.selectedIndex = 0;
						}
					} catch (ex) {
						try {
							var v = targetElem.firstChild.firstChild.firstChild;
							if(v.tagName == 'INPUT' && v.type == 'checkbox') {
								v.checked = false;	
							}
						} catch (ex2) {}
					}
					targetElem.style.display = 'none';
				}
			}
		} else if (elem.tagName == 'SELECT') {
			var targetElem = $('conditional_addon_'+option+'_'+child);
			if(targetElem) {
				if(elem.selectedIndex == 0) {
					targetElem.style.display = 'none';
				} else {
					// if the selected option choice has a child add on, then we need to retrieve the correct add-on from the server and show it
					new Ajax.Request('/'+IDString, {
						method: 'post',
						parameters: 'form=getchildaddon&ocid='+escape(elem.options[elem.selectedIndex].value)+'&item_id='+escape(item_id)+'&edit_mode='+escape(edit_mode),
						onSuccess: function(transport) {targetElem.innerHTML = transport.responseText;targetElem.style.display='block';},
						onFailure: errFunc
					});	
				}
			}
		}
	}
}

// script.aculo.us dragdrop.js v1.7.0, Fri Jan 19 19:16:36 CET 2007

// Copyright (c) 2005, 2006 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
//           (c) 2005, 2006 Sammi Williams (http://www.oriontransfer.co.nz, sammi@oriontransfer.co.nz)
// 
// script.aculo.us is freely distributable under the terms of an MIT-style license.
// For details, see the script.aculo.us web site: http://script.aculo.us/

if(typeof Effect == 'undefined')
  throw("dragdrop.js requires including script.aculo.us' effects.js library");

var Droppables = {
  drops: [],

  remove: function(element) {
    this.drops = this.drops.reject(function(d) { return d.element==$(element) });
  },

  add: function(element) {
    element = $(element);
    var options = Object.extend({
      greedy:     true,
      hoverclass: null,
      tree:       false
    }, arguments[1] || {});

    // cache containers
    if(options.containment) {
      options._containers = [];
      var containment = options.containment;
      if((typeof containment == 'object') && 
        (containment.constructor == Array)) {
        containment.each( function(c) { options._containers.push($(c)) });
      } else {
        options._containers.push($(containment));
      }
    }
    
    if(options.accept) options.accept = [options.accept].flatten();

    Element.makePositioned(element); // fix IE
    options.element = element;

    this.drops.push(options);
  },
  
  findDeepestChild: function(drops) {
    deepest = drops[0];
      
    for (i = 1; i < drops.length; ++i)
      if (Element.isParent(drops[i].element, deepest.element))
        deepest = drops[i];
    
    return deepest;
  },

  isContained: function(element, drop) {
    var containmentNode;
    if(drop.tree) {
      containmentNode = element.treeNode; 
    } else {
      containmentNode = element.parentNode;
    }
    return drop._containers.detect(function(c) { return containmentNode == c });
  },
  
  isAffected: function(point, element, drop) {
    return (
      (drop.element!=element) &&
      ((!drop._containers) ||
        this.isContained(element, drop)) &&
      ((!drop.accept) ||
        (Element.classNames(element).detect( 
          function(v) { return drop.accept.include(v) } ) )) &&
      Position.within(drop.element, point[0], point[1]) );
  },

  deactivate: function(drop) {
    if(drop.hoverclass)
      Element.removeClassName(drop.element, drop.hoverclass);
    this.last_active = null;
  },

  activate: function(drop) {
    if(drop.hoverclass)
      Element.addClassName(drop.element, drop.hoverclass);
    this.last_active = drop;
  },

  show: function(point, element) {
    if(!this.drops.length) return;
    var affected = [];
    
    if(this.last_active) this.deactivate(this.last_active);
    this.drops.each( function(drop) {
      if(Droppables.isAffected(point, element, drop))
        affected.push(drop);
    });
        
    if(affected.length>0) {
      drop = Droppables.findDeepestChild(affected);
      Position.within(drop.element, point[0], point[1]);
      if(drop.onHover)
        drop.onHover(element, drop.element, Position.overlap(drop.overlap, drop.element));
      
      Droppables.activate(drop);
    }
  },

  fire: function(event, element) {
    if(!this.last_active) return;
    Position.prepare();

    if (this.isAffected([Event.pointerX(event), Event.pointerY(event)], element, this.last_active))
      if (this.last_active.onDrop) 
        this.last_active.onDrop(element, this.last_active.element, event);
  },

  reset: function() {
    if(this.last_active)
      this.deactivate(this.last_active);
  }
}

var Draggables = {
  drags: [],
  observers: [],
  
  register: function(draggable) {
    if(this.drags.length == 0) {
      this.eventMouseUp   = this.endDrag.bindAsEventListener(this);
      this.eventMouseMove = this.updateDrag.bindAsEventListener(this);
      this.eventKeypress  = this.keyPress.bindAsEventListener(this);
      
      Event.observe(document, "mouseup", this.eventMouseUp);
      Event.observe(document, "mousemove", this.eventMouseMove);
      Event.observe(document, "keypress", this.eventKeypress);
    }
    this.drags.push(draggable);
  },
  
  unregister: function(draggable) {
    this.drags = this.drags.reject(function(d) { return d==draggable });
    if(this.drags.length == 0) {
      Event.stopObserving(document, "mouseup", this.eventMouseUp);
      Event.stopObserving(document, "mousemove", this.eventMouseMove);
      Event.stopObserving(document, "keypress", this.eventKeypress);
    }
  },
  
  activate: function(draggable) {
    if(draggable.options.delay) { 
      this._timeout = setTimeout(function() { 
        Draggables._timeout = null; 
        window.focus(); 
        Draggables.activeDraggable = draggable; 
      }.bind(this), draggable.options.delay); 
    } else {
      window.focus(); // allows keypress events if window isn't currently focused, fails for Safari
      this.activeDraggable = draggable;
    }
  },
  
  deactivate: function() {
    this.activeDraggable = null;
  },
  
  updateDrag: function(event) {
    if(!this.activeDraggable) return;
    var pointer = [Event.pointerX(event), Event.pointerY(event)];
    // Mozilla-based browsers fire successive mousemove events with
    // the same coordinates, prevent needless redrawing (moz bug?)
    if(this._lastPointer && (this._lastPointer.inspect() == pointer.inspect())) return;
    this._lastPointer = pointer;
    
    this.activeDraggable.updateDrag(event, pointer);
  },
  
  endDrag: function(event) {
    if(this._timeout) { 
      clearTimeout(this._timeout); 
      this._timeout = null; 
    }
    if(!this.activeDraggable) return;
    this._lastPointer = null;
    this.activeDraggable.endDrag(event);
    this.activeDraggable = null;
  },
  
  keyPress: function(event) {
    if(this.activeDraggable)
      this.activeDraggable.keyPress(event);
  },
  
  addObserver: function(observer) {
    this.observers.push(observer);
    this._cacheObserverCallbacks();
  },
  
  removeObserver: function(element) {  // element instead of observer fixes mem leaks
    this.observers = this.observers.reject( function(o) { return o.element==element });
    this._cacheObserverCallbacks();
  },
  
  notify: function(eventName, draggable, event) {  // 'onStart', 'onEnd', 'onDrag'
    if(this[eventName+'Count'] > 0)
      this.observers.each( function(o) {
        if(o[eventName]) o[eventName](eventName, draggable, event);
      });
    if(draggable.options[eventName]) draggable.options[eventName](draggable, event);
  },
  
  _cacheObserverCallbacks: function() {
    ['onStart','onEnd','onDrag'].each( function(eventName) {
      Draggables[eventName+'Count'] = Draggables.observers.select(
        function(o) { return o[eventName]; }
      ).length;
    });
  }
}

/*--------------------------------------------------------------------------*/

var Draggable = Class.create();
Draggable._dragging    = {};

Draggable.prototype = {
  initialize: function(element) {
    var defaults = {
      handle: false,
      reverteffect: function(element, top_offset, left_offset) {
        var dur = Math.sqrt(Math.abs(top_offset^2)+Math.abs(left_offset^2))*0.02;
        new Effect.Move(element, { x: -left_offset, y: -top_offset, duration: dur,
          queue: {scope:'_draggable', position:'end'}
        });
      },
      endeffect: function(element) {
        var toOpacity = typeof element._opacity == 'number' ? element._opacity : 1.0;
        new Effect.Opacity(element, {duration:0.2, from:0.7, to:toOpacity, 
          queue: {scope:'_draggable', position:'end'},
          afterFinish: function(){ 
            Draggable._dragging[element] = false 
          }
        }); 
      },
      zindex: 1000,
      revert: false,
      scroll: false,
      scrollSensitivity: 20,
      scrollSpeed: 15,
      snap: false,  // false, or xy or [x,y] or function(x,y){ return [x,y] }
      delay: 0
    };
    
    if(!arguments[1] || typeof arguments[1].endeffect == 'undefined')
      Object.extend(defaults, {
        starteffect: function(element) {
          element._opacity = Element.getOpacity(element);
          Draggable._dragging[element] = true;
          new Effect.Opacity(element, {duration:0.2, from:element._opacity, to:0.7}); 
        }
      });
    
    var options = Object.extend(defaults, arguments[1] || {});

    this.element = $(element);
    
    if(options.handle && (typeof options.handle == 'string'))
      this.handle = this.element.down('.'+options.handle, 0);
    
    if(!this.handle) this.handle = $(options.handle);
    if(!this.handle) this.handle = this.element;
    
    if(options.scroll && !options.scroll.scrollTo && !options.scroll.outerHTML) {
      options.scroll = $(options.scroll);
      this._isScrollChild = Element.childOf(this.element, options.scroll);
    }

    Element.makePositioned(this.element); // fix IE    

    this.delta    = this.currentDelta();
    this.options  = options;
    this.dragging = false;   

    this.eventMouseDown = this.initDrag.bindAsEventListener(this);
    Event.observe(this.handle, "mousedown", this.eventMouseDown);
    
    Draggables.register(this);
  },
  
  destroy: function() {
    Event.stopObserving(this.handle, "mousedown", this.eventMouseDown);
    Draggables.unregister(this);
  },
  
  currentDelta: function() {
    return([
      parseInt(Element.getStyle(this.element,'left') || '0'),
      parseInt(Element.getStyle(this.element,'top') || '0')]);
  },
  
  initDrag: function(event) {
    if(typeof Draggable._dragging[this.element] != 'undefined' &&
      Draggable._dragging[this.element]) return;
    if(Event.isLeftClick(event)) {    
      // abort on form elements, fixes a Firefox issue
      var src = Event.element(event);
      if((tag_name = src.tagName.toUpperCase()) && (
        tag_name=='INPUT' ||
        tag_name=='SELECT' ||
        tag_name=='OPTION' ||
        tag_name=='BUTTON' ||
        tag_name=='TEXTAREA')) return;
        
      var pointer = [Event.pointerX(event), Event.pointerY(event)];
      var pos     = Position.cumulativeOffset(this.element);
      this.offset = [0,1].map( function(i) { return (pointer[i] - pos[i]) });
      
      Draggables.activate(this);
      Event.stop(event);
    }
  },
  
  startDrag: function(event) {
    this.dragging = true;
    
    if(this.options.zindex) {
      this.originalZ = parseInt(Element.getStyle(this.element,'z-index') || 0);
      this.element.style.zIndex = this.options.zindex;
    }
    
    if(this.options.ghosting) {
      this._clone = this.element.cloneNode(true);
      Position.absolutize(this.element);
      this.element.parentNode.insertBefore(this._clone, this.element);
    }
    
    if(this.options.scroll) {
      if (this.options.scroll == window) {
        var where = this._getWindowScroll(this.options.scroll);
        this.originalScrollLeft = where.left;
        this.originalScrollTop = where.top;
      } else {
        this.originalScrollLeft = this.options.scroll.scrollLeft;
        this.originalScrollTop = this.options.scroll.scrollTop;
      }
    }
    
    Draggables.notify('onStart', this, event);
        
    if(this.options.starteffect) this.options.starteffect(this.element);
  },
  
  updateDrag: function(event, pointer) {
    if(!this.dragging) this.startDrag(event);
    Position.prepare();
    Droppables.show(pointer, this.element);
    Draggables.notify('onDrag', this, event);
    
    this.draw(pointer);
    if(this.options.change) this.options.change(this);
    
    if(this.options.scroll) {
      this.stopScrolling();
      
      var p;
      if (this.options.scroll == window) {
        with(this._getWindowScroll(this.options.scroll)) { p = [ left, top, left+width, top+height ]; }
      } else {
        p = Position.page(this.options.scroll);
        p[0] += this.options.scroll.scrollLeft + Position.deltaX;
        p[1] += this.options.scroll.scrollTop + Position.deltaY;
        p.push(p[0]+this.options.scroll.offsetWidth);
        p.push(p[1]+this.options.scroll.offsetHeight);
      }
      var speed = [0,0];
      if(pointer[0] < (p[0]+this.options.scrollSensitivity)) speed[0] = pointer[0]-(p[0]+this.options.scrollSensitivity);
      if(pointer[1] < (p[1]+this.options.scrollSensitivity)) speed[1] = pointer[1]-(p[1]+this.options.scrollSensitivity);
      if(pointer[0] > (p[2]-this.options.scrollSensitivity)) speed[0] = pointer[0]-(p[2]-this.options.scrollSensitivity);
      if(pointer[1] > (p[3]-this.options.scrollSensitivity)) speed[1] = pointer[1]-(p[3]-this.options.scrollSensitivity);
      this.startScrolling(speed);
    }
    
    // fix AppleWebKit rendering
    if(navigator.appVersion.indexOf('AppleWebKit')>0) window.scrollBy(0,0);
    
    Event.stop(event);
  },
  
  finishDrag: function(event, success) {
    this.dragging = false;

    if(this.options.ghosting) {
      Position.relativize(this.element);
      Element.remove(this._clone);
      this._clone = null;
    }

    if(success) Droppables.fire(event, this.element);
    Draggables.notify('onEnd', this, event);

    var revert = this.options.revert;
    if(revert && typeof revert == 'function') revert = revert(this.element);
    
    var d = this.currentDelta();
    if(revert && this.options.reverteffect) {
      this.options.reverteffect(this.element, 
        d[1]-this.delta[1], d[0]-this.delta[0]);
    } else {
      this.delta = d;
    }

    if(this.options.zindex)
      this.element.style.zIndex = this.originalZ;

    if(this.options.endeffect) 
      this.options.endeffect(this.element);
      
    Draggables.deactivate(this);
    Droppables.reset();
  },
  
  keyPress: function(event) {
    if(event.keyCode!=Event.KEY_ESC) return;
    this.finishDrag(event, false);
    Event.stop(event);
  },
  
  endDrag: function(event) {
    if(!this.dragging) return;
    this.stopScrolling();
    this.finishDrag(event, true);
    Event.stop(event);
  },
  
  draw: function(point) {
    var pos = Position.cumulativeOffset(this.element);
    if(this.options.ghosting) {
      var r   = Position.realOffset(this.element);
      pos[0] += r[0] - Position.deltaX; pos[1] += r[1] - Position.deltaY;
    }
    
    var d = this.currentDelta();
    pos[0] -= d[0]; pos[1] -= d[1];
    
    if(this.options.scroll && (this.options.scroll != window && this._isScrollChild)) {
      pos[0] -= this.options.scroll.scrollLeft-this.originalScrollLeft;
      pos[1] -= this.options.scroll.scrollTop-this.originalScrollTop;
    }
    
    var p = [0,1].map(function(i){ 
      return (point[i]-pos[i]-this.offset[i]) 
    }.bind(this));
    
    if(this.options.snap) {
      if(typeof this.options.snap == 'function') {
        p = this.options.snap(p[0],p[1],this);
      } else {
      if(this.options.snap instanceof Array) {
        p = p.map( function(v, i) {
          return Math.round(v/this.options.snap[i])*this.options.snap[i] }.bind(this))
      } else {
        p = p.map( function(v) {
          return Math.round(v/this.options.snap)*this.options.snap }.bind(this))
      }
    }}
    
    var style = this.element.style;
    if((!this.options.constraint) || (this.options.constraint=='horizontal'))
      style.left = p[0] + "px";
    if((!this.options.constraint) || (this.options.constraint=='vertical'))
      style.top  = p[1] + "px";
    
    if(style.visibility=="hidden") style.visibility = ""; // fix gecko rendering
  },
  
  stopScrolling: function() {
    if(this.scrollInterval) {
      clearInterval(this.scrollInterval);
      this.scrollInterval = null;
      Draggables._lastScrollPointer = null;
    }
  },
  
  startScrolling: function(speed) {
    if(!(speed[0] || speed[1])) return;
    this.scrollSpeed = [speed[0]*this.options.scrollSpeed,speed[1]*this.options.scrollSpeed];
    this.lastScrolled = new Date();
    this.scrollInterval = setInterval(this.scroll.bind(this), 10);
  },
  
  scroll: function() {
    var current = new Date();
    var delta = current - this.lastScrolled;
    this.lastScrolled = current;
    if(this.options.scroll == window) {
      with (this._getWindowScroll(this.options.scroll)) {
        if (this.scrollSpeed[0] || this.scrollSpeed[1]) {
          var d = delta / 1000;
          this.options.scroll.scrollTo( left + d*this.scrollSpeed[0], top + d*this.scrollSpeed[1] );
        }
      }
    } else {
      this.options.scroll.scrollLeft += this.scrollSpeed[0] * delta / 1000;
      this.options.scroll.scrollTop  += this.scrollSpeed[1] * delta / 1000;
    }
    
    Position.prepare();
    Droppables.show(Draggables._lastPointer, this.element);
    Draggables.notify('onDrag', this);
    if (this._isScrollChild) {
      Draggables._lastScrollPointer = Draggables._lastScrollPointer || $A(Draggables._lastPointer);
      Draggables._lastScrollPointer[0] += this.scrollSpeed[0] * delta / 1000;
      Draggables._lastScrollPointer[1] += this.scrollSpeed[1] * delta / 1000;
      if (Draggables._lastScrollPointer[0] < 0)
        Draggables._lastScrollPointer[0] = 0;
      if (Draggables._lastScrollPointer[1] < 0)
        Draggables._lastScrollPointer[1] = 0;
      this.draw(Draggables._lastScrollPointer);
    }
    
    if(this.options.change) this.options.change(this);
  },
  
  _getWindowScroll: function(w) {
    var T, L, W, H;
    with (w.document) {
      if (w.document.documentElement && documentElement.scrollTop) {
        T = documentElement.scrollTop;
        L = documentElement.scrollLeft;
      } else if (w.document.body) {
        T = body.scrollTop;
        L = body.scrollLeft;
      }
      if (w.innerWidth) {
        W = w.innerWidth;
        H = w.innerHeight;
      } else if (w.document.documentElement && documentElement.clientWidth) {
        W = documentElement.clientWidth;
        H = documentElement.clientHeight;
      } else {
        W = body.offsetWidth;
        H = body.offsetHeight
      }
    }
    return { top: T, left: L, width: W, height: H };
  }
}

/*--------------------------------------------------------------------------*/

var SortableObserver = Class.create();
SortableObserver.prototype = {
  initialize: function(element, observer) {
    this.element   = $(element);
    this.observer  = observer;
    this.lastValue = Sortable.serialize(this.element);
  },
  
  onStart: function() {
    this.lastValue = Sortable.serialize(this.element);
  },
  
  onEnd: function() {
    Sortable.unmark();
    if(this.lastValue != Sortable.serialize(this.element))
      this.observer(this.element)
  }
}

var Sortable = {
  SERIALIZE_RULE: /^[^_\-](?:[A-Za-z0-9\-\_]*)[_](.*)$/,
  
  sortables: {},
  
  _findRootElement: function(element) {
    while (element.tagName.toUpperCase() != "BODY") {  
      if(element.id && Sortable.sortables[element.id]) return element;
      element = element.parentNode;
    }
  },

  options: function(element) {
    element = Sortable._findRootElement($(element));
    if(!element) return;
    return Sortable.sortables[element.id];
  },
  
  destroy: function(element){
    var s = Sortable.options(element);
    
    if(s) {
      Draggables.removeObserver(s.element);
      s.droppables.each(function(d){ Droppables.remove(d) });
      s.draggables.invoke('destroy');
      
      delete Sortable.sortables[s.element.id];
    }
  },

  create: function(element) {
    element = $(element);
    var options = Object.extend({ 
      element:     element,
      tag:         'li',       // assumes li children, override with tag: 'tagname'
      dropOnEmpty: false,
      tree:        false,
      treeTag:     'ul',
      overlap:     'vertical', // one of 'vertical', 'horizontal'
      constraint:  'vertical', // one of 'vertical', 'horizontal', false
      containment: element,    // also takes array of elements (or id's); or false
      handle:      false,      // or a CSS class
      only:        false,
      delay:       0,
      hoverclass:  null,
      ghosting:    false,
      scroll:      false,
      scrollSensitivity: 20,
      scrollSpeed: 15,
      format:      this.SERIALIZE_RULE,
      onChange:    Prototype.emptyFunction,
      onUpdate:    Prototype.emptyFunction
    }, arguments[1] || {});

    // clear any old sortable with same element
    this.destroy(element);

    // build options for the draggables
    var options_for_draggable = {
      revert:      true,
      scroll:      options.scroll,
      scrollSpeed: options.scrollSpeed,
      scrollSensitivity: options.scrollSensitivity,
      delay:       options.delay,
      ghosting:    options.ghosting,
      constraint:  options.constraint,
      handle:      options.handle };

    if(options.starteffect)
      options_for_draggable.starteffect = options.starteffect;

    if(options.reverteffect)
      options_for_draggable.reverteffect = options.reverteffect;
    else
      if(options.ghosting) options_for_draggable.reverteffect = function(element) {
        element.style.top  = 0;
        element.style.left = 0;
      };

    if(options.endeffect)
      options_for_draggable.endeffect = options.endeffect;

    if(options.zindex)
      options_for_draggable.zindex = options.zindex;

    // build options for the droppables  
    var options_for_droppable = {
      overlap:     options.overlap,
      containment: options.containment,
      tree:        options.tree,
      hoverclass:  options.hoverclass,
      onHover:     Sortable.onHover
    }
    
    var options_for_tree = {
      onHover:      Sortable.onEmptyHover,
      overlap:      options.overlap,
      containment:  options.containment,
      hoverclass:   options.hoverclass
    }

    // fix for gecko engine
    Element.cleanWhitespace(element); 

    options.draggables = [];
    options.droppables = [];

    // drop on empty handling
    if(options.dropOnEmpty || options.tree) {
      Droppables.add(element, options_for_tree);
      options.droppables.push(element);
    }

    (this.findElements(element, options) || []).each( function(e) {
      // handles are per-draggable
      var handle = options.handle ? 
        $(e).down('.'+options.handle,0) : e;    
      options.draggables.push(
        new Draggable(e, Object.extend(options_for_draggable, { handle: handle })));
      Droppables.add(e, options_for_droppable);
      if(options.tree) e.treeNode = element;
      options.droppables.push(e);      
    });
    
    if(options.tree) {
      (Sortable.findTreeElements(element, options) || []).each( function(e) {
        Droppables.add(e, options_for_tree);
        e.treeNode = element;
        options.droppables.push(e);
      });
    }

    // keep reference
    this.sortables[element.id] = options;

    // for onupdate
    Draggables.addObserver(new SortableObserver(element, options.onUpdate));

  },

  // return all suitable-for-sortable elements in a guaranteed order
  findElements: function(element, options) {
    return Element.findChildren(
      element, options.only, options.tree ? true : false, options.tag);
  },
  
  findTreeElements: function(element, options) {
    return Element.findChildren(
      element, options.only, options.tree ? true : false, options.treeTag);
  },

  onHover: function(element, dropon, overlap) {
    if(Element.isParent(dropon, element)) return;

    if(overlap > .33 && overlap < .66 && Sortable.options(dropon).tree) {
      return;
    } else if(overlap>0.5) {
      Sortable.mark(dropon, 'before');
      if(dropon.previousSibling != element) {
        var oldParentNode = element.parentNode;
        element.style.visibility = "hidden"; // fix gecko rendering
        dropon.parentNode.insertBefore(element, dropon);
        if(dropon.parentNode!=oldParentNode) 
          Sortable.options(oldParentNode).onChange(element);
        Sortable.options(dropon.parentNode).onChange(element);
      }
    } else {
      Sortable.mark(dropon, 'after');
      var nextElement = dropon.nextSibling || null;
      if(nextElement != element) {
        var oldParentNode = element.parentNode;
        element.style.visibility = "hidden"; // fix gecko rendering
        dropon.parentNode.insertBefore(element, nextElement);
        if(dropon.parentNode!=oldParentNode) 
          Sortable.options(oldParentNode).onChange(element);
        Sortable.options(dropon.parentNode).onChange(element);
      }
    }
  },
  
  onEmptyHover: function(element, dropon, overlap) {
    var oldParentNode = element.parentNode;
    var droponOptions = Sortable.options(dropon);
        
    if(!Element.isParent(dropon, element)) {
      var index;
      
      var children = Sortable.findElements(dropon, {tag: droponOptions.tag, only: droponOptions.only});
      var child = null;
            
      if(children) {
        var offset = Element.offsetSize(dropon, droponOptions.overlap) * (1.0 - overlap);
        
        for (index = 0; index < children.length; index += 1) {
          if (offset - Element.offsetSize (children[index], droponOptions.overlap) >= 0) {
            offset -= Element.offsetSize (children[index], droponOptions.overlap);
          } else if (offset - (Element.offsetSize (children[index], droponOptions.overlap) / 2) >= 0) {
            child = index + 1 < children.length ? children[index + 1] : null;
            break;
          } else {
            child = children[index];
            break;
          }
        }
      }
      
      dropon.insertBefore(element, child);
      
      Sortable.options(oldParentNode).onChange(element);
      droponOptions.onChange(element);
    }
  },

  unmark: function() {
    if(Sortable._marker) Sortable._marker.hide();
  },

  mark: function(dropon, position) {
    // mark on ghosting only
    var sortable = Sortable.options(dropon.parentNode);
    if(sortable && !sortable.ghosting) return; 

    if(!Sortable._marker) {
      Sortable._marker = 
        ($('dropmarker') || Element.extend(document.createElement('DIV'))).
          hide().addClassName('dropmarker').setStyle({position:'absolute'});
      document.getElementsByTagName("body").item(0).appendChild(Sortable._marker);
    }    
    var offsets = Position.cumulativeOffset(dropon);
    Sortable._marker.setStyle({left: offsets[0]+'px', top: offsets[1] + 'px'});
    
    if(position=='after')
      if(sortable.overlap == 'horizontal') 
        Sortable._marker.setStyle({left: (offsets[0]+dropon.clientWidth) + 'px'});
      else
        Sortable._marker.setStyle({top: (offsets[1]+dropon.clientHeight) + 'px'});
    
    Sortable._marker.show();
  },
  
  _tree: function(element, options, parent) {
    var children = Sortable.findElements(element, options) || [];
  
    for (var i = 0; i < children.length; ++i) {
      var match = children[i].id.match(options.format);

      if (!match) continue;
      
      var child = {
        id: encodeURIComponent(match ? match[1] : null),
        element: element,
        parent: parent,
        children: [],
        position: parent.children.length,
        container: $(children[i]).down(options.treeTag)
      }
      
      /* Get the element containing the children and recurse over it */
      if (child.container)
        this._tree(child.container, options, child)
      
      parent.children.push (child);
    }

    return parent; 
  },

  tree: function(element) {
    element = $(element);
    var sortableOptions = this.options(element);
    var options = Object.extend({
      tag: sortableOptions.tag,
      treeTag: sortableOptions.treeTag,
      only: sortableOptions.only,
      name: element.id,
      format: sortableOptions.format
    }, arguments[1] || {});
    
    var root = {
      id: null,
      parent: null,
      children: [],
      container: element,
      position: 0
    }
    
    return Sortable._tree(element, options, root);
  },

  /* Construct a [i] index for a particular node */
  _constructIndex: function(node) {
    var index = '';
    do {
      if (node.id) index = '[' + node.position + ']' + index;
    } while ((node = node.parent) != null);
    return index;
  },

  sequence: function(element) {
    element = $(element);
    var options = Object.extend(this.options(element), arguments[1] || {});
    
    return $(this.findElements(element, options) || []).map( function(item) {
      return item.id.match(options.format) ? item.id.match(options.format)[1] : '';
    });
  },

  setSequence: function(element, new_sequence) {
    element = $(element);
    var options = Object.extend(this.options(element), arguments[2] || {});
    
    var nodeMap = {};
    this.findElements(element, options).each( function(n) {
        if (n.id.match(options.format))
            nodeMap[n.id.match(options.format)[1]] = [n, n.parentNode];
        n.parentNode.removeChild(n);
    });
   
    new_sequence.each(function(ident) {
      var n = nodeMap[ident];
      if (n) {
        n[1].appendChild(n[0]);
        delete nodeMap[ident];
      }
    });
  },
  
  serialize: function(element) {
    element = $(element);
    var options = Object.extend(Sortable.options(element), arguments[1] || {});
    var name = encodeURIComponent(
      (arguments[1] && arguments[1].name) ? arguments[1].name : element.id);
    
    if (options.tree) {
      return Sortable.tree(element, arguments[1]).children.map( function (item) {
        return [name + Sortable._constructIndex(item) + "[id]=" + 
                encodeURIComponent(item.id)].concat(item.children.map(arguments.callee));
      }).flatten().join('&');
    } else {
      return Sortable.sequence(element, arguments[1]).map( function(item) {
        return name + "[]=" + encodeURIComponent(item);
      }).join('&');
    }
  }
}

// Returns true if child is contained within element
Element.isParent = function(child, element) {
  if (!child.parentNode || child == element) return false;
  if (child.parentNode == element) return true;
  return Element.isParent(child.parentNode, element);
}

Element.findChildren = function(element, only, recursive, tagName) {    
  if(!element.hasChildNodes()) return null;
  tagName = tagName.toUpperCase();
  if(only) only = [only].flatten();
  var elements = [];
  $A(element.childNodes).each( function(e) {
    if(e.tagName && e.tagName.toUpperCase()==tagName &&
      (!only || (Element.classNames(e).detect(function(v) { return only.include(v) }))))
        elements.push(e);
    if(recursive) {
      var grandchildren = Element.findChildren(e, only, recursive, tagName);
      if(grandchildren) elements.push(grandchildren);
    }
  });

  return (elements.length>0 ? elements.flatten() : []);
}

Element.offsetSize = function (element, type) {
  return element['offset' + ((type=='vertical' || type=='height') ? 'Height' : 'Width')];
}

function recalculateTip(total, val, elem, type) {
	if (total && elem && type) {
		if (type == 'AMOUNT') {
			var am = val.replace(/[^0-9\.]/, '');
			var perc = (am / total) * 100;
			elem.value = perc.toFixed(2) + '%';
		} else if (type == 'PERCENTAGE') {
			var perc = val.replace(/[^0-9\.]/, '');
			var am = total * (perc / 100);
			elem.value = '$' + am.toFixed(2);
		}
	}
}

function addTipAmountToOrder(elem, e2_id, total) {
	var elem2 = $(e2_id);
	if(elem && elem2) {
		elem2.value = elem.value.replace(/[^0-9\.]/,'');
		elem2.value = (elem2.value*1).toFixed(2); 
		hideOpenDialogues();
		scheduleFormStateSave(elem2.name, elem2.value);
		var ct = $('cart_total');
		var b = elem2.value.replace(/[^0-9\.]/, '');
		ct.innerHTML = '$'+(((total*1)+(b*1)).toFixed(2));
	}
}

function showTipCalculator(ev, total, elem, fe) {
	//total = $('cart_total').innerHTML.replace(/[^0-9\.]/, ''); 
	var tip_val = elem.value.replace(/[^0-9\.]/, '');
	if(!isNumeric(tip_val)) tip_val = 0.00;
	elem.value = tip_val;
	//total = total - tip_val;
	//var e=jt_fixE(ev);
    selectBox=new jt_DialogBox(true); 
    selectBox.setWidth(280);
    selectBox.setTitle('Tip Calculator'); 
    selectBox.setContent('<div class="dialogue" style="font-size:.75em;height:140px;overflow:auto;"><table style="width:100%;"><tr><td style="text-align:right;">Order Total: </td><td>$'+total+'</td></tr><tr><td style="text-align:right;">Tip Percentage:</td><td><input type="text" value="'+((elem.value.replace(/\$/, '')/total)*100).toFixed(2)+'%" size="8" name="tip_percentage" id="tip_percentage" onkeyup="recalculateTip('+total+', this.value, $(\'tip_amount\'), \'PERCENTAGE\');" /></td></tr><tr><td style="text-align:right;">Tip Amount: </td><td><input type="text" onkeyup="recalculateTip(\''+total+'\', this.value, $(\'tip_percentage\'), \'AMOUNT\');" name="tip_amount" value="'+elem.value+'" size="8" id="tip_amount" /></td></tr><tr><td colspan="2" style="text-align:center;"><input type="button" value="Add Tip Amount to Order" onclick="addTipAmountToOrder($(\'tip_amount\'), \''+elem.id+'\', '+total+');" /></td></tr></table></div>');
    currentDialogues.unshift(selectBox);
    selectBox.show();
    if(fe) {
		pos = findPos(fe);
		selectBox.moveTo(pos[0], pos[1]);
	} else {
		pos = getPosition(ev);
    	selectBox.moveTo(pos.x, pos.y); //e.clientX
	}
}
function showPageInDialogue(ev, form, params) {
	selectBox=new jt_DialogBox(true); 
    selectBox.setWidth(580);
    selectBox.setTitle('Accept this Offer!'); 
    selectBox.setContent('<div class="dialogue" style="font-size:.75em;height:390px;overflow:auto;"><div style="background-color:yellow;padding:5px;text-align:center;font-weight:bolder;">This is a special offer for you.  To accept the offer, please configure this item as you would like and then add it to your cart by clicking "Add to Cart" at the bottom of this dialogue window.</div><br /><iframe src="?form='+escape(form)+params+'&altdoc=true&is_dialogue=true&nosidebar=true" style="width:100%;height:320px;"></iframe></div>');
    currentDialogues.unshift(selectBox);
    selectBox.show();
	pos = getPosition(ev);
    selectBox.moveTo(pos.x, pos.y); //e.clientX
}

function showCustomerSearchSelect(ev) {
	selectBox=new jt_DialogBox(true); 
    selectBox.setWidth(600);
    selectBox.setTitle('Search for a customer'); 
    selectBox.setContent('<div class="dialogue" style="font-size:.75em;height:250px;overflow:auto;"><strong>Start typing a customer\'s name to see existing customers that match. Or, click "Create New Customer."</strong><div><input type="text" name="customer_select_search" id="customer_select_search" value="" style="width:200px;" />&nbsp;<input type="button" name="select_customer" onclick="" value="Choose Selected Customer" /><div id="customer_search_list" class="autocomplete_large"></div></div></div>');
    currentDialogues.unshift(selectBox);
    selectBox.show();
	new Ajax.Autocompleter('customer_select_search', 'customer_search_list', '/'+IDString+'/?form=findmatchingcustomers', {callback:prepareCRMSearch,updateElement:goToCRMCustomer});
	pos = getPosition(ev);
    selectBox.moveTo(pos.x, pos.y); //e.clientX
}



