var xmlhttpinuse=false;
var xmlhttp=false;
/*@cc_on @*/
/*@if (@_jscript_version >= 5)
// JScript gives us Conditional compilation, we can cope with old IE versions.
// and security blocked creation of the objects.
 try {
  xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
 } catch (e) {
  try {
   xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  } catch (E) {
   xmlhttp = false;
  }
 }
@end @*/
if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
  xmlhttp = new XMLHttpRequest();
}


function jacob(rownum,row,daclass,action) {
  var thecells = null;
  var c;
  var checkbox = document.getElementById('message_' + rownum);
  // 2. Gets the current row and exits if the browser can't get it
  if (typeof(document.getElementsByTagName) != 'undefined') {
    thecells = row.getElementsByTagName('td');
  } else if (typeof(row.cells) != 'undefined') {
    thecells = row.cells;
  } else {
    return false;
  }
  if (action == 'out') {
    if (checkbox.checked == true) {
      for (c = 0; c < thecells.length; c++) {
        thecells[c].setAttribute('class', daclass+'clicked', 0);
      }
    } else {
      for (c = 0; c < thecells.length; c++) {
        thecells[c].setAttribute('class', daclass, 0);
      }
    }
  }
  if (action == 'over') {
    if (checkbox.checked == true) {
      for (c = 0; c < thecells.length; c++) {
        thecells[c].setAttribute('class', daclass+'overclicked', 0);
      }
    } else {
      for (c = 0; c < thecells.length; c++) {
        thecells[c].setAttribute('class', daclass+'over', 0);
      }
    }
  }
  if (action == 'down') {
    if (checkbox.checked == true) {
      for (c = 0; c < thecells.length; c++) {
        thecells[c].setAttribute('class', daclass+'over', 0);
      }
      checkbox.checked = false;
    } else {
      for (c = 0; c < thecells.length; c++) {
        thecells[c].setAttribute('class', daclass+'overclicked', 0);
      }
      checkbox.checked = true;
    }
  }
}


function sendForm () {
  if (! document.getElementById) return true;
  var loginform = document.getElementById('login');
  if (! loginform) {
    //alert("login missing");
		return true;
	}
  if (! loginform.password || ! loginform.username || ! loginform.hash || ! loginform.timestamp) {
    //alert("form stuff missin");
    return true;
  }
  var pass = loginform.password.value;
  var user = loginform.username.value;
  if (xmlhttp) {
		if (xmlhttpinuse) return false;
		xmlhttpinuse=true;
    xmlhttp.open("GET", "salt.php?user="+user,false);
    xmlhttp.send(null);
    if (xmlhttp.responseText.length < 4) {
      alert("sorry, username not found");
      // don't need this here ..  loginform.password.value = "";  // dont send clear-text password!
      var wtf;
      wtf = 2+3;
      if (wtf == 5) {
				xmlhttpinuse=false; //done with it for now
				return false;
			}
    }
    var j = new Array();
    j = xmlhttp.responseText.split(' ');
    var salt = j[0];
    var timestamp = j[1];
    var hash = hex_sha1(salt+pass);
    hash = hex_sha1(timestamp+hash);
    loginform.password.value = "";  // dont send clear-text password!
    loginform.hash.value = hash;  // send hash
    loginform.timestamp.value = timestamp;  // show server the timestamp

		
    xmlhttp.open("POST", "login.php",false);
		var postdata = "";
		postdata += "hash=" + encodeURIComponent(hash);
    if (loginform.remember.checked == true) {
			postdata += "&remember=1";
		}
		postdata += "&timestamp=" + encodeURIComponent(timestamp);
		postdata += "&username=" + encodeURIComponent(user);
		postdata += "&login2=1";
		postdata += "&magic=1";
		postdata += "&password=asdlkjfasf";
		xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		xmlhttp.setRequestHeader("Content-length", postdata.length);
    xmlhttp.send(postdata);

		xmlhttpinuse=false;
    if (xmlhttp.responseText == "success") {
			window.location.reload();
		} else {
      alert("sorry, login failed: "+xmlhttp.responseText);
		}
  }
  //return true;
  return false;
}

function xorStrings (string1, string2) {
	if (string1.length != string2.length) {
		alert("String size mismatch");
		return;
	}
	var i;
	var string3 = "";
	for (i = 0; i < string1.length; i++) {
		string3 += String.fromCharCode(string1.charCodeAt(1)^string2.charCodeAt(i));
alert("string3: " + string3);
	}
	return string3;
}

function xorHexStrings (string1, string2) {
	if (string1.length != string2.length) {
		alert("String size mismatch");
		return;
	}
/*
	this code actually works with nibbles
	if (string1.length % 2 != 0) {
		alert("String size not even");
		return;
	}
*/
	var i;
	var outputstring = "";
	for (i=0;i< string1.length; i++) {
		//var xorvalue = (parseInt(string1[i],16) ^ parseInt(string2[i],16) ) % 0xF;
		var xorvalue = (parseInt(string1.substring(i,i+1),16) ^ parseInt(string2.substring(i,i+1),16) ) & 0xF;
		outputstring += xorvalue.toString(16);
	}
	return outputstring;
}

