var Field={clear:function(){
for(var i=0;i<arguments.length;i++){
$(arguments[i]).value="";
}
},focus:function(_2){
$(_2).focus();
},present:function(){
for(var i=0;i<arguments.length;i++){
if($(arguments[i]).value==""){
return false;
}
}
return true;
},select:function(_3){
$(_3).select();
},activate:function(_4){
_4=$(_4);
_4.focus();
if(_4.select){
_4.select();
}
}};
var Form={serialize:function(_5){
var _6=Form.getElements($(_5));
var _7=new Array();
for(var i=0;i<_6.length;i++){
var _8=Form.Element.serialize(_6[i]);
if(_8){
_7.push(_8);
}
}
return _7.join("&");
},getElements:function(_9){
_9=$(_9);
var _10=new Array();
for(var _11 in Form.Element.Serializers){
var _12=_9.getElementsByTagName(_11);
for(var j=0;j<_12.length;j++){
_10.push(_12[j]);
}
}
return _10;
},getInputs:function(_14,_15,_16){
_14=$(_14);
var _17=_14.getElementsByTagName("input");
if(!_15&&!_16){
return _17;
}
var _18=new Array();
for(var i=0;i<_17.length;i++){
var _19=_17[i];
if((_15&&_19.type!=_15)||(_16&&_19.name!=_16)){
continue;
}
_18.push(_19);
}
return _18;
},disable:function(_20){
var _21=Form.getElements(_20);
for(var i=0;i<_21.length;i++){
var _22=_21[i];
_22.blur();
_22.disabled="true";
}
},enable:function(_23){
var _24=Form.getElements(_23);
for(var i=0;i<_24.length;i++){
var _25=_24[i];
_25.disabled="";
}
},findFirstElement:function(_26){
return Form.getElements(_26).find(function(_27){
return _27.type!="hidden"&&!_27.disabled&&["input","select","textarea"].include(_27.tagName.toLowerCase());
});
},focusFirstElement:function(_28){
Field.activate(Form.findFirstElement(_28));
},reset:function(_29){
$(_29).reset();
}};
Form.Element={serialize:function(_30){
_30=$(_30);
var _31=_30.tagName.toLowerCase();
var _32=Form.Element.Serializers[_31](_30);
if(_32){
var key=encodeURIComponent(_32[0]);
if(key.length==0){
return;
}
if(_32[1].constructor!=Array){
_32[1]=[_32[1]];
}
return _32[1].map(function(_34){
return key+"="+encodeURIComponent(_34);
}).join("&");
}
},getValue:function(_35){
_35=$(_35);
if(_35) {
var _36=_35.tagName.toLowerCase();
var _37=Form.Element.Serializers[_36](_35);
if(_37){
return _37[1];
}
}
}};
Form.Element.Serializers={input:function(_38){
switch(_38.type.toLowerCase()){
case "submit":
case "hidden":
case "password":
case "text":
return Form.Element.Serializers.textarea(_38);
case "checkbox":
case "radio":
return Form.Element.Serializers.inputSelector(_38);
}
return false;
},inputSelector:function(_39){
if(_39.checked){
return [_39.name,_39.value];
}
},textarea:function(_40){
return [_40.name,_40.value];
},select:function(_41){
return Form.Element.Serializers[_41.type=="select-one"?"selectOne":"selectMany"](_41);
},selectOne:function(_42){
var _43="",opt,index=_42.selectedIndex;
if(index>=0){
opt=_42.options[index];
_43=opt.value||opt.text;
}
return [_42.name,_43];
},selectMany:function(_44){
var _45=[];
for(var i=0;i<_44.length;i++){
var opt=_44.options[i];
if(opt.selected){
_45.push(opt.value||opt.text);
}
}
return [_44.name,_45];
}};
var $F=Form.Element.getValue;
Abstract.TimedObserver=function(){
};
Abstract.TimedObserver.prototype={initialize:function(_47,_48,_49){
this.frequency=_48;
this.element=$(_47);
this.callback=_49;
this.lastValue=this.getValue();
this.registerCallback();
},registerCallback:function(){
setInterval(this.onTimerEvent.bind(this),this.frequency*1000);
},onTimerEvent:function(){
var _50=this.getValue();
if(this.lastValue!=_50){
this.callback(this.element,_50);
this.lastValue=_50;
}
}};
Form.Element.Observer=Class.create();
Form.Element.Observer.prototype=Object.extend(new Abstract.TimedObserver(),{getValue:function(){
return Form.Element.getValue(this.element);
}});
Form.Observer=Class.create();
Form.Observer.prototype=Object.extend(new Abstract.TimedObserver(),{getValue:function(){
return Form.serialize(this.element);
}});
Abstract.EventObserver=function(){
};
Abstract.EventObserver.prototype={initialize:function(_51,_52){
this.element=$(_51);
this.callback=_52;
this.lastValue=this.getValue();
if(this.element.tagName.toLowerCase()=="form"){
this.registerFormCallbacks();
}else{
this.registerCallback(this.element);
}
},onElementEvent:function(){
var _53=this.getValue();
if(this.lastValue!=_53){
this.callback(this.element,_53);
this.lastValue=_53;
}
},registerFormCallbacks:function(){
var _54=Form.getElements(this.element);
for(var i=0;i<_54.length;i++){
this.registerCallback(_54[i]);
}
},registerCallback:function(_55){
if(_55.type){
switch(_55.type.toLowerCase()){
case "checkbox":
case "radio":
Event.observe(_55,"click",this.onElementEvent.bind(this));
break;
case "password":
case "text":
case "textarea":
case "select-one":
case "select-multiple":
Event.observe(_55,"change",this.onElementEvent.bind(this));
break;
}
}
}};
Form.Element.EventObserver=Class.create();
Form.Element.EventObserver.prototype=Object.extend(new Abstract.EventObserver(),{getValue:function(){
return Form.Element.getValue(this.element);
}});
Form.EventObserver=Class.create();
Form.EventObserver.prototype=Object.extend(new Abstract.EventObserver(),{getValue:function(){
return Form.serialize(this.element);
}});

