/*
 * hipic.web.app
 * Copyright(c) 2010, FeiKan.
 * 
 * This code is licensed under BSD license. Use it as you wish, 
 * but keep this copyright intact.
 */


$(function()
{app.server=(function()
{var _data={};var _getUrl=function(cmd)
{var u=OP['ajax-proxy-base'];var g=$.inArray(cmd,OP['ajax-proxy-methods'])&&OP['ajax-proxy-gate'];return'{0}/{1}?{2}'.toString(u,g,GUID());};var _send=function(async,params,scope,callback,args)
{var cb=callback||scope;var sp=callback&&scope;_data=null;if(params)
{for(var k in params)
{if(TYPE.isDate(params[k]))
{params[k]=encodeURI(Date.toUtc());}}}
setTimeout(function()
{$.ajax({'url':_getUrl(params.cmd),'data':params,'async':async,success:function(data,status)
{_data=data;},'complete':function(xhr)
{setTimeout(function()
{if(cb)
{cb.call(sp||this,_data,args);}},OP['ajax-response-interval']);}});},OP['ajax-query-interval']);};var _get=function(async,url,type,scope,callback,args)
{var cb=callback||scope;var sp=callback&&scope;var dtype=type||'text';_data=null;var ctype=OP['ajax-content-type'][type]||OP['ajax-content-type']['text'];setTimeout(function()
{$.ajax({'type':'GET','url':'{0}/{1}'.toString(OP['ajax-proxy-base'],url),'dataType':dtype,'contentType':ctype,'async':async,success:function(data,status)
{_data=data;},'complete':function(xhr)
{setTimeout(function()
{if(cb)
{cb.call(sp||this,_data,args);}},OP['ajax-response-interval']);}});},OP['ajax-query-interval']);};return{post:function(params,scope,callback,args,wait)
{_send(!!wait,params,scope,callback,args);return this;},getText:function(url,scope,callback,args,wait)
{_get(!!wait,url,'text',scope,callback,args);return this;},getHtml:function(url,scope,callback,args,wait)
{_get(!!wait,url,'html',scope,callback,args);return this;}}})();app.asynData=(function(options)
{var _opts=options||{};var _global=_opts.global;var _type=_opts.type;var _url=_opts.url||'proxy/agent2.ashx';var _params=_opts.params;var _ajaxOptions={};var _eComplete,_eError,_eBefore;var _handler={'before':[],'error':[],'complete':[]};var _change=127;var _enums;var _pool={};var _setting=function()
{var _set=function(name,val)
{_ajaxOptions[name]=val;};if(_enums.has('global'))
{_enums.remove('global');_set('global',!(_global===undefined||_global!==true));}
if(_enums.has('type'))
{_enums.remove('type');var t=TYPE.isString(_type)&&_type.toUpperCase();switch(t)
{case'GET':case'POST':break;default:t='POST';break;}
_set('type',t);}
if(_enums.has('url'))
{_enums.remove('url');if(_url!==undefined)
{var u=_url;if(!u.startWith(OP['host-address']))
{u=OP['host-address']+u;}
_set('url',u.toLowerCase());}}
if(_enums.has('params'))
{_enums.remove('params');if(_params!==undefined)
{_set('data',_params);}}
if(_enums.has('cbBefore'))
{_enums.remove('cbBefore');_set('beforeSend',function(xhr)
{var h=_handler['before'];if(h.length)
{var goon=true;for(var i=0;i<h.length;i++)
{if(goon===false)
{h=null;return false;}
goon=h[i].call(this,xhr);}}
h=null;});}
if(_enums.has('cbError'))
{_enums.remove('cbError');_set('error',function(xhr,textStatus,err)
{var h=_handler['error'];if(h.length)
{var goon=true;for(var i=0;i<h.length;i++)
{if(goon===false)
{break;}
h[i].call(this,xhr,textStatus,err);}}
h=null;});}
if(_enums.has('cbComplete'))
{_enums.remove('cbComplete');_set('complete',function(xhr,textStatus)
{var h=_handler['complete'];if(h.length)
{var goon=true;for(var i=0;i<h.length;i++)
{if(goon===false)
{break;}
h[i].call(this,this.db,xhr,textStatus);}}
h=null;});}};var _init=function()
{var id=GUID();_enums=ENUM.create(['global','type','url','params','cbComplete','cbError','cbBefore']);_eComplete='E[{0}]'.toString(GUID());_eError='E[{0}]'.toString(GUID());_eBefore='E[{0}]'.toString(GUID());_setting();};var _fnSuccess=function(data,status)
{this.db=data;};var _run=function(tag)
{_setting();var ops=$.extend({},_ajaxOptions,{'id':GUID()});if(tag)
{ops['tag']=tag;}
if(ops['success']!=_fnSuccess)
{$.extend(ops,{'success':_fnSuccess});}
ops['originalData']=ops['data'];$.ajax(ops);};_init();return{global:function(v)
{if(v===undefined)
{return _global;}
else
{_global=v;_enums.add('global');_setting();return this;}},type:function(v)
{if(v===undefined)
{return _type;}
else
{_type=v;_enums.add('type');_setting();return this;}},url:function(v)
{if(v===undefined)
{return _url;}
else
{_url=v;_enums.add('url');_setting();return this;}},params:function(v)
{if(v===undefined)
{return _params||{};}
else if(v&&!$.isEmptyObject(v))
{_params=v;_enums.add('params');_setting();return this;}},reset:function()
{_global=false;_type='';_url='proxy/agent2.ashx';_params=null;_ajaxOptions={};_handler={'before':[],'error':[],'complete':[]};_change=127;_init();return this;},bind:function(type,fn)
{var h;var c;switch(type)
{case ENUM.ASNY.BEFORE:h=_handler['before'];c='cbComplete';break;case ENUM.ASNY.ERROR:h=_handler['error'];c='cbError';break;case ENUM.ASNY.COMPLETE:h=_handler['complete'];c='cbBefore';break;}
if(h)
{if($.inArray(fn,h)<0)
{_enums.add(c);h.push(fn);}}
_setting();return this;},run:function(params,tag)
{var p=tag||params;var t=params&&tag;if(p)
{this.params(p);}
_run(t);return this;}};});app.asynData.items=[];app.asynData.create=function(options)
{var a=new app.asynData(options);app.asynData.items.push(a);return a;};app.asynData.distory=function(obj)
{var index=$.inArray(obj,app.asynData.items);if(index>=0)
{var o=app.asynData.items.splice(index);o=null;delete o;}};$.extend(window,{DB:app.server});$.extend(window,{DB2:app.asynData,DB2CLEAR:app.asynData.distory});});