function sendFormNewHash () {
  if (! document.getElementById) return false; //TODO alert
  var loginform = document.getElementById('changepasswordform');
  if (! loginform) return false; //TODO alert
  //if (! loginform.password || ! loginform.username || ! loginform.newpassword1 || ! loginform.newpassword2 ) {
  if (! loginform.password || ! loginform.userid || ! loginform.newpassword1 || ! loginform.newpassword2 ) {
    alert("stuff missin");
    return false;
  }
	if ((loginform.newpassword1.value.length < 4) || (loginform.newpassword2.value.length < 4) || (loginform.password.value.length < 1)) {
		alert ("password not long enough");
		return false;
	}

	if (loginform.newpassword1.value != loginform.newpassword2.value) {
		alert ("new passwords don't match ");
		return false;
	}
  var pass = loginform.password.value;
  var newpass = loginform.newpassword1.value;
  //var user = loginform.username.value;
  var userid = loginform.userid.value;
  if (xmlhttp) {
		if (xmlhttpinuse) {
			return false;
		}
		xmlhttpinuse=true;

    //xmlhttp.open("GET", "salt.php?newsalt&user="+user,false);
    xmlhttp.open("GET", "salt.php?newsalt&userid="+userid,false);
    xmlhttp.send(null);
    if (xmlhttp.responseText.length < 4) {
      alert("sorry, user not found");
      loginform.password.value = "";  // dont send clear-text password!
      var wtf;
      wtf = 2+3;
      if (wtf == 5) {
				return false;
				xmlhttpinuse=false;
			}
    }
    var j = new Array();
    j = xmlhttp.responseText.split(' ');
    var salt = j[0];
    var timestamp = j[1];
    var newsalt = j[2];
    var oldhash1 = hex_sha1(salt+pass);
    var oldhash2 = hex_sha1(timestamp+oldhash1);
    var newhash = hex_sha1(newsalt+newpass);
    loginform.password.value = "";  // dont send clear-text password!
    loginform.newpassword1.value = "";  // dont send clear-text password!
    loginform.newpassword2.value = "";  // dont send clear-text password!
//    loginform.hash.value = oldhash2;  // send hash
//    loginform.xorhash.value = xorHexStrings(newhash, oldhash1);
//    loginform.hasholdhashnewhashnewsalt.value = hex_sha1(oldhash1+newhash+newsalt);
//    loginform.newsalt.value = newsalt;  // send new salt
//    loginform.timestamp.value = timestamp;  // show server the timestamp

    xmlhttp.open("GET", "changepassword.php?userid="+userid+"&hash="+oldhash2+"&xorhash="+xorHexStrings(newhash, oldhash1)+"&hasholdhashnewhashnewsalt="+hex_sha1(oldhash1+newhash+newsalt)+"&newsalt="+newsalt+"&timestamp="+timestamp,false);
    xmlhttp.send(null);
    alert(xmlhttp.responseText);
		if (xmlhttp.responseText == "password updated") {
			window.location.replace("settings.php");
		}

		xmlhttpinuse=false;
  }
  return false;
}


function xcShowLoginDiv () {
  if (!document.getElementById) return true;
  var notloge = document.getElementById("NotLoggedInDiv");
  var logboxe = document.getElementById("LoginBox");
  var xcusere = document.getElementById("user");
  if (!notloge || !logboxe || ! xcusere) return true;
  notloge.style.display = 'none';
  logboxe.style.display = 'block';
  xcusere.focus();
  return false;
}


function maintenancealert () {
	alert("Sorry, we are currently performing maintenance on the website.  Please try again later.");
	return false;
}




//below is a sha1 algorithm in javascript
/*
 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
 * in FIPS PUB 180-1
 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
 * Distributed under the BSD License
 * See http://pajhome.org.uk/crypt/md5 for details.
 */

/*
 * Configurable variables. You may need to tweak these to be compatible with
 * the server-side, but the defaults work in most cases.
 */
var hexcase = 0;  /* hex output format. 0 - lowercase; 1 - uppercase        */
var b64pad  = ""; /* base-64 pad character. "=" for strict RFC compliance   */
var chrsz   = 8;  /* bits per input character. 8 - ASCII; 16 - Unicode      */

/*
 * These are the functions you'll usually want to call
 * They take string arguments and return either hex or base-64 encoded strings
 */
function hex_sha1(s){return binb2hex(core_sha1(str2binb(s),s.length * chrsz));}
function b64_sha1(s){return binb2b64(core_sha1(str2binb(s),s.length * chrsz));}
function str_sha1(s){return binb2str(core_sha1(str2binb(s),s.length * chrsz));}
function hex_hmac_sha1(key, data){ return binb2hex(core_hmac_sha1(key, data));}
function b64_hmac_sha1(key, data){ return binb2b64(core_hmac_sha1(key, data));}
function str_hmac_sha1(key, data){ return binb2str(core_hmac_sha1(key, data));}

/*
 * Perform a simple self-test to see if the VM is working
 */
function sha1_vm_test()
{
  return hex_sha1("abc") == "a9993e364706816aba3e25717850c26c9cd0d89d";
}

/*
 * Calculate the SHA-1 of an array of big-endian words, and a bit length
 */
function core_sha1(x, len)
{
  /* append padding */
  x[len >> 5] |= 0x80 << (24 - len % 32);
  x[((len + 64 >> 9) << 4) + 15] = len;

  var w = Array(80);
  var a =  1732584193;
  var b = -271733879;
  var c = -1732584194;
  var d =  271733878;
  var e = -1009589776;

  for(var i = 0; i < x.length; i += 16)
  {
    var olda = a;
    var oldb = b;
    var oldc = c;
    var oldd = d;
    var olde = e;

    for(var j = 0; j < 80; j++)
    {
      if(j < 16) w[j] = x[i + j];
      else w[j] = rol(w[j-3] ^ w[j-8] ^ w[j-14] ^ w[j-16], 1);
      var t = safe_add(safe_add(rol(a, 5), sha1_ft(j, b, c, d)),
                       safe_add(safe_add(e, w[j]), sha1_kt(j)));
      e = d;
      d = c;
      c = rol(b, 30);
      b = a;
      a = t;
    }

    a = safe_add(a, olda);
    b = safe_add(b, oldb);
    c = safe_add(c, oldc);
    d = safe_add(d, oldd);
    e = safe_add(e, olde);
  }
  return Array(a, b, c, d, e);

}

/*
 * Perform the appropriate triplet combination function for the current
 * iteration
 */
function sha1_ft(t, b, c, d)
{
  if(t < 20) return (b & c) | ((~b) & d);
  if(t < 40) return b ^ c ^ d;
  if(t < 60) return (b & c) | (b & d) | (c & d);
  return b ^ c ^ d;
}

/*
 * Determine the appropriate additive constant for the current iteration
 */
function sha1_kt(t)
{
  return (t < 20) ?  1518500249 : (t < 40) ?  1859775393 :
         (t < 60) ? -1894007588 : -899497514;
}

/*
 * Calculate the HMAC-SHA1 of a key and some data
 */
function core_hmac_sha1(key, data)
{
  var bkey = str2binb(key);
  if(bkey.length > 16) bkey = core_sha1(bkey, key.length * chrsz);

  var ipad = Array(16), opad = Array(16);
  for(var i = 0; i < 16; i++)
  {
    ipad[i] = bkey[i] ^ 0x36363636;
    opad[i] = bkey[i] ^ 0x5C5C5C5C;
  }

  var hash = core_sha1(ipad.concat(str2binb(data)), 512 + data.length * chrsz);
  return core_sha1(opad.concat(hash), 512 + 160);
}

/*
 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
 * to work around bugs in some JS interpreters.
 */
function safe_add(x, y)
{
  var lsw = (x & 0xFFFF) + (y & 0xFFFF);
  var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
  return (msw << 16) | (lsw & 0xFFFF);
}

/*
 * Bitwise rotate a 32-bit number to the left.
 */
function rol(num, cnt)
{
  return (num << cnt) | (num >>> (32 - cnt));
}

