var WBHelper = {
	createElement : function( params ){
		el = null;
		p = {};
		tag = null ;
		ops = null ;
		for (i in params) {
			if (i == 'subElements') {
				ops = params[i];
			}	
			else if(params[i]) {
				p[i] = params[i];
			}
		}
		el = this._createElement(p);
		if (ops) {	
			for ( k = 0; k < ops.length; k++) {
				if( sel = this._createElement( ops[k] ) ){
					el.appendChild(sel) ;	
				};
			}	
		}
		p = null;
		return el;
	},
	_createElement : function( params ){
		_p = {};
		tag = null ;
		for (i in params) {	
			if (i == 'tag') {
				tag = params[i];
			}
			else if(i != 'subElements' && params[i]) {
				_p[i] = params[i];
			}
		}
		if( !tag)
			return null ;
		return  new Element(tag, _p);		
	},
	setValue : function( name, value , bindTo ){
		if( undefined == name || name=='')
			return null ;
		t = name.split(/\./g) ;
		
		switch(t.length - 1){
			case 0 :
				bindTo[ t[0] ] = value ;
			break;
			case 1 :
				bindTo[ t[0] ][ t[1] ] = value ;
			break;
			case 2 :
				bindTo[t[0]][ t[1]][ t[2] ] = value ;
			break;
			case 3 :
				bindTo[t[0]][ t[1]][ t[2]][ t[3] ]  = value ;
			break;
			case 4 :
				bindTo[t[0]][ t[1]][ t[2]][ t[3] ][ t[4] ]  = value ;
			break;
			case 5 :
				bindTo[t[0]][ t[1]][ t[2]][ t[3] ][ t[4] ][ t[5] ]  = value ;
			break;			
		}			
		return this.getValue(name, bindTo);	
	},
	getValue : function( name , bindTo ){
		if( undefined == name || name=='')
			return null ;
		t = name.split(/\./g) ;
		
		switch (t.length - 1) {
			case 0:
				return bindTo[t[0]];
				break;
			case 1:
				return bindTo[t[0]][t[1]];
				break;
			case 2:
				return bindTo[t[0]][t[1]][t[2]];
				break;
			case 3:
				return bindTo[t[0]][t[1]][t[2]][t[3]];
				break;
			case 4:
				return bindTo[t[0]][t[1]][t[2]][t[3]][t[4]];
				break;	
			case 5:
				return bindTo[t[0]][t[1]][t[2]][t[3]][t[4]][t[5]];
				break;	
			default:
				return null;
				break;
		}
	},
	setValues : function( bindTo, params , name ){
		if(!name) name = '';	
		for (_key in params) {
			_name = name ? name + '.' + _key : _key;
			if ($type(params[_key]) == "object"){ 
				if(!this.getValue(_name , bindTo))
					this.setValue( _name , {} , bindTo );
				this.setValues(bindTo, params[_key], _name);
			}else
				this.setValue( _name , params[_key] , bindTo );	
		}
	},
	toQuery: function(params){
		qs = '';
		t = [];
		
		for (key in params) {
			if (params[key]) 
				t[t.length] = key + '=' + params[key];
		}
		if (t.length > 0) 
			qs = t.join('&');
		return qs;
	},
	appendQuery: function(uri, params){
		uri += (uri.indexOf('?') != -1 ? '&' : '?') + this.toQuery(params);
		return uri;
	}
}
