var female_section = "female_models";
var male_section = "male_models";
var thumbs_class = "model_thumbs";
var advancedSearchDiv = "adv_search";
var advancedSearchForm = "adv_search_form";
var myAdvancedSearch = null;
var AdvancedSearch = Class.create();

Array.prototype.inArray = 
 function(search_term) {
   for (var i = 0; i < this.length; i++) {
      if (this[i] === search_term) {
         return true;
      }
   }
   return false;
}

AdvancedSearch.prototype ={
	females:[],
	males:[],
	shown: false,
	initialize: function(){
		if($(female_section) && $(male_section)){
			$(female_section).getElementsByClassName(thumbs_class).pluck("id").each(function(elem){	this.females.push(elem);},this);
			$(male_section).getElementsByClassName(thumbs_class).pluck("id").each(function(elem){this.males.push(elem);},this);

			/*Get models with active status and all their parameters*/
			new Ajax.Request("getGuest.php", {
				method: 'get',
				parameters: {type: "models"},
				onSuccess: parseByGender		
				});
		}
	},
	toggle: function(){
		this.shown = !this.shown;
		if(this.shown){
			$(advancedSearchDiv).show();
			updateScreen();
		}
		else {	
			$(advancedSearchDiv).hide();
			//make sure both females and males are shown
			$(male_section).show();
			$(female_section).show();
		}
	}
};

function parseByGender(transport){
	var models_gender = transport.responseText.evalJSON(true).partition(function(model){return (parseInt(model.gender) === 0);});
	//Replace with full objects
	myAdvancedSearch.females = models_gender[0].findAll(function(f){return  myAdvancedSearch.females.inArray(f.modelid);});
	myAdvancedSearch.males   = models_gender[1].findAll(function(m){return  myAdvancedSearch.males.inArray(m.modelid);});
	//alert("females:"+myAdvancedSearch.females.pluck("stagename")+" males:"+myAdvancedSearch.males.pluck("stagename"));
}

function updateScreen(){
	if(myAdvancedSearch.shown && ($(advancedSearchForm) != null)){
		var form = $(advancedSearchForm);
		var gender = $F(form['gender']);
		var ethnicity = $F(form['ethnicity']);
		if((gender != 'undefined') && ethnicity != 'undefined'){
			//alert("gender:"+gender+" ethnicity:"+ethnicity);
			var allCheckBoxesMask = form.getInputs('checkbox').findAll(function(item){ return item.checked; }).pluck("value").inject(0, function(sum, n){ return sum + parseInt(n); }); // -> sum of all INPUT elements
			//alert("t:"+allCheckBoxesMask);
			if(parseInt(gender) === 0){ //sort only females
				$(male_section).hide();
				$(female_section).show();
				myAdvancedSearch.females.each(function(curmodel) {
					//alert("cm:"+curmodel.sceneid);
					if ( ((allCheckBoxesMask == 0) || ((curmodel.sceneid & allCheckBoxesMask) == allCheckBoxesMask)) && ((ethnicity == 0)||(curmodel.ethnicity == ethnicity))){
						$(curmodel.modelid).show();
					}
					else{
						$(curmodel.modelid).hide();
					}
				});
			}
			else if(parseInt(gender) === 1){ //sort only males
				$(male_section).show();
				$(female_section).hide();
				myAdvancedSearch.males.each(function(curmodel) {
					//alert("cm:"+curmodel.sceneid);
					if ( ((allCheckBoxesMask == 0) || ((curmodel.sceneid & allCheckBoxesMask) == allCheckBoxesMask)) && ((ethnicity == 0)||(curmodel.ethnicity == ethnicity))){
						$(curmodel.modelid).show();
					}
					else{
						$(curmodel.modelid).hide();
					}
				});
				
			}
		}
		else {
			alert('Do not have necessary fields on the form');
		}
	}
	else{
		alert('Search form does not exist');
	}
	
}
function initAdvancedSearch() {myAdvancedSearch = new AdvancedSearch();}
Event.observe(window, 'load', initAdvancedSearch, false);
/*
new PeriodicalExecuter(function(pe){
	if(myAdvancedSearch.ready){
		updateScreen();
		pe.stop();//stop propagating
	}
},1);
*/