
	function bubbler(url) {
                createRequest();
	            request.open("GET", url, true);
                request.onreadystatechange = doneBubbling;
                request.send(null);
	}  //  end function changeflagstatus
	
	
	
	function doneBubbling() {
		if (request.readyState == 4) {
		 if( request.status == 200 ) {
	         var returnText = request.responseText;
             var explode = returnText.split("|");     //  27|HTML
             var id = explode[0];
			 var html = explode[1].replace(/^\s+|\s+$/g, '');
			 var a = document.getElementById('bubble' + id);
			 var newbubbleid = 'newbubble' + id;
			 if( !html ) {
			     var element = document.getElementById(newbubbleid);
				 a.parentNode.removeChild(element);
			 } else {
				var newnode = document.createElement('<div>');
				newnode.style.position = 'relative';
				newnode.style.zIndex = 99;
				newnode.style.textAlign = 'left';
				newnode.id = newbubbleid;
				insertAfter(newnode, a);
				newnode.innerHTML = html;
			}
			
		 } else alert("Error! Request Status is " + request.status);
		 
	    }   //  request.readyState == 4
	
	}  //  end function doneBubbling
	
	
	function closebubble(idnum) {
	   var newbubbleid = 'newbubble' + idnum;
	   var element = document.getElementById(newbubbleid);
	   var a = document.getElementById('bubble' + idnum);
	   if( element) a.parentNode.removeChild(element);
	}
	
	
	function insertAfter(new_node, existing_node) {
		// if the existing node has a following sibling, insert the current
		// node before it. otherwise appending it to the parent node
		// will correctly place it just after the existing node.
		
		if (existing_node.nextSibling) {
		// there is a next sibling. insert before it using the mutual
		// parent's insertBefore() method.
		existing_node.parentNode.insertBefore(new_node, existing_node.nextSibling);
		} else {
		// there is no next sibling. append to the end of the parent's
		// node list.
		existing_node.parentNode.appendChild(new_node);
		}

    } // insertAfter()
    