/*
 * Convert an 8-bit or 16-bit string to an array of big-endian words
 * In 8-bit function, characters >255 have their hi-byte silently ignored.
 */
function str2binb(str)
{
  var bin = Array();
  var mask = (1 << chrsz) - 1;
  for(var i = 0; i < str.length * chrsz; i += chrsz)
    bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (32 - chrsz - i%32);
  return bin;
}

/*
 * Convert an array of big-endian words to a string
 */
function binb2str(bin)
{
  var str = "";
  var mask = (1 << chrsz) - 1;
  for(var i = 0; i < bin.length * 32; i += chrsz)
    str += String.fromCharCode((bin[i>>5] >>> (32 - chrsz - i%32)) & mask);
  return str;
}

/*
 * Convert an array of big-endian words to a hex string.
 */
function binb2hex(binarray)
{
  var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
  var str = "";
  for(var i = 0; i < binarray.length * 4; i++)
  {
    str += hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8+4)) & 0xF) +
           hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8  )) & 0xF);
  }
  return str;
}

/*
 * Convert an array of big-endian words to a base-64 string
 */
function binb2b64(binarray)
{
  var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
  var str = "";
  for(var i = 0; i < binarray.length * 4; i += 3)
  {
    var triplet = (((binarray[i   >> 2] >> 8 * (3 -  i   %4)) & 0xFF) << 16)
                | (((binarray[i+1 >> 2] >> 8 * (3 - (i+1)%4)) & 0xFF) << 8 )
                |  ((binarray[i+2 >> 2] >> 8 * (3 - (i+2)%4)) & 0xFF);
    for(var j = 0; j < 4; j++)
    {
      if(i * 8 + j * 6 > binarray.length * 32) str += b64pad;
      else str += tab.charAt((triplet >> 6*(3-j)) & 0x3F);
    }
  }
  return str;
}


var myField=null;

function updatemyField(value) {
  myField = value;
//alert(value);
}

//TODO actually use  this...  ?
function insertAtCursor(myValue) {
  if (myField==null) return;
  //IE support
  if (document.selection) {
    myField.focus();
    sel = document.selection.createRange();
    sel.text = myValue;
  }
  //MOZILLA support
// alert("" + myField.selectionStart);
  else if (myField.selectionStart || myField.selectionStart == '0') {
    var startPos = myField.selectionStart;
    var endPos = myField.selectionEnd;
    myField.value = myField.value.substring(0, startPos) + myValue +
     myField.value.substring(endPos, myField.value.length);
  } else {  //not IE or Mozilla?
    ///uh... no TODO
    myField.value += myValue;
  }
}


function findrateclass() {
	var divs = document.getElementsByTagName("div");
	for (var i=0;i<divs.length;i++) {
		var classtype = divs[i].className;
		if (classtype == "rate") {
	//		var stars = divs[i].getElementsByClassName("star");
			var stars = getElementsByClassNameTagName("star", "img", divs[i]);
			var j;
			for (j=0;j<stars.length;j++) {
				stars[j].onclick=starclick;
				stars[j].onmouseover=starover;
				stars[j].onmouseout=starout;
			}
			//TODO check to see if ratevalue is already set
			divs[i].ratevalue= divs[i].getAttribute('ratevalue');
			divs[i].restaurantid= divs[i].getAttribute('restaurantid');
			//TODO XXX I'm not sure if it's XHTML compatible to just make up my own attributes
			//We should look into that.
		}
	}

	var spans = getElementsByClassNameTagName("averagerate", "span" );
	for (var i=0;i<spans.length;i++) {
		spans[i].restaurantid= spans[i].getAttribute('restaurantid');
	}

	var spans = getElementsByClassNameTagName("ratecount", "span" );
	for (var i=0;i<spans.length;i++) {
		spans[i].restaurantid= spans[i].getAttribute('restaurantid');
	}

	var spans = getElementsByClassNameTagName("myrate", "span" );
	for (var i=0;i<spans.length;i++) {
		spans[i].restaurantid= spans[i].getAttribute('restaurantid');
	}

}

function findshowreplyclass() {
	var elements = document.getElementsByTagName("a");
	for (var i=0;i<elements.length;i++) {
		var classtype = elements[i].className;
		if (classtype == "showreply") {
			var replyid = elements[i].id.substring(9);
			elements[i].replyid = replyid;
			elements[i].onclick=showreplyclick;
			var replyul = document.getElementById("replyul"+replyid);
			replyul.hidden = true;
			replyul.style.display="none";


		} else if (classtype == "replybutton") {
			var replyid = elements[i].id.substring(11);
			elements[i].replyid = replyid;
			elements[i].onclick=replybuttonclick;

			var replyeditsavebutton = document.getElementById("replyeditsave"+replyid);
			replyeditsavebutton.onclick = replyeditsaveclick;
			//replyeditsavebutton.onclick = showreplyclick;
			replyeditsavebutton.replyid = replyid;

		} else if (classtype == "replyeditbutton") {
			var replyid = elements[i].id.substring(15);
			elements[i].replyid = replyid;
			//elements[i].onclick=replyeditbuttonclick;
			elements[i].onclick=replyeditbuttonclick;
		}
	}
}

function findpicturesubjecteditbutton() {
	var elements = document.getElementsByTagName("a");
	for (var i=0;i<elements.length;i++) {
		var classtype = elements[i].className;
		if (classtype == "picturesubjecteditbutton") {
			var pictureid = elements[i].id.substring(24);
			elements[i].pictureid = pictureid;
			elements[i].onclick=picturesubjecteditbuttonclick;
			var picturesubjecttexteditsave = document.getElementById("picturesubjecttexteditsave"+pictureid);
			picturesubjecttexteditsave.onclick = picturesubjecttexteditsaveclick;
			var picturesubjecttexteditcancel = document.getElementById("picturesubjecttexteditcancel"+pictureid);
			picturesubjecttexteditcancel.onclick = picturesubjecttexteditcancelclick;
			picturesubjecttexteditcancel.pictureid = pictureid;
			picturesubjecttexteditsave.pictureid = pictureid;
		} 
	}
}

