/*=============================
  TOGGLING SECTIONS AND SHIT
-----------------------------*/
/* about */
var bGotMoreAbout = false;
function toggleMoreAbout() {
    var div = document.getElementById("moreAbout");
    var parent = document.getElementById("about");
    var link = document.getElementById("aboutMoreLink");
    if (div.style.display != "block") {
    		if (!bGotMoreAbout) {
    			x_get_resource_by_query("pagename=about", doMoreAbout);
          div.style.display = "block";
    		} else {
        	new extender(parent, div);
        	link.className = "less";
        }
    } else {
        new retractor(parent,div);
        link.className = "";
    }
    link.blur();
}

function doMoreAbout(res) {
	if (bGotMoreAbout) {
		return;
	}
	bGotMoreAbout = true;
	var div = document.getElementById("moreAbout");
	var parent = document.getElementById("about");
	var link = document.getElementById("aboutMoreLink");
	div.innerHTML = res;
	new extender(parent, div);
	link.className = "less";
}

/* search */
function showSearchResults() {
    
    var inp = document.getElementById("searchBox");
    var div = document.getElementById("searchResults");
    
    if (inp.value == "") {
    	div.style.display = "none";
    	return;
    }
    
		x_get_resource_by_query("s="+inp.value, gotSearchResults);
    
    div.innerHTML = "<p class=\"loadNotice\">Searching...</p>";
    div.style.display = "block";
    inp.blur();
}

function gotSearchResults(res) {
	var div = document.getElementById("searchResults");
	var parent = document.getElementById("searchResultsContainer");
	div.innerHTML = res;
	new extender(parent, div);
}

function clearSearchResults(){
	var div = 	document.getElementById("searchResults");
	
	if (div.style.display != "block") {
			return;
	}
	
	new retractor(
		document.getElementById("searchResultsContainer"),
		div
	);
}

/* archives */
var bGotMoreArchives = false;
function toggleMoreArchives() {
    var div = document.getElementById("moreArchives");
    var parent = document.getElementById("archives");
    var link = document.getElementById("archivesMoreLink");
    if (div.style.display != "block") {
        if (!bGotMoreArchives) {
          x_get_archive_table(9, 999999999, doMoreArchives);
          document.getElementById("z").innerHTML = "<table><tr><td><p class=\"loadNotice\">Loading...</p></td></tr></table>";
          div.style.display = "block";
        } else {
          new extender(parent, div);
          link.className = "less";
        }
    } else {
        new retractor(parent,div);
        link.className = "";
    }
    link.blur();
}
function doMoreArchives(res) {
  if (bGotMoreArchives) {
    return;
  }
   bGotMoreArchives = true;
   var div = document.getElementById("z");
   var parent = document.getElementById("moreArchives");
   var link = document.getElementById("archivesMoreLink");
   div.innerHTML = res;
   new extender(parent, div);
   link.className = "less";
}

/*===============================
 EXTENDER/RETRACTOR
 that is, sexy object unravelling
-------------------------------*/
// the extender
function extender(parent, child) {
  if (!child || !parent) {
    return;
  }
  var extender = this;
  
  var targetHeight, inc;
  
  this.init = function() {
    var parHeight, chdHeight;
    child.style.display = "none";
    parHeight = parent.offsetHeight;
    child.style.display="block";
    chdHeight = child.offsetHeight;
    child.style.display="none";
    
    targetHeight = parHeight + chdHeight;
    inc = (targetHeight - parHeight) / 3;
    extender.extendfn();
    parent.style.overflow = "hidden";
    child.style.display = "block";
  }
  
  this.extendfn = function() {
    parent.style.height = parent.offsetHeight + inc + 1 + "px";
    if (parent.offsetHeight >= targetHeight) {
      parent.style.height = targetHeight;
      extender.extended();
    } else {
      setTimeout(extender.extendfn, 5);
    }
  }
  
  this.extended = function() {
    child.style.display="block";
    parent.style.height="auto";
  }
  
  extender.init();
}

// the retractor 
function retractor(parent, child) {
  if (!child || !parent) {
    return;
  }
  var retractor = this;
  
  var targetHeight, inc;
  
  this.init = function() {
    var parHeight, chdHeight;
    parHeight = parent.offsetHeight;
    child.style.display = "none";
    targetHeight = parent.offsetHeight;
    child.style.display="block";
    parent.style.overflow = "hidden";

    inc = (targetHeight - parHeight) / 3;
    retractor.retractfn();
  }
  
  this.retractfn = function() {
    parent.style.height = parent.offsetHeight + (inc - 1) + "px";
    if (parent.offsetHeight + inc <= targetHeight) {
      parent.style.height = targetHeight;
      retractor.retracted();
    } else {
      setTimeout(retractor.retractfn, 5);
    }
  }
  
  this.retracted = function() {
    child.style.display="none";
    parent.style.height="auto";
  }
  
  retractor.init();
}

/*==================================
 SAJAX 
 Yeah I use sajax for remote 
 scripting. Seems to work, dunnit?
----------------------------------*/
var sajax_debug_mode = false;
var sajax_request_type = "GET";

function sajax_debug(text) {
	if (sajax_debug_mode)
		alert("RSD: " + text)
}
function sajax_init_object() {
	sajax_debug("sajax_init_object() called..")
	
	var A;
	try {
		A=new ActiveXObject("Msxml2.XMLHTTP");
	} catch (e) {
		try {
			A=new ActiveXObject("Microsoft.XMLHTTP");
		} catch (oc) {
			A=null;
		}
	}
	if(!A && typeof XMLHttpRequest != "undefined")
		A = new XMLHttpRequest();
	if (!A)
		sajax_debug("Could not create connection object.");
	return A;
}
function sajax_do_call(func_name, args) {
	var i, x, n;
	var uri;
	var post_data;
	
	uri = "";
	if (sajax_request_type == "GET") {
		if (uri.indexOf("?") == -1) 
			uri = uri + "?rs=" + escape(func_name);
		else
			uri = uri + "&rs=" + escape(func_name);
		for (i = 0; i < args.length-1; i++) 
			uri = uri + "&rsargs[]=" + escape(args[i]);
		uri = uri + "&rsrnd=" + new Date().getTime();
		post_data = null;
	} else {
		post_data = "rs=" + escape(func_name);
		for (i = 0; i < args.length-1; i++) 
			post_data = post_data + "&rsargs[]=" + escape(args[i]);
	}
	
	x = sajax_init_object();
	x.open(sajax_request_type, uri, true);
	if (sajax_request_type == "POST") {
		x.setRequestHeader("Method", "POST " + uri + " HTTP/1.1");
		x.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	}
	x.onreadystatechange = function() {
		if (x.readyState != 4) 
			return;
		sajax_debug("received " + x.responseText);
		
		var status;
		var data;
		status = x.responseText.charAt(0);
		data = x.responseText.substring(2);
		if (status == "-") 
			alert("Error: " + data);
		else  
			args[args.length-1](data);
	}
	x.send(post_data);
	sajax_debug(func_name + " uri = " + uri + "/post = " + post_data);
	sajax_debug(func_name + " waiting..");
	delete x;
}
