    // SACK LIB
    function sack( _1 )
    {
        this.xmlhttp = null;
        this.resetData = function( )
        {
            this.method = "POST";
            this.queryStringSeparator = "?";
            this.argumentSeparator = "&";
            this.URLString = "";
            this.encodeURIString = true;
            this.execute = false;
            this.element = null;
            this.elementObj = null;
            this.requestFile = _1;
            this.vars = new Object();
            this.responseStatus = new Array( 2 );
        };

        this.resetFunctions = function( )
        {
            this.onLoading = function( )
            {
            };

            this.onLoaded = function( )
            {
            };

            this.onInteractive = function( )
            {
            };

            this.onCompletion = function( )
            {
            };

            this.onError = function( )
            {
            };

            this.onFail = function( )
            {
            };
        };

        this.reset = function( )
        {
            this.resetFunctions();
            this.resetData();
        };

        this.createAJAX = function( )
        {
            try
            {
                this.xmlhttp = new ActiveXObject( "Msxml2.XMLHTTP" );
            }
            catch( e1 )
            {
                try
                {
                    this.xmlhttp = new ActiveXObject( "Microsoft.XMLHTTP" );
                }
                catch( e2 )
                {
                    this.xmlhttp = null;
                }
            }

            if ( !this.xmlhttp )
            {
                if ( typeof XMLHttpRequest != "undefined" )
                {
                    this.xmlhttp = new XMLHttpRequest();
                }
                else
                {
                    this.failed = true;
                }
            }
        };

        this.setVar = function( _2, _3 )
        {
            this.vars[_2] = Array( _3, false );
        };

        this.encVar = function( _4, _5, _6 )
        {
            if ( true == _6 )
            {
                return Array( encodeURIComponent( _4 ), encodeURIComponent( _5 ) );
            }
            else
            {
                this.vars[encodeURIComponent( _4 )] = Array( encodeURIComponent( _5 ), true );
            }
        };

        this.processURLString = function( _7, _8 )
        {
            encoded = encodeURIComponent( this.argumentSeparator );
            regexp = new RegExp( this.argumentSeparator + "|" + encoded );
            varArray = _7.split( regexp );

            for ( i = 0; i < varArray.length; i++ )
            {
            urlVars = varArray[i].split( "=" );

            if ( true == _8 )
            {
                this.encVar( urlVars[0], urlVars[1] );
            }
            else
            {
                this.setVar( urlVars[0], urlVars[1] );
            }
            }
        };

        this.createURLString = function( _9 )
        {
            if ( this.encodeURIString && this.URLString.length )
            {
                this.processURLString( this.URLString, true );
            }

            if ( _9 )
            {
                if ( this.URLString.length )
                {
                    this.URLString += this.argumentSeparator + _9;
                }
                else
                {
                    this.URLString = _9;
                }
            }

            this.setVar( "rndval", new Date().getTime() );
            urlstringtemp = new Array();

            for ( key in this.vars )
            {
            if ( false == this.vars[key][1] && true == this.encodeURIString )
            {
                encoded = this.encVar( key, this.vars[key][0], true );
                delete this.vars[key];
                this.vars[encoded[0]] = Array( encoded[1], true );
                key = encoded[0];
            }

            urlstringtemp[urlstringtemp.length] = key + "=" + this.vars[key][0];
            }

            if ( _9 )
            {
                this.URLString += this.argumentSeparator + urlstringtemp.join( this.argumentSeparator );
            }
            else
            {
                this.URLString += urlstringtemp.join( this.argumentSeparator );
            }
        };

        this.runResponse = function( )
        {
            eval(this.response);
        };

        this.runAJAX = function( _a )
        {
            if ( this.failed )
            {
                this.onFail();
            }
            else
            {
                this.createURLString( _a );

                if ( this.element )
                {
                    this.elementObj = document.getElementById( this.element );
                }

                if ( this.xmlhttp )
                {
                    var _b = this;

                    if ( this.method == "GET" )
                    {
                        totalurlstring = this.requestFile + this.queryStringSeparator + this.URLString;
                        this.xmlhttp.open( this.method, totalurlstring, true );
                    }
                    else
                    {
                        this.xmlhttp.open( this.method, this.requestFile, true );

                        try
                        {
                            this.xmlhttp.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded" );
                        }
                        catch( e )
                        {
                        }
                    }

                    this.xmlhttp.onreadystatechange = function( )
                    {
                        switch ( _b.xmlhttp.readyState )
                        {
                            case 1:
                                _b.onLoading();

                                break;

                            case 2:
                                _b.onLoaded();

                                break;

                            case 3:
                                _b.onInteractive();

                                break;

                            case 4:
                                _b.response = _b.xmlhttp.responseText;

                                _b.responseXML = _b.xmlhttp.responseXML;
                                _b.responseStatus[0] = _b.xmlhttp.status;
                                _b.responseStatus[1] = _b.xmlhttp.statusText;

                                if ( _b.execute )
                                {
                                    _b.runResponse();
                                }

                                if ( _b.elementObj )
                                {
                                    elemNodeName = _b.elementObj.nodeName;
                                    elemNodeName.toLowerCase();

                                    if ( elemNodeName == "input" || elemNodeName == "select" || elemNodeName == "option"
                                        || elemNodeName == "textarea" )
                                    {
                                        _b.elementObj.value = _b.response;
                                    }
                                    else
                                    {
                                        _b.elementObj.innerHTML = _b.response;
                                    }
                                }

                                if ( _b.responseStatus[0] == "200" )
                                {
                                    _b.onCompletion();
                                }
                                else
                                {
                                    _b.onError();
                                }

                                _b.URLString = "";
                                break;
                        }
                    };

                    this.xmlhttp.send( this.URLString );
                }
            }
        };

        this.reset();
        this.createAJAX();
    }

    var enableCache = true;
    var jsCache = new Array();

    var dynamicContent_ajaxObjects = new Array();

    function showContent( divId, ajaxIndex, url )
    {
        document.getElementById( divId ).innerHTML = dynamicContent_ajaxObjects[ajaxIndex].response;

        if ( enableCache )
        {
            jsCache[url] = dynamicContent_ajaxObjects[ajaxIndex].response;
        }

        dynamicContent_ajaxObjects[ajaxIndex] = false;
    }

    // DIV ID , URL , DONTUSECACHE
    function loadContent( divId, url, dontusecache )
    {
        if ( dontusecache !== true )
        {
            if ( enableCache && jsCache[url] )
            {
                document.getElementById( divId ).innerHTML = jsCache[url];

                return;
            }
        }

        var ajaxIndex = dynamicContent_ajaxObjects.length;

        dynamicContent_ajaxObjects[ajaxIndex] = new sack();
        dynamicContent_ajaxObjects[ajaxIndex].requestFile = url; // Specifying which file to get
        dynamicContent_ajaxObjects[ajaxIndex].onCompletion = function( )
        {
            showContent( divId, ajaxIndex, url );
        };                                               // Specify function that will be executed after file has been found

        dynamicContent_ajaxObjects[ajaxIndex].runAJAX(); // Execute AJAX function
    }