﻿var clone_original = null;
var clone_hidden = null; // objekt ktory sa objavi na novom mieste
var clone_moved = null; // objekt ktory je prenasany
var screen_scroll_y;

var clone_hidden_className = 'profile_group';
var clone_moved_chlassName = 'profile_group_op';

function movablegroup_init(id, action_only)
{
	var boxParent = document.getElementById(id);
	if(!action_only) {
		disable_select(boxParent);
	}
	else{
		enable_select(boxParent);
	}
	if(document.attachEvent){ // FF
		for(var i=0; i < boxParent.childNodes.length; i++ ){
			if(boxParent.childNodes[i].nodeType == 3) continue;
			if(!action_only)
			{
				boxParent.childNodes[i].attachEvent('onmouseover',movegroup_to_position);
				boxParent.childNodes[i].attachEvent('onmousedown',movegroup_start);
			}

			for(var j=0; j < boxParent.childNodes[i].childNodes.length; j++)
			{
				if(boxParent.childNodes[i].childNodes[j].nodeType == 3) continue;
				boxParent.childNodes[i].childNodes[j].attachEvent('onmousedown', profile_groupaction);
			}
		}
	}
	else{
		for(var i=0; i < boxParent.childNodes.length; i++ ){
			if(boxParent.childNodes[i].nodeType == 3) continue;
			if(!action_only)
			{
				boxParent.childNodes[i].addEventListener('mouseover',movegroup_to_position, true);
				boxParent.childNodes[i].addEventListener('mousedown',movegroup_start, true);
			}

			for(var j=0; j < boxParent.childNodes[i].childNodes.length; j++)
			{
				if(boxParent.childNodes[i].childNodes[j].nodeType == 3) continue;
				boxParent.childNodes[i].childNodes[j].addEventListener('mousedown', profile_groupaction, true);
			}
		}
	}
}

/*
 * Funkcia umiestni skryty klon na miesto ktore ukazuje kurzor
 */
function movegroup_to_position(e){
	if(!clone_moved) return;
	e = e ? e : window.event;

	// ziskanie objektu na ktory sme prisli
	var target = event_get_target(e);

	if(target.id.indexOf('movable') < 0) return;

	if(!clone_hidden){ // ak este nebol clone vytvoreny
		// vytvorenie clonu cieloveho prvku a pridanie pred ten na ktory sme ukazali
		clone_hidden = clone_moved.cloneNode(true);
		clone_hidden = target.parentNode.insertBefore(clone_hidden,target);
		clone_hidden.id = "hidden_clone";
		clone_hidden.className = clone_hidden_className;
		clone_hidden.style.visibility = "hidden";
	}
	else{ // ak uz bol pridany prvok na plochu

		for(var i=0; i < target.parentNode.childNodes.length; i++){

			// ak najdeme ako prvy prvok clone tak posuvame smerom za target
			if(target.parentNode.childNodes[i] == clone_hidden){
				// musime najst nasledujuci nodu ak existuje
				var next = target.nextSibling;
				while(next && next.nodeType != 1) next = next.nextSibling;

				if(next) target.parentNode.insertBefore(clone_hidden,next);
				else target.parentNode.appendChild(clone_hidden);

				break;
			}
			// ak najdeme prvy prvok target tak clone posuvame pred target
			if(target.parentNode.childNodes[i] == target){
				target.parentNode.insertBefore(clone_hidden,target);
				break;
			}
		}
	}
}

/*
 * Funkcia inicializuje moznost prenasat objekt
 */
