Cmg.Query=new function() {
	this.findContainer=function( p ) {
		while( p ) {
			if( p.getAttribute( 'data-cmg_query_pn' ) ) break;
			if( p==p.parentNode || p.nodeName=='body' ) { p=null; break; }
			else p=p.parentNode;
		}
		if( p ) {
			if( !p.cmg_pageNumber ) {
				var a=p.getAttribute( 'data-cmg_query_pn' );
				p.cmg_pageNumber=parseInt(a);
				a=p.getAttribute( 'data-cmg_query_tp' );
				p.cmg_totalPages=parseInt(a);
				a=p.getAttribute( 'data-cmg_rowsPerPage' );
				p.cmg_rowsPerPage=parseInt(a);
			}
			return( p );
		}
		return( null );
	}
	this.nextPage=function(node) {
		var p=this.findContainer(node);
		if( !p ) return;
		if( p.cmg_totalPages <= p.cmg_pageNumber+1 ) alert( 'End reached.' );
		else Cmg.recallNode(p,{'pageNumber':p.cmg_pageNumber+1},function(newNode){Cmg.Query.scroll(newNode);});
	}
	this.prevPage=function(node) {
		var p=this.findContainer(node);
		if( !p ) return;
		if( p.cmg_pageNumber<1 ) alert( 'Start reached.' );
		else Cmg.recallNode(p,{'pageNumber':p.cmg_pageNumber-1},function(newNode){Cmg.Query.scroll(newNode);});
	}
	this.gotoPage=function(node,num) {
		var p=this.findContainer(node);
		if( !p ) return;
		Cmg.recallNode(p,{'pageNumber':num},function(newNode){Cmg.Query.scroll(newNode);});
	}
	this.query=function(node,query,terms,callBack) {
		var p=this.findContainer(node);
		if( !p ) return;
		var args={'pageNumber':0};
		if( query ) args['query']=query;
		if( terms ) args['terms']=terms;
		else if( terms==='' ) args['terms']='';
		Cmg.recallNode(p,args,function(newNode){
			Cmg.Query.scroll(newNode);
			if(callBack) callBack(newNode);
		});
	}
	this.setQueryString=function(node,q,callBack) {
		var p=this.findContainer(node);
		if( !p ) return;
		Cmg.recallNode(p,{'query':q,'pageNumber':0},function(newNode){
			Cmg.Query.scroll(newNode);
			if(callBack) callBack(newNode);
		});
	}
	
	this.scroll=function(node){
		var delta = node.getAttribute('data-cmg_scrollDelta');
		if (!delta && delta!=='0') delta="50";
		var time = node.getAttribute('data-cmg_scrollTime');
		if (!time && time!=='0') time="500";
		var targetOffset = $(node).offset().top;
		$('html,body').animate({scrollTop: targetOffset-parseInt(delta)}, parseInt(time));
	}
}


