/*
 * 查询条件
 * param query : Object(关联数组，key为查询条件的key，value为输入组件)
 */
Fangbole.Query = Class.create({
	initialize: function(query, options){
		this.query = $H(query);
	},
	addParam: function(key, value){
		this.query.set(key, value);
	},
	removeParam: function(key){
		this.query.unset(key);
	},
	getParam: function(key){
		return this.query.get(key);
	},
	setParam: function(key, value){
		if(this.query.find(key)){
			var param = this.getParam(key);
			if(param && param.update){
				param.update(value);
			}else{
				this.query.set(key, value);
			}
		}
	},
	toQueryString: function(){
		  function toQueryPair(key, value) {
		    if (Object.isUndefined(value)) return key;
		    return key + '=' + encodeURIComponent(String.interpret(value));
		  }

		//modify Hash::toQueryString
	    return this.query.inject([], function(results, pair) {
	      var key = encodeURIComponent(pair.key), values = pair.value;

	      if (values && typeof values == 'object') {
	      	if(values.getValue)
	      		results.push(toQueryPair(key, values.getValue()));
	      		//return results.concat([toQueryPair(key, values.getValue())]);
	        if (Object.isArray(values))
	          return results.concat(values.map(toQueryPair.curry(key)));
	      } else results.push(toQueryPair(key, values));
	      return results;
	    }).join('&');
	},
	toQueryParam: function(){
		return this.toQueryString().toQueryParams();
	}
})
