// rok w ms -> 365 dni x 24 h x 60 min x 60 s x 1000 ms
var COOKIE_EXPIRATION = new Date(365*24*60*60*1000 + new Date().getTime());
var HOVER_INDICATOR = "_over";
var NOT_ACTIVE_INDICATOR = "NotActive";

function getElementIndex(arElements, oElement) {
	for(var i = 0; i < arElements.length; i++) {
		if(arElements[i] == oElement)
			return i;
	}
	return -1;
}


function moveUp(oEvent) {
	var oEventSrc = getEventSrc(oEvent);
	var oElementToMove = oEventSrc.parentNode.parentNode.parentNode;
	var oContainer = oElementToMove.parentNode;
	var arElements = oContainer.arElements;
	
	// pobierz nr w tablicy
	var iIndex = getElementIndex(arElements, oElementToMove);

	// usun element ktory ma byc przeniesiony do gory
	oContainer.removeChild(oElementToMove);
	// i wstaw go przed poprzednim
	oContainer.insertBefore(oElementToMove, arElements[iIndex - 1]);
	
	// potem zamien te elementy w tablicy
	var oTmp = arElements[iIndex];
	arElements[iIndex] = arElements[iIndex - 1];
	arElements[iIndex - 1] = oTmp;
	
	// dodaj odpowiednia obsluge zdarzen i ustaw odpowiedni wyglad przyciskow
	setEvents(arElements);
	saveOrder(arElements);
}



function moveDown(oEvent) {
	var oEventSrc = getEventSrc(oEvent);
	var oElementToMove = oEventSrc.parentNode.parentNode.parentNode;
	var oContainer = oElementToMove.parentNode;
	var arElements = oContainer.arElements;

	// pobierz nr w tablicy
	var iIndex = getElementIndex(arElements, oElementToMove);

	// usun element ktory jest nastepny po tym ktory "przenosimy"
	oContainer.removeChild(arElements[iIndex + 1]);
	// i wstaw go przed tym "przenoszonym"
	oContainer.insertBefore(arElements[iIndex + 1], oElementToMove);
	
	// zamien elementy w tablicy
	var oTmp = arElements[iIndex];
	arElements[iIndex] = arElements[iIndex + 1];
	arElements[iIndex + 1] = oTmp;
	
// dodaj odpowiednia obsluge zdarzen i ustaw odpowiedni wyglad przyciskow
	setEvents(arElements);
	saveOrder(arElements);
}

