function isValidDiv(divName) {
	var i, isValid;
	isValid = false;
	for(i=0; i<divArray.length; i++) {
		if(divArray[i] == divName) {
			isValid = true;
			break;
		}
	}
	return isValid;
}

function getParentNode(divName) {
	var tmp;
	tmp = document.getElementById(divName);
	return tmp.parentNode;
}

function getNodesArray(mainNode) {
	var tmpArray, tmpCount, node, nodeID;
	tmpArray = new Array();
	tmpCount = 0;
	if(mainNode.hasChildNodes()) {
		for(i=0; i<mainNode.childNodes.length; i++) {
			node = mainNode.childNodes.item(i);
			if(node.nodeName != '#text' && node.nodeName != '#comment') {
				nodeID = node.getAttribute('id');
				if(nodeID) {
					if(isValidDiv(nodeID)) {
						tmpArray[tmpCount] = node;
						tmpCount++;
					}
				}		
			}
		}
	}	
	return tmpArray;
}

function moveUp(divName) {
	var parentNode, nodesArray, prevNode, node, tmpNode, tmpRemember;
	parentNode = getParentNode(divName);
	nodesArray = getNodesArray(parentNode);
	prevNode = null;
	if(extraMovingFunctions[2].length > 0) {
		eval(extraMovingFunctions[2]);
	}
	for(i=0; i<nodesArray.length; i++) {
		node = nodesArray[i];
		nodeID = node.getAttribute('id');
		if(nodeID == divName) {
			if(prevNode != null) {
				tmpNode = prevNode.cloneNode(false);
				tmpNode.nodeValue = 'tmpNode';
				parentNode.replaceChild(tmpNode, prevNode);
				parentNode.replaceChild(prevNode, node);
				parentNode.replaceChild(node, tmpNode);		
				break;						
			}
		}
		prevNode = node;
	}
	hideMoveButtons(parentNode.getAttribute('id'));		
	saveCookie(parentNode);	
	if(extraMovingFunctions[3].length > 0) {
		eval(extraMovingFunctions[3]);
	}	
}

function moveDown(divName) {
	var parentNode, nodesArray, prevNode, node, tmpNode, tmpArr, tmp;
	parentNode = getParentNode(divName);
	nodesArray = getNodesArray(parentNode);
	prevNode = null;
	if(extraMovingFunctions[4].length > 0) {
		eval(extraMovingFunctions[4]);
	}
	for(i=0; i<nodesArray.length; i++) {
		node = nodesArray[i];
		if(prevNode != null) {
			nodeID = prevNode.getAttribute('id');
			if(nodeID == divName) {
				tmpNode = prevNode.cloneNode(false);
				tmpNode.nodeValue = 'tmpNode';
				parentNode.replaceChild(tmpNode, prevNode);
				parentNode.replaceChild(prevNode, node);
				parentNode.replaceChild(node, tmpNode);
				break;
			}
		}
		prevNode = node;
	}
	hideMoveButtons(parentNode.getAttribute('id'));	
	saveCookie(parentNode);		
	if(extraMovingFunctions[5].length > 0) {
		eval(extraMovingFunctions[5]);
	}	
}

function saveCookie(parentNode) {
	var cookieStr = '';
	nodesArray = getNodesArray(parentNode);
	for(i=0; i<nodesArray.length; i++) {
		nodeID = nodesArray[i].getAttribute('id');
		cookieStr += nodeID+'#';
	}
	cookieStr = cookieStr.substr(0, cookieStr.length-1);
	createCookie(parentNode.getAttribute('id')+'Order', cookieStr, 365);
}

function loadCookie(cookieName) {
	var cookieStr, tmpNode, tmpEl, mainNode, parentNode, elCount, usedEl;
	tmpNode = document.createElement('div');
	tmpNode.setAttribute('id', cookieName);
	usedEl = new Array();
	if(haveCookie(cookieName+'Order')) {
		if(extraMovingFunctions[0].length > 0) {
			eval(extraMovingFunctions[0]);
		}
		cookieStr = readCookie(cookieName+'Order');
		orderArr = cookieStr.split('#');
		elCount = 0;
		for(i=0; i<orderArr.length; i++) {
			for(j=0; j<divStableArray.length; j++) {
				if(divStableArray[j][2] == cookieName) {
					if(elCount == (divStableArray[j][1]-1)) {
						tmpEl = document.getElementById(divStableArray[j][0]);
						if(tmpEl != null) {
							tmpNode.appendChild(tmpEl);
						}
					}
				}
			}
			for(j=0; j<divArray.length; j++) {
				if(orderArr[i] == divArray[j])  {
					tmpEl = document.getElementById(orderArr[i]);
					if(tmpEl != null) {
						tmpNode.appendChild(tmpEl);				
						usedEl[elCount] = orderArr[i];
						elCount++;
					}
				}
			}
		}
		tmpEl = document.getElementById(cookieName);
		nodesArray = getNodesArray(tmpEl);
		for(i=0; i<nodesArray.length; i++) {
			nodeID = nodesArray[i].getAttribute('id');
			nodeUsed = false;
			for(j=0; j<usedEl.length; j++) {
				if(usedEl[j] == nodeID) {
					nodeUsed = true;
					break;
				}
			}
			for(j=0; j<divStableArray.length; j++) {
				if(divStableArray[j][2] == cookieName) {
					if(elCount == (divStableArray[j][1]-1)) {
						tmpEl = document.getElementById(divStableArray[j][0]);
						if(tmpEl != null) {
							tmpNode.appendChild(tmpEl);
						}
					}
				}
			}			
			if(nodeUsed == false) {
				tmpEl = document.getElementById(nodeID);
				tmpNode.appendChild(tmpEl);
				elCount++;
			}
		}
		mainNode = document.getElementById(cookieName);
		parentNode = mainNode.parentNode;
		parentNode.replaceChild(tmpNode, mainNode);
		if(extraMovingFunctions[1].length > 0) {
			eval(extraMovingFunctions[1]);
		}		
	}
}

function hideMoveButtons(parentName) {
	var mainNode;
	mainNode = document.getElementById(parentName);
	nodesArr = getNodesArray(mainNode);
	for(i=0; i<nodesArr.length; i++) {
		nodeID = nodesArr[i].getAttribute('id');
		tmpUp = document.getElementById(nodeID+'Up');
		if(i == 0) {
			tmpUp.style.display = "none";		
		}
		else {
			tmpUp.style.display = "inline";
		}
		tmpDown = document.getElementById(nodeID+'Down');
		if(i == (nodesArr.length-1)) {
			tmpDown.style.display = "none";
		}
		else {
			tmpDown.style.display = "inline";
		}
	}
}
