function Connector() { this.__HTTP__ = []; this.__THREADS__ = []; } Connector.prototype = { 'go' : function() { // connection var index = 0; var rtlen = 0; var ie = false; // ie doesn't has stream var __this__ = this; function makeConnection(pThread) { __this__.__HTTP__[pThread] = xhr(); } function setPost(pThread) { __this__.__THREADS__[pThread].__METHOD__ = 'POST'; return true; } // this function set __this__.__THREADS__[?].__TYPE__ to 4 for request or 3 for stream function setStream(pThread) { __this__.__THREADS__[pThread].__TYPE__ = ( !ie ) ? 3 : 4; return true; } function trim(pData) { return pData.replace(/^ +| +$/g, ''); } function verifyUserHandler(pThread, pHandler) { var type_of_handler = typeof pHandler; var i; switch ( type_of_handler ) { case 'function' : return true; break; case 'object' : for ( i in pHandler ) if ( i != 'stream' && i != 'request' ) return false; else if ( i == 'stream' ) setStream(pThread); return true; break; default : return false; } } // xhr = XMLHttpRequest function xhr() { try { return new XMLHttpRequest(); } catch (e) { ie = true; try { return new ActiveXObject('Msxml2.XMLHTTP'); } catch (e1) { try { return new ActiveXObject('Microsoft.XMLHTTP'); } catch (e2) { return null; } } } } function __HANDLER__() { try { if ( ie && __this__.__HTTP__[arguments[0]].readyState != 4 ) return false; var threadId = arguments[0]; if ( !threadId ) return false; if ( __this__.__HTTP__[threadId].readyState == 3 || __this__.__HTTP__[threadId].readyState == 4 ) { if ( !ie && __this__.__HTTP__[threadId].readyState == 3 && __this__.__THREADS__[threadId].__HANDLER__.stream ) { var data = trim(__this__.__HTTP__[threadId].responseText.substr(index)); rtlen = __this__.__HTTP__[threadId].responseText.length; if ( index < rtlen && data.length ) { __this__.__THREADS__[threadId].__HANDLER__.stream(data); index = rtlen; } } if ( __this__.__THREADS__[threadId].__HANDLER__.request && __this__.__HTTP__[threadId].readyState == 4 ) { switch ( __this__.__HTTP__[threadId].status ) { case 200: var stream = false; var request = false; var data = ( __this__.__THREADS__[threadId].__MODE__ == 'XML' ) ? __this__.__HTTP__[threadId].responseXML : __this__.__HTTP__[threadId].responseText; if ( ie && __this__.__THREADS__[threadId].__HANDLER__.stream ) stream = __this__.__THREADS__[threadId].__HANDLER__.stream; if ( __this__.__THREADS__[threadId].__HANDLER__.request ) request = __this__.__THREADS__[threadId].__HANDLER__.request; delete __this__.__THREADS__[threadId]; if ( stream ) stream(data); if ( request ) request(data); break; // [case : status 200] case 404: alert('Page Not Found!'); break; // [case : status 404] default: } } } } catch(e) { //alert("__HANDLER__\n" + threadId + "\n " + e + "\n ErroR: " + e.description); //delete __this__.__THREADS__[threadId]; } }; var argc = arguments.length; if ( argc < 2 || argc > 4 ) return {'error':'#0 - invalid params'}; if ( __this__.__THREADS__[arguments[0]] ) return {'error':'#2 - request is running'}; __this__.__THREADS__[arguments[0]] = { '__HANDLER__' : arguments[1], '__METHOD__' : 'GET', // __METHOD__ = [GET | POST] '__MODE__' : 'TEXT', // __MODE__ = [XML | TEXT] '__TYPE__' : 4 // __TYPE__ = [4 for request | 3 for stream] }; makeConnection(arguments[0]); if ( !verifyUserHandler(arguments[0], arguments[1]) ) { //delete __this__.__THREADS__[arguments[0]]; return {'error':'#1 - invalid handler'}; } if ( argc == 3 ) setPost(arguments[0]); if ( __this__.__HTTP__[arguments[0]] != null ) { try { var __TARGET__ = path_im + 'controller.php?act=' + arguments[0]; var __SEND__ = null; __this__.__HTTP__[arguments[0]].open(__this__.__THREADS__[arguments[0]].__METHOD__, __TARGET__, true); if ( __this__.__THREADS__[arguments[0]].__METHOD__ == 'POST' ) { __this__.__HTTP__[arguments[0]].setRequestHeader('Content-Type','application/x-www-form-urlencoded'); __this__.__HTTP__[arguments[0]].setRequestHeader('Cache-Control', 'no-store, no-cache, must-revalidate'); __this__.__HTTP__[arguments[0]].setRequestHeader('Cache-Control', 'post-check=0, pre-check=0'); __this__.__HTTP__[arguments[0]].setRequestHeader('Pragma', 'no-cache'); __SEND__ = 'act=' + arguments[0] + '&' + arguments[2]; } var tst = arguments[0]; __this__.__HTTP__[arguments[0]].onreadystatechange = function(){__HANDLER__(tst);}; __this__.__HTTP__[arguments[0]].send(__SEND__); } catch(e) { alert("go\n" + e.description); return {'error':'#3 - ' + e.description}; } } } };