function PortalDragDrop(rootElement, dnd, portalCallback) {
  DragDrop =  dnd ;

  DragDrop.dropCallback = function (src, target) {
    if(DragDrop.lastFoundTarget != null) {
      DragDrop.lastFoundTarget.style.border =  DragDrop.normalBorder ;
    }
    DragDrop.lastFoundTarget =  null  ;
    if(target.portalCallback != null) {
      target.portalCallback(src, target) ;
    }
  }

  DragDrop.dragCallback = function (src, target) {
    if(DragDrop.lastFoundTarget != null && DragDrop.lastFoundTarget.oldBorder != null ) {
      DragDrop.lastFoundTarget.style.border =  DragDrop.normalBorder ;
    }
    if(target == null) {
      DragDrop.lastFoundTarget = null ;
      return ;
    }
    var  targetBlockType = target.getAttribute('blockType');
    if(targetBlockType == 'info-bar' ||  targetBlockType == 'portlet') {
      target = findAncestorType(target, 'container') ; 
    } 
    DragDrop.lastFoundTarget = target ;
    target.style.border =  DragDrop.hightLightBorder ;
  }

  DragDrop.junkMoveCallback = function (src) {
    if(DragDrop.lastFoundTarget != null) {
      DragDrop.lastFoundTarget.style.border =  DragDrop.normalBorder ;
    }
    DragDrop.lastFoundTarget = null ;
  }

  this.portalCallback = function(src, target) {
    alert('src = ' + src.id + ', target = ' +  target.id);
  }

  if(portalCallback != null) this.portalCallback = portalCallback ;

  DragDrop.lastFoundTarget  = null ;
  var divBlock =  rootElement.getElementsByTagName('div') ;
  for(i = 0; i <  divBlock.length; i++ ) {
    var child =  divBlock.item(i) ;
    var clazz = child.className ;
    if('dragable' == clazz) {
      var customizableBlock =  findCustomizableBlock(child) ;
      var  infoBarBlock =  findInfoBarBlock(child) ;
      customizableBlock.portalCallback = this.portalCallback ;
      infoBarBlock.portalCallback = this.portalCallback ;
      DragDrop.init(child, customizableBlock);
      DragDrop.addDropTarget(customizableBlock);
      DragDrop.addDropTarget(infoBarBlock);
    }
  }
}

function findCustomizableBlock(ele) {
  var block = ele ;
  while(block != null) {
    block = block.parentNode ;
    var clazz  =  block.className ;
    if('customizable-block' == clazz)  return block ;
  }
  return block ;
}

function findInfoBarBlock(ele) {
  var block = ele ;
  while(block != null) {
    block = block.parentNode ;
    var clazz  =  block.className ;
    if('info-bar' == clazz)  return block ;
  }
  return block ;
}

function findAncestorType(ele, type) {
  var block = ele.parentNode ;
  while(block != null) {
    var attr  =  block.getAttribute('blockType') ;
    if(attr === type)  return block ;
    block = block.parentNode ;
  }
  return null ;
}


/*########################################NOT  D&D SCRIPT############################*/
/*ie bug  you cannot have more than one button tag*/
function submitForm(formId, action) {
  var form = document.getElementById(formId) ;
  form.elements['op'].value = action ;
  form.submit();
}

function showhide(divname) { 
	var style = document.getElementById(divname).style; 
	if ((style.display=='block')||(style.display=='')) 
	{ 
		style.display='none'; 
	} else 	{ 
		style.display='block'; 
	} 
} 

function addCss(link) {
  //get head node
	var head = document.getElementByTagName('head').item(0) ; 
  alert('node name: ' + head.nodeName()) ;
}
