var FancyForm={start:function(b,a){FancyForm.runningInit=1;if($type(b)!="array"){b=$$("input")}if(!a){a=[]}FancyForm.onclasses=($type(a.onClasses)=="object")?a.onClasses:{checkbox:"checked",radio:"selected"};FancyForm.offclasses=($type(a.offClasses)=="object")?a.offClasses:{checkbox:"unchecked",radio:"unselected"};if($type(a.extraClasses)=="object"){FancyForm.extra=a.extraClasses}else{if(a.extraClasses){FancyForm.extra={checkbox:"f_checkbox",radio:"f_radio",on:"f_on",off:"f_off",all:"fancy"}}else{FancyForm.extra={}}}FancyForm.onSelect=$pick(a.onSelect,function(d){});FancyForm.onDeselect=$pick(a.onDeselect,function(d){});var c=[];FancyForm.chks=filter(b,function(d){d=$(d);if($type(d)!="element"){return false}if(d.tagName.toLowerCase()=="input"&&(FancyForm.onclasses[d.getAttribute("type")])){var e=d.parentNode;Element.extend(e);if(e.getElementsBySelector("input")[0]==d){e.type=d.getAttribute("type");e.inputElement=d;this.push(e)}else{d.observe("click",function(f){f.stopPropagation()})}}else{if(d.getElementsBySelector("input")&&(d.inputElement=d.getElementsBySelector("input")[0])&&(FancyForm.onclasses[(d.type=d.inputElement.getAttribute("type"))])){return true}}return false}.bind(c));FancyForm.chks=mergeArray(FancyForm.chks,c);c=null;FancyForm.chks.each(function(d){d.inputElement.setStyle({position:"absolute"});d.inputElement.setStyle({left:"-9999px"});d.observe("selectStart",function(){});d.name=d.inputElement.getAttribute("name");if(d.inputElement.checked){FancyForm.select(d)}else{FancyForm.deselect(d)}d.observe("click",function(f){if(d.inputElement.getAttribute("disabled")){return}if($type(f.preventDefault)=="function"){f.preventDefault(true)}else{if($type(f.returnValue)=="function"){f.returnValue(true)}}if(!d.hasClassName(FancyForm.onclasses[d.type])){FancyForm.select(d)}else{if(d.type!="radio"){FancyForm.deselect(d)}}FancyForm.focusing=1;d.inputElement.focus();FancyForm.focusing=0});d.observe("mousedown",function(f){if($type(f.preventDefault)=="function"){f.preventDefault(true)}else{if($type(f.returnValue)=="function"){f.returnValue(true)}}});d.inputElement.observe("focus",function(f){});d.inputElement.observe("blur",function(f){d.setStyle({outline:"0"})});if(extraclass=FancyForm.extra[d.type]){d.addClassName(extraclass)}if(extraclass=FancyForm.extra.all){d.addClassName(extraclass)}});FancyForm.runningInit=0},select:function(a){a=$(a);a.inputElement.checked="checked";a.removeClassName(FancyForm.offclasses[a.type]);a.addClassName(FancyForm.onclasses[a.type]);if(a.type=="radio"){FancyForm.chks.each(function(b){if(b.name!=a.name||b==a){return}FancyForm.deselect(b)})}if(extraclass=FancyForm.extra.on){a.addClassName(extraclass)}if(extraclass=FancyForm.extra.off){a.removeClassName(extraclass)}if(!FancyForm.runningInit){FancyForm.onSelect(a)}},deselect:function(a){a.inputElement.checked=false;a.removeClassName(FancyForm.onclasses[a.type]);a.addClassName(FancyForm.offclasses[a.type]);if(extraclass=FancyForm.extra.off){a.addClassName(extraclass)}if(extraclass=FancyForm.extra.on){a.removeClassName(extraclass)}if(!FancyForm.runningInit){FancyForm.onDeselect(a)}},all:function(){FancyForm.chks.each(function(a){FancyForm.select(a)})},none:function(){FancyForm.chks.each(function(a){FancyForm.deselect(a)})}};function $merge(){var c={};for(var b=0;b<arguments.length;b++){for(var e in arguments[b]){var a=arguments[b][e];var d=c[e];if(d&&$type(a)=="object"&&$type(d)=="object"){c[e]=$merge(d,a)}else{c[e]=a}}}return c}function $defined(a){return(a!=undefined)}function $pick(b,a){return $defined(b)?b:a}function $type(b){if(!$defined(b)){return false}if(b.htmlElement){return"element"}var a=typeof b;if(a=="object"&&b.nodeName){switch(b.nodeType){case 1:return"element";case 3:return(/\S/).test(b.nodeValue)?"textnode":"whitespace"}}if(a=="object"||a=="function"){switch(b.constructor){case Array:return"array";case RegExp:return"regexp";case Class:return"class"}if(typeof b.length=="number"){if(b.item){return"collection"}if(b.callee){return"arguments"}}}return a}function filter(f,d,e){var c=[];for(var b=0,a=f.length;b<a;b++){if(d.call(e,f[b],b,f)){c.push(f[b])}}return c}function mergeArray(d,b){for(var c=0,a=b.length;c<a;c++){d.push(b[c])}return d};