// JavaScript Document

var blockContent;
var block_list = new CompoundList;

function initBlockContent(oDiv,sType) {
	setBlockContent(oDiv);
	sType != "recipes" ? loadBlocks() : loadRecipes();
	addEvents();
}

function addEvents() {
	var divArray = blockContent.getElementsByTagName("DIV");
	var emsArray = divArray[0].getElementsByTagName("EM");
	emsArray[0].onclick = block_list.orderByName;
	emsArray[1].onclick = block_list.orderByDest;
}

function setBlockContent(oDiv) {
	blockContent = oDiv;
}

function loadRecipes() {
	var divArray = getElementsByClass("block_content_02",blockContent);
	var index = 0;
	
	for (var i = 1; i < divArray.length; i++) {
		block_list.getList()[index] = new BlockContent();
		block_list.getList()[index].setRefr( divArray[i] );
		
		var oDiv = getElementsByClass("block_cont_head",divArray[i]);
		block_list.getList()[index].setName( oDiv[0].getElementsByTagName("SPAN")[0].innerHTML );
		
		var oDiv = getElementsByClass("block_cont_cont_img",divArray[i]);
		for (j = 0; j < oDiv[0].childNodes.length; j++) {
			if ( oDiv[0].childNodes[j].nodeType == 3 ) //Text node
					block_list.getList()[index].setDest( oDiv[0].childNodes[j].nodeValue );
		}
		index++;
	}
}

function loadBlocks() {
	var divArray = blockContent.getElementsByTagName("DIV");
	var index = 0;
	for (i = 0; i < divArray.length; i++) { //Start without the sorter div
		if(divArray[i].getElementsByTagName("DIV").length > 0) {
			
			oDiv = divArray[i].getElementsByTagName("DIV")[0];

			if (oDiv.className == "block_cont_head") {
				block_list.getList()[index] = new BlockContent();
				block_list.getList()[index].setRefr( divArray[i] );
				
				//Try get the name
				if (oDiv.getElementsByTagName("SPAN").length > 0) 
					block_list.getList()[index].setName( oDiv.getElementsByTagName("SPAN")[0].innerHTML );
				
				//Try get the destination
				if (oDiv.getElementsByTagName("EM").length > 0) 
					block_list.getList()[index].setDest( oDiv.getElementsByTagName("EM")[0].innerHTML );

				index++;
			}
		}
	}
}

function BlockContent() {
	var name = "";
	var dest = "";
	var refr;
	
	this.getName = function() {return name;}
	this.setName = function(str) {name = str;}
	this.getDest = function() {return dest;}
	this.setDest = function(str) {dest = str;}
	this.getRefr = function() {return refr;}
	this.setRefr = function(obj) {refr = obj;}
}

function CompoundList() {
	var list = new Array;
	
	this.getList = function() {
		return list;
	}
	
	this.showList = function() {
		var sResult = "";
		for (i = 0; i < list.length; i++) {
			sResult = sResult + list[i].getName() + "-" + list[i].getDest() + "\n";
		}
		alert(sResult);
	}
	
	this.orderByName = function() {
		var nameIndex = 0;
		var newList = [];
		var frag = document.createDocumentFragment();
		
		while (list.length > 0) {
			//Find the min value
			for (index = 0; index < list.length; index++) {
				if (list[index].getName() < list[nameIndex].getName())
					nameIndex = index;
			}
			
			//DOM removal
			frag.appendChild( list[nameIndex].getRefr().parentNode.removeChild( list[nameIndex].getRefr() ) );
			
			//Logic removal
			newList[newList.length] = list[nameIndex];
			list.splice(nameIndex,1);
			
			nameIndex = 0;
		}
		
		blockContent.appendChild(frag);
		list = newList;
	}
	
	this.orderByDest = function() {
		var nameIndex = 0;
		var newList = [];
		var frag = document.createDocumentFragment();
		
		while (list.length > 0) {
			//Find the min value
			for (index = 0; index < list.length; index++) {
				if ( (list[index].getDest() + list[index].getName()) < (list[nameIndex].getDest() + list[nameIndex].getName()) )
					nameIndex = index;
			}
			
			//DOM removal
			frag.appendChild( list[nameIndex].getRefr().parentNode.removeChild( list[nameIndex].getRefr() ) );
			
			//Logic removal
			newList[newList.length] = list[nameIndex];
			list.splice(nameIndex,1);
			
			nameIndex = 0;
		}
		
		blockContent.appendChild(frag);
		list = newList;
	}
}

function getElementsByClass(searchClass,node,tag) {
	var classElements = new Array();
	if ( node == null )
		node = document;
	if ( tag == null )
		tag = '*';
	var els = node.getElementsByTagName(tag);
	var elsLen = els.length;
	var pattern = new RegExp('(^|\\\\s)'+searchClass+'(\\\\s|$)');
	for (i = 0, j = 0; i < elsLen; i++) {
		if ( pattern.test(els[i].className) ) {
			classElements[j] = els[i];
			j++;
		}
	}
	return classElements;
}