function findwhatevereditbutton(whatever) {
	var elements = document.getElementsByTagName("a");
	for (var i=0; i<elements.length; i++) {
		var classtype = elements[i].className;
		if (classtype == whatever+"editbutton") {
			var whateverid = elements[i].id.substring((whatever+"editbutton").length);
			elements[i].whateverid = whateverid;
			elements[i].whatevername = whatever;
			elements[i].onclick= whatevereditbuttonclick;
			var whatevertexteditsave = document.getElementById(whatever+"texteditsave"+whateverid);
			whatevertexteditsave.onclick = whatevertexteditsaveclick;
			var whatevertexteditcancel = document.getElementById(whatever+"texteditcancel"+whateverid);
			whatevertexteditcancel.onclick = whatevertexteditcancelclick;
			whatevertexteditcancel.whateverid = whateverid;
			whatevertexteditsave.whateverid = whateverid;
			whatevertexteditcancel.whatevername = whatever;
			whatevertexteditsave.whatevername = whatever;
		}
	}
}

function logoutclicked(cookie) {
  if (! document.getElementById) return false;
  if (xmlhttp) {
		if (xmlhttpinuse) return false;
		xmlhttpinuse=true;
    xmlhttp.open("POST", "logout.php", false);
		var postdata = "";
		postdata += "cookie=" + encodeURIComponent(cookie);
		postdata += "&magic=1";
		xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		xmlhttp.setRequestHeader("Content-length", postdata.length);
    xmlhttp.send(postdata);

		xmlhttpinuse=false;
    if (xmlhttp.responseText == "success") {
			window.location.reload();
		} else {
      alert("sorry, logout failed: "+xmlhttp.responseText);
		}
	}
	return false;
}
function picturesubjecttexteditcancelclick() {
	var pictureid = this.pictureid;
	var picturesubject = document.getElementById("picturesubject"+pictureid);
	picturesubject.style.display="inline";
	var picturesubjecteditbutton = document.getElementById("picturesubjecteditbutton"+pictureid);
	picturesubjecteditbutton.style.display="inline";
	var picturesubjectedit = document.getElementById("picturesubjectedit"+pictureid);
	picturesubjectedit.style.display="none";
	var picturesubjecttextedit = document.getElementById("picturesubjecttextedit"+pictureid);
	picturesubjecttextedit.value = picturesubject.textContent;
	return false;
}

function whatevertexteditcancelclick() {
	var whateverid = this.whateverid;
	var whatever = this.whatevername;
	var whatevercontent = document.getElementById(whatever+"content"+whateverid);
	whatevercontent.style.display="inline";
	var whatevereditbutton = document.getElementById(whatever+"editbutton"+whateverid);
	whatevereditbutton.style.display="inline";
	var whateveredit = document.getElementById(whatever+"edit"+whateverid);
	whateveredit.style.display="none";
	var whatevertextedit = document.getElementById(whatever+"textedit"+whateverid);
	whatevertextedit.value = whatevercontent.textContent;
	return false;
}

function picturesubjecttexteditsaveclick() {
	var pictureid = this.pictureid;
  if (xmlhttp) {
		if (xmlhttpinuse) return false;
		xmlhttpinuse=true;
    xmlhttp.open("POST", "editpicture.php");
		xmlhttp.onreadystatechange = function() {
			if (xmlhttp.readyState != 4) {
				return;
			}
			//document.getElementById("replybody"+replyid).innerHTML = xmlhttp.responseText;
			var xmlDoc=xmlhttp.responseXML.documentElement;
			if (xmlDoc.getElementsByTagName("picturesubject")[0].childNodes.length > 0) {
				document.getElementById("picturesubject"+pictureid).innerHTML = xmlDoc.getElementsByTagName("picturesubject")[0].childNodes[0].nodeValue;
			} else {
				document.getElementById("picturesubject"+pictureid).innerHTML = "";
			}
			//document.getElementById("picturesubject"+pictureid).innerHTML = xmlDoc.getElementsByTagName("picturesubject")[0].childNodes[0].nodeValue;
			
			xmlhttpinuse=false;
			document.getElementById("picturesubjecttexteditsave"+pictureid).disabled=false;
			document.getElementById("picturesubjecttextedit"+pictureid).disabled=false;
			var picturesubjecttexteditcancel = document.getElementById("picturesubjecttexteditcancel"+pictureid);
			picturesubjecttexteditcancel.disabled=false;
			picturesubjecttexteditcancel.onclick();
		};
		var picturesubjecttexteditcc = document.getElementById("picturesubjecttexteditcc"+pictureid);
		var picturesubjecttextedit = document.getElementById("picturesubjecttextedit"+pictureid);
		var postdata = "";
		postdata += "subject=" + encodeURIComponent(picturesubjecttextedit.value);
		postdata += "&id=" + encodeURIComponent(pictureid);
		postdata += "&cc=" + encodeURIComponent(picturesubjecttexteditcc.value);
		xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		xmlhttp.setRequestHeader("Content-length", postdata.length);
		//xmlhttp.setRequestHeader("Connection", "close");
    xmlhttp.send(postdata);
		this.disabled=true;
		var picturesubjecttexteditcancel = document.getElementById("picturesubjecttexteditcancel"+pictureid);
		picturesubjecttexteditcancel.disabled=true;
		picturesubjecttextedit.disabled=true;
		return false;
	} else {
		//TODO stuff
	}
}

function whatevertexteditsaveclick() {
	var whateverid = this.whateverid;
	var whatever = this.whatevername;
  if (xmlhttp) {
		if (xmlhttpinuse) return false;
		xmlhttpinuse=true;
    xmlhttp.open("POST", "editwhatever.php");
		xmlhttp.onreadystatechange = function() {
			if (xmlhttp.readyState != 4) {
				return;
			}
			//document.getElementById("replybody"+replyid).innerHTML = xmlhttp.responseText;
			var xmlDoc=xmlhttp.responseXML.documentElement;
			if (xmlDoc.getElementsByTagName(whatever)[0].childNodes.length > 0) {
				document.getElementById(whatever+"content"+whateverid).innerHTML = xmlDoc.getElementsByTagName(whatever)[0].childNodes[0].nodeValue;
			} else {
				document.getElementById(whatever+"content"+whateverid).innerHTML = "";
			}
			
			xmlhttpinuse=false;
			document.getElementById(whatever+"texteditsave"+whateverid).disabled=false;
			document.getElementById(whatever+"textedit"+whateverid).disabled=false;
			var whatevertexteditcancel = document.getElementById(whatever+"texteditcancel"+whateverid);
			whatevertexteditcancel.disabled=false;
			whatevertexteditcancel.onclick();
		};
		var whatevertexteditcc = document.getElementById(whatever+"texteditcc"+whateverid);
		var whatevertextedit = document.getElementById(whatever+"textedit"+whateverid);
		var postdata = "";
		postdata += "content=" + encodeURIComponent(whatevertextedit.value);
		postdata += "&id=" + encodeURIComponent(whateverid);
		postdata += "&cc=" + encodeURIComponent(whatevertexteditcc.value);
		postdata += "&whatevername=" + encodeURIComponent(whatever);
		xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		xmlhttp.setRequestHeader("Content-length", postdata.length);
		//xmlhttp.setRequestHeader("Connection", "close");
    xmlhttp.send(postdata);
		this.disabled=true;
		var whatevertexteditcancel = document.getElementById(whatever+"texteditcancel"+whateverid);
		whatevertexteditcancel.disabled=true;
		whatevertextedit.disabled=true;
		return false;
	} else {
		//TODO stuff
	}
}

