/*
Скрипт предназначен для перетаскивания мышью элемента по странице. Элемент - DIV с абсолютным позиционированием. 
В момент нажатия левой кнопки мыши переменной elementToDrag присваивается имя захваченного элемента, а переменным offX и offY - соответственно положение курсора внутри захваченного элемента. Для элемента запрещено выделение текста внутри него, т.к. это приводит к резким изменениям положения элемента. 
При изменении положения мыши событием onMouseMove, прописанном в body, вызывается функция  dragElement, которая присваивает координатам подвижного элемента значения текущего положения курсора с поправкой на стартовое положение курсора в элементе. Чтобы исключить выход элемента за границы экрана введены ограничения для координат: от нуля до ширины/высоты страницы. 
При отжатии кнопки мыши, или при выходе курсора за границы элемента функция releaseElement возвращает переменной elementToDrag пустое значение - элемент остается в последнем положении.
В функциях передается параметр event для совместимости с Gecko-браузерами.

Протестировано и работает в: IE5, IE6, Firefox 1.*.*, Firefox 2.0; в Opera 7, Opera 8 иногда происходят небольшие резкие смещения элемента(причина - текст внутри элемента, т.к. без текста все работает нормально)
*/

function showDiv(divName) {
document.getElementById(divName).style.display='block';
//document.getElementById('movingDiv').style.left=coordLeft+'px';
//document.getElementById('movingDiv').style.top=coordTop+'px';
}
var elementToDrag = null;
var divToChange = null;
    var offX, offY;	// глобальные переменные для хранения смещения
	var elementW=189;	// глобaльная переменная для хранения ширины элемента 
	var elementH=189;	// глобaльная переменная для хранения высоты элемента
	function captureElement (event,elem,divToChangeName) { // "захват" элемента мышью 
        if (!elementToDrag) {
            elementToDrag = elem;
			divToChange = divToChangeName;
			elementToDrag.style.zIndex='300';
			if (window.navigator.userAgent.indexOf('Gecko')!=-1){
			offX=event.layerX;	// запоминаем координаты курсора
			offY=event.layerY;	// в момент щелчка для FF
			}
			else {
            offX = event.offsetX; // запоминаем координаты курсора 
            offY = event.offsetY; // в момент щелчка для MSIE
			//document.getElementById('movingDiv').style.background = '#ff0000';
			}
        }
		else {
		releaseElementOff ()
		}
    }    
    function releaseElement (lastElementZIndex,anotherElementZIndex) { // "отпускание" элемента 
		elementToDrag = null;
		lastElementZIndex.style.zIndex = '250';
		document.getElementById(anotherElementZIndex).style.zIndex = '240';		
		//document.getElementById('movingDiv').style.background = '#0000ff';
    }
	function releaseElementOff () { // "отпускание" элемента 
		elementToDrag = null;
	}    
    function dragElement (event) { // "перетаскивание" элемента 
        if (elementToDrag){
			if (divToChange){document.getElementById(divToChange).style.position='';}
			elementToDrag.style.position='absolute';
			if (document.getElementById('general_table').offsetWidth>document.body.clientWidth){
			var borderXR=document.getElementById('general_table').offsetWidth-elementW; // максимальное ограничение для Х-координаты
			}
			else {
			var borderXR=document.body.clientWidth-elementW; // максимальное ограничение для Х-координаты
			}
			if (document.getElementById('general_table').offsetHeight>document.body.clientHeight){
			var borderYB=document.getElementById('general_table').offsetHeight-elementH; // максимальное ограничение для Y-координаты
			}
			else {
			var borderYB=document.body.clientHeight-elementH; // максимальное ограничение для Y-координаты
			}
			
			if (window.navigator.userAgent.indexOf('Gecko')!=-1){ //новые координаты для FF
			
				var posX=event.pageX-offX; // вносим поправку в координаты элемента
				if (posX<0){
				elementToDrag.style.left = 0+'px';
				}
				else if (posX>borderXR){
				elementToDrag.style.left = borderXR+'px';
				}
				else {
				elementToDrag.style.left = posX+'px';
				}
				
				var posY=event.pageY-offY; // вносим поправку в координаты элемента
				if (posY<0){
				elementToDrag.style.top = 0+'px';
				}
				else if (posY>borderYB){
				elementToDrag.style.top = borderYB+'px';
				}
				else {
				elementToDrag.style.top = posY+'px';
				}				
				
			}
			else { //новые координаты для MSIE
				var posX=event.clientX-offX+document.body.scrollLeft; // вносим поправку в координаты элемента
				if (posX<0){
				elementToDrag.style.left = 0+'px';
				}
				else if (posX>borderXR){
				elementToDrag.style.left = borderXR+'px';
				}
				else {
				elementToDrag.style.left = posX+'px';
				}			
				
				var posY=event.clientY-offY+document.body.scrollTop;  // вносим поправку в координаты элемента
				if (posY<0){
				elementToDrag.style.top = 0+'px';
				}
				else if (posY>borderYB){
				elementToDrag.style.top = borderYB+'px';
				}			
				else {
				elementToDrag.style.top = posY+'px';
				}
			}
        }
    }