// JavaScript Document
function popUp(url) {
	window.open(url,"redRef","height=600,width=550,channelmode=0,dependent=0,directories=0,fullscreen=0,location=0,menubar=0," + "resizable=0,scrollbars=1,status=1,toolbar=0");
}

function toggleHelp(show,hide,block) {
	if (document.getElementById(block).style.display == "none") {
		document.getElementById(show).style.display  = "none";
		document.getElementById(hide).style.display = "inline";
	    new Effect.BlindDown(block, {duration: 0.4,
	      afterFinish: function() {
	        Element.undoClipping(block);
	        $(block).style.width = "auto";
	        $(block).style.height = "auto";
	      }})
	} else {
		document.getElementById(show).style.display  = "inline";
		document.getElementById(hide).style.display = "none";
	    new Effect.BlindUp(block, {duration: 0.4,
	      afterFinish: function() {
	        Element.undoClipping(block);
	        Element.hide(block);
	      }})
	}
}

function newPage(web_address) {
	if (val = prompt("Enter the name of the page you would like to create:", "")) {
		document.location = "/" + web_address + "/page/new/" + encodeURIComponent(val);
		return false;
	}

	return false;
}

function newList(web_address, page_id) {
	if (val = prompt("Enter the name of the task list you would like to create:", "")) {
		new Ajax.Request('/' + web_address + '/tasks/create/' + page_id + '?title=' + encodeURIComponent(val), {asynchronous:true, evalScripts:true});
		return false;
	}

	return false;
}

function toggleTags() {
	var elements = document.getElementsByClassName('display_tag');

	for(var i = 0; i < elements.length; i++) {
 		if (elements[i].style.display == "none") {
			elements[i].style.display = "block";
		} else {
			elements[i].style.display = "none";
		}
	}	
}

function hideByClass(cla) {
	var elements = document.getElementsByClassName(cla);
	
	for(var i = 0; i < elements.length; i++) {
		elements[i].style.display = "none";
	}	
}

function showByClass(cla) {
	var elements = document.getElementsByClassName(cla);
	
	for(var i = 0; i < elements.length; i++) {
		elements[i].style.display = "block";
	}	
}

function toggleByClass(cla) {
	var elements = document.getElementsByClassName(cla);
	
	for(var i = 0; i < elements.length; i++) {
 		if (elements[i].style.display == "none") {
			new Effect.Appear(elements[i]);
		} else {
			new Effect.Fade(elements[i]);
		}
	}	
}

// Make sure they are all set to the same.  Called after creating a new item, among other places.
function checkToggleSync(cla, check_id) {
	var elements = document.getElementsByClassName(cla);

	// grab the first element.
	if (elements[0].style.display == "none") {
		new Effect.Fade(check_id);
	} else {
		new Effect.Appear(check_id);
	}

}

function reorder(id, request_addr) {
	if ($('task_list_' + id + '_reorder').style.display == 'none') {
		Element.show('task_list_' + id + '_reorder');
		Element.hide('task_list_' + id + '_master_completed');
		Element.hide('master_add_item_' + id);
		for (var i = 0; $('task_list_' + id + '_items').childNodes[i]; i++) {
			Element.addClassName($('task_list_' + id + '_items').childNodes[i].id, 'ReorderList');
		}

		Sortable.create('task_list_' + id + '_items', {onUpdate:function(){new Ajax.Request(request_addr, {asynchronous:true, evalScripts:true, onComplete:function(request){new Effect.Highlight('task_list_' + id + '_items',{});}, parameters:Sortable.serialize('task_list_' + id + '_items')})}})
	} else {
		Element.hide('task_list_' + id + '_reorder');

		Element.show('task_list_' + id + '_master_completed');
		Element.show('master_add_item_' + id);
		for (var i = 0; $('task_list_' + id + '_items').childNodes[i]; i++) {
			Element.removeClassName($('task_list_' + id + '_items').childNodes[i].id, 'ReorderList');
		}

		Sortable.destroy('task_list_' + id + '_items');
	}
}

