﻿var IsButtonDown;

function containsDOM (container, containee) {
  var isParent = false;
  do {
    if ((isParent = container == containee))
      break;
    containee = containee.parentNode;
  }
  while (containee != null);
  return isParent;
}

function checkMouseEnter (element, evt) {
  if (element.contains && evt.fromElement) {
    return !element.contains(evt.fromElement);
  }
  else if (evt.relatedTarget) {
    return !containsDOM(element, evt.relatedTarget);
  }
}

function checkMouseLeave (element, evt) {
  if (element.contains && evt.toElement) {
    return !element.contains(evt.toElement);
  }
  else if (evt.relatedTarget) {
    return !containsDOM(element, evt.relatedTarget);
  }
}


function DropDownList_OnScrollBegin(evt)
{
    if (evt==null) evt=window.event;
    ActiveScrollName = evt.id.substring(0,evt.id.lastIndexOf('_'));
    eval(ActiveScrollName+"_IsButtonDown = true");
	IsButtonDown=true;
	MinY = document.getElementById(ActiveScrollName + '_text').offsetTop +
	       document.getElementById(ActiveScrollName + '_text').clientHeight +
	       document.getElementById(ActiveScrollName + '_ScrollButton').offsetHeight -
	       parseInt(document.getElementById(ActiveScrollName+"_ScrollButton").style.top == 0? "0":document.getElementById(ActiveScrollName+"_ScrollButton").style.top);
	eval(ActiveScrollName+"_MinY=MinY");
	if (evt.parentElement)
	    Position = evt.parentElement.clientHeight - evt.clientHeight;
	else
	    Position = evt.parentNode.clientHeight - evt.clientHeight;    
	eval(ActiveScrollName+"_Position=Position");
	MaxY=MinY+Position;
	eval(ActiveScrollName+"_MaxY=MaxY");
	Source = evt;
	eval(ActiveScrollName+"_Source=Source");
	document.body.onmousemove = DropDownList_OnScrolling;
	document.body.onmouseup = DropDownList_OnScrollEnd;
    return false;
}

function DropDownList_OnScrolling(evt)
{
    if (IsButtonDown)
    {
        var currentY = null;
        var isIE = true;
        if (evt)
        {
            currentY = evt.pageY;    
            isIE = false;
        }
        else
        {
            currentY = window.event.clientY + document.body.scrollTop  - document.body.clientTop;
            currentY += document.documentElement.scrollTop;
        }
        
        
        var MinY = eval(ActiveScrollName+"_MinY");
        var MaxY = eval(ActiveScrollName+"_MaxY");
        var Position = eval(ActiveScrollName+"_Position");
        
        if (currentY - MinY < 0)
        {
            document.getElementById(ActiveScrollName+"_ScrollButton").style.top = 0 + (isIE?"":"px");
        } else if (currentY - MinY > Position)
        {
            document.getElementById(ActiveScrollName+"_ScrollButton").style.top = Position + (isIE?"":"px");
        } else
        {
            document.getElementById(ActiveScrollName+"_ScrollButton").style.top = (currentY - MinY) + (isIE?"":"px");
        }
        
        var placeHolder = document.getElementById(ActiveScrollName+"_ContentPlaceHolder");
        var content = document.getElementById(ActiveScrollName+"_Content");
        placeHolder.style.top = (placeHolder.scrollHeight - content.clientHeight) * - (1 - (MaxY - MinY - Source.offsetTop + 5) / Position) + (isIE?"":"px");
    }
    return false;
   }

function DropDownList_OnScrollEnd(evt)
{
    document.body.onmousemove = null;
    document.body.onmouseup = null;
    IsButtonDown = null;
    eval(ActiveScrollName+"_MinY = null");
    eval(ActiveScrollName+"_MaxY = null");
    eval(ActiveScrollName+"_Position = null");
    eval(ActiveScrollName+"_Source = null");
    return false;
}

function DropDownList_OnListExpanded(evt)
{
    evt.blur();
    ActiveScrollName = evt.id.substring(0,evt.id.lastIndexOf('_'));    
    var container = document.getElementById(ActiveScrollName + '_Container');
    if (container.style.display == 'block')
    {
        ActiveScrollName = null;
        container.style.display='none';
        document.body.onmouseclick = null;
    }else
    {
        ActiveScrollName = evt.id.substring(0,evt.id.lastIndexOf('_'));
        container.style.display='block';
        document.getElementById(ActiveScrollName + '_ScrollButton').style.top = "0px";
        var placeHolder = document.getElementById(ActiveScrollName+"_ContentPlaceHolder");
        var content = document.getElementById(ActiveScrollName+"_Content");
        if (content.offsetHeight > placeHolder.offsetHeight)
        {
            document.getElementById(ActiveScrollName + '_ScrollBar').style.display = "none"; 
        }
        else
        {
            document.getElementById(ActiveScrollName + '_ScrollBar').style.display = "block"; 
        }    
        container.style.top = document.getElementById(ActiveScrollName + '_text').offsetTop + document.getElementById(ActiveScrollName + '_text').offsetHeight + "px";
        container.style.left = document.getElementById(ActiveScrollName + '_text').offsetLeft;
        document.body.onmouseclick = 'OnListHide';
    }
    return false;
}

function DropDownList_OnListHide(evt)
{
    document.body.onmouseclick = null;
    document.getElementById(ActiveScrollName + '_Container').style.display='none';
    return false;
}