// Code by Jordan Liggitt - jordan@liggitt.net
// Feel free to redistribute, but please keep this credit at the top.

// Put as many boxes and links as you want, just remember the following:
// #BOXES + #BOXES*#LINK_LIMIT must be less than or equal to 20
// This is a cookie limitation all browsers have...
// for example, if you have four customizable boxes, the max number of links you 
// can have is 4, because (4 + 4*4) == 20

var BOXES = 2;		// The number of customizable boxes
var LINK_LIMIT = 6;	// The maximum number of links per box
var IMG_WIDTH = 10;	// The width (in pixels) of the images for delete, move up, etc.
var IMG_HEIGHT = 10;	// The height (in pixels) of the images for delete, move up, etc.
var base_url = "http://www.forthepack.com/"; // The base URL of your site the three images and cookie.js should be at this path
var home_url = "#";	// DON'T CHANGE THIS

var LINK_LIMIT = Math.floor((Math.min(20, BOXES*(LINK_LIMIT+1))-BOXES)/BOXES);
var COOKIE_LIMIT = LINK_LIMIT * 2;

var size = new Array();
for(i=0; i<BOXES; i++) {
	if(GetCookie(i + "_num") != null)
		size[i] = parseInt(GetCookie(i + "_num"));
	else
		size[i] = 0;
}


var links = new Array();
for(i=0; i<BOXES; i++) {
	links[i] = new Array();
	for(j=0; j < size[i]; j++) {
		links[i][j] = new Array();
	}
}

for(m=0; m < BOXES; m++) {
	load_box(m);
}

function addLink(box_number) {
	newURL = prompt("Enter the full URL for the new link (i.e. http://www.yahoo.com)", "");
	newText = prompt("Enter the text for the new link (i.e. Yahoo)", "");
	if(newURL != null && newURL != "" && newText != null && newText != "") {
		links[box_number][size[box_number]] = new Array();
		links[box_number][size[box_number]][0] = newURL;
		links[box_number][size[box_number]][1] = newText;
		size[box_number]++;

		update();
	}
}



function deleteLink(box_number,link_number) {
	if(link_number >= 0 && link_number < size[box_number]) {
		for(i=link_number; i < size[box_number]-1; i++) {
			links[box_number][i][0] = links[box_number][i+1][0];
			links[box_number][i][1] = links[box_number][i+1][1];
		}
		size[box_number]--;
		update();
	}
}



function moveUpLink(box_number,link_number) {
	if(link_number > 0 && link_number < size[box_number]) {
		tmpURL = links[box_number][link_number][0];
		tmpText = links[box_number][link_number][1];
		links[box_number][link_number][0] = links[box_number][link_number-1][0];
		links[box_number][link_number][1] = links[box_number][link_number-1][1];
		links[box_number][link_number-1][0] = tmpURL;
		links[box_number][link_number-1][1] = tmpText;
		update();
	}
}


function moveDownLink(box_number,link_number) {
	if(link_number >= 0 && link_number < size[box_number]) {
		tmpURL = links[box_number][link_number][0];
		tmpText = links[box_number][link_number][1];
		links[box_number][link_number][0] = links[box_number][link_number+1][0];
		links[box_number][link_number][1] = links[box_number][link_number+1][1];
		links[box_number][link_number+1][0] = tmpURL;
		links[box_number][link_number+1][1] = tmpText;
		update();
	}
}


function update() {
	for(i = 0; i < BOXES; i++) {
		DeleteCookie (i + "_num");
		for(j = 0; j < LINK_LIMIT; j++) {
			DeleteCookie (i + "_" + j);
		}

		var expdate = new Date ();
		FixCookieDate (expdate); // Correct for Mac date bug - call only once for given Date object!
		expdate.setTime (expdate.getTime() + (365 * 24 * 60 * 60 * 1000)); // 1 year from now 
		
		SetCookie (i + "_num", size[i], expdate);
		for(j = 0; j < size[i]; j++) {
			SetCookie (i + "_" + j,  links[i][j][0] + "`~`" + links[i][j][1], expdate);
		}
	}
	document.location.reload();
}	



function load_box(box_number) {
	for(xy=0; xy < size[box_number]; xy++) {
		string = GetCookie(box_number + "_" + xy);
		links[box_number][xy] = string.split("`~`");
	}
}