var taskEditors = {};
function edit_tasks(id, request_addr) {
	if ($('task_list_' + id + '_edit').style.display == 'none') {
		Element.show('task_list_' + id + '_edit');
		Element.hide('task_list_' + id + '_master_completed');
		Element.hide('master_add_item_' + id);

		for (var i = 0; $('task_list_' + id + '_items').childNodes[i]; i++) {
			if ($('task_list_' + id + '_items').childNodes[i].id) {
				taskEditors[i] = new Ajax.InPlaceEditor($('task_list_' + id + '_items').childNodes[i].id + '_content', '/' + request_addr + '/tasks/set_task_item_content/' + $('task_list_' + id + '_items').childNodes[i].id, {loadTextURL:'/' + request_addr + '/tasks/task_item_content_unformatted_text/' + $('task_list_' + id + '_items').childNodes[i].id})
			}
		}
	} else {
		Element.hide('task_list_' + id + '_edit');
		Element.show('task_list_' + id + '_master_completed');
		Element.show('master_add_item_' + id);

		for (var i = 0; $('task_list_' + id + '_items').childNodes[i]; i++) {
			if ($('task_list_' + id + '_items').childNodes[i].id) {
				taskEditors[i].dispose();
			}
		}
	}
}

function toggleListDetail() {
	var compl = document.getElementsByClassName('CompletedByline');
	var act = document.getElementsByClassName('AddedByline');
	var yay = new Date();

	yay.setTime(Date.parse('March, 15 2008 07:04:11'));

	if (compl.length != 0) {
		if (compl[0].style.display == 'none') {
			setCookie('show_list_detail', 'false', yay);
		} else {
			setCookie('show_list_detail', 'true', yay);
		}
	} else if (act.length != 0) {
		if (act[0].style.display == 'none') {
			setCookie('show_list_detail', 'false', yay);
		} else {
			setCookie('show_list_detail', 'true', yay);
		}
	}
}

function jumpto(x){
	document.location.href = x;
}

function toggleWikis() {
	if (document.getElementById("wikiList").style.display == "none") {
		document.getElementById("wikiList").style.display  = "block";
		document.getElementById("show_wiki_list").style.display  = "none";
		document.getElementById("hide_wiki_list").style.display = "inline";
	} else {
		document.getElementById("wikiList").style.display  = "none";
		document.getElementById("show_wiki_list").style.display  = "inline";
		document.getElementById("hide_wiki_list").style.display = "none";
	}
	
}

function showTrashIcon(asset_id) {
	if (!Draggables.activeDraggable) {
		Element.show(asset_id);
	}
}

function hideTrashIcon(asset_id) {
	Element.hide(asset_id);
}

function showRestoreIcon(asset_id) {
	Element.show('list_restore_icon_' + asset_id);
}

function hideRestoreIcon(asset_id) {
	Element.hide('list_restore_icon_' + asset_id);
}

var trashHighlights = new Array();
var listHighlights = new Array();
var iconHighlights = new Array();

function waitToHighlight(what, asset_id) {
	what[what.length] = asset_id;
}

function runHighlights(what) {
	if (what.length == 0) {
		return;
	}
	
	for (var i = 0; i < what.length; i++) {
		new Effect.Highlight(what[i], {duration: 5});
	}

	$A(what).clear();
}

function countrySelect(value) {
	if (value == 'US') {
		
	} else if (value == 'CA') {
		Element.hide('account_state');
		Element.show('account_province');
	} else {
		Effect.Appear('IntlMessage');
		$('city_input_text').innerHTML = 'City / Municipality';
	}
}

