/****************************** 
 * Author: ken
 * Controller for Filter
 *****************************/
function FilterController() {
	this.model = null;
	this.filterView = new FilterView();
	this.filterCookie=new FilterCookie();
	TSWIDGET.EVENTS.subscribeEx('evtUpdateFilter', this.onUpdateFilter, this, true);	
	TSWIDGET.EVENTS.subscribeEx('evtClickFilterItemLink', this.onFilterItemClick, this, true);	
	TSWIDGET.EVENTS.subscribeEx('evtRestoreFilters', this.onRestoresFilters, this, true);
} 

/**
* It's a singleton
*/
FilterController.instance=null;
/**
 *  singleton, call this function to get filter controller instance, do not new FilterController() plz.
 *  @return FilterController instance
 */
FilterController.getInstance = function(){
	if(FilterController.instance==null)
		FilterController.instance = new FilterController();
	return FilterController.instance;
}

/** 
* Initialize
*/
FilterController.prototype.init = function(model) {
	this.model = model;
	var fileFormatPickerController = new FileFormatPickerController(model);
	this.filterView.init();
	this.filterCookie.init();
}

/**
 * update the client filter by adding or removing conditions
 * @param {Array} args[key,value,blSubmitForm]
 * @param {Object} obj--scope
 */
FilterController.prototype.onUpdateFilter = function(args,obj){ //args[0]:key, [1]:value, [2]:blSubmitForm, [3]:blDeleteValue
	this.model.updateFilter(args[0],args[1],args[3]);
	if(args[2]==true){
		this.submitForm();
	}
}

FilterController.prototype.submitForm = function(){
	var filterParams = this.model.m_obFilterParams;
	if(filterParams!=null){
		var form = document.getElementById("searchBarForm");
		var hiddens = YAHOO.util.Dom.getElementsBy(function(obj){if(obj.type=="hidden")return true;else return false}, "input", form,null);
		var len = hiddens.length;
		var key = "";
		var blExist = false;
		var html = "";
		var Params	= this.model.m_obDefaultParams;
		for(key in filterParams){
			blExist = false;
			for(var i=0;i<len;i++){
				if(key.toLowerCase()==hiddens[i].name.toLowerCase()){
					hiddens[i].value = filterParams[key];
					blExist = true;
					break;
				}
			}
			if(blExist==false){
				if(Params.hasOwnProperty(key.toLowerCase())){
						if(Params[key.toLowerCase()].toLowerCase()!=filterParams[key].toLowerCase()){
							html += this.buildInput(key,filterParams[key]);}
				}else{
							html += this.buildInput(key,filterParams[key]);
					}
				
			}
		}
		if(html!=""){
			form.innerHTML += html;		
		}
		//this.clearMaxPriceField();
		form.submit();
	}
}
FilterController.prototype.buildInput = function(key,value){
	return "<input type='hidden' name='"+key+"' value='"+value+"'>";
}
FilterController.prototype.onFilterItemClick = function(filterName,obj){
	var clickTime = new Date().getTime();
	this.filterCookie.SetTimeCookie(filterName,clickTime);
}

FilterController.prototype.onRestoresFilters = function(args,obj){
	this.filterCookie.SetCookie("RESTORESFILTERS","1");
	this.submitForm();
}

FilterController.prototype.clearMaxPriceField = function(){
	var form = document.getElementById("searchBarForm");
	var hiddens = YAHOO.util.Dom.getElementsBy(function(obj){if(obj.type=="hidden")return true;else return false}, "input", form,null);
	var len = hiddens.length;
	for(var i=0;i<len;i++){
		if(hiddens[i].name.toLowerCase()=="max_price"){
			if(hiddens[i].value==""){
				$(hiddens[i]).remove();
			}
			return;
		}
	}
}
