//--------------------------------------------------------------------------
// functions for jsonp
//   version 1.0.1  2006/08/11
//   by wakufactory.jp
//   license BSD
function GetJsonp(uri) {
	var callback = null ;
	this.err_stat = 0;
	this.err_msg = ""; 
	var url = uri ;
	var _copy = this ;
	var header = document.getElementsByTagName('head')[0] ;
	var script ;
	var callback_name = "jsonp" ;
	this.get	= function(vars) {
		script = document.createElement('script') ;
		var cb = _callback_dispatcher.set( _callback ) ;
		var src = url ;
		src += ((url.match(/\?/))?'&':'?')+callback_name+"=_callback_dispatcher.callbacks%5b"+cb+"%5d" ;
		if(vars) src += "&"+_encode_vars(vars) ;
		script.type = 'text/javascript' ;
//		script.charset = 'utf-8' ;
//alert(script.src);
		script.src = src ;
		header.appendChild(script) ;
	}
	function _callback(obj) {
		script.parentNode.removeChild(script) ;
		callback(obj) ;
	}
	this.setCallback = function( func ) {
		callback = func ;
	}
	function _encode_vars(vars) {
		var e = new Array()  ;
		var ev ;
		for(v in vars) {
			if(typeof vars[v] == 'object' ) {	//array
				for(vv in vars[v]) {
					ev = encodeURIComponent(vars[v][vv]) ;
					ev = ev.replace(/\+/g,"%2b") ;
					e.push( v+"[]="+ev ) ;	
				}
			}else{
				ev = encodeURIComponent(vars[v]) ;
				ev = ev.replace(/\+/g,"%2b") ;
				e.push( v+"="+ev ) ;	
			}
		}
		return e.join("&") ;
	}
}
var _callback_dispatcher = {
	callbacks : [] ,
	index : 0 ,
	set : function( func) {
		_callback_dispatcher.index++ ;
		_callback_dispatcher.callbacks[_callback_dispatcher.index] = func ;
		return _callback_dispatcher.index ;
	}
}
// query dispatch class
function Query(url,msgdiv){
	var _url ;
	var _msgdiv ;
	//constructor 
		_url = url ;
		_msgdiv = msgdiv ;
	
	this.msg = function(m) {
		if(_msgdiv) $I(_msgdiv,m ) ;
	}
	
	this.get = function(method,param,callback,opt) {
		var _o = new GetJsonp(_url) ;
		var _opt = opt ;
		_o.setCallback( function(dat) {
			if(dat) {
				callback(dat,_opt) ;
			} else {
				this.msg(_o.err_msg ) ;
			}
			_o = null ;
		});
		param['method'] = method ;
		_o.get(param) ;
	}
}

