function linkage(arr,sel,selName) {  
  	if (isNaN(selName)) {
		selName = "Please select";
	}
    var me = this;  
    this.$ = function(o) {  
      return document.getElementById(o);  
    }  
   
    this.sub = function(i, pid) {  
		for   (var j=i+1;j<sel.length;   j++)  
		{  
	        me.$(sel[j]).length = 0;  
    	    me.$(sel[j]).options[0] = new Option(selName, "");  
		}  
		for(var   j   =   0;   j   <   arr.length;   j++) {  
			if (arr[j][1] == pid) {  
				me.$(sel[i+1]).options[me.$(sel[i+1]).length] = new Option(arr[j][2], arr[j][0]);  
        	}  
		}  
    }  

	this.init   =   function()  
    {  
      me.sub(-1,"0");  
      for (var i=0; i<sel.length-1; i++)  
      {  
        me.$(sel[i]).onchange = function()  
        {  
          var   i;  
          for   (i=0;   me.$(sel[i])!=this;   i++);  
          me.sub(i,   me.$(sel[i]).value);  
        }  
      }  
    }  

    this.SetValue = function()  
    {  
      for (var i=0; i<arguments.length-1;i++)  
      {  
        me.$(sel[i]).value = arguments[i];  
        me.sub(i,me.$(sel[i]).value);  
      }  
      me.$(sel[arguments.length-1]).value   =   arguments[arguments.length-1];  
    }  
   
    this.init();  
  }  