(function(jQuery){var allowed={};jQuery.each(['click','dblclick','mousedown','mouseup','mousemove','mouseover','mouseout','keydown','keypress','keyup'],function(i,eventName){allowed[eventName]=true;});jQuery.fn.extend({delegate:function(event,selector,f){return jQuery(this).each(function(){if(allowed[event])
jQuery(this).bind(event,function(e){var el=jQuery(e.target),result=false;while(!jQuery(el).is('body')){if(jQuery(el).is(selector)){result=f.apply(jQuery(el)[0],[e]);if(result===false)
e.preventDefault();return;}
el=jQuery(el).parent();}});});},undelegate:function(event){return jQuery(this).each(function(){jQuery(this).unbind(event);});}});})(jQuery);;(function($){$.fn.extend({autocomplete:function(urlOrData,options){var isUrl=typeof urlOrData=="string";options=$.extend({},$.Autocompleter.defaults,{url:isUrl?urlOrData:null,data:isUrl?null:urlOrData,delay:isUrl?$.Autocompleter.defaults.delay:10,max:options&&!options.scroll?10:150},options);options.highlight=options.highlight||function(value){return value;};options.formatMatch=options.formatMatch||options.formatItem;return this.each(function(){new $.Autocompleter(this,options);});},result:function(handler){return this.bind("result",handler);},search:function(handler){return this.trigger("search",[handler]);},flushCache:function(){return this.trigger("flushCache");},setOptions:function(options){return this.trigger("setOptions",[options]);},unautocomplete:function(){return this.trigger("unautocomplete");}});$.Autocompleter=function(input,options){var KEY={UP:38,DOWN:40,DEL:46,TAB:9,RETURN:13,ESC:27,COMMA:188,PAGEUP:33,PAGEDOWN:34,BACKSPACE:8};var $input=$(input).attr("autocomplete","off").addClass(options.inputClass);var timeout;var previousValue="";var cache=$.Autocompleter.Cache(options);var hasFocus=0;var lastKeyPressCode;var config={mouseDownOnSelect:false};var select=$.Autocompleter.Select(options,input,selectCurrent,config);var blockSubmit;$.browser.opera&&$(input.form).bind("submit.autocomplete",function(){if(blockSubmit){blockSubmit=false;return false;}});$input.bind(($.browser.opera?"keypress":"keydown")+".autocomplete",function(event){lastKeyPressCode=event.keyCode;switch(event.keyCode){case KEY.UP:event.preventDefault();if(select.visible()){select.prev();}else{onChange(0,true);}
break;case KEY.DOWN:event.preventDefault();if(select.visible()){select.next();}else{onChange(0,true);}
break;case KEY.PAGEUP:event.preventDefault();if(select.visible()){select.pageUp();}else{onChange(0,true);}
break;case KEY.PAGEDOWN:event.preventDefault();if(select.visible()){select.pageDown();}else{onChange(0,true);}
break;case options.multiple&&$.trim(options.multipleSeparator)==","&&KEY.COMMA:case KEY.TAB:case KEY.RETURN:if(selectCurrent()){event.preventDefault();blockSubmit=true;return false;}
break;case KEY.ESC:select.hide();break;default:clearTimeout(timeout);timeout=setTimeout(onChange,options.delay);break;}}).focus(function(){hasFocus++;}).blur(function(){hasFocus=0;if(!config.mouseDownOnSelect){hideResults();}}).click(function(){if(hasFocus++>1&&!select.visible()){onChange(0,true);}}).bind("search",function(){var fn=(arguments.length>1)?arguments[1]:null;function findValueCallback(q,data){var result;if(data&&data.length){for(var i=0;i<data.length;i++){if(data[i].result.toLowerCase()==q.toLowerCase()){result=data[i];break;}}}
if(typeof fn=="function")fn(result);else $input.trigger("result",result&&[result.data,result.value]);}
$.each(trimWords($input.val()),function(i,value){request(value,findValueCallback,findValueCallback);});}).bind("flushCache",function(){cache.flush();}).bind("setOptions",function(){$.extend(options,arguments[1]);if("data"in arguments[1])
cache.populate();}).bind("unautocomplete",function(){select.unbind();$input.unbind();$(input.form).unbind(".autocomplete");});function selectCurrent(){var selected=select.selected();if(!selected)
return false;var v=selected.result;previousValue=v;if(options.multiple){var words=trimWords($input.val());if(words.length>1){v=words.slice(0,words.length-1).join(options.multipleSeparator)+options.multipleSeparator+v;}
v+=options.multipleSeparator;}
$input.val(v);hideResultsNow();$input.trigger("result",[selected.data,selected.value]);return true;}
function onChange(crap,skipPrevCheck){if(lastKeyPressCode==KEY.DEL){select.hide();return;}
var currentValue=$input.val();if(!skipPrevCheck&&currentValue==previousValue)
return;previousValue=currentValue;currentValue=lastWord(currentValue);if(currentValue.length>=options.minChars){$input.addClass(options.loadingClass);if(!options.matchCase)
currentValue=currentValue.toLowerCase();request(currentValue,receiveData,hideResultsNow);}else{stopLoading();select.hide();}};function trimWords(value){if(!value){return[""];}
var words=value.split(options.multipleSeparator);var result=[];$.each(words,function(i,value){if($.trim(value))
result[i]=$.trim(value);});return result;}
function lastWord(value){if(!options.multiple)
return value;var words=trimWords(value);return words[words.length-1];}
function autoFill(q,sValue){if(options.autoFill&&(lastWord($input.val()).toLowerCase()==q.toLowerCase())&&lastKeyPressCode!=KEY.BACKSPACE){$input.val($input.val()+sValue.substring(lastWord(previousValue).length));$.Autocompleter.Selection(input,previousValue.length,previousValue.length+sValue.length);}};function hideResults(){clearTimeout(timeout);timeout=setTimeout(hideResultsNow,200);};function hideResultsNow(){var wasVisible=select.visible();select.hide();clearTimeout(timeout);stopLoading();if(options.mustMatch){$input.search(function(result){if(!result){if(options.multiple){var words=trimWords($input.val()).slice(0,-1);$input.val(words.join(options.multipleSeparator)+(words.length?options.multipleSeparator:""));}
else
$input.val("");}});}
if(wasVisible)
$.Autocompleter.Selection(input,input.value.length,input.value.length);};function receiveData(q,data){if(data&&data.length&&hasFocus){stopLoading();select.display(data,q);autoFill(q,data[0].value);select.show();}else{hideResultsNow();}};function request(term,success,failure){if(!options.matchCase)
term=term.toLowerCase();var data=cache.load(term);if(data&&data.length){success(term,data);}else if((typeof options.url=="string")&&(options.url.length>0)){var extraParams={timestamp:+new Date()};$.each(options.extraParams,function(key,param){extraParams[key]=typeof param=="function"?param():param;});$.ajax({mode:"abort",port:"autocomplete"+input.name,dataType:options.dataType,url:options.url,data:$.extend({q:lastWord(term),limit:options.max},extraParams),success:function(data){var parsed=options.parse&&options.parse(data)||parse(data);cache.add(term,parsed);success(term,parsed);}});}else{select.emptyList();failure(term);}};function parse(data){var parsed=[];var rows=data.split("\n");for(var i=0;i<rows.length;i++){var row=$.trim(rows[i]);if(row){row=row.split("|");parsed[parsed.length]={data:row,value:row[0],result:options.formatResult&&options.formatResult(row,row[0])||row[0]};}}
return parsed;};function stopLoading(){$input.removeClass(options.loadingClass);};};$.Autocompleter.defaults={inputClass:"ac_input",resultsClass:"ac_results",loadingClass:"ac_loading",minChars:1,delay:400,matchCase:false,matchSubset:true,matchContains:false,cacheLength:10,max:100,mustMatch:false,extraParams:{},selectFirst:true,formatItem:function(row){return row[0];},formatMatch:null,autoFill:false,width:0,multiple:false,multipleSeparator:", ",highlight:function(value,term){return value.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)("+term.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi,"\\$1")+")(?![^<>]*>)(?![^&;]+;)","gi"),"<strong>$1</strong>");},scroll:true,scrollHeight:180};$.Autocompleter.Cache=function(options){var data={};var length=0;function matchSubset(s,sub){if(!options.matchCase)
s=s.toLowerCase();var i=s.indexOf(sub);if(i==-1)return false;return i==0||options.matchContains;};function add(q,value){if(length>options.cacheLength){flush();}
if(!data[q]){length++;}
data[q]=value;}
function populate(){if(!options.data)return false;var stMatchSets={},nullData=0;if(!options.url)options.cacheLength=1;stMatchSets[""]=[];for(var i=0,ol=options.data.length;i<ol;i++){var rawValue=options.data[i];rawValue=(typeof rawValue=="string")?[rawValue]:rawValue;var value=options.formatMatch(rawValue,i+1,options.data.length);if(value===false)
continue;var firstChar=value.charAt(0).toLowerCase();if(!stMatchSets[firstChar])
stMatchSets[firstChar]=[];var row={value:value,data:rawValue,result:options.formatResult&&options.formatResult(rawValue)||value};stMatchSets[firstChar].push(row);if(nullData++<options.max){stMatchSets[""].push(row);}};$.each(stMatchSets,function(i,value){options.cacheLength++;add(i,value);});}
setTimeout(populate,25);function flush(){data={};length=0;}
return{flush:flush,add:add,populate:populate,load:function(q){if(!options.cacheLength||!length)
return null;if(!options.url&&options.matchContains){var csub=[];for(var k in data){if(k.length>0){var c=data[k];$.each(c,function(i,x){if(matchSubset(x.value,q)){csub.push(x);}});}}
return csub;}else
if(data[q]){return data[q];}else
if(options.matchSubset){for(var i=q.length-1;i>=options.minChars;i--){var c=data[q.substr(0,i)];if(c){var csub=[];$.each(c,function(i,x){if(matchSubset(x.value,q)){csub[csub.length]=x;}});return csub;}}}
return null;}};};$.Autocompleter.Select=function(options,input,select,config){var CLASSES={ACTIVE:"ac_over"};var listItems,active=-1,data,term="",needsInit=true,element,list;function init(){if(!needsInit)
return;element=$("<div/>").hide().addClass(options.resultsClass).css("position","absolute").appendTo(document.body);list=$("<ul/>").appendTo(element).mouseover(function(event){if(target(event).nodeName&&target(event).nodeName.toUpperCase()=='LI'){active=$("li",list).removeClass(CLASSES.ACTIVE).index(target(event));$(target(event)).addClass(CLASSES.ACTIVE);}}).click(function(event){$(target(event)).addClass(CLASSES.ACTIVE);select();input.focus();return false;}).mousedown(function(){config.mouseDownOnSelect=true;}).mouseup(function(){config.mouseDownOnSelect=false;});if(options.width>0)
element.css("width",options.width);needsInit=false;}
function target(event){var element=event.target;while(element&&element.tagName!="LI")
element=element.parentNode;if(!element)
return[];return element;}
function moveSelect(step){listItems.slice(active,active+1).removeClass(CLASSES.ACTIVE);movePosition(step);var activeItem=listItems.slice(active,active+1).addClass(CLASSES.ACTIVE);if(options.scroll){var offset=0;listItems.slice(0,active).each(function(){offset+=this.offsetHeight;});if((offset+activeItem[0].offsetHeight-list.scrollTop())>list[0].clientHeight){list.scrollTop(offset+activeItem[0].offsetHeight-list.innerHeight());}else if(offset<list.scrollTop()){list.scrollTop(offset);}}};function movePosition(step){active+=step;if(active<0){active=listItems.size()-1;}else if(active>=listItems.size()){active=0;}}
function limitNumberOfItems(available){return options.max&&options.max<available?options.max:available;}
function fillList(){list.empty();var max=limitNumberOfItems(data.length);for(var i=0;i<max;i++){if(!data[i])
continue;var formatted=options.formatItem(data[i].data,i+1,max,data[i].value,term);if(formatted===false)
continue;var li=$("<li/>").html(options.highlight(formatted,term)).addClass(i%2==0?"ac_even":"ac_odd").appendTo(list)[0];$.data(li,"ac_data",data[i]);}
listItems=list.find("li");if(options.selectFirst){listItems.slice(0,1).addClass(CLASSES.ACTIVE);active=0;}
if($.fn.bgiframe)
list.bgiframe();}
return{display:function(d,q){init();data=d;term=q;fillList();},next:function(){moveSelect(1);},prev:function(){moveSelect(-1);},pageUp:function(){if(active!=0&&active-8<0){moveSelect(-active);}else{moveSelect(-8);}},pageDown:function(){if(active!=listItems.size()-1&&active+8>listItems.size()){moveSelect(listItems.size()-1-active);}else{moveSelect(8);}},hide:function(){element&&element.hide();listItems&&listItems.removeClass(CLASSES.ACTIVE);active=-1;},visible:function(){return element&&element.is(":visible");},current:function(){return this.visible()&&(listItems.filter("."+CLASSES.ACTIVE)[0]||options.selectFirst&&listItems[0]);},show:function(){var offset=$(input).offset();element.css({width:typeof options.width=="string"||options.width>0?options.width:$(input).width(),top:offset.top+input.offsetHeight,left:offset.left}).show();if(options.scroll){list.scrollTop(0);list.css({maxHeight:options.scrollHeight,overflow:'auto'});if($.browser.msie&&typeof document.body.style.maxHeight==="undefined"){var listHeight=0;listItems.each(function(){listHeight+=this.offsetHeight;});var scrollbarsVisible=listHeight>options.scrollHeight;list.css('height',scrollbarsVisible?options.scrollHeight:listHeight);if(!scrollbarsVisible){listItems.width(list.width()-parseInt(listItems.css("padding-left"))-parseInt(listItems.css("padding-right")));}}}},selected:function(){var selected=listItems&&listItems.filter("."+CLASSES.ACTIVE).removeClass(CLASSES.ACTIVE);return selected&&selected.length&&$.data(selected[0],"ac_data");},emptyList:function(){list&&list.empty();},unbind:function(){element&&element.remove();}};};$.Autocompleter.Selection=function(field,start,end){if(field.createTextRange){var selRange=field.createTextRange();selRange.collapse(true);selRange.moveStart("character",start);selRange.moveEnd("character",end);selRange.select();}else if(field.setSelectionRange){field.setSelectionRange(start,end);}else{if(field.selectionStart){field.selectionStart=start;field.selectionEnd=end;}}
field.focus();};})(jQuery);var LiveValidation=Class.create();Object.extend(LiveValidation,{TEXTAREA:1,TEXT:2,PASSWORD:3,CHECKBOX:4,SELECT:5,massValidate:function(validations){var returnValue=true;for(var i=0,len=validations.length;i<len;++i){var valid=validations[i].validate();if(returnValue)returnValue=valid;}
return returnValue;}});LiveValidation.prototype={validClass:'LV_valid',invalidClass:'LV_invalid',messageClass:'LV_validation_message',validFieldClass:'LV_valid_field',invalidFieldClass:'LV_invalid_field',initialize:function(element,optionsObj){if(!element)throw new Error("LiveValidation::initialize - No element reference or element id has been provided!");this.element=$(element);if(!this.element)throw new Error("LiveValidation::initialize - No element with reference or id of '"+element+"' exists!");this.elementType=this.getElementType();this.validations=[];this.form=this.element.form;this.options=Object.extend({validMessage:'Thankyou!',onValid:function(){this.insertMessage(this.createMessageSpan());this.addFieldClass();},onInvalid:function(){this.insertMessage(this.createMessageSpan());this.addFieldClass();},insertAfterWhatNode:this.element,onlyOnBlur:false,wait:0,onlyOnSubmit:false},optionsObj||{});this.options.insertAfterWhatNode=$(this.options.insertAfterWhatNode);Object.extend(this,this.options);if(this.form){this.formObj=LiveValidationForm.getInstance(this.form);this.formObj.addField(this);}
Event.observe(this.element,'focus',this.doOnFocus.bindAsEventListener(this));if(!this.onlyOnSubmit){switch(this.elementType){case LiveValidation.CHECKBOX:Event.observe(this.element,'click',this.validate.bindAsEventListener(this));case LiveValidation.SELECT:Event.observe(this.element,'change',this.validate.bindAsEventListener(this));break;default:if(!this.onlyOnBlur)Event.observe(this.element,'keyup',this.deferValidation.bindAsEventListener(this));Event.observe(this.element,'blur',this.validate.bindAsEventListener(this));}}},add:function(validationFunction,validationParamsObj){this.validations.push({type:validationFunction,params:validationParamsObj||{}});return this;},deferValidation:function(e){if(this.wait>=300)this.removeMessageAndFieldClass();if(this.timeout)clearTimeout(this.timeout);this.timeout=setTimeout(this.validate.bind(this),this.wait);},doOnBlur:function(e){this.focused=false;this.validate(e);},doOnFocus:function(e){this.focused=true;this.removeMessageAndFieldClass();},getElementType:function(){switch(true){case(this.element.nodeName=='TEXTAREA'):return LiveValidation.TEXTAREA;case(this.element.nodeName=='INPUT'&&this.element.type=='text'):return LiveValidation.TEXT;case(this.element.nodeName=='INPUT'&&this.element.type=='password'):return LiveValidation.PASSWORD;case(this.element.nodeName=='INPUT'&&this.element.type=='checkbox'):return LiveValidation.CHECKBOX;case(this.element.nodeName=='SELECT'):return LiveValidation.SELECT;case(this.element.nodeName=='INPUT'):throw new Error('LiveValidation::getElementType - Cannot use LiveValidation on an '+this.element.type+' input!');default:throw new Error('LiveValidation::getElementType - Element must be an input, select, or textarea!');}},doValidations:function(){this.validationFailed=false;for(var i=0,len=this.validations.length;i<len;++i){var validation=this.validations[i];switch(validation.type){case Validate.Presence:case Validate.Confirmation:case Validate.Acceptance:this.displayMessageWhenEmpty=true;this.validationFailed=!this.validateElement(validation.type,validation.params);break;default:this.validationFailed=!this.validateElement(validation.type,validation.params);break;}
if(this.validationFailed)return false;}
this.message=this.validMessage;return true;},validateElement:function(validationFunction,validationParamsObj){var value=(this.elementType==LiveValidation.SELECT)?this.element.options[this.element.selectedIndex].value:this.element.value;if(validationFunction==Validate.Acceptance){if(this.elementType!=LiveValidation.CHECKBOX)throw new Error('LiveValidation::validateElement - Element to validate acceptance must be a checkbox!');value=this.element.checked;}
var isValid=true;try{validationFunction(value,validationParamsObj);}catch(error){if(error instanceof Validate.Error){if(value!==''||(value===''&&this.displayMessageWhenEmpty)){this.validationFailed=true;this.message=error.message;isValid=false;}}else{throw error;}}finally{return isValid;}},validate:function(){var isValid=this.doValidations();if(isValid){this.onValid();return true;}else{this.onInvalid();return false;}},createMessageSpan:function(){var span=document.createElement('span');var textNode=document.createTextNode(this.message);span.appendChild(textNode);return span;},insertMessage:function(elementToInsert){this.removeMessage();var className=this.validationFailed?this.invalidClass:this.validClass;if((this.displayMessageWhenEmpty&&(this.elementType==LiveValidation.CHECKBOX||this.element.value==''))||this.element.value!=''){$(elementToInsert).addClassName(this.messageClass+(' '+className));if(nxtSibling=this.insertAfterWhatNode.nextSibling){this.insertAfterWhatNode.parentNode.insertBefore(elementToInsert,nxtSibling);}else{this.insertAfterWhatNode.parentNode.appendChild(elementToInsert);}}},addFieldClass:function(){this.removeFieldClass();if(!this.validationFailed){if(this.displayMessageWhenEmpty||this.element.value!=''){if(!this.element.hasClassName(this.validFieldClass))this.element.addClassName(this.validFieldClass);}}else{if(!this.element.hasClassName(this.invalidFieldClass))this.element.addClassName(this.invalidFieldClass);}},removeMessage:function(){if(nxtEl=this.insertAfterWhatNode.next('.'+this.messageClass))nxtEl.remove();},removeFieldClass:function(){this.element.removeClassName(this.invalidFieldClass);this.element.removeClassName(this.validFieldClass);},removeMessageAndFieldClass:function(){this.removeMessage();this.removeFieldClass();}}
var LiveValidationForm=Class.create();LiveValidationForm.getInstance=function(element){if(!element.id)element.id='formId_'+new Date().valueOf();if(!window['LiveValidationForm_'+element.id])window['LiveValidationForm_'+element.id]=new LiveValidationForm(element);return window['LiveValidationForm_'+element.id];}
LiveValidationForm.prototype={initialize:function(element){this.element=$(element);this.fields=[];},addField:function(newField){this.fields.push(newField);}}
var Validate={Presence:function(value,paramsObj){var params=Object.extend({failureMessage:"Can't be empty!"},paramsObj||{});if(value===''||value===null||value===undefined)Validate.fail(params.failureMessage);return true;},Numericality:function(value,paramsObj){var suppliedValue=value;var value=Number(value);var paramsObj=paramsObj||{};var params={notANumberMessage:paramsObj.notANumberMessage||"Must be a number!",notAnIntegerMessage:paramsObj.notAnIntegerMessage||"Must be an integer!",wrongNumberMessage:paramsObj.wrongNumberMessage||"Must be "+paramsObj.is+"!",tooLowMessage:paramsObj.tooLowMessage||"Must not be less than "+paramsObj.minimum+"!",tooHighMessage:paramsObj.tooHighMessage||"Must not be more than "+paramsObj.maximum+"!",is:((paramsObj.is)||(paramsObj.is==0))?paramsObj.is:null,minimum:((paramsObj.minimum)||(paramsObj.minimum==0))?paramsObj.minimum:null,maximum:((paramsObj.maximum)||(paramsObj.maximum==0))?paramsObj.maximum:null,onlyInteger:paramsObj.onlyInteger||false};if(!isFinite(value))Validate.fail(params.notANumberMessage);if(params.onlyInteger&&((/\.0+$|\.$/.test(String(suppliedValue)))||(value!=parseInt(value))))Validate.fail(params.notAnIntegerMessage);switch(true){case(params.is!==null):if(value!=Number(params.is))Validate.fail(params.wrongNumberMessage);break;case(params.minimum!==null&&params.maximum!==null):Validate.Numericality(value,{tooLowMessage:params.tooLowMessage,minimum:params.minimum});Validate.Numericality(value,{tooHighMessage:params.tooHighMessage,maximum:params.maximum});break;case(params.minimum!==null):if(value<Number(params.minimum))Validate.fail(params.tooLowMessage);break;case(params.maximum!==null):if(value>Number(params.maximum))Validate.fail(params.tooHighMessage);break;}
return true;},Format:function(value,paramsObj){var value=String(value);var params=Object.extend({failureMessage:"Not valid!",pattern:/./},paramsObj||{});if(!params.pattern.test(value))Validate.fail(params.failureMessage);return true;},Email:function(value,paramsObj){var params=Object.extend({failureMessage:"Must be a valid email address!"},paramsObj||{});Validate.Format(value,{failureMessage:params.failureMessage,pattern:/^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i});return true;},Length:function(value,paramsObj){var value=String(value);var paramsObj=paramsObj||{};var params={wrongLengthMessage:paramsObj.wrongLengthMessage||"Must be "+paramsObj.is+" characters long!",tooShortMessage:paramsObj.tooShortMessage||"Must not be less than "+paramsObj.minimum+" characters long!",tooLongMessage:paramsObj.tooLongMessage||"Must not be more than "+paramsObj.maximum+" characters long!",is:((paramsObj.is)||(paramsObj.is==0))?paramsObj.is:null,minimum:((paramsObj.minimum)||(paramsObj.minimum==0))?paramsObj.minimum:null,maximum:((paramsObj.maximum)||(paramsObj.maximum==0))?paramsObj.maximum:null}
switch(true){case(params.is!==null):if(value.length!=Number(params.is))Validate.fail(params.wrongLengthMessage);break;case(params.minimum!==null&&params.maximum!==null):Validate.Length(value,{tooShortMessage:params.tooShortMessage,minimum:params.minimum});Validate.Length(value,{tooLongMessage:params.tooLongMessage,maximum:params.maximum});break;case(params.minimum!==null):if(value.length<Number(params.minimum))Validate.fail(params.tooShortMessage);break;case(params.maximum!==null):if(value.length>Number(params.maximum))Validate.fail(params.tooLongMessage);break;default:throw new Error("Validate::Length - Length(s) to validate against must be provided!");}
return true;},Inclusion:function(value,paramsObj){var params=Object.extend({failureMessage:"Must be included in the list!",within:[],allowNull:false,partialMatch:false,exclusion:false},paramsObj||{});if(params.allowNull&&value==null)return true;if(!params.allowNull&&value==null)Validate.fail(params.failureMessage);var found=(params.within.indexOf(value)==-1)?false:true;if(params.partialMatch){found=false;params.within.each(function(arrayVal){if(value.indexOf(arrayVal)!=-1)found=true;});}
if((!params.exclusion&&!found)||(params.exclusion&&found))Validate.fail(params.failureMessage);return true;},Exclusion:function(value,paramsObj){var params=Object.extend({failureMessage:"Must not be included in the list!",within:[],allowNull:false,partialMatch:false},paramsObj||{});params.exclusion=true;Validate.Inclusion(value,params);return true;},Confirmation:function(value,paramsObj){if(!paramsObj.match)throw new Error("Validate::Confirmation - Error validating confirmation: Id of element to match must be provided!");var params=Object.extend({failureMessage:"Does not match!",match:null},paramsObj||{});params.match=$(paramsObj.match);if(!params.match)throw new Error("Validate::Confirmation - There is no reference with name of, or element with id of '"+params.match+"'!");if(value!=params.match.value)Validate.fail(params.failureMessage);return true;},Acceptance:function(value,paramsObj){var params=Object.extend({failureMessage:"Must be accepted!"},paramsObj||{});if(!value)Validate.fail(params.failureMessage);return true;},now:function(validationFunction,value,validationParamsObj){if(!validationFunction)throw new Error("Validate::now - Validation function must be provided!");var isValid=true;try{validationFunction(value,validationParamsObj||{});}catch(error){if(error instanceof Validate.Error){isValid=false;}else{throw error;}}finally{return isValid}},Error:function(errorMessage){this.message=errorMessage;this.name='ValidationError';},fail:function(errorMessage){throw new Validate.Error(errorMessage);}}
LowPro={};LowPro.Version='0.5';LowPro.CompatibleWithPrototype='1.6';if(Prototype.Version.indexOf(LowPro.CompatibleWithPrototype)!=0&&console&&console.warn)
console.warn("This version of Low Pro is tested with Prototype "+LowPro.CompatibleWithPrototype+" it may not work as expected with this version ("+Prototype.Version+")");if(!Element.addMethods)
Element.addMethods=function(o){Object.extend(Element.Methods,o)};DOM={};DOM.Builder={tagFunc:function(tag){return function(){var attrs,children;if(arguments.length>0){if(arguments[0].nodeName||typeof arguments[0]=="string")
children=arguments;else{attrs=arguments[0];children=Array.prototype.slice.call(arguments,1);};}
return DOM.Builder.create(tag,attrs,children);};},create:function(tag,attrs,children){attrs=attrs||{};children=children||[];tag=tag.toLowerCase();var el=new Element(tag,attrs);for(var i=0;i<children.length;i++){if(typeof children[i]=='string')
children[i]=document.createTextNode(children[i]);el.appendChild(children[i]);}
return $(el);}};(function(){var els=("p|div|span|strong|em|img|table|tr|td|th|thead|tbody|tfoot|pre|code|"+"h1|h2|h3|h4|h5|h6|ul|ol|li|form|input|textarea|legend|fieldset|"+"select|option|blockquote|cite|br|hr|dd|dl|dt|address|a|button|abbr|acronym|"+"script|link|style|bdo|ins|del|object|param|col|colgroup|optgroup|caption|"+"label|dfn|kbd|samp|var").split("|");var el,i=0;while(el=els[i++])
window['$'+el]=DOM.Builder.tagFunc(el);})();DOM.Builder.fromHTML=function(html){var root;if(!(root=arguments.callee._root))
root=arguments.callee._root=document.createElement('div');root.innerHTML=html;return root.childNodes[0];};Object.extend(Event,{onReady:function(f){if(document.body)f();else document.observe('dom:loaded',f);}});Event.addBehavior=function(rules){var ab=this.addBehavior;Object.extend(ab.rules,rules);if(!ab.responderApplied){Ajax.Responders.register({onComplete:function(){if(Event.addBehavior.reassignAfterAjax)
setTimeout(function(){ab.reload()},10);}});ab.responderApplied=true;}
if(ab.autoTrigger){this.onReady(ab.load.bind(ab,rules));}};Object.extend(Event.addBehavior,{rules:{},cache:[],reassignAfterAjax:false,autoTrigger:true,load:function(rules){for(var selector in rules){var observer=rules[selector];var sels=selector.split(',');sels.each(function(sel){var parts=sel.split(/:(?=[a-z]+$)/),css=parts[0],event=parts[1];$$(css).each(function(element){if(event){observer=Event.addBehavior._wrapObserver(observer);$(element).observe(event,observer);Event.addBehavior.cache.push([element,event,observer]);}else{if(!element.$$assigned||!element.$$assigned.include(observer)){if(observer.attach)observer.attach(element);else observer.call($(element));element.$$assigned=element.$$assigned||[];element.$$assigned.push(observer);}}});});}},unload:function(){this.cache.each(function(c){Event.stopObserving.apply(Event,c);});this.cache=[];},reload:function(){var ab=Event.addBehavior;ab.unload();ab.load(ab.rules);},_wrapObserver:function(observer){return function(event){if(observer.call(this,event)===false)event.stop();}}});Event.observe(window,'unload',Event.addBehavior.unload.bind(Event.addBehavior));$$$=Event.addBehavior.bind(Event);var Behavior={create:function(){var parent=null,properties=$A(arguments);if(Object.isFunction(properties[0]))
parent=properties.shift();var behavior=function(){var behavior=arguments.callee;if(!this.initialize){var args=$A(arguments);return function(){var initArgs=[this].concat(args);behavior.attach.apply(behavior,initArgs);};}else{var args=(arguments.length==2&&arguments[1]instanceof Array)?arguments[1]:Array.prototype.slice.call(arguments,1);this.element=$(arguments[0]);this.initialize.apply(this,args);behavior._bindEvents(this);behavior.instances.push(this);}};Object.extend(behavior,Class.Methods);Object.extend(behavior,Behavior.Methods);behavior.superclass=parent;behavior.subclasses=[];behavior.instances=[];if(parent){var subclass=function(){};subclass.prototype=parent.prototype;behavior.prototype=new subclass;parent.subclasses.push(behavior);}
for(var i=0;i<properties.length;i++)
behavior.addMethods(properties[i]);if(!behavior.prototype.initialize)
behavior.prototype.initialize=Prototype.emptyFunction;behavior.prototype.constructor=behavior;return behavior;},Methods:{attach:function(element){return new this(element,Array.prototype.slice.call(arguments,1));},_bindEvents:function(bound){for(var member in bound)
if(member.match(/^on(.+)/)&&typeof bound[member]=='function')
bound.element.observe(RegExp.$1,Event.addBehavior._wrapObserver(bound[member].bindAsEventListener(bound)));}}};Remote=Behavior.create({initialize:function(options){if(this.element.nodeName=='FORM')new Remote.Form(this.element,options);else new Remote.Link(this.element,options);}});Remote.Base={initialize:function(options){this.options=Object.extend({evaluateScripts:true},options||{});},_makeRequest:function(options){if(options.update)new Ajax.Updater(options.update,options.url,options);else new Ajax.Request(options.url,options);return false;}}
Remote.Link=Behavior.create(Remote.Base,{onclick:function(){var options=Object.extend({url:this.element.href,method:'get'},this.options);return this._makeRequest(options);}});Remote.Form=Behavior.create(Remote.Base,{onclick:function(e){var sourceElement=e.element();if(['input','button'].include(sourceElement.nodeName.toLowerCase())&&sourceElement.type=='submit')
this._submitButton=sourceElement;},onsubmit:function(){var options=Object.extend({url:this.element.action,method:this.element.method||'get',parameters:this.element.serialize({submit:this._submitButton.name})},this.options);this._submitButton=null;return this._makeRequest(options);}});Observed=Behavior.create({initialize:function(callback,options){this.callback=callback.bind(this);this.options=options||{};this.observer=(this.element.nodeName=='FORM')?this._observeForm():this._observeField();},stop:function(){this.observer.stop();},_observeForm:function(){return(this.options.frequency)?new Form.Observer(this.element,this.options.frequency,this.callback):new Form.EventObserver(this.element,this.callback);},_observeField:function(){return(this.options.frequency)?new Form.Element.Observer(this.element,this.options.frequency,this.callback):new Form.Element.EventObserver(this.element,this.callback);}});(function(jQuery){jQuery.facebox=function(data,klass){jQuery.facebox.loading()
if(data.ajax)fillFaceboxFromAjax(data.ajax)
else if(data.image)fillFaceboxFromImage(data.image)
else if(data.div)fillFaceboxFromHref(data.div)
else if(jQuery.isFunction(data))data.call(jQuery)
else jQuery.facebox.reveal(data,klass)}
jQuery.extend(jQuery.facebox,{settings:{opacity:0,overlay:true,loadingImage:'/themes/new/base/images/facebox/loading.gif',closeImage:'/themes/new/base/images/facebox/closelabel.gif',imageTypes:['png','jpg','jpeg','gif'],faceboxHtml:'\
    <div id="facebox" style="display:none;"> \
      <div class="popup"> \
        <table> \
          <tbody> \
            <tr> \
              <td class="tl"/><td class="b"/><td class="tr"/> \
            </tr> \
            <tr> \
              <td class="b"/> \
              <td class="body"> \
                <div id="facebox_content" class="content"> \
                </div> \
                <div class="footer"> \
                  <a href="#" class="close"> \
                    close X<!--<img src="/themes/new/base/images/facebox/closelabel.gif" title="close" class="close_image" />--> \
                  </a> \
                </div> \
              </td> \
              <td class="b"/> \
            </tr> \
            <tr> \
              <td class="bl"/><td class="b"/><td class="br"/> \
            </tr> \
          </tbody> \
        </table> \
      </div> \
    </div>'},loading:function(){init()
if(jQuery('#facebox .loading').length==1)return true
showOverlay()
jQuery('#facebox .content').empty()
jQuery('#facebox .body').children().hide().end().append('<div class="loading"><img src="'+jQuery.facebox.settings.loadingImage+'"/></div>')
jQuery('#facebox').css({top:getPageScroll()[1]+(getPageHeight()/10),left:385.5}).show()
jQuery(document).bind('keydown.facebox',function(e){if(e.keyCode==27)jQuery.facebox.close()
return true})
jQuery(document).trigger('loading.facebox')},reveal:function(data,klass){jQuery(document).trigger('beforeReveal.facebox')
if(klass)jQuery('#facebox .content').addClass(klass)
jQuery('#facebox .content').append(data)
jQuery('#facebox .loading').remove()
jQuery('#facebox .body').children().fadeIn('normal')
jQuery('#facebox').css('left',jQuery(window).width()/2-(jQuery('#facebox table').width()/2))
jQuery(document).trigger('reveal.facebox').trigger('afterReveal.facebox')},close:function(){jQuery(document).trigger('close.facebox')
return false}})
jQuery.fn.facebox=function(settings){init(settings)
function clickHandler(){jQuery.facebox.loading(true)
var klass=this.rel.match(/facebox\[?\.(\w+)\]?/)
if(klass)klass=klass[1]
fillFaceboxFromHref(this.href,klass)
return false}
return this.click(clickHandler)}
function init(settings){if(jQuery.facebox.settings.inited)return true
else jQuery.facebox.settings.inited=true
jQuery(document).trigger('init.facebox')
makeCompatible()
var imageTypes=jQuery.facebox.settings.imageTypes.join('|')
jQuery.facebox.settings.imageTypesRegexp=new RegExp('\.'+imageTypes+'$','i')
if(settings)jQuery.extend(jQuery.facebox.settings,settings)
jQuery('body').append(jQuery.facebox.settings.faceboxHtml)
var preload=[new Image(),new Image()]
preload[0].src=jQuery.facebox.settings.closeImage
preload[1].src=jQuery.facebox.settings.loadingImage
jQuery('#facebox').find('.b:first, .bl, .br, .tl, .tr').each(function(){preload.push(new Image())
preload.slice(-1).src=jQuery(this).css('background-image').replace(/url\((.+)\)/,'$1')})
jQuery('#facebox .close').click(jQuery.facebox.close)
jQuery('#facebox .close_image').attr('src',jQuery.facebox.settings.closeImage)}
function getPageScroll(){var xScroll,yScroll;if(self.pageYOffset){yScroll=self.pageYOffset;xScroll=self.pageXOffset;}else if(document.documentElement&&document.documentElement.scrollTop){yScroll=document.documentElement.scrollTop;xScroll=document.documentElement.scrollLeft;}else if(document.body){yScroll=document.body.scrollTop;xScroll=document.body.scrollLeft;}
return new Array(xScroll,yScroll)}
function getPageHeight(){var windowHeight
if(self.innerHeight){windowHeight=self.innerHeight;}else if(document.documentElement&&document.documentElement.clientHeight){windowHeight=document.documentElement.clientHeight;}else if(document.body){windowHeight=document.body.clientHeight;}
return windowHeight}
function makeCompatible(){var $s=jQuery.facebox.settings
$s.loadingImage=$s.loading_image||$s.loadingImage
$s.closeImage=$s.close_image||$s.closeImage
$s.imageTypes=$s.image_types||$s.imageTypes
$s.faceboxHtml=$s.facebox_html||$s.faceboxHtml}
function fillFaceboxFromHref(href,klass){if(href.match(/#/)){var url=window.location.href.split('#')[0]
var target=href.replace(url,'')
jQuery.facebox.reveal(jQuery(target).clone().show(),klass)}else if(href.match(jQuery.facebox.settings.imageTypesRegexp)){fillFaceboxFromImage(href,klass)}else{fillFaceboxFromAjax(href,klass)}}
function fillFaceboxFromImage(href,klass){var image=new Image()
image.onload=function(){jQuery.facebox.reveal('<div class="image"><img src="'+image.src+'" /></div>',klass)}
image.src=href}
function fillFaceboxFromAjax(href,klass){jQuery.get(href,function(data){jQuery.facebox.reveal(data,klass)})}
function skipOverlay(){return jQuery.facebox.settings.overlay==false||jQuery.facebox.settings.opacity===null}
function showOverlay(){if(skipOverlay())return
if(jQuery('#facebox_overlay').length==0)
jQuery("body").append('<div id="facebox_overlay" class="facebox_hide"></div>')
jQuery('#facebox_overlay').hide().addClass("facebox_overlayBG").css('opacity',jQuery.facebox.settings.opacity).fadeIn(200)
return false}
function hideOverlay(){if(skipOverlay())return
jQuery('#facebox_overlay').fadeOut(200,function(){jQuery("#facebox_overlay").removeClass("facebox_overlayBG")
jQuery("#facebox_overlay").addClass("facebox_hide")
jQuery("#facebox_overlay").remove()})
return false}
jQuery(document).bind('close.facebox',function(){jQuery(document).unbind('keydown.facebox')
jQuery('#facebox').fadeOut(function(){jQuery('#facebox .content').removeClass().addClass('content')
hideOverlay()
jQuery('#facebox .loading').remove()})})})(jQuery);Effect.BlindLeft=function(element){element=$(element);element.makeClipping();return new Effect.Scale(element,0,Object.extend({scaleContent:false,scaleY:false,restoreAfterFinish:true,afterFinishInternal:function(effect){effect.element.hide().undoClipping();}},arguments[1]||{}));}
Effect.BlindRight=function(element){element=$(element);var elementDimensions=element.getDimensions();return new Effect.Scale(element,100,Object.extend({scaleContent:false,scaleY:false,scaleFrom:0,scaleMode:{originalHeight:elementDimensions.height,originalWidth:elementDimensions.width},restoreAfterFinish:true,afterSetup:function(effect){effect.element.makeClipping().setStyle({width:'0px'}).show();},afterFinishInternal:function(effect){effect.element.undoClipping();}},arguments[1]||{}));};Effect.SlideLeftIn=function(element){element=$(element).cleanWhitespace();if(!element.effectOn){element.effectOn=true;var elementDimensions=element.getDimensions();return new Effect.Parallel([new Effect.Move(element,Object.extend({x:-(elementDimensions.width),sync:true,mode:'relative',beforeStartInternal:function(effect){if(window.opera)effect.element.setStyle({left:''});effect.element.setStyle({left:elementDimensions.width+'px'});effect.element.show();}},arguments[1]||{})),new Effect.Scale(element,100,Object.extend({scaleContent:false,scaleY:false,scaleFrom:window.opera?0:1},arguments[1]||{}))],Object.extend({beforeSetup:function(effect){effect.effects[0].element.parentNode.makeClipping();effect.effects[0].element.makeClipping();},afterFinishInternal:function(effect){effect.effects[0].element.parentNode.undoClipping();effect.effects[0].element.undoClipping();},afterFinish:function(effect){effect.effects[0].element.effectOn=false;}},arguments[1]||{}));}}
Effect.SlideRightOut=function(element){element=$(element).cleanWhitespace();var elementDimensions=element.getDimensions();return new Effect.Parallel([new Effect.Move(element,{x:element.getWidth(),sync:true,mode:'relative'}),new Effect.Scale(element,window.opera?0:1,{sync:true,scaleContent:false,scaleY:false,scaleFrom:100,restoreAfterFinish:true})],Object.extend({beforeSetup:function(effect){effect.effects[0].element.makeClipping();},afterFinishInternal:function(effect){effect.effects[0].element.undoClipping().hide();}},arguments[1]||{}));}
Effect.SlideLeftOut=function(element){element=$(element).cleanWhitespace();return new Effect.Scale(element,window.opera?0:1,Object.extend({scaleContent:false,scaleY:false,scaleMode:'box',scaleFrom:100,restoreAfterFinish:true,beforeStartInternal:function(effect){effect.element.makePositioned();effect.element.down().makePositioned();if(window.opera)effect.element.setStyle({left:''});effect.element.makeClipping().show();},afterUpdateInternal:function(effect){effect.element.down().setStyle({right:(effect.dims[1]-effect.element.clientWidth)+'px'});},afterFinishInternal:function(effect){effect.element.hide().undoClipping().undoPositioned();effect.element.down().undoPositioned();}},arguments[1]||{}));}
Effect.SlideRightIn=function(element){element=$(element).cleanWhitespace();var elementDimensions=element.getDimensions();return new Effect.Scale(element,100,Object.extend({scaleContent:false,scaleY:false,scaleFrom:window.opera?0:1,scaleMode:{originalHeight:elementDimensions.height,originalWidth:elementDimensions.width},restoreAfterFinish:true,afterSetup:function(effect){effect.element.makePositioned();effect.element.down().makePositioned();if(window.opera)effect.element.setStyle({left:''});effect.element.makeClipping().setStyle({width:'0px'}).show();},afterUpdateInternal:function(effect){effect.element.down().setStyle({right:(effect.dims[1]-effect.element.clientWidth)+'px'});},afterFinishInternal:function(effect){effect.element.undoClipping().undoPositioned();effect.element.down().undoPositioned();}},arguments[1]||{}));}
Effect.SlideUpIn=function(element){element=$(element).cleanWhitespace();var elementDimensions=element.getDimensions();return new Effect.Parallel([new Effect.Move(element,{y:-(element.getHeight()),sync:true,mode:'relative'}),new Effect.Scale(element,100,Object.extend({sync:true,scaleContent:false,scaleX:false,scaleFrom:0,scaleMode:{originalHeight:elementDimensions.height,originalWidth:elementDimensions.width},beforeSetup:function(effect){effect.element.hide();},afterSetup:function(effect){effect.element.makeClipping().setStyle({height:'0px'}).show();},afterFinishInternal:function(effect){effect.element.undoClipping();}},arguments[1]||{}))],Object.extend({afterSetup:function(effect){effect.effects[0].element.setStyle({top:elementDimensions.height+'px'});}},arguments[1]||{}));}
Effect.SlideDownOut=function(element){element=$(element).cleanWhitespace();var elementDimensions=element.getDimensions();return new Effect.Parallel([new Effect.Move(element,{y:element.getHeight(),sync:true,mode:'relative'}),new Effect.Scale(element,0,Object.extend({sync:true,scaleContent:false,scaleX:false,restoreAfterFinish:true,beforeSetup:function(effect){effect.element.makeClipping();},afterFinishInternal:function(effect){effect.element.hide().undoClipping();}},arguments[1]||{}))],Object.extend({},arguments[1]||{}));}
Effect.SlideDownIn=function(element){element=$(element).cleanWhitespace();var oldInnerBottom=element.down().getStyle('bottom');var elementDimensions=element.getDimensions();return new Effect.Scale(element,100,Object.extend({scaleContent:false,scaleX:false,scaleFrom:window.opera?0:1,scaleMode:{originalHeight:elementDimensions.height,originalWidth:elementDimensions.width},restoreAfterFinish:true,afterSetup:function(effect){effect.element.makePositioned();effect.element.down().makePositioned();if(window.opera)effect.element.setStyle({top:''});effect.element.makeClipping().setStyle({height:'0px'}).show();},afterUpdateInternal:function(effect){effect.element.down().setStyle({bottom:(effect.dims[0]-effect.element.clientHeight)+'px'});},afterFinishInternal:function(effect){effect.element.undoClipping().undoPositioned();effect.element.down().undoPositioned().setStyle({bottom:oldInnerBottom});}},arguments[1]||{}));}
Effect.SlideUpOut=function(element){element=$(element).cleanWhitespace();var oldInnerBottom=element.down().getStyle('bottom');return new Effect.Scale(element,window.opera?0:1,Object.extend({scaleContent:false,scaleX:false,scaleMode:'box',scaleFrom:100,restoreAfterFinish:true,beforeStartInternal:function(effect){effect.element.makePositioned();effect.element.down().makePositioned();if(window.opera)effect.element.setStyle({top:''});effect.element.makeClipping().show();},afterUpdateInternal:function(effect){effect.element.down().setStyle({bottom:(effect.dims[0]-effect.element.clientHeight)+'px'});},afterFinishInternal:function(effect){effect.element.hide().undoClipping().undoPositioned().setStyle({bottom:oldInnerBottom});effect.element.down().undoPositioned();}},arguments[1]||{}));}
jQuery.facebox.settings.opacity=0.3;Ajax.Responders.register({onCreate:function(){if($('ajax_loading')&&Ajax.activeRequestCount>0){Element.show('ajax_loading');}},onComplete:function(){if($('ajax_loading')&&Ajax.activeRequestCount==0){Element.hide('ajax_loading');}}});function isString(){return(typeof arguments[0]=='string')}
function json_post(form_or_url,data,callback){if(jQuery.isFunction(data)){callback=data;data=null;}
if(isString(form_or_url)){url=form_or_url}else{url=form_or_url.action;data=jQuery(form_or_url).serializeArray();};json_request("POST",url,data,callback);}
function json_get(form_or_url,data,callback){if(jQuery.isFunction(data)){callback=data;data=null;}
if(isString(form_or_url)){url=form_or_url}else{url=form_or_url[0].action;data=jQuery(form_or_url).serializeArray();};json_request("GET",url,data,callback);}
function json_request(type,url,data,callback){if(data==null){data={};}
if(jQuery.isArray(data)){data[data.length]={name:'format',value:'jsonh'};}else if(isString(data)){parts=url.split("?")
str_len=parts[0].length
ext=parts[0].substring(str_len-3,str_len-1);if(ext!=".js"){data=data+"&format=jsonh";}}else{data['format']='jsonh';}
json={};jQuery.ajax({type:type,url:url,data:data,complete:function(event,xhr){if(event.responseText==' '){json={};}else{try{json=window["eval"]("("+event.responseText+")");}
catch(e){json={};window["eval"](event.responseText);};}
if(jQuery.httpSuccess(event)){json.success=true;}else{json.success=false;};json.status=parseInt(json.status);AJAX_callbacks(json,callback);}});}
function AJAX_callbacks(json,callback){if(json.status==401){window.location='/register';return false;}
load_functions_from_JSON(json);if(jQuery.isFunction(callback)){callback(json)};load_flash_from_JSON(json);load_behaviors_from_JSON(json);}
function append_json_extension(url){parts=url.split("?");request=parts[0];params=parts[1];json_request_url=request+".json";if(params){json_request_url+="?"+params;}
return json_request_url;}
function append_js_extension(url){parts=url.split("?");request=parts[0];params=parts[1];json_request_url=request+".js";if(params){json_request_url+="?"+params;}
return json_request_url;}
function load_functions_from_JSON(json){window.eval(json.functions);}
function load_behaviors_from_JSON(json){window.eval(json.behaviors);}
function load_flash_from_JSON(json){if(json.flash){str='<div id="facebox_flash">'
jQuery.each(json.flash,function(key,value){str+='<ul class="'+key+'">';str+='<li>'+value+'</li>';str+='</ul>';});str+='</div>'
if(jQuery('#facebox_flash').length>0){jQuery('#facebox_flash').replaceWith(str);}else{jQuery('#facebox .content').prepend(str);};};}
function load_body_from_JSON(json,element){element=$(element);Element.update(element,json.body);element.show();}
function loadJS(file){var script=document.createElement('script');script.src=file;script.type='text/javascript';document.getElementsByTagName('head')[0].appendChild(script);$j.log("Loading JS: "+file);};(function($){$.log=function(msg){if(window.console){console.log(msg);}};$.appendJsonhExtension=function(url){if(url.match(/\.jsonh/)){return url;}
parts=url.split("?");request=parts[0];params=parts[1];json_request_url=request+".jsonh";if(params){json_request_url+="?"+params;}
return json_request_url;};$.jsonhRequest=function(options){var successCallback=options.success||function(jsonResponse){$.log("Request Successful");$.log(jsonResponse);};var errorCallback=options.error||function(jsonResponse){$.log("Request Error");$.log(jsonResponse);};options.success=function(jsonResponse){if(jsonResponse.status=="redirect"){window.location=jsonResponse.to;}
else{successCallback(jsonResponse);}};options.error=function(XMLHttpRequest,textStatus){if(XMLHttpRequest.status==400){jsonResponse=window["eval"]("("+XMLHttpRequest.responseText+")");errorCallback(jsonResponse);}
else{$.log("Request error: "+textStatus);$.log(XMLHttpRequest);}};options=$.extend({type:"POST"},options||{});options.dataType="json";options.url=$.appendJsonhExtension(options.url);$.ajax(options);};})(jQuery);function toggle_extended_descriptions(id,dom_obj){var extended_dec=$('offer_'+id+'_extended_description');extended_dec.toggle();if(extended_dec.style.display=='none'){dom_obj.innerHTML="Learn more...";}
else{dom_obj.innerHTML="(X) Close";}}
function check_all(name)
{var checkboxes=document.getElementsByName(name);for(i=0;i<checkboxes.length;i++)
{checkboxes[i].checked='checked';}}
function check_none(name)
{var checkboxes=document.getElementsByName(name);for(i=0;i<checkboxes.length;i++)
{checkboxes[i].checked='';}}
function cloneEmailNode(){var node=$('node_to_clone');var cloned=node.cloneNode(true);cloned.getElementsByTagName('input')[0].value=''
if($('container').childNodes.length<=10){$('container').appendChild(cloned);}}
var timeout=500;var closetimer=0;var ddmenuitem=0;function mopen(id)
{mcancelclosetime();if(ddmenuitem)ddmenuitem.style.display='none';ddmenuitem=document.getElementById(id);ddmenuitem.style.display='block';}
function mclose()
{if(ddmenuitem)ddmenuitem.style.display='none';}
function mclosetime()
{closetimer=window.setTimeout(mclose,timeout);}
function mcancelclosetime()
{if(closetimer)
{window.clearTimeout(closetimer);closetimer=null;}}
document.onclick=mclose;function displayPopUpSmartly(hoverElementId,elementId){hoverElement=$(hoverElementId);hoverElementWidth=hoverElement.getWidth();hoverElementHeight=hoverElement.getHeight();hoverElementX=hoverElement.positionedOffset().first();hoverElementY=hoverElement.positionedOffset().last();popUpElement=$(elementId);popUpElementHeight=popUpElement.getHeight();popUpElementWidth=popUpElement.getWidth();defaultX=hoverElementX+(hoverElementWidth*0.6);defaultY=hoverElementY+(hoverElementHeight*0.6);popUpElementLeftX=popUpElement.viewportOffset().first();popUpElementRightX=popUpElementLeftX+popUpElementWidth;popUpElementTopY=popUpElement.viewportOffset().last();popUpElementBottomY=popUpElementTopY+popUpElementHeight;if((popUpElementLeftX<0)||(popUpElementRightX>document.viewport.getWidth())){defaultX=hoverElementX+(hoverElementWidth*0.3)-popUpElementWidth;}
if((popUpElementTopY<0)||(popUpElementBottomY>document.viewport.getHeight())){defaultY=hoverElementY+(hoverElementHeight*0.3)-popUpElementHeight;}
popUpElement.setStyle({"top":defaultY+"px","left":defaultX+"px"});}
var CheckAll=Behavior.create({checkboxes:null,initialize:function(check_box_location){this.checkboxes=check_box_location;},onclick:function(e){checked=this.element.checked;$$(this.checkboxes).each(function(o){o.checked=checked;})}})
function mark_for_destroy(e){element=$(e).up('.has_many_element');element.down('.should_destroy').value=1;element.hide();}