function picturesubjecteditbuttonclick() {
	var pictureid = this.pictureid;
	var picturesubject = document.getElementById("picturesubject"+pictureid);
	picturesubject.style.display="none";
	var picturesubjecteditbutton = document.getElementById("picturesubjecteditbutton"+pictureid);
	picturesubjecteditbutton.style.display="none";
	var picturesubjectedit = document.getElementById("picturesubjectedit"+pictureid);
	picturesubjectedit.style.display="block";
	var picturesubjecttextedit = document.getElementById("picturesubjecttextedit"+pictureid);
	picturesubjecttextedit.value = picturesubject.textContent;
	return false;
}

function whatevereditbuttonclick() {
	var whateverid = this.whateverid;
	var whatever = this.whatevername;
	var whatevercontent = document.getElementById(whatever+"content"+whateverid);
	whatevercontent.style.display="none";
	var whatevereditbutton = document.getElementById(whatever+"editbutton"+whateverid);
	whatevereditbutton.style.display="none";
	var whateveredit = document.getElementById(whatever+"edit"+whateverid);
	whateveredit.style.display="block";
	var whatevertextedit = document.getElementById(whatever+"textedit"+whateverid);
	whatevertextedit.value = whatevercontent.textContent;
	return false;
}

function showreplyclick() {
	var replyid = this.replyid;
	var replyul = document.getElementById("replyul"+replyid);
	if (replyul.hidden) {
		replyul.style.display="block";
		replyul.hidden=false;
	} else {
		replyul.style.display="none";
		replyul.hidden=true;
	}
	return false;
}

function replybuttonclick() {
	var replyid = this.replyid;
	var replyul = document.getElementById("doreplyul"+replyid);
	if (replyul.hidden == undefined) {
		replyul.hidden=true;
	}
	if (replyul.hidden == true) {
		replyul.style.display="block";
		replyul.hidden=false;
	} else {
		replyul.style.display="none";
		replyul.hidden=true;
	}
	return false;
}

function replyeditbuttonclick() {
	var replyid = this.replyid;
	var replytable = document.getElementById("replytable"+replyid);
	var replyeditdiv = document.getElementById("replyeditdiv"+replyid);
	if (replyeditdiv.hidden == undefined) {
		replyeditdiv.hidden=true;
	}
	if (replyeditdiv.hidden == true) {
		replytable.style.display="none";
		replyeditdiv.style.display="block";
		replyeditdiv.hidden=false;
	} else {
		replytable.style.display="block";
		replyeditdiv.style.display="none";
		replyeditdiv.hidden=true;
	}
	return false;
}

//JACOB

function replyeditsaveclick() {
	var replyid = this.replyid;
	var replyeditbutton = document.getElementById("replyeditbutton"+replyid);
  if (xmlhttp) {
		if (xmlhttpinuse) return false;
		xmlhttpinuse=true;
		var replysaveform = document.getElementById("replysaveform"+replyid);
    xmlhttp.open("POST", "postreply.php");
		xmlhttp.onreadystatechange = function() {
			if (xmlhttp.readyState != 4) {
				return;
			}
			//document.getElementById("replybody"+replyid).innerHTML = xmlhttp.responseText;
			var xmlDoc=xmlhttp.responseXML.documentElement;
			if (xmlDoc.getElementsByTagName("replybody")[0].childNodes.length > 0) {
				document.getElementById("replybody"+replyid).innerHTML = xmlDoc.getElementsByTagName("replybody")[0].childNodes[0].nodeValue;
			} else {
				document.getElementById("replybody"+replyid).innerHTML = "";
			}
			if (xmlDoc.getElementsByTagName("replysubject")[0].childNodes.length > 0) {
				document.getElementById("replysubject"+replyid).innerHTML = xmlDoc.getElementsByTagName("replysubject")[0].childNodes[0].nodeValue;
			} else {
				document.getElementById("replysubject"+replyid).innerHTML = "";
			}
			document.getElementById("replylastmodifiedspan"+replyid).innerHTML = xmlDoc.getElementsByTagName("replylastmodifiedspan")[0].childNodes[0].nodeValue;
			
			xmlhttpinuse=false;
			var replyeditbutton = document.getElementById("replyeditbutton"+replyid);
			document.getElementById("replyeditsave"+replyid).disabled=false;
			replyeditbutton.onclick();
		};
		var postdata = "";
		postdata += "subject=" + encodeURIComponent(replysaveform.subject.value);
		postdata += "&body=" + encodeURIComponent(replysaveform.body.value);
		postdata += "&editreply2=" + encodeURIComponent(replysaveform.editreply2.value);
		postdata += "&cc=" + encodeURIComponent(replysaveform.cc.value);
		xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		xmlhttp.setRequestHeader("Content-length", postdata.length);
		//xmlhttp.setRequestHeader("Connection", "close");
    xmlhttp.send(postdata);
		this.disabled=true;
		return false;
	} else {
		//TODO go to the restaurant.php page for the restaurant and save it there
	}
}

//TODO XXX TODO XXX
function asdfasdfasdf() {
	var replyeditbutton = document.getElementById("replyeditbutton"+replyid);
	replyeditbutton.onclick();
	return false;
}

function starclick() {
	var stars = getElementsByClassNameTagName("star", "img", this.parentNode);
	var selectedstar = 0;
	var j;
	for (j=0;j<stars.length;j++) {
		if (stars[j].mouseisover==true) {
			if (selectedstar < stars[j].name) {
				selectedstar = stars[j].name;
			}
		}
	}
  if (xmlhttp) {
		if (xmlhttpinuse) return false;
		xmlhttpinuse=true;
		var postdata = "restaurantid="+this.parentNode.restaurantid+"&ratevalue="+selectedstar*2;
		xmlhttp.open("POST", "setrestaurant.php");
		xmlhttp.onreadystatechange = ratesetstatechange;
		xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		xmlhttp.setRequestHeader("Content-length", postdata.length);
//		xmlhttp.setRequestHeader("Connection", "close");
		xmlhttp.send(postdata);
	} else {
		//TODO go to the restaurant.php page for the restaurant and save it there
	}
}

