var postErrorStatusMessage = '';
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]);}}}



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');cellM.className='jtTitleTableWrapper';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');rowT.className='jtTitleRow';var cellT=document.createElement('td');cellT.id="tbLeft";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.adjustHeight = function() {
	var el = $('errorDialog');
	var el2 = $('innerErrorDialog');
	if(el && el2) {
		var ch = el.clientHeight; 
		var ch2 = el2.clientHeight; 
		if(ch && ch2 && ch2 < ch) {
			var adjustedHeight = (ch2 + 10) + 'px';
			if(adjustedHeight > 550) adjustedHeight = 550;
			el.style.height = adjustedHeight;
		} else if (ch && ch2 && ch > ch2) {
			var adjustedHeight = (ch5 + 10) + 'px';
			if(adjustedHeight > 550) adjustedHeight = 550;
			el.style.height = adjustedHeight + 'px';
		}
	}
}
jt_DialogBox.prototype.moveTo=function(x,y){
	var scrollTop = 0; 
	if(isWebkit) {
		scrollTop = document.body.scrollTop; 
		//clientHeight = document.body.clientHeight; 
		clientHeight = window.innerHeight;
	} else {
		scrollTop = document.documentElement.scrollTop; 
		clientHeight = document.documentElement.clientHeight;
	}
	if(x==-1) x=Math.round((document.body.clientWidth-this.container.offsetWidth)/2);
	if(y==-1) y=Math.round((clientHeight-this.container.offsetHeight)/2)+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();if(typeof(jt_DialogBox_close_img) == 'undefined') { jt_DialogBox.closeIcon.src=jt_DialogBox.imagePath+"window_close.png";}else{jt_DialogBox.closeIcon.src=jt_DialogBox.imagePath+jt_DialogBox_close_img;}}}
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 doCategoryAddonAssignment(ev,t,iid,aid,altBtn){if(t&&iid&&aid){t.parentNode.lastChild.innerHTML='<img src="/web/images/default/busy.gif" />Updating...';multiplicity=1;
new Ajax.Request('/'+IDString,{method:'post',parameters:'form=addaddontocategory&item='+escape(iid)+'&addon='+escape(aid)+'&multiplicity='+escape(multiplicity),onSuccess:successAssignAddonAction,onFailure:errFunc});}}

function doCategoryGroupAddonAssignment(ev,t,iid,aid,altBtn){if(t&&iid&&aid){t.parentNode.lastChild.innerHTML='<img src="/web/images/default/busy.gif" />Updating...';multiplicity=1;
new Ajax.Request('/'+IDString,{method:'post',parameters:'form=addaddontocategory&item='+escape(iid)+'&addon='+escape(aid)+'&multiplicity='+escape(multiplicity)+'&group=true',onSuccess:successAssignAddonAction,onFailure:errFunc});}}

function doCategoryAddonRemoval(ev,t,iid,aid,altBtn){if(t&&iid&&aid){t.parentNode.lastChild.innerHTML='<img src="/web/images/default/busy.gif" />Updating...';multiplicity=1;
new Ajax.Request('/'+IDString,{method:'post',parameters:'form=removeaddonfromcategory&item='+escape(iid)+'&addon='+escape(aid)+'&multiplicity='+escape(multiplicity),onSuccess:successAssignAddonAction,onFailure:errFunc});}}

