1 | |
---|
2 | (function() |
---|
3 | { |
---|
4 | if (document.all){ |
---|
5 | navigator.userAgent.toLowerCase().indexOf('msie 5') != -1 ? is_ie5 = true : is_ie5 = false; |
---|
6 | is_ie = true;is_moz1_6 = false;is_mozilla = false;is_webkit = false;is_ns4 = false;} |
---|
7 | else if (document.getElementById){ |
---|
8 | navigator.userAgent.toLowerCase().match('mozilla.*rv[:]1\.6.*gecko') ? is_moz1_6 = true : is_moz1_6 = false; |
---|
9 | navigator.userAgent.toLowerCase().match('applewebkit') ? is_webkit = true : is_webkit = false; |
---|
10 | is_ie = false;is_ie5 = false;is_mozilla = true;is_ns4 = false;} |
---|
11 | else if (document.layers) |
---|
12 | {is_ie = false;is_ie5 = falseis_moz1_6 = false;is_mozilla = false;is_webkit = false;is_ns4 = true;} |
---|
13 | var _THREADS=[];var _ie;function _config(pObj,pEvent,pHandler) |
---|
14 | {if(typeof pObj=='object') |
---|
15 | {if(pEvent.substring(0,2)=='on') |
---|
16 | pEvent=pEvent.substring(2,pEvent.length);if(pObj.addEventListener) |
---|
17 | pObj.addEventListener(pEvent,pHandler,false);else if(pObj.attachEvent) |
---|
18 | pObj.attachEvent('on'+pEvent,pHandler);}} |
---|
19 | function _xhr() |
---|
20 | {try |
---|
21 | {return new XMLHttpRequest();} |
---|
22 | catch(_e) |
---|
23 | {_ie=true;try |
---|
24 | {return new ActiveXObject('Msxml2.XMLHTTP');} |
---|
25 | catch(_e1) |
---|
26 | {try |
---|
27 | {return new ActiveXObject('Microsoft.XMLHTTP');} |
---|
28 | catch(_e2) |
---|
29 | {return false;}}}} |
---|
30 | function _HANDLER() |
---|
31 | {var _ID=arguments[0];if(_THREADS[_ID]) |
---|
32 | {if(_ie&&_THREADS[_ID]._XHR.readyState!=4) |
---|
33 | return false;switch(_THREADS[_ID]._XHR.readyState) |
---|
34 | {case 3:if(_THREADS[_ID]._HANDLER.stream) |
---|
35 | {var _data=_THREADS[_ID]._XHR.responseText.substr(_THREADS[_ID]._index).replace(/^ +| +$/g,'');_THREADS[_ID]._rtlen=_THREADS[_ID]._XHR.responseText.length;if(_THREADS[_ID]._index<_THREADS[_ID]._rtlen&&_data.length) |
---|
36 | {try |
---|
37 | {_THREADS[_ID]._HANDLER.stream(_data);} |
---|
38 | catch(_e) |
---|
39 | {}} |
---|
40 | if(_THREADS[_ID]) |
---|
41 | {_THREADS[_ID]._index=_THREADS[_ID]._rtlen;}} |
---|
42 | break;case 4:try |
---|
43 | {switch(_THREADS[_ID]._XHR.status) |
---|
44 | {case 200:var _data=(_THREADS[_ID]._MODE=='XML')?_THREADS[_ID]._XHR.responseXML:_THREADS[_ID]._XHR.responseText;if(_ie&&_THREADS[_ID]._HANDLER.stream) |
---|
45 | _THREADS[_ID]._HANDLER.stream(_data);var _request=(_THREADS[_ID]._HANDLER.request)?_THREADS[_ID]._HANDLER.request:false;delete _THREADS[_ID];if(_request) |
---|
46 | try |
---|
47 | {_request(_data);} |
---|
48 | catch(_e) |
---|
49 | {} |
---|
50 | break;case 404:delete _THREADS[_ID];alert('Page Not Found!');break;default:delete _THREADS[_ID];}} |
---|
51 | catch(e) |
---|
52 | {} |
---|
53 | break;default:}}} |
---|
54 | function _execute() |
---|
55 | {var _ID=arguments[0];var _ACTION='act='+_ID;var _TARGET=this._PATH;var _SEND=null;if(_TARGET!=''&&_TARGET.lastIndexOf('/')!=(_TARGET.length-1)) |
---|
56 | _TARGET+='/';_TARGET+=(this._CONTROLLER)?this._CONTROLLER:'controller.php';if(_THREADS[_ID]._METHOD=='GET') |
---|
57 | _TARGET+='?'+_ACTION;_THREADS[_ID]._XHR.open(_THREADS[_ID]._METHOD,_TARGET,true);if(_THREADS[_ID]._METHOD=='POST') |
---|
58 | {_THREADS[_ID]._XHR.setRequestHeader('Content-Type','application/x-www-form-urlencoded');_THREADS[_ID]._XHR.setRequestHeader('Cache-Control','no-store, no-cache, must-revalidate');_THREADS[_ID]._XHR.setRequestHeader('Cache-Control','post-check=0, pre-check=0');_THREADS[_ID]._XHR.setRequestHeader('Pragma','no-cache');_SEND=_ACTION+'&'+arguments[1];} |
---|
59 | _THREADS[_ID]._XHR.onreadystatechange=function(){_HANDLER(_ID);};_THREADS[_ID]._XHR.send(_SEND);} |
---|
60 | function usage() |
---|
61 | {return""+"Description:\n"+"\t<obj>.go(string access, [mixed handler[, mixed post]])\n\n"+"Parameters:\n"+"\taccess : assinatura de acesso à camada de controle.\n"+"\thandler : uma função a ser executada no fim da requisição\n"+"\t\tou um objeto que poderá conter dois Ãndices sendo\n"+"\t\tque ambos deverão ser uma função que será executada\n"+"\t\tconforme o status do objeto xhr, sendo que na posição\n"+"\t\t'stream' será a função a ser executada a cada iteração\n"+"\t\tdo objeto xhr e na posição 'request' será a função\n"+"\t\ta ser executada no fim da requisição.\n"+"\tpost : se especificado deverá ser uma query string ou um\n"+"\tXML bem formatado.\n\n";} |
---|
62 | function go() |
---|
63 | {var _argv=arguments;var _argc=_argv.length;var _ID=_argv[0];var _POST;if(_argc<1||_argc>3) |
---|
64 | return{'error':"#0\n\n"+usage()};if(typeof _ID!='string') |
---|
65 | return{'error':"#1\n\n"+usage()};_THREADS[_ID]={'_HANDLER':{},'_METHOD':(_argv[2])?'POST':'GET','_MODE':null,'_TYPE':null,'_XHR':null};if(_argv[2]) |
---|
66 | _POST=_argv[2];if(_argv[1]) |
---|
67 | switch(typeof _argv[1]) |
---|
68 | {case'function':_THREADS[_ID]._HANDLER={'request':_argv[1]};break;case'object':for(var i in _argv[1]) |
---|
69 | if(i!='stream'&&i!='request') |
---|
70 | {delete _THREADS[_ID];return{'error':"#3\n\n"+usage()};} |
---|
71 | else if(i=='stream') |
---|
72 | {_THREADS[_ID]._index=0;_THREADS[_ID]._rtlen=0;} |
---|
73 | _THREADS[_ID]._HANDLER=_argv[1];break;case'string':if(_argc==2) |
---|
74 | {_THREADS[_ID]._METHOD='POST';_POST=_argv[1];} |
---|
75 | break;default:} |
---|
76 | if(!(_THREADS[_ID]._XHR=_xhr())) |
---|
77 | return{'error':"#4 it cannot make a xhr object"};(_THREADS[_ID]._METHOD=='GET')?_execute.call(this,_ID):_execute.call(this,_ID,_POST);return{'success':"your thread is running and the response "+"will be manipulated by the handler"};} |
---|
78 | function abort() |
---|
79 | {for(var _ID in _THREADS) |
---|
80 | {try |
---|
81 | {if(_THREADS[_ID]&&_THREADS[_ID]._XHR&&_THREADS[_ID]._XHR.abort) |
---|
82 | _THREADS[_ID]._XHR.abort();delete _THREADS[_ID];} |
---|
83 | catch(e){}}} |
---|
84 | function Connector() |
---|
85 | {var _argv=arguments;this._PATH=(_argv.length>0)?_argv[0]:'';this._CONTROLLER=(_argv.length==2)?_argv[1]:false;} |
---|
86 | Connector.prototype.go=go;Connector.prototype.abort=abort;window.AjaxConnector=Connector;_config(window,'onbeforeunload',abort);})(); |
---|