/*
<b>CustomizeBlocks.js</b>
Written by Matthew Martin 09/2005

<b>What does it do?</b>
Allows reader to customize pages by moving content blocks up and down.

<b>How do I use it?</b>
*/

var BLOCKCONTENT = new Array();
var BLOCKIDS = new Array();

function CustomizeBlocks(pageId) {
	Array.prototype.FindValue = function(value) {
		for (var item = 0; item < this.length; item++) {
			if (this[item] == value) return 1;
		}
		return 0;
	}
	
	Array.prototype.Push = function(value) {	
		this[this.length] = value;
	}

	// get all blocks from the page that have the class Customize
	var all = document.all ? document.all : document.getElementsByTagName('div');
	var blockNumber = 0;
	var pageBlockIds = new Array();
	for (var elementNumber = 0; elementNumber < all.length; elementNumber++) {
		if (all[elementNumber].className == "Customize") {
  			var name = all[elementNumber].id;
  			pageBlockIds[blockNumber] = name;
 			BLOCKCONTENT[name] = "<div class=\"Customize\" id=\"" + name + "\">" + document.getElementById(name).innerHTML + "<\/div";
  			blockNumber++;
		}
	}
				
	// check for cookie and rearrange blocks according to cookie value
	var cookieValue = GetCookie(pageId);
	if (cookieValue) {
		var cookieBlockIds = cookieValue.split("+");
		
		// merge the blocks on the page with the blocks in our cookie and store in BLOCKIDS
		for (var itemNumber = 0; itemNumber < cookieBlockIds.length; itemNumber++) {			
			if (pageBlockIds.FindValue(cookieBlockIds[itemNumber]) == 1) {
				BLOCKIDS.Push(cookieBlockIds[itemNumber]);
			}
		}
		for (var itemNumber = 0; itemNumber < pageBlockIds.length; itemNumber++) {			
			if (cookieBlockIds.FindValue(pageBlockIds[itemNumber]) == 0) {
				BLOCKIDS.Push(pageBlockIds[itemNumber]);
			}
		}
		
		BuildBlocks();
	} else {
		// copy the page blocks to BLOCKIDS
		BLOCKIDS = pageBlockIds;
	}
}

function MoveBlock(pageId,blockId,direction) {
	var itemPosition;
	var newPosition;
				
	// get the position of the current block in the BLOCKIDS array
	for (var itemNumber = 0; itemNumber < BLOCKIDS.length; itemNumber++) {
  		if (blockId == BLOCKIDS[itemNumber]) {
  			itemPosition = itemNumber;
 		}
	}
				
	// establish new position
	if (direction == 'Up') {
		newPosition = itemPosition - 1;
	}
	if (newPosition < 0) return;
	if (direction == 'Down') {
		newPosition = itemPosition + 1;
	}
	if (newPosition == BLOCKIDS.length) return;
				
	// move block in BLOCKIDS array
	var temporaryItem = BLOCKIDS[newPosition];
	BLOCKIDS[newPosition] = BLOCKIDS[itemPosition];
	BLOCKIDS[itemPosition] = temporaryItem;

	// set block positions into cookie
	var now = new Date(); now.setTime(now.getTime() + 365 * 24 * 60 * 60 * 1000);
	SetCookie(pageId,BLOCKIDS.join("+"),now,"/","seattletimes.nwsource.com","");	
		
	BuildBlocks();
}
	
function BuildBlocks() {
	var html = "";
	for (var itemNumber = 0; itemNumber < BLOCKIDS.length; itemNumber++) {
		// only include the content block if it actually exists
		if (BLOCKCONTENT[BLOCKIDS[itemNumber]]) {
			html += BLOCKCONTENT[BLOCKIDS[itemNumber]];
		}
	}
		
	if (document.all) {
		document.getElementById("Customize").innerHTML = html;
	} else {
		var element = document.getElementById("Customize");
		while (element.hasChildNodes()) { element.removeChild(element.lastChild); }
		var range = document.createRange();
		range.setStartAfter(element);
		var fragment = range.createContextualFragment(html);
		element.appendChild(fragment);
	}
}
	
function SetCookie(name,value,expires,path,domain,secure) {
	var cookie = name + "=" + escape(value) +
		((expires) ? "; expires=" + expires.toGMTString() : "") +
		((path) ? "; path=" + path : "") +
		((domain) ? "; domain=" + domain : "") +
		((secure) ? "; secure" : "");
	document.cookie = cookie;
}
	
function GetCookie(name) {
	var cookie = document.cookie;
	var prefix = name + "=";
	var begin = cookie.indexOf("; " + prefix);
	if (begin == -1) {
		begin = cookie.indexOf(prefix);
		if (begin != 0) return null;
	} else {
		begin += 2;
	}
	var end = document.cookie.indexOf(";",begin);
	if (end == -1) {
		end = cookie.length;
	}
	return unescape(cookie.substring(begin + prefix.length, end));
}