function clearOptionList(selectId){$(selectId).empty();}
function pauseComp(millis){date=new Date();var curDate=null;do{var curDate=new Date();}
while(curDate-date<millis);}
function addOption(selectId,txt,val,defSel){if(window.webkit){var element=$(selectId);var newone=new Option(txt,val,defSel);element.add(newone,element.options[element.options.length]);}else if(window.ie){var objOption=new Option(txt,val,defSel,defSel);$(selectId).options.add(objOption);}else{var objOption=new Option(txt,val,defSel);$(selectId).options.add(objOption);}}
function deleteOption(id,i){var items=$(id).length;if(items>0){$(id).options[i]=null;}}
function deleteSelectedOptions(id){var items=$(id).length;var i;for(i=items-1;i>=0;i--){if($(id).options[i].selected){deleteOption(id,i);}}}
function moveOptions(from,to){var items=$(from).length;var txt;var val;var a=new Array();for(i=0;i<items;i++){if($(from).options[i].selected){txt=$(from).options[i].text;val=$(from).options[i].value;a[i]=$(from).options[i];addOption(to,txt,val,false);}}
deleteSelectedOptions(from);sortOptions(to);}
function moveAllOptions(from,to){var items=$(from).length;var txt;var val;for(i=0;i<items;i++){txt=$(from).options[i].text;val=$(from).options[i].value;addOption(to,txt,val,false);}
sortOptions(to);clearOptionList(from);}
function compareOptionText(a,b){return a.text!=b.text?a.text<b.text?-1:1:0;}
function sortOptions(id){var items=$(id).length;var list=$(id);var tmpArray=new Array(items);for(i=0;i<items;i++){tmpArray[i]=new Option(list.options[i].text,list.options[i].value);}
tmpArray.sort(compareOptionText);for(i=0;i<items;i++){list.options[i]=new Option(tmpArray[i].text,tmpArray[i].value);}}
function selectAllOptions(id){var items=$(id).length;for(i=0;i<items;i++){$(id).options[i].selected=true;}}
var keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZ"+"abcdefghijklmnopqrstuvwxyz"+"0123456789+/=";function base64_encode(inp){var out="";var chr1,chr2,chr3="";var enc1,enc2,enc3,enc4="";var i=0;do{chr1=inp.charCodeAt(i++);chr2=inp.charCodeAt(i++);chr3=inp.charCodeAt(i++);enc1=chr1>>2;enc2=((chr1&3)<<4)|(chr2>>4);enc3=((chr2&15)<<2)|(chr3>>6);enc4=chr3&63;if(isNaN(chr2)){enc3=enc4=64;}else if(isNaN(chr3)){enc4=64;}
out=out+keyStr.charAt(enc1)+keyStr.charAt(enc2)+keyStr.charAt(enc3)+keyStr.charAt(enc4);chr1=chr2=chr3="";enc1=enc2=enc3=enc4="";}while(i<inp.length);return out;}
function base64_decode(inp){var out="";var chr1,chr2,chr3="";var enc1,enc2,enc3,enc4="";var i=0;var base64test=/[^A-Za-z0-9\+\/\=]/g;if(base64test.exec(inp)){alert("There were invalid base64 characters in the input text.\n"+"Valid base64 characters are A-Z, a-z, 0-9, ?+?, ?/?, and ?=?\n"+"Expect errors in decoding.");}
inp=inp.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{enc1=keyStr.indexOf(inp.charAt(i++));enc2=keyStr.indexOf(inp.charAt(i++));enc3=keyStr.indexOf(inp.charAt(i++));enc4=keyStr.indexOf(inp.charAt(i++));chr1=(enc1<<2)|(enc2>>4);chr2=((enc2&15)<<4)|(enc3>>2);chr3=((enc3&3)<<6)|enc4;out=out+String.fromCharCode(chr1);if(enc3!=64){out=out+String.fromCharCode(chr2);}
if(enc4!=64){out=out+String.fromCharCode(chr3);}
chr1=chr2=chr3="";enc1=enc2=enc3=enc4="";}while(i<inp.length);return out;}