function ratesetstatechange() {
	if (xmlhttp.readyState != 4) {
		return;
	}
	//alert("ratesetstatechange()\nreadystate: "+xmlhttp.readyState+"\nstatus: "+xmlhttp.status+"\nstatusText: "+xmlhttp.statusText+"\nresponseText: \n"+xmlhttp.responseText);
	var whitespace = /\s+/;
	if (!whitespace.test(xmlhttp.responseText)) return false;
	var returnvalues = xmlhttp.responseText.split(whitespace);
	xmlhttpinuse=false;
	if (returnvalues[0] != "done") {
		alert (xmlhttp.responseText);
		return false;
	}
	var elements = getElementsByClassNameTagName("averagerate", "span" );
	for (var i=0;i<elements.length;i++) {
		if (elements[i].restaurantid == returnvalues[1]) {
			elements[i].textContent = returnvalues[2];
		}
	}

	var elements = getElementsByClassNameTagName("ratecount", "span" );
	for (var i=0;i<elements.length;i++) {
		if (elements[i].restaurantid == returnvalues[1]) {
			elements[i].textContent = returnvalues[4];
		}
	}

	var elements = getElementsByClassNameTagName("rate", "div" );
	for (var i=0;i<elements.length;i++) {
		if (elements[i].restaurantid == returnvalues[1]) {
			elements[i].ratevalue = returnvalues[2];
			drawstars(elements[i]);
		}
	}


	var elements = getElementsByClassNameTagName("myrate", "span" );
	for (var i=0;i<elements.length;i++) {
		if (elements[i].restaurantid == returnvalues[1]) {
			elements[i].textContent = returnvalues[3];
		}
	}
}

function starover() {
	this.mouseisover=true;
	drawstars(this.parentNode);
}

function starout() {
	this.mouseisover=false;
	drawstars(this.parentNode);
}

function drawstars(div) {
	//var stars = div.getElementsByClassName("star");
	var stars = getElementsByClassNameTagName("star", "img", div);
	var selectedstar = 0;
	var j;
	for (j=0;j<stars.length;j++) {
		if (stars[j].mouseisover==true) {
			if (selectedstar < stars[j].name) {
				selectedstar = stars[j].name;
			}
		}
	}
	if (selectedstar ==0) { //mouse isn't over any of the stars
		selectedstar = div.ratevalue;
	}
	if (selectedstar < 1) { //just draw empty carrots for now
	}
	if (selectedstar < 1) {
		getElementByNameTagName("1", "img", div).src= "images/carrot3.png";
	} else {
		getElementByNameTagName("1", "img", div).src= "images/carrot1.png";
	}

	if (selectedstar < 1.5) {
		getElementByNameTagName("2", "img", div).src= "images/carrot3.png";
	} else if (selectedstar < 2) {
		getElementByNameTagName("2", "img", div).src= "images/carrot2.png";
	} else {
		getElementByNameTagName("2", "img", div).src= "images/carrot1.png";
	}

	if (selectedstar < 2.5) {
		getElementByNameTagName("3", "img", div).src= "images/carrot3.png";
	} else if (selectedstar < 3) {
		getElementByNameTagName("3", "img", div).src= "images/carrot2.png";
	} else {
		getElementByNameTagName("3", "img", div).src= "images/carrot1.png";
	}

	if (selectedstar < 3.5) {
		getElementByNameTagName("4", "img", div).src= "images/carrot3.png";
	} else if (selectedstar < 4) {
		getElementByNameTagName("4", "img", div).src= "images/carrot2.png";
	} else {
		getElementByNameTagName("4", "img", div).src= "images/carrot1.png";
	}

	if (selectedstar < 4.5) {
		getElementByNameTagName("5", "img", div).src= "images/carrot3.png";
	} else if (selectedstar < 5) {
		getElementByNameTagName("5", "img", div).src= "images/carrot2.png";
	} else {
		getElementByNameTagName("5", "img", div).src= "images/carrot1.png";
	}

}

function getElementsByClassNameTagName(classname, tagname, root) {
	if (!root) {
		root = document;
	} else if (typeof(root) == "string") {
		root = document.getElementById(root);
	}
	if (!tagname) tagname = "*";
	var all = root.getElementsByTagName(tagname);
	if (!classname) return all;
	var elements = [];
	for (var i=0; i< all.length; i++) {
		var element = all[i];
		if (isMember(element, classname)) {
			elements.push(element);
		}
	}
	return elements;
	function isMember(element, classname) {
		var classes = element.className;
		if (!classes) {
			return false;
		}
		if (classes == classname) {
			return true;
		}
		var whitespace = /\s+/;
		if (!whitespace.test(classes)) return false;
		var c = classes.split(whitespace);
		for (var i=0; i<c.length; i++) {
			if (c[i] == classname) {
				return true;
			}
		}
		return false;
	}
}

function getElementByNameTagName(name, tagname, root) {
	if (!root) {
		root = document;
	} else if (typeof(root) == "string") {
		root = document.getElementById(root);
	}
	if (!tagname) tagname = "*";
	var all = root.getElementsByTagName(tagname);
	if (!name) { //name is required for this function
		return false;
	}
	for (var i=0; i< all.length; i++) {
		if (all[i].name == name) {
			return all[i];
		}
	}
}

function showCommentBox() {
	var commentspan = document.getElementById("commentspan");
	commentspan.style.display="block";
	return false;
}

function mapsLoaded() {
 // var map = new google.maps.Map2(document.getElementById("restaurantmap1"));
	//map.setCenter(new google.maps.LatLng(30.3102240, -97.7522670), 13);
	showthebigmap();
}


function loadMaps() {
	//google.load("maps", "2", {"callback" : mapsLoaded});
	//google.load("maps", "3", {"callback" : mapsLoaded});
	//google.load("maps", "3", {"callback" : mapsLoaded, other_params: "sensor=false"});
	google.load("maps", "3",  {other_params:"sensor=false", "callback" : mapsLoaded});

}

function initLoader() {
  var script = document.createElement("script");
  script.src = "http://www.google.com/jsapi?key=ABQIAAAA_RorFW2mHqW1B3UPA7T18BRO4LVn-T2nif2tKKx_oZFmuTbLnxSYeg3--8NZjNfD_MGraE7llg8S-g&callback=loadMaps";
  script.type = "text/javascript";
  document.getElementsByTagName("head")[0].appendChild(script);

}


