  var bindings= new Object;
  var  isIE=(navigator.appName.indexOf("Microsoft")!=-1)?1:0; 
  var  isOpera=(navigator.appName.indexOf("Opera")!=-1)?1:0; 

  // Explorer looks for tags without namespace
  var bindtag = (isIE?'bindtext':'bind:bindtext');
  var bindchildtag = (isIE?'bindchild':'bind:bindchild');
  
   function setDataBind() {
    var bel=document.getElementsByTagName(bindtag)
       for(var i=0;i < bel.length;i++)
       { 
             o= bel.item(i); 
 	     id = o.getAttribute('id');
	     if(o.getAttribute('iscomment')!=null)
 	     o.appendChild(document.createComment(  bindings[id])  );
	     else if(o.getAttribute('isxml')!=null)
 	       importXML( bindings[id]);
	     else
	     o.parentNode.appendChild(document.createTextNode(  bindings[id])  );
       } 
       
   }

   function getData() {
     if(isOpera)
      var s=document.getElementsByTagName('plaintext').item(0).innerText;
     else
      var s=document.getElementsByTagName('plaintext').item(0).innerHTML;
     if(s!=''){
      arr = s.split('\n')
      for(var i in arr){
             if(arr[i].indexOf('|')!=-1){
      	       key=arr[i].substring(0,arr[i].indexOf('|'));
   	       bindings[key]= unescape(arr[i].substring( arr[i].indexOf('|')+1));	       
	     }
      }
     }
     
   }
   
   function  findBindedAttributes(){
       
       var bel=document.getElementsByTagName("*")
       for(var i=0;i < bel.length;i++)
       { 
             o= bel.item(i);
	     if( o.getAttribute('bindattr')!=null  ) 
	     {
	      attrs=o.getAttribute('bindattr').split('|');
	      for(var j=0;  j <  attrs.length;j++ ){
	         attr=attrs[j].substring(0,attrs[j].indexOf('='));
	         val=attrs[j].substring( attrs[j].indexOf('=')+1);
		  if(bindings[val]=='')
		    continue;
		//  alert(attr+" = "+val+o.tagName);
 
		// test for href javascript
		 if( ((o.tagName=='A' && attr=='href') || attr=='src')){
		  var p = new BindCheck.URLParser( bindings[val]);
		  proto = p.getProtocol();
		   if(p.isBadProto(proto))
		   { 
		    alert(bindings[val]+" has been idenitified as "+proto );
		    continue;
		  }
		 }
		 
		 o[attr]=bindings[val]; 
	      }
	     }
	  //   for(var j =0  ; j <  o.attributes.length;j++ ){ 
	  // if(isIE){
	  //     o.children[0].setAttribute(o.attributes.item(j).nodeName,bindings[o.attributes.item(j).nodeValue]);
	  //  }
	  // else
	  //     o.firstChild[o.attributes.item(j).nodeName]=bindings[o.attributes.item(j).nodeValue];
	     
	   // } 
       }
   }

   function setEvents() {

      // Get the data declared inside <plaintext> tag
      getData()
      
      // bind data to every <bind:bindtext> tag
      setDataBind()
      
      // bind data to every attribute to child of <bind:bindattr>
      findBindedAttributes()

  }
   
if (typeof addEventListener == "function")
      addEventListener("load", setEvents, false);
else if ( attachEvent)
     attachEvent("onload", setEvents);