function UpdateAmounts(plan, period) {
	if (plan == 'Free') {
		var amount = "0.00";
	} else if (plan == 'Personal') {
		var amount = "4.95";
	} else if (plan == 'Power') {
		var amount = "9.95";
	} else if (plan == 'Team') {
		var amount = "14.95";
	} else {
		var amount = "NoWay";
	}

	switch(period) {
		case 'Monthly': var retval = "$" + amount + "/month"; break
		case 'HalfYear': var retval = "$" + ((amount*6)-amount).toFixed(2); retval += "/half-year"; break 
		case 'Yearly': var retval = "$" + ((amount*12)-(amount*2)).toFixed(2); retval += "/yearly"; break 
	}

	$('to_amount').innerHTML = retval;
	new Effect.Shake('to_amount');
}

function show_dates_as_local_time() {
	var spans = document.getElementsByTagName('span');
	for (var i=0; i<spans.length; i++) {
		if (spans[i].className.match(/\bstiki_date\b/i)) {
			spans[i].innerHTML = get_local_time_for_date(spans[i].title);
		}
	}
}

function get_local_time_for_date(time) {
	system_date = new Date(time);
	user_date = new Date();
	delta_minutes = Math.floor((user_date - system_date) / (60 * 1000));
	if (Math.abs(delta_minutes) <= (8*7*24*60)) { // eight weeks... I'm lazy to count days for longer than that
		distance = distance_of_time_in_words(delta_minutes);
		if (delta_minutes < 0) {
			return distance + ' from now';
		} else {
			return distance + ' ago';
		}
	} else {
		return 'on ' + system_date.toLocaleDateString();
	}
}

// a vague copy of rails' inbuilt function, 
// but a bit more friendly with the hours.
function distance_of_time_in_words(minutes) {
	if (minutes.isNaN) return "";
	minutes = Math.abs(minutes);
	if (minutes < 1) return ('less than a minute');
	if (minutes < 50) return (minutes + ' minute' + (minutes == 1 ? '' : 's'));
	if (minutes < 90) return ('about one hour');
	if (minutes < 1080) return (Math.round(minutes / 60) + ' hours');
	if (minutes < 1440) return ('one day');
	if (minutes < 2880) return ('about one day');
	else return (Math.round(minutes / 1440) + ' days')
}

function cleanAuthorName() {
  if (document.getElementById('authorName').value == "") {
    document.getElementById('authorName').value = 'Anonymous';
  }
}

/*
 * Dynamic Table of Contents script
 * by Matt Whitlock <http://www.whitsoftdev.com/>
 */

function createLink(href, innerHTML) {
  var a = document.createElement("a");
  a.setAttribute("href", href);
  a.innerHTML = innerHTML;
  return a;
}

function generateTOC(toc) {
  var i2 = 0, i3 = 0, i4 = 0;
  toc = toc.appendChild(document.createElement("ul"));
  for (var i = 0; i < $('revision').childNodes.length; ++i) {
    var node = $('revision').childNodes[i];
    var tagName = node.nodeName.toLowerCase();
    if (tagName == "h4") {
      ++i4;
      if (i4 == 1) toc.lastChild.lastChild.lastChild.appendChild(document.createElement("ul"));
      var section = i2 + "." + i3 + "." + i4;
      node.insertBefore(document.createTextNode(section + ". "), node.firstChild);
      node.id = "section" + section;
      toc.lastChild.lastChild.lastChild.lastChild.appendChild(document.createElement("li")).appendChild(createLink("#section" + section, node.innerHTML));
    } else if (tagName == "h3") {
      ++i3, i4 = 0;
      if (i3 == 1) toc.lastChild.appendChild(document.createElement("ul"));
      var section = i2 + "." + i3;
      node.insertBefore(document.createTextNode(section + ". "), node.firstChild);
      node.id = "section" + section;
      toc.lastChild.lastChild.appendChild(document.createElement("li")).appendChild(createLink("#section" + section, node.innerHTML));
    } else if (tagName == "h2") {
      ++i2, i3 = 0, i4 = 0;
      var section = i2;
      node.insertBefore(document.createTextNode(section + ". "), node.firstChild);
      node.id = "section" + section;
      toc.appendChild(h2item = document.createElement("li")).appendChild(createLink("#section" + section, node.innerHTML));
    }
  }
}