function findmaps() {
	var mapdivs = getElementsByClassNameTagName("showhiderestaurantmap","a");
	for (var i=0;i<mapdivs.length;i++) {
		var restaurantmapid = mapdivs[i].id.substring(21);
		mapdivs[i].restaurantmapid = restaurantmapid;
		mapdivs[i].onclick = showrestaurantmap;
	}
}

function showrestaurantmap() {
	if ((typeof google=='undefined') || (!google.maps) || (!google.maps.Map)) {
		return false;
	}
	var restaurantmapid = this.restaurantmapid;
	var restaurantmap = document.getElementById("restaurantmap"+restaurantmapid);
	var showhiderestaurantmap = document.getElementById("showhiderestaurantmap"+restaurantmapid);
	if (restaurantmap.style.display == "none" ) {
		showhiderestaurantmap.textContent = "hide map";
		restaurantmap.style.display="block";
		if (!restaurantmap.map) {
			//restaurantmap.map = new google.maps.Map(document.getElementById("restaurantmap"+restaurantmapid));
			//restaurantmap.map.setUIToDefault();
			restaurantmap.map = new google.maps.Map(document.getElementById("restaurantmap"+restaurantmapid)
, {
				//center: new google.maps.LatLng(centerx, centery), 
				zoom: 12,
				scaleControl: true,
				zoomControlOptions: { style:  google.maps.ZoomControlStyle.LARGE } , 
				mapTypeId: google.maps.MapTypeId.ROADMAP
			});

		{
			var centerx = 30.310240;
			var centery = -97.752670;
			if (restaurantmap.getAttribute('data-centerx')) {
				centerx = restaurantmap.getAttribute('data-centerx');
			}
			if (restaurantmap.getAttribute('data-centery')) {
				centery = restaurantmap.getAttribute('data-centery');
			}
			restaurantmap.map.setCenter(new google.maps.LatLng(centerx, centery), 12);
		}
			var markercount = 0;
			if (restaurantmap.getAttribute('data-markercount')) {
				markercount = restaurantmap.getAttribute('data-markercount');
			}
			var i;
			for (i = 0; i < markercount; i++) {
//				var markerx = restaurantmap.getAttribute('data-markerx'+i);
//alert("ahasdf:" + markerx);
				//var marker = new GMarker(latlng);
				//var latlng = new GLatLng(restaurantmap.getAttribute('data-markerx'+i),restaurantmap.getAttribute('data-markery'+i));
				var latlng = new google.maps.LatLng(restaurantmap.getAttribute('data-markerx'+i),restaurantmap.getAttribute('data-markery'+i));
				var baloon = '';
				if (restaurantmap.getAttribute('data-markerbaloon'+i)) {
					var baloon = restaurantmap.getAttribute('data-markerbaloon'+i);
				}
				function createMarker(latlng,baloon) {
					//var marker = new GMarker(latlng);
					//var marker = new google.maps.Marker (latlng);
					var marker = new google.maps.Marker({position: latlng, title:"" });
					if (baloon.length > 0) {
						//GEvent.addListener(marker,"click", function() {
						google.maps.event.addListener(marker,"click", function() {
							//restaurantmap.map.openInfoWindowHtml(latlng, baloon);
							if (!restaurantmap.infowindow) {
								restaurantmap.infowindow = new google.maps.InfoWindow({
									//maxWidth: 350
								});
							}
							restaurantmap.infowindow.setContent(baloon);
							restaurantmap.infowindow.open(restaurantmap.map, marker);
						});
					}
					marker.setMap(restaurantmap.map);
					return marker;
				}
				//restaurantmap.map.addOverlay(createMarker(latlng,baloon));
				createMarker(latlng, baloon);
			}
		} else {
			var centerx = 30.310240;
			var centery = -97.752670;
			if (restaurantmap.getAttribute('data-centerx')) {
				centerx = restaurantmap.getAttribute('data-centerx');
			}
			if (restaurantmap.getAttribute('data-centery')) {
				centery = restaurantmap.getAttribute('data-centery');
			}
			restaurantmap.map.setCenter(new google.maps.LatLng(centerx, centery), 12);
		}
	} else {
		showhiderestaurantmap.textContent = "show map";
		restaurantmap.style.display="none";
	}
	return false;
}

function showthebigmap() {
	if (! document.getElementById("thebigmap")) {
		return false;
	}
	var thebigmap = document.getElementById("thebigmap");
		if (!thebigmap.map) {
			//thebigmap.map = new google.maps.Map2(thebigmap);
	//		thebigmap.map.setUIToDefault();

		{
			var centerx = 30.310240;
			var centery = -97.752670;
			var zzoom = 12;
			if (thebigmap.getAttribute('data-centerx')) {
				centerx = thebigmap.getAttribute('data-centerx');
			}
			if (thebigmap.getAttribute('data-centery')) {
				centery = thebigmap.getAttribute('data-centery');
			}
			if (thebigmap.getAttribute('data-zoom')) {
				zzoom = thebigmap.getAttribute('data-zoom');
			}
			//thebigmap.map.setCenter(new google.maps.LatLng(centerx, centery), 12);
			//WOOO thebigmap.map.setCenter(new google.maps.LatLng(centerx, centery));
			//WOOO thebigmap.map.setZoom(12);
			thebigmap.map = new google.maps.Map(thebigmap, {
				center: new google.maps.LatLng(centerx, centery), 
				zoom: parseInt(zzoom),
				//overviewMapControlOptions: { opened: true} ,
				//panControl: true,
				scaleControl: true,
				//scaleControlOptions: {
				zoomControlOptions: { style:  google.maps.ZoomControlStyle.LARGE } , 
				mapTypeId: google.maps.MapTypeId.ROADMAP

			});
		}

			var markercount = 0;
			if (thebigmap.getAttribute('data-markercount')) {
				markercount = thebigmap.getAttribute('data-markercount');
			}
			var i;
			for (i = 0; i < markercount; i++) {
//				var markerx = thebigmap.getAttribute('data-markerx'+i);
//alert("ahasdf:" + markerx);
				//var marker = new GMarker(latlng);
				//var latlng = new GLatLng(thebigmap.getAttribute('data-markerx'+i),thebigmap.getAttribute('data-markery'+i));
				var latlng = new google.maps.LatLng(thebigmap.getAttribute('data-markerx'+i),thebigmap.getAttribute('data-markery'+i));
				var baloon = '';
				if (thebigmap.getAttribute('data-markerbaloon'+i)) {
					var baloon = thebigmap.getAttribute('data-markerbaloon'+i);
				}
				function createMarker(latlng,baloon) {
					//var marker = new GMarker(latlng);
					//var marker = new google.maps.Marker({draggable: true, position: latlng});
					var marker = new google.maps.Marker({position: latlng, title:"" });
					//var options = {draggable: true, position: latlng};
					//var options = { position: latlng};
					//var marker = new google.maps.Marker(options);
					if (baloon.length > 0) {
						//GEvent.addListener(marker, "click", function() {
						google.maps.event.addListener(marker, "click", function() {
							//thebigmap.map.openInfoWindowHtml(latlng, baloon);
							if (thebigmap.infowindow) {
								//thebigmap.infowindow.close();
							} else {
								thebigmap.infowindow = new google.maps.InfoWindow();
							}
							//thebigmap.infowindow = new google.maps.InfoWindow({
						//		content: baloon
						//	});
							thebigmap.infowindow.setContent(baloon);
							thebigmap.infowindow.open(thebigmap.map, marker);
						});
					}
					marker.setMap(thebigmap.map);
					return marker;
				}
				//thebigmap.map.addOverlay(createMarker(latlng,baloon));
				createMarker(latlng, baloon);
			}
		} else {
			var centerx = 30.310240;
			var centery = -97.752670;
			var zzoom = 12;
			if (thebigmap.getAttribute('data-centerx')) {
				centerx = thebigmap.getAttribute('data-centerx');
			}
			if (thebigmap.getAttribute('data-centery')) {
				centery = thebigmap.getAttribute('data-centery');
			}
			if (thebigmap.getAttribute('data-zoom')) {
				zzoom = thebigmap.getAttribute('data-zoom');
			}
			thebigmap.map.setCenter(new google.maps.LatLng(centerx, centery), parseInt(zzoom));
		}
	return false;
}

