<? 
 //baza  linków:
 $baza = array(
        array (
                'link' => 'http://example.com/link1',
                'text' => 'link1',
                'snip' => 'sniplet pierwszy',
                'opis' => '1. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed tincidunt.'
        ),
        array (
                'link' => 'http://example.com/cosinnego',
                'text' => 'zwie link',
                'snip' => 'sniplet drugi',
                'opis' => '2. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed tincidunt.'
        ),
        array (
                'link' => 'http://example.com/wakacje',
                'text' => 'wakacje w ameryce',
                'snip' => 'galeria zdjęć',
                'opis' => '3. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed tincidunt.'
        )
 );
 if( $ajax = $_GET['ajax'] ){
    if($p = $_GET['opis']){
        $atxt = 'schowaj opis';
        $ahref = '?ukryj='.$p;
        $sc = 'var p = document.createElement("P");
                p.appendChild( document.createTextNode( "'.$baza[$p-1]['opis'].'" ) );
                a.parentNode.parentNode.insertBefore(p, a.parentNode )';
    } elseif( $p = $_GET['ukryj'] ){
        $atxt = 'pokaż opis';
        $ahref = '?opis='.$p;
        $sc = 'var els = a.parentNode.parentNode.getElementsByTagName("P")
                a.parentNode.parentNode.removeChild(els[0]);';
    }
    if( $k = $_GET['kasuj'] ){
        $sc = 'a.parentNode.parentNode.parentNode.removeChild(a.parentNode.parentNode)';
    }

    die(  <<<DIE
        $sc
        a.setAttribute( 'href', "$ahref" );
        a.replaceChild( document.createTextNode( "$atxt" ), a.firstChild );
DIE
   );
 }
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<title>Testowanie AJAX handler</title>
<style type="text/css">
HTML{ width: 100%; }
BODY{ width: 500px; margin: 100px auto; }
UL{ list-style-type: none; margin: 0; padding: 0;}
LI{ border: 3px inset red; margin: 5px; padding: 3px;}
DIV.panel{ text-align: right; font-size: .8em; }
DIV.panel A{ background-color: #EEE; padding: 0 4px;}
DIV.panel A:hover{ background-color: #DDD; }
</style>
<script type="text/javascript">
    document.getElementsFoxAjax = function() {
        var children = document.getElementsByTagName('*') || document.all;
        var elements = new Array();
        for (var i = 0; i < children.length; i++){
                var child = children[i];
                if(
                   child.getAttribute('rel') == 'ajax'
                && child.tagName == 'A'
                && child.getAttribute('href')
                ) elements.push(children[i]);
        }
        return elements;
    }
    
        var ajaxLink = window.XMLHttpRequest
                ? new XMLHttpRequest()
                : new ActiveXObject("Microsoft.XMLHTTP");
        var ajaxTab = new Array();
        
    function ajaxHandlerBit(e){
        e.onclick = function(){ goAjax(this); return false; };
    }
    
    function ajaxHandler(){
        al = document.getElementsFoxAjax();
        for ( ii = 0; ii < al.length; ii++ )
                ajaxHandlerBit( al[ii] );
    }
    
    function goAjax(i){
                if( !window.XMLHttpRequest )
                        ajaxLink = new ActiveXObject("Microsoft.XMLHTTP");
                ajaxLink.onreadystatechange = function(){
                    if( ajaxLink.readyState == '1' ){
                        i.replaceChild( document.createTextNode(
                                        i.getAttribute('title') || 'loading...' ),
                                i.firstChild
                        );
                    } else if( ajaxLink.readyState == '4' ){
                        var res = ajaxLink.responseText;
                            //s = document.createElement( 'script' );
                            //s.setAttribute( 'type', 'text/javascript' );
                            //s.appendChild( document.createTextNode(
                          //    'function goneAjax(a){ ' + res + '}' ) );
                          //  document.body.appendChild(s);
                          //  goneAjax( i );
                          //  document.body.removeChild(s);
                          eval ( 'a = i; ' + res );
                    }
                }
                var link = i.getAttribute('href');
                link += (link.indexOf("?") != -1 ? '&' : '?') + 'ajax=1';
                
                ajaxLink.open('get', link );
                ajaxLink.send("");
    }
</script>
 <h1>goAJAX</h1>
 <a href="?">reset (od początku)</a>.
 <a href="#" onclick="ajaxHandler(); this.parentNode.removeChild(this);">uruchom ajaxHandler()</a>
<ul>
<?
if( $k = $_GET['kasuj'] ) unset( $baza[$k-1] );
$il = 0;
foreach( $baza as $link )
        echo '<li><a href="'.$link['link'].'">'.$link['text'].'</a> '.$link['snip']
                .( $_GET['opis'] == ++$il ? '<p>'.$link['opis'] .'</p>': '' )
                .'<div class="panel">'. (
                        $_GET['opis'] != $il
                        ? ' <a href="?opis='.$il.'" rel="ajax">pokaż opis</a>'
                        : ' <a href="?ukryj='.$il.'" rel="ajax">schowaj opis</a>'
                        ).' <a href="?kasuj='.$il.'" rel="ajax">kasuj</a>'
                .'</div>'
                ;
?>
        </ul>