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));
}
}
}