function changepassword2() {
	var hash = document.location.hash;
	if (hash.substring(0,1) == '#') {
		hash = hash.substring(1);
	}
	hash = unescape(hash);
  var loginform = document.getElementById('changepasswordform');
	loginform.password.value = hash;
}
function albumloadcheckanchor() {
//TODO XXX
	var hash = document.location.hash;
	var search = document.location.search;
	if (hash.substring(0,1) == '#') {
		hash = hash.substring(1);
	}
	if (search.substring(0,1) == '?') {
		search = search.substring(1);
	}
	var searches = search.split('&');
	var albumid = 0;
	var i;
	for (i=0;i<searches.length;i++) {
		var blah = searches[i].split('=');
		if ((blah[0] == 'id') || (blah[0] == 'albumid')) {
			albumid = blah[1];
		}
	}
	var blah = hash.split('=');
	if (blah[0] == "albumpage") {
		albumpageload(albumid, blah[1]);
//		alert(""+albumid+":"+ blah[1]);
	}
}

function albumpageclick(albuma) {
  if (xmlhttp) {
		if (xmlhttpinuse) return false;
//		xmlhttpinuse=true;
		var albumid;
		var albumpage;
		if (! albuma) {
			albumid = this.getAttribute('data-albumid');
			albumpage = this.getAttribute('data-albumpage');
		} else {
			albumid = albuma.getAttribute('data-albumid');
			albumpage = albuma.getAttribute('data-albumpage');
		}
		return albumpageload(albumid, albumpage);
	}
	return true;
}

function albumpageload(albumid, albumpage) {
  if (xmlhttp) {
		if (xmlhttpinuse) return false;
		xmlhttpinuse=true;
    xmlhttp.open("GET", "album.php?ajax&id="+albumid+"&page="+albumpage);
		xmlhttp.onreadystatechange = function() {
			if (xmlhttp.readyState != 4) {
				return;
			}
//TODO XXX			document.location.hash="albumpage="+albumpage;
			var xmlDoc=xmlhttp.responseXML.documentElement;
			if (xmlDoc.getElementsByTagName("albumtable")[0].childNodes.length > 0) {
				document.getElementById("albumtable").innerHTML = xmlDoc.getElementsByTagName("albumtable")[0].childNodes[0].nodeValue;
			} else {
				document.getElementById("albumtable"+pictureid).innerHTML = "";
			}

			if (xmlDoc.getElementsByTagName("albumpages")[0].childNodes.length > 0) {
				document.getElementById("albumpages").innerHTML = xmlDoc.getElementsByTagName("albumpages")[0].childNodes[0].nodeValue;
			} else {
				document.getElementById("albumpages").innerHTML = "";
			}
			
			xmlhttpinuse=false;
			//document.location.hash="#albumpage="+albumpage;
		};
    xmlhttp.send(null);
		return false;
	} else {
		//TODO stuff
	}
	return true;
}

function shownewalbum() {
	document.getElementById("newalbuma").style.display= 'none';
	document.getElementById("newalbumform").style.display= 'block';
}

function togglembpostsubscription(mbpostid) {
	var mbsubscriptiona = document.getElementById("mbsubscription");
	var subscribed = false;
	if (-1 == mbsubscriptiona.src.indexOf("subscribe.png")) {
		subscribed = true;
	}
  if (!xmlhttp) {
		return;
	}
	if (xmlhttpinuse) return false;
	xmlhttpinuse=true;
  xmlhttp.open("POST", "subscribe.php");

	xmlhttp.onreadystatechange = function() {
		if (xmlhttp.readyState != 4) {
			return;
		}
		if (xmlhttp.responseText == "done") {
			if (subscribed) {
				mbsubscriptiona.src = "images/subscribe.png";
				mbsubscriptiona.alt = "subscribe";
				mbsubscriptiona.title = 'click her to get email notifications for this thread';
			} else {
				mbsubscriptiona.src = "images/subscribed.png";
				mbsubscriptiona.alt = "unsubscribe";
				mbsubscriptiona.title = 'click her to stop getting email notifications for this thread';
			}
		}
		xmlhttpinuse=false;
		mbsubscriptiona.disabled = false;
	} //function
	var postdata = "";
	postdata += "type=mbpost";
	postdata += "&parentid="+mbpostid;
	if (subscribed) {
		postdata += "&subscribe=0";
	} else {
		postdata += "&subscribe=1";
	}
	xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	xmlhttp.setRequestHeader("Content-length", postdata.length);
  xmlhttp.send(postdata);

	mbsubscriptiona.disabled = true;

}


//need to call this function differently
function embedcodebuttonclick() {
	if (typeof this.pictureid == 'undefined') {
		this.pictureid= this.getAttribute('pictureid');
	}
	var pictureid = this.pictureid;
	var embedcodetext = document.getElementById("embedcodetext"+pictureid);
	if (embedcodetext.style.display == "none" ) {
		embedcodetext.style.display = "block" ;
	} else {
		embedcodetext.style.display = "none" ;
	}
}