function doCategoryGroupAddonRemoval(ev,t,iid,aid,altBtn){if(t&&iid&&aid){t.parentNode.lastChild.innerHTML='<img src="/web/images/default/busy.gif" />Updating...';multiplicity=1;
new Ajax.Request('/'+IDString,{method:'post',parameters:'form=removeaddonfromcategory&item='+escape(iid)+'&addon='+escape(aid)+'&multiplicity='+escape(multiplicity)+'&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 showAddOnsForCategory(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=showaddonsforcategory&id='+escape(aid)+'&gonly='+(gonly?'1':'0'),onSuccess:successAddOnForCategoryAction,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(600);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+='<li>You must select at least '+e.value+' to purchase this item.</li>';}
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+='<li>You must select a price!</li>';
	var optionChoices=$$('.optionChoice');
	var optionsOK=true;
	if(optionChoices&&optionChoices.length){
		for(i=0;i<optionChoices.length;i++){
			//alert(optionChoices[i].parentNode.parentNode.parentNode.style.display);
			if(optionChoices[i].selectedIndex==0&&optionChoices[i].parentNode.parentNode.parentNode.style.display!='none'){
				optionsOK=false;break;
			}
		}
	}
if(!optionsOK)errMsg+='<li>Options in drop-down select-boxes are required!</li>';
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{
selectBox = new jt_DialogBox(true);
	selectBox.setWidth(540);
	selectBox.setTitle('Please correct these problems');
	selectBox.setContent('<div class="dialogue" style="padding:10px;height:200px;overflow:auto;font-size:1.0em;font-weight:bolder;text-align:center;"><div style=\"text-align:left;\"><p>Please correct the following problems before adding this item to your cart: </p><ul>'+errMsg+'</ul></div></div>');
	currentDialogues.unshift(selectBox); 
	selectBox.show();
	var screenTop = document.documentElement.scrollTop; // top of viewport
	if(isWebkit) screenTop = document.body.scrollTop;
	selectBox.moveTo(-1, -1);	
}
}catch(ex){alert(ex.description);}
}}
function htn() {
	var d = $('temporaryNotice');
	new Effect.Fade(d);	
}
function hideTemporaryNotice() {
	setTimeout('htn()', 4000);
}
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 = '<div onclick="$(\'temporaryNotice\').hide();" class="outerTempNotice">Hide this message <img src="/web/images/default/cancel.png" alt="Close" /></div><div class="innerTempNotice">Your cart has been updated<br /><a href="?form=ordering">Continue Shopping</a><br />or <a href="?form=checkout">Go to Checkout</a></div>';
var scrollTop = 0;
//if(isWebkit) scrollTop = document.body.scrollTop;
//else scrollTop = document.documentElement.scrollTop;
var cartBtn = $('add_to_cart');
var aCW = $('attachedCartWidget');
if(cartBtn && aCW) {
var pos=Position.cumulativeOffset(cartBtn);
var pos2 = Position.cumulativeOffset(aCW);
d.style.top = (pos[1] - d.clientHeight - 80) + 'px';
d.style.left = (pos2[0] - 250) + 'px';
new Effect.Appear(d, {afterFinish:hideTemporaryNotice});
adjustContainerHeight(); } else if(parent) { var d = parent.document.getElementById('temporaryNotice');
d.innerHTML = '<div style="border-bottom:solid 1px #ccc;background-color:#e7e7e7;"><img src="/web/images/default/cancel.png" alt="Close" style="display:block;border:0;cursor:pointer;" onclick="" /></div><div>Your cart has been updated<br /><a href="?form=ordering">Continue Shopping</a><br />or <a href="?form=checkout">Go to Checkout</a></div>'; } else {alert('Your cart has been updated');}
}
if(showCartHint) showCartHint();
}

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 successAddOnForCategoryAction(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,-1);}
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,-1);}
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 showCouponFields(t){if(t){var s=t.selectedIndex;if(s==0){$('couponAmount').show();$('couponDescription').hide();$('couponRestrictions').show();}else{$('couponAmount').hide();$('couponDescription').show();$('couponRestrictions').hide();}}}
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(){return;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 selectActiveCustomer(elem) {
	if(elem){
		var cid=elem.firstChild.firstChild.nextSibling;
		if(!rdrfrm || rdrfrm == 'undefined') rdrfrm = '';
		document.location.href='?form=ordering&activatecustomer&id='+Trim(cid.innerHTML)+'&rdrfrm='+escape(rdrfrm);}	
}
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, -1);	}}}
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();
		var scrollTop = 0; if(isWebkit) scrollTop = document.body.scrollTop; else scrollTop = document.documentElement.scrollTop;
		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) 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
}

var rdrfrm = '';
function showCustomerSearchSelect(ev, frm) {
	selectBox=new jt_DialogBox(true); 
    selectBox.setWidth(400);
    selectBox.setTitle('Search for a customer'); 
    selectBox.setContent('<div class="dialogue" style="font-size:.75em;height:150px;overflow:auto;"><strong>Start typing a customer\'s name to see existing customers that match. Then click on the customer you wish to activate. Or, <a href="?form=crmcontactcreate">Create a New Customer</a> and then start an order for them.</strong><div style="text-align:center;"><br />Customer Name: <input type="text" name="first_or_lastname" id="customer_select_search" value="" style="width:200px;" /></div><div id="customer_search_list" class="autocomplete_large"></div></div>');
    currentDialogues.unshift(selectBox);
    selectBox.show();
	rdrfrm = frm;
	new Ajax.Autocompleter('customer_select_search', 'customer_search_list', '/'+IDString+'/?form=findmatchingcustomers', {callback:prepareCRMSearch,updateElement:selectActiveCustomer});
	pos = getPosition(ev);
    selectBox.moveTo(pos.x, pos.y); //e.clientX
}
function showAdditionalOrderSendDetails(ev, msg) {
	selectBox=new jt_DialogBox(true); 
    selectBox.setWidth(550);
    selectBox.setTitle('Receiving orders by email.'); 
    selectBox.setContent('<div class="dialogue" style="font-size:.75em;height:350px;overflow:auto;">'+msg+'</div>');
    currentDialogues.unshift(selectBox);
    selectBox.show();
	pos = getPosition(ev);
    selectBox.moveTo(pos.x, pos.y); //e.clientX
}

function showTimeAndType() {
	
}

function showPricesForItem(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('Editing prices for '+iname);selectBox.setContent('<div class="dialogue" style="height:350px;overflow:auto;"><div id="addoncontent"><img src="/web/images/default/busy.gif" />Loading Prices...</div></div>');currentDialogues.unshift(selectBox);selectBox.show();pos = getPosition(ev);selectBox.moveTo(pos.x, pos.y);new Ajax.Request('/'+IDString,{method:'post',parameters:'form=showpricesforitem&id='+escape(aid),onSuccess:successShowPricesForItemAction,onFailure:errFunc});}

function successShowPricesForItemAction(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 savePricesForItem(aid){var e=document.getElementsByName("busy_msg");for(var i=0;i<e.length;i++){e[i].innerHTML='<img src="/web/images/default/busy.gif" />Updating...';}var serializedForm=$('allPrices').serialize();new Ajax.Request('/'+IDString,{method:'post',parameters:'form=savepricesforitem&id='+aid+'&'+serializedForm,onSuccess:successSavePricesForItemAction,onFailure:errFunc})};
function successSavePricesForItemAction(xmlObj){if(xmlObj.responseText&&xmlObj.responseText.indexOf('ERROR:')==-1){/*var e=document.getElementsByName("busy_msg");for(var i=0;i<e.length;i++){e[i].innerHTML=xmlObj.responseText;}*/hideOpenDialogues()}else{alert('There was an error performing this action: '+xmlObj.responseText);}}