function setEvents(arElements) {

	if(arElements.length > 1) {
		// ustaw wyglad i obsluge zdarzen dla gornego bloku
		// przycisk do gory
		var oButtonUp = document.getElementById(arElements[0].id + "ButtonUp");
		var oButtonDown = document.getElementById(arElements[0].id + "ButtonDown");

		oButtonUp.style.cursor = "default";
		oButtonDown.style.cursor = "pointer";

		// przywroc oryginalny wyglad
		oButtonUp.style.backgroundImage = "";
		oButtonDown.style.backgroundImage = "";
		// pobierz aktualne tlo przycisku
		var sBackgroundImage;

		if(document.defaultView)
			sBackgroundImage = document.defaultView.getComputedStyle(oButtonUp, null).backgroundImage;
		else {
			sBackgroundImage = oButtonUp.currentStyle.backgroundImage;
		}
		sBackgroundImage = sBackgroundImage.replace(/\"/g, "");
		// w zaleznosci od tego czy jest to blok ciemny lub jasny ustaw odpowiedni obrazek jako tlo
		var sExtension = sBackgroundImage.slice(-5);
		sBackgroundImage = sBackgroundImage.substring(0, sBackgroundImage.length - 5);
		oButtonUp.style.backgroundImage  = sBackgroundImage + NOT_ACTIVE_INDICATOR + sExtension;

		// usun odstep u gory bloku
		arElements[0].style.marginTop = arElements[0].parentNode.sTopMargin;
		// przycisk w dol
		removeEventHandler(oButtonDown, "click", moveDown);
		addEventHandler(oButtonDown, "click", moveDown);
		removeEventHandler(oButtonUp, "click", moveUp);
	
		// ustaw wyglad i obsluge zdarzen dla SRODKOWYCH blokow
		for(var i = 1; i < arElements.length-1; i++) {

			var oButtonUp = document.getElementById(arElements[i].id + "ButtonUp");
			var oButtonDown = document.getElementById(arElements[i].id + "ButtonDown")

			removeEventHandler(oButtonUp, "click", moveUp);
			removeEventHandler(oButtonDown, "click", moveDown);
			
			addEventHandler(oButtonUp, "click", moveUp);
			addEventHandler(oButtonDown, "click", moveDown);

			oButtonUp.style.cursor = "pointer";
			oButtonDown.style.cursor = "pointer";
			
			oButtonUp.style.backgroundImage = "";
			oButtonDown.style.backgroundImage = "";
			//dodaj odstep u gory bloku
			arElements[i].style.marginTop = "10px";
		}


		///////////// ustaw wyglad i obsluge zdarzen dla DOLNEGO bloku

		var oButtonUp = document.getElementById(arElements[arElements.length - 1].id + "ButtonUp");
		var oButtonDown = document.getElementById(arElements[arElements.length - 1].id + "ButtonDown");
		removeEventHandler(oButtonUp, "click", moveUp);
		addEventHandler(oButtonUp, "click", moveUp);
	
		removeEventHandler(oButtonDown, "click", moveDown);

		oButtonDown.style.cursor = "default";
		oButtonUp.style.cursor = "pointer";
		
		// przywroc oryginalny wyglad
		oButtonUp.style.backgroundImage = "";
		oButtonDown.style.backgroundImage = "";
		var sBackgroundImage;
		if(document.defaultView)
			sBackgroundImage = document.defaultView.getComputedStyle(oButtonDown, "").backgroundImage;
		else {
			// usun cudzyslow ktory jest dodawany w IE (6)
			sBackgroundImage = oButtonDown.currentStyle.backgroundImage;
		}
		sBackgroundImage = sBackgroundImage.replace(/\"/g, "");
		// w zaleznosci od tego czy jest to blok ciemny lub jasny ustaw odpowiedni obrazek jako tlo
		var sExtension = sBackgroundImage.slice(-5);
		sBackgroundImage = sBackgroundImage.substring(0, sBackgroundImage.length - 5).replace(HOVER_INDICATOR, "");
		oButtonDown.style.backgroundImage  = sBackgroundImage + NOT_ACTIVE_INDICATOR + sExtension;
		//dodaj odstep u gory bloku
		arElements[arElements.length - 1].style.marginTop = "10px";
	}// koniec ifa
	else {
		var oButtonUp = document.getElementById(arElements[0].id + "ButtonUp");
		var oButtonDown = document.getElementById(arElements[0].id + "ButtonDown");

		oButtonUp.style.cursor = "default";
		oButtonDown.style.cursor = "default";

		// przywroc oryginalny wyglad
		oButtonUp.style.backgroundImage = "";
		oButtonDown.style.backgroundImage = "";
		
		var sBackgroundImage;
		if(document.defaultView) {
			sBackgroundImageDown = document.defaultView.getComputedStyle(oButtonDown, "").backgroundImage;
			sBackgroundImageUp = document.defaultView.getComputedStyle(oButtonUp, "").backgroundImage;
		}
		else {
			// usun cudzyslow ktory jest dodawany w IE (6)
			sBackgroundImageDown = oButtonDown.currentStyle.backgroundImage;
			sBackgroundImageUp = oButtonUp.currentStyle.backgroundImage;
		}
		sBackgroundImageDown = sBackgroundImageDown.replace(/\"/g, "");
		sBackgroundImageUp = sBackgroundImageUp.replace(/\"/g, "");
		// w zaleznosci od tego czy jest to blok ciemny lub jasny ustaw odpowiedni obrazek jako tlo
		var sExtension = sBackgroundImageDown.slice(-5);
		sBackgroundImageDown = sBackgroundImageDown.substring(0, sBackgroundImageDown.length - 5).replace(HOVER_INDICATOR, "");
		sBackgroundImageUp = sBackgroundImageUp.substring(0, sBackgroundImageUp.length - 5).replace(HOVER_INDICATOR, "");
		oButtonDown.style.backgroundImage  = sBackgroundImageDown + NOT_ACTIVE_INDICATOR + sExtension;
		oButtonUp.style.backgroundImage  = sBackgroundImageUp + NOT_ACTIVE_INDICATOR + sExtension;
		//dodaj odstep u gory bloku
		arElements[0].style.marginTop = arElements[0].parentNode.sTopMargin;
	}

}

//function getElements(arElementsIds) {
//	var arElements = new Array();
//	for(var i = 0; i < arElementsIds.length; i++) {
//		arElements.push(document.getElementById(arElementsIds[i]));
//	}
//	return arElements;
//}

function saveOrder(arElements) {
	for(var i = 0; i < arElements.length; i++)
		setCookie("ORDER2_"+ arElements[i].id, i, COOKIE_EXPIRATION);
}

//function getOrderedElements(arElementsIds) {
//	var arElements = new Array(arElementsIds.length);
//	for(var i = 0; i < arElementsIds.length; i++) {
//		var iIndex = getCookie("ORDER2_" + arElementsIds[i]);
//		if(iIndex == null) {
//			arElements = null;
//			break;
//		}
//		arElements[iIndex] = document.getElementById(arElementsIds[i]);
//	}
//	return arElements;
//}

function getOrderedElements(arElements) {
	var arElementsOrdered = new Array;
	var arElementsTemp = new Array;
	var iNullsCounter = 0;
	for(var i = 0; i < arElements.length; i++) {
		var iIndex = getCookie("ORDER2_" + arElements[i].id);
		
		if(iIndex == null) {
//			arElements = null;
//			arElementsTemp[iNullsCounter] = arElements[i];
			iNullsCounter++;
			iIndex = 0;
		}
		if(arElementsOrdered[iIndex]) {
			iIndex++;
			arElementsOrdered[iIndex] = arElements[i];
		}
		else
			arElementsOrdered[iIndex] = arElements[i];
	}
	if(iNullsCounter != arElements.length)
		return arElementsOrdered;
	else
		return null;
}

function activateElementsMoving(sContainer, sTopMargin) {
	//pobierz elementy ktore maja byc przesuwane
	var oContainer = document.getElementById(sContainer);
	var arChilds = oContainer.childNodes;
	var arElements = new Array;

	for(var i=0; i<arChilds.length; i++) {
		if(arChilds[i].className == "przesuwanyBlokPrawaStrona" || arChilds[i].className == "przesuwanyBlokSrodek")  {
			arElements.push(arChilds[i]);
		}
	}

	var arElementsOrdered = getOrderedElements(arElements);

	if(arElements.length >1 && arElementsOrdered != null) {
		for(var i = 0; i < arElements.length; i++) {
			oContainer.removeChild(arElements[i]);
		}
		arElements = arElementsOrdered;
		for(var i = 0; i < arElements.length; i++) {
			oContainer.appendChild(arElements[i]);
		}
	}
	
	
	// zapamietaj tablice w kontenerze
	oContainer.arElements = arElements;
	oContainer.sTopMargin = sTopMargin;
	// ustaw poczatkowa obsluge zdarzen i wyglad przyciskow
//	alert(arElements.length);
	setEvents(arElements);
}