( function( ) { var _connector = new XConnector; var _script = new XScript; var _location = window.location; function Link( ) { var _path = ( arguments.length && arguments[ 0 ].constructor == String ) ? arguments[ 0 ] : '/'; _path = ( ( ( _path.indexOf( _location.protocol ) != 0 ) ? _location.protocol + '//' : '' ) + ( ( _path.indexOf( _location.host ) != 0 ) ? _location.host : '' ) + ( ( _path.indexOf( '/' ) != 0 ) ? '/' : '' ) ) + _path; var _last_request = null; var _handlers_registred = { after : null, before : null, data : null }; if ( _location.protocol + '//' + _location.host + _location.pathname != _path ) window.location.href = _path + ( ( _location.hash ) ? _location.hash : '#' + String( _location.protocol + '//' + _location.host + _location.pathname + _location.search ).substr( _path.length ) ); function _click( _action, _cache ) { switch ( _action.indexOf( _location.pathname ) ) { case -1 : _action = _path + ( ( _action.indexOf( '/' ) == 0 ) ? _action.substr( 1 ) : _action ); break; case 0 : _action = _action.replace( _location.pathname, _path ); break; default : if ( _action.indexOf( _path ) != 0 ) _action = _path + _action; } var _post = ( arguments.length == 3 && arguments[ 2 ] && arguments[ 2 ].constructor == String ) ? arguments[ 2 ] : null; if ( _post == null && _action == _last_request ) return false; if ( _handlers_registred.before ) _handlers_registred.before( ); _connector.go( { 'access' : _action, 'cache' : _cache, 'handler' : _manipulator, 'post' : _post } ); _last_request = _action; window.location = '#' + ( ( _action.indexOf( _path ) < 0 ) ? _action : _action.substr( _action.indexOf( _path ) + _path.length ) ); } function _intercept( pLink ) { var action = pLink.href; if ( action == '' ) return false; var a = ( action.indexOf( 'javascript:' ) === 0 ); a = ( a || ( action.indexOf( '#' ) === 0 ) ); a = ( a || ( action.indexOf( window.location + '#' ) === 0 ) ); a = ( a || ! ( action.indexOf( 'workflow' ) < 0 ) ); if ( ! a ) pLink.onclick = function( ) { var _cacheit = false;//( ( pLink.hasAttribute( 'cacheit' ) && pLink.getAttribute( 'cacheit' ) === 'true' ) ? true : false ); _click( action, _cacheit ); return false; }; } function _manipulator( _pData ) { if ( ! ( _pData.constructor == String ) ) return false; if ( _handlers_registred.data ) _pData = _handlers_registred.data( _pData ); var _line_feed = '__LINE_FEED_CHARACTER_' + ( Date.parse( new Date ) ) + '__'; _pData = _pData.trim( ).replace( /[\r\t]/g, '' ).replace( /\n/g, _line_feed ); _line_feed = new RegExp( _line_feed, 'g' ); var _css = _pData.match( new RegExp( ']*\/>', 'gi' ) ); if ( _css ) for ( var i = 0; _css, i < _css.length; i++ ) { _pData = _pData.replace( _css[ i ], '' ); XStyle.add( ( /<[^>]*href="(\S+)"[^>]*\/>/i ).exec( _css[ i ] )[ 1 ] ); } var _js = _pData.match( new RegExp( ']*>.*?<\/script>', 'gi' ) ); if ( _js ) for ( var i = 0; i < _js.length; i++ ) { _pData = _pData.replace( _js[ i ], '' ); _js[ i ] = ( /]+src=["'](\S+)["'])?[^>]*>(.*?)<\/script>/i ).exec( _js[ i ] ); var _external = _js[ i ][ 2 ]; if ( _external == undefined || _external.length == 0 ) _script.inline( _js[ i ][ 3 ].replace( _line_feed, '\n' ) ); else { if ( _external.indexOf( window.location.host ) < 0 ) _external = window.location.protocol + '//' + window.location.host + _external; _script.external( _external.substr( _path.length - 1, _external.length - _path.length + 1 - ( ( _external.indexOf( '?' ) < 0 ) ? 0 : ( _external.length - _external.indexOf( '?' ) ) ) ) ); } } var el = document.createElement( 'div' ); el.innerHTML = _pData.replace( _line_feed, '' ); var _links = el.getElementsByTagName( 'a' ); for ( var i = 0; i < _links.length; i++ ) _intercept( _links.item( i ) ); if ( _handlers_registred.after ) _handlers_registred.after( el ); _script.load( ); } function _handler( ) { if ( arguments.length != 1 ) return false; switch ( arguments[ 0 ].constructor ) { case Function : _handler.after = arguments[ 0 ]; break; case Object : if ( arguments[ 0 ].after && arguments[ 0 ].after.constructor == Function ) _handlers_registred.after = arguments[ 0 ].after; if ( arguments[ 0 ].before && arguments[ 0 ].before.constructor == Function ) _handlers_registred.before = arguments[ 0 ].before; if ( arguments[ 0 ].data && arguments[ 0 ].data.constructor == Function ) _handlers_registred.data = arguments[ 0 ].data; break; default : return false; } } this.click = function( ) { _click( arguments[ 0 ], ( ( arguments.length > 1 && arguments[ 1 ] && arguments[ 1 ].constructor == Boolean ) ? arguments[ 1 ] : false ), ( ( arguments.length > 2 && arguments[ 2 ] && arguments[ 2 ].constructor == String ) ? arguments[ 2 ] : null ) ); }; this.intercept = _intercept; this.handler = _handler; this.manipulator = _manipulator; } window.XLink = Link; } )( );