function movegroup_start(e){
	var e = e ? e : window.event;

	if(e.type != "mousedown") return; // osetrenie aby funkcia nereagovala na onclick

	var target = event_get_target(e);

	if(target.id.indexOf('movable') < 0) return;

	/*var target = e.currentTarget;
	if(target && target.nodeType == 3) target = target.parentNode;
	alert(target.id);*/

	//alert(e.currentTarget.id);
	//alert(target.id);

	// vytvorenie copie prenasaneho objektu a nastavenie do globalnej premennej
	clone_moved = target.cloneNode(true);
	body.appendChild(clone_moved);
	clone_moved.className = clone_moved_chlassName; // priesvitnost

	// ulozenie odkazu na original a jeho skrytie
	clone_original = target;
	clone_original.style.display = "none";

	// offset kliknutia mysi v ramci objektu
	var offsetX = -2 + 26;//= (document.all)? e.offsetX : e.layerX;
	var offsetY = -2 + 4;//= (document.all)? e.offsetY : e.layerY;

	// nastavenie pozicie - inicializacia hodnot pre prenos
	clone_moved.mouseX = e.clientX;
	clone_moved.mouseY = e.clientY;

	var scrOfX = 0, scrOfY = 0;
	if( typeof( window.pageYOffset ) == 'number' ) {
	//Netscape compliant
	scrOfY = window.pageYOffset;
	scrOfX = window.pageXOffset;
	} else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
	//DOM compliant
	scrOfY = document.body.scrollTop;
	scrOfX = document.body.scrollLeft;
	} else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
	//IE6 standards compliant mode
	scrOfY = document.documentElement.scrollTop;
	scrOfX = document.documentElement.scrollLeft;
	}

	if (isNaN(parseInt(clone_moved.style.left))) { clone_moved.style.left = (e.clientX- offsetX) + 'px'; }
	if (isNaN(parseInt(clone_moved.style.top))) { clone_moved.style.top = (e.clientY + scrOfY - offsetY) + 'px'; }
	screen_scroll_y = scrOfY;

	// nastavenie handlerov na posuv a skoncenie pohybu
	if(document.addEventListener){ // FF
		document.addEventListener('mousemove',movegroup_progress,true);
		document.addEventListener('mouseup',movegroup_stop,true);
	}
	else{ // OP IE
		document.attachEvent('onmousemove',movegroup_progress);
		document.attachEvent('onmouseup',movegroup_stop);
	}

}

/*
 * Funkcia realizuje prenos objektu
 */
function movegroup_progress(e){

	if(!clone_moved) return;
	e = e ? e : window.event;

	// nastavenie novej pozicie
	var x = parseInt(clone_moved.style.left);
	var y = parseInt(clone_moved.style.top);

	var scrOfX = 0, scrOfY = 0;
	if( typeof( window.pageYOffset ) == 'number' ) {
	//Netscape compliant
	scrOfY = window.pageYOffset;
	scrOfX = window.pageXOffset;
	} else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
	//DOM compliant
	scrOfY = document.body.scrollTop;
	scrOfX = document.body.scrollLeft;
	} else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
	//IE6 standards compliant mode
	scrOfY = document.documentElement.scrollTop;
	scrOfX = document.documentElement.scrollLeft;
	}

	clone_moved.style.left = x + (e.clientX - clone_moved.mouseX) + 'px';
	clone_moved.style.top = y + (e.clientY  + (scrOfY - screen_scroll_y) - clone_moved.mouseY) + 'px';
	screen_scroll_y = scrOfY;


	clone_moved.mouseX = e.clientX;
	clone_moved.mouseY = e.clientY;
}

/*
 * Funckia konci prenos
 */
function movegroup_stop(e){
	if(!clone_moved) return;
	e = e ? e : window.event;

	if(clone_hidden){
		clone_hidden.parentNode.replaceChild(clone_original,clone_hidden);
		clone_hidden = false;
	}


	clone_moved.parentNode.removeChild(clone_moved);// zmazanie pohybovaneho clonu
	clone_original.style.display = "block";

	var id = clone_original.id;
	var elem_before = previousSibling_elem(clone_original);
	var id_after = "";
	if(elem_before) id_after = elem_before.id;

	clone_original = false;
	clone_moved = false;


	if(document.addEventListener){ // FF
		document.removeEventListener('mousemove',movegroup_progress,true);
		document.removeEventListener('mouseup',movegroup_stop,true);
	}
	else{ // IE OP
		document.detachEvent('onmousemove',movegroup_progress);
		document.detachEvent('onmouseup',movegroup_stop);
	}

	profile_groupsetposition(id, id_after);
}