MastersearchChoice = Class.create( Module, {
source: [ 'mastersearch_choice', { removeParent: true } ],
unique_ids: [ 'mastersearch_choice', 'mastersearch_choice_input', 'mastersearch_choice_label' ],
initialize: function ( $super, data ) {
$super();
this.$('mastersearch_choice_label').innerHTML = data.name;
}
} );
MastersearchAttribute = Class.create( Module, {
source: [ 'mastersearch_attribute', { inside: true, removeParent: true } ],
unique_ids: [ 'mastersearch_attribute_heading', 'mastersearch_any_input' ],
initialize: function ( $super, data ) {
$super();
this.$('mastersearch_attribute_heading').innerHTML = data.heading;
this.form_name = data.form_name;
this.encoded_id = data.encoded_id;
this.choices = [];
this.$('mastersearch_any_input').observe( 'click', this.on_any_click.bind( this ) );
},
add_choice: function ( data ) {
var choice = new MastersearchChoice( { name: data.name } );
choice.$('mastersearch_choice_input').observe( 'click', this.on_choice_click.bind( this ) );
this.choices.push( {
choice: choice,
value: data.name
} );
},
display_choices: function() {
var rows = Math.floor( this.choices.length / 3 );
if ( this.choices.length % 3 )
rows ++;
var num_elements = rows * 3;
var tr;
var column = num_elements / 3;
for ( var i = 0 ; i < num_elements ; i ++ ) {
var choice_index = column*(i%3) + Math.floor(i/3);
var className = "";
if ( !(i%3) ) {
tr = new Element( 'tr' );
$('mastersearch_attributes').appendChild( tr );
className = "first";
}
if( choice_index < this.choices.length ) {
this.choices[choice_index].choice.attach( tr );
this.choices[choice_index].choice.$('mastersearch_choice').className = className;
}
else {
var td = new Element ( 'td' );
td.innerHTML = "&nbsp;";
tr.appendChild( td );
}
}
},
reset: function() {
this.$('mastersearch_any_input').checked = "checked";
this.on_any_click();
},
on_choice_click: function() {
this.$('mastersearch_any_input').checked = "";
},
on_any_click: function() {
if ( this.$('mastersearch_any_input').checked ) {
for ( var i = 0 ; i < this.choices.length ; i ++ ) {
this.choices[i].choice.$('mastersearch_choice_input').checked = "";
}
}
else
this.$('mastersearch_any_input').checked = "checked";
},
add_ajax_parameters: function( obj, event_id ) {
var id = this.form_name + "_" + event_id;
var choices = [];
for ( var i = 0 ; i < this.choices.length ; i ++) {
if( this.choices[i].choice.$('mastersearch_choice_input').checked )
choices.push( this.choices[i].value );
}
obj[id] = choices;
},
add_form_values: function ( form ) {
var id = "w_" + this.form_name + '.' + this.encoded_id;
for ( var i = 0 ; i < this.choices.length ; i ++) {
if( this.choices[i].choice.$('mastersearch_choice_input').checked )
form.appendChild( new Element( 'input', { type: 'hidden', name: id, value: this.choices[i].value } ) );
}
}
} );
Mastersearch = Class.create( Module, {
source: [ 'mastersearch', { removeParent: true } ],
initialize: function( $super, data ) {
$super();
this.attributes = [];
this.form_name = data.form_name;
this.form_value = data.form_value;
},
reset: function() {
this.attributes.each( function ( attribute ) {
attribute.reset();
} );
},
add_attribute: function( attribute ) {
this.attributes.push( attribute );
attribute.attach( $('mastersearch_attributes') );
attribute.display_choices();
},
add_ajax_parameters: function( obj, event_id ) {
this.attributes.each( function ( attribute ) {
attribute.add_ajax_parameters( obj, event_id );
} );
},
add_form_values: function( form ) {
form.appendChild( new Element( 'input', { type: 'hidden', name: this.form_name, value: this.form_value } ) );
this.attributes.each( function ( attribute ) {
attribute.add_form_values( form );
} );
}
});