function display_box(box_number) {
	document.writeln('<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" WIDTH="100%">');
	for(i=0; i < size[box_number]; i++) {
		linkText     = '<TR><TD VALIGN="CENTER"><NOBR><FONT FACE="ARIAL,HELVETICA" SIZE="1"><A HREF="' + links[box_number][i][0] + '">' + links[box_number][i][1] + '</A></TD><TD WIDTH="35" VALIGN="CENTER"><NOBR><FONT SIZE="1">';
		deleteText   = '<A HREF="'   + home_url + '" onClick="deleteLink('   + box_number + ',' + i + '); return false;"><IMG SRC="' + base_url + 'delete.gif" WIDTH="'+ IMG_WIDTH +'" HEIGHT="'+ IMG_HEIGHT +'" BORDER="0" ALT="Delete this link"></A> ';
		moveUpText   = ' <A HREF="'  + home_url + '" onClick="moveUpLink('   + box_number + ',' + i + '); return false;"><IMG SRC="' + base_url + 'up.gif"     WIDTH="'+ IMG_WIDTH +'" HEIGHT="'+ IMG_HEIGHT +'" BORDER="0" ALT="Move this link up one space"></A> ';
		moveDownText = ' <A HREF="'  + home_url + '" onClick="moveDownLink(' + box_number + ',' + i + '); return false;"><IMG SRC="' + base_url + 'down.gif"   WIDTH="'+ IMG_WIDTH +'" HEIGHT="'+ IMG_HEIGHT +'" BORDER="0" ALT="Move this link down one space"></A> ';
		blankText    = ' <IMG SRC="' + base_url + 'blank.gif" WIDTH="'+ IMG_WIDTH +'" HEIGHT="'+ IMG_HEIGHT +'" BORDER="0"> ';
		endText      = '</FONT></TD></TR>';
	
		if(size[box_number] == 1)
			document.writeln(linkText + deleteText + blankText + blankText + endText);
		else {
			if(i == 0)				document.writeln(linkText + deleteText + blankText + moveDownText + endText);
			else if(i == size[box_number]-1)	document.writeln(linkText + deleteText + moveUpText + blankText + endText);	
			else 					document.writeln(linkText + deleteText + moveUpText + moveDownText + endText);	
		}
	}



	document.writeln('</TABLE>');

	document.close();
}


function display_box2(box_number) {

	for(i=0; i < size[box_number]; i++) {
		beginText    = '<table width="135" border="0" style="border-collapse: collapse" bordercolor="#000000" cellpadding="0" cellspacing="0" height="1"><tr width=14><td width="15" height="1" valign="top"><img border="0" src="lt.GIF" width="15" height="15"></td><td width="100%" height="1" style="background: url(\'ts.GIF\') repeat-x;"></td><td width="10" height="1" valign="top"><img border="0" src="rt.GIF" width="15" height="15"></td></tr><tr><td width="15" align="left" valign="bottom" style="background: url(\'ls.gif\') repeat-y; position-x:left; position-y:top; attachment:fixed" height="36">&nbsp;</td><td width="502" height="36"><b>';
		linkText     = '» <A HREF="' + links[box_number][i][0] + '">' + links[box_number][i][1] + '</A><br>';
		endText      = '</td><td width="10" align="left" valign="bottom" style="background: url(\'rs.gif\') repeat-y; position-x:left; position-y:top; attachment:fixed" height="36">&nbsp;</td></tr><tr><td width="15"  height="1" style="background-repeat: repeat-x; background-attachment: fixed; background-position: left bottom" valign="top"><img border="0" src="lb.GIF" width="15" height="15"></td><td width="502" style="background: url(\'bs.GIF\') repeat-x;" height="1"><p align="center"></td><td width="10" valign="top" height="1"><img border="0" src="rb.GIF" align="right" hspace="0" width="15" height="15"></td></tr></table><br>';

		if([box_number] == 0)
			titleText    = 'My Courses</b><br>';
			else {
				titleText    = 'Custom Links</b><br>';
			}

	
		if(size[box_number] == 1)
			document.writeln(beginText + titleText + linkText + endText);
		else {
			if(i == 0)				document.writeln(beginText + titleText + linkText);
			else if(i == size[box_number]-1)	document.writeln(linkText + endText);	
			else 					document.writeln(linkText);	
		}
	}

	document.close();
}




function display_add(box_number) {

	if(size[0] + size[1] < COOKIE_LIMIT)
		document.writeln('<INPUT TYPE="SUBMIT" VALUE="Add" STYLE="width: 60px;">&nbsp;');
	else {
		document.writeln('<INPUT TYPE="BUTTON" VALUE="Link Limit" STYLE="width: 80px;">&nbsp;');
	}

}



//
//
//


function getCookieVal (offset) {
  var endstr = document.cookie.indexOf (";", offset);
  if (endstr == -1)
    endstr = document.cookie.length;
  return unescape(document.cookie.substring(offset, endstr));
}

function FixCookieDate (date) {
  var base = new Date(0);
  var skew = base.getTime(); // dawn of (Unix) time - should be 0
  if (skew > 0)  // Except on the Mac - ahead of its time
    date.setTime (date.getTime() - skew);
}

function GetCookie (name) {
  var arg = name + "=";
  var alen = arg.length;
  var clen = document.cookie.length;
  var i = 0;
  while (i < clen) {
    var j = i + alen;
    if (document.cookie.substring(i, j) == arg)
      return getCookieVal (j);
    i = document.cookie.indexOf(" ", i) + 1;
    if (i == 0) break; 
  }
  return null;
}

function SetCookie (name,value,expires,path,domain,secure) {
  document.cookie = name + "=" + escape (value) +
    ((expires) ? "; expires=" + expires.toGMTString() : "") +
    ((path) ? "; path=" + path : "/") +
    ((domain) ? "; domain=" + domain : "") +
    ((secure) ? "; secure" : "");
}

function DeleteCookie (name,path,domain) {
  if (GetCookie(name)) {
    document.cookie = name + "=" +
      ((path) ? "; path=" + path : "") +
      ((domain) ? "; domain=" + domain : "") +
      "; expires=Thu, 01-Jan-70 00:00:01 GMT";
  }
}


