//
//JavaScript file for SpiltCoffee's Site
//http://spiltcoffee.com
//Feel free to use snippets from here
//

//
//Just a few variables to define...
//

var xmlHttp = null;
var xmlIsBeingUsed = false;
var xmlDoc = null;
var pagetoload = null;
var codetoeval = null;
var errorID = null;
var redirect = 4;
var xmlurl = "http://spiltcoffee.com/xml/";
function initiate()
{
	if (window.location.host != "spiltcoffee.com")
	{
		window.location = "http://spiltcoffee.com";	
	}
	if (window.location.search)
	{
		load(window.location.search.substr(3));
		window.location.search="";
	}
	else
	{
		load();
	}
	window.defaultStatus="SpiltCoffee's Site";
	curTime();
}

//
//AJAX ftw!
//This is the main part of the whole javascript file
//

function sendRequest(data)
{
   //Set an execution time limit
   d = new Date();
   errorID = d.getTime();
   setTimeout("timeout("+errorID+")",10000);
   
   if (!data)
   {
	   data = null;
   }
   if(xmlIsBeingUsed==false)
   {
      xmlHttp=GetXmlHttpObject();
      if (xmlHttp==null)
      {
		 document.getElementById('ajaxerror').style.display="inline";
		 document.getElementById('ajaxloading').style.display="none";
         return;
      }
         document.getElementById('ajaxerror').style.display="none";
         document.getElementById('ajaxloading').style.display="inline";
         xmlIsBeingUsed = true;
		 stopredirect();
         xmlHttp.onreadystatechange=stateChanged;
         xmlHttp.open("POST",xmlurl,true);
		 xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
         xmlHttp.send(data);
		 if (xmlHttp==null)
		 {
			 xmlIsBeingUsed = false;
			 document.getElementById('ajaxerror').style.display="inline";
			 document.getElementById('ajaxloading').style.display="none";
			 document.getElementById('errordesc').innerHTML="Cannot use AJAX!";
		 }
   }
} 

function joinnodes(tagname)
{
	var nodedata = "";
	for (i=0;i<xmlDoc.getElementsByTagName(tagname)[0].childNodes.length;i++)
	{
		nodedata += xmlDoc.getElementsByTagName(tagname)[0].childNodes[i].nodeValue;
	}
	
	return nodedata;
}

function stateChanged() 
{ 
	if (xmlHttp.readyState==4)
	{
		if (xmlHttp.status==200 && xmlHttp.responseXML != null)
		{
			xmlDoc=xmlHttp.responseXML.documentElement;
			
			document.getElementById("main").innerHTML = joinnodes("content");
			document.getElementById("navbar").innerHTML = joinnodes("navbar");
			document.getElementById("username").innerHTML = "Welcome, "+xmlDoc.getElementsByTagName("nickname")[0].childNodes[0].nodeValue+"!";
			document.getElementById("ip").innerHTML= xmlDoc.getElementsByTagName("ipaddress")[0].childNodes[0].nodeValue;
			if (xmlDoc.getElementsByTagName("load")[0].childNodes[0].nodeValue != 0)
			{
				pagetoload = xmlDoc.getElementsByTagName("load")[0].childNodes[0].nodeValue;
				redirect = 3;
				loadredirect();	
			}
			if (xmlDoc.getElementsByTagName("code")[0].childNodes[0].nodeValue != 0)
			{
				codetoeval = joinnodes("code");
				eval(codetoeval);
			}
			document.getElementById('ajaxloading').style.display="none";
		}
		else
		{
			document.getElementById('ajaxloading').style.display="none";
			document.getElementById('ajaxerror').style.display="inline";
			document.getElementById('errordesc').innerHTML="Internal Server Error!";
		}
		xmlIsBeingUsed = false;
		xmlHttp = null;
		errorID = 0;
	}
}

function GetXmlHttpObject()
{
var xmlHttp=null;
try
  {
  // Firefox, Opera 8.0+, Safari
  xmlHttp=new XMLHttpRequest();
  }
catch (e)
  {
  // Internet Explorer
  try
    {
    xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
    }
  catch (e)
    {
    xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
  }
return xmlHttp;
}

//
//The next function allows AJAX 10 seconds to request data. 
//Anything longer is generally a failure.
//This will prevent the user sitting there wondering what the fuck is happening
//as- I mean if the script screws up.
//

function timeout(ID)
{
	if (ID == errorID)
	{
		xmlHttp = null;
		xmlIsBeingUsed = false;
		document.getElementById('ajaxerror').style.display="inline";
		document.getElementById('ajaxloading').style.display="none";
		document.getElementById('errordesc').innerHTML="Connection Timeout!";
	}
}

//
//Custom loading functions
//

function load(page)
{
	if (!page)
	{
		page = "home";
	}
	data = "a="+page;
	sendRequest(data);
}

//Go me!

function loadredirect()
{
	if (redirect > 0 && redirect < 4)
	{
		document.getElementById('ajaxredirect').style.display="inline";
		document.getElementById('ajaxerror').style.display="none";
		document.getElementById('ajaxloading').style.display="none";
		document.getElementById('ajaxredirecttime').innerHTML=redirect;
		setTimeout("loadredirect()",1000)
		redirect -= 1;
	}
	else if (pagetoload && !redirect)
	{
		load(pagetoload);
		stopredirect();
	}
}

function stopredirect()
{
	pagetoload = null;
	document.getElementById('ajaxredirect').style.display="none";
	document.getElementById('ajaxredirecttime').innerHTML="0";
	redirect = 5;
}

//
//Various form-reading functions

function login()
{
   data = "login2&u="+document.getElementById("u").value+"&p="+document.getElementById("p").value+"&c="+document.getElementById("c").value;
   load(data);
}

function register()
{
      data = "register2&u=";
      data += document.getElementById("reg_u").value;
      data += "&n=";
      data += document.getElementById("reg_n").value;
      data += "&b1=";
      data += document.getElementById("reg_b1").value;
      data += "&b2=";
      data += document.getElementById("reg_b2").value;
      data += "&b3=";
      data += document.getElementById("reg_b3").value;
      data += "&p1=";
      data += document.getElementById("reg_p1").value;
      data += "&p2=";
      data += document.getElementById("reg_p2").value;
      data += "&e1=";
      data += document.getElementById("reg_e1").value;
      data += "&e2=";
      data += document.getElementById("reg_e2").value;
      data += "&g=";
      data += document.getElementById("reg_g").value;
      data += "&c=";
      data += document.getElementById("reg_c").value;
   load(data);
}

//Heh... long, hey?

function shoutbox()
{
   data = "shoutbox2";
   data += "&c=";
   data += document.getElementById("shout").value;
   load(data);
}

//
//Time Function - It will call itself every second once you start it
//

function GetMonth(intMonth){
   var MonthArray = new Array("January", "February", "March",
                              "April", "May", "June",
                              "July", "August", "September",
                              "October", "November", "December") 
   return MonthArray[intMonth] 	  	 
}
function getDateStr(){
   var today = new Date()
   var todayStr = GetMonth(today.getMonth()) + " " + today.getDate()
   todayStr += ", "
   return todayStr
}

function curTime()
{
  // Copyright 1999, 2000 by Ray Stott
  // OK to use if this copyright is included
  // Script available at http://www.crays.com/jsc
  var TimezoneOffset = 10  // adjust for time zone
  var localTime = new Date()
  var ms = localTime.getTime() 
             + (localTime.getTimezoneOffset() * 60000)
             + TimezoneOffset * 3600000
  var time =  new Date(ms) 
  var hour = time.getHours() 
  var minute = time.getMinutes()
  var second = time.getSeconds()
  var curTime = "" + ((hour > 12) ? hour - 12 : hour)
  if(hour==0) curTime = "12"
  curTime += ((minute < 10) ? ":0" : ":") + minute
  curTime += ((second < 10) ? ":0" : ":") + second
  curTime += (hour >= 12) ? " PM" : " AM"
  document.getElementById('time').innerHTML = getDateStr() + curTime;
  setTimeout("curTime();",1000);
}

//
//Registration stuff...
//Need to fix the e-mail check. It doesn't work :S.
//

var reg_u_fine = false;
var reg_n_fine = false;
var reg_b_fine = false;
var reg_p_fine = false;
var reg_e_fine = false;
var reg_a_fine = false;

function enableRegisterButton()
{
   if (reg_u_fine && reg_n_fine && reg_b_fine && reg_p_fine && reg_e_fine && reg_a_fine)
   {
      document.getElementById('reg_button').disabled=false;
   }
   else
   {
      document.getElementById('reg_button').disabled=true;
   }
}

function anlCheck(id)
{
   if ((id.value.match(/\W/)) || (id.value.length < 6 && id.value.length > 0))
   {
      id.style.backgroundColor = "#ff0000";
      if(id.name=="reg_u")reg_u_fine = false;
      if(id.name=="reg_n")reg_n_fine = false;
      return false;
   }
   else
   {
      id.style.backgroundColor = "#ffffff";
      if(id.name=="reg_u")reg_u_fine = true;
      if(id.name=="reg_n")reg_n_fine = true;
      return false;
   }
}

function yearCheck(id)
{
   if ((id.value.match(/\D/)) || (id.value < 1900 && id.value > 2100))
   {
      id.style.backgroundColor = "#ff0000";
      reg_b_fine = false;
      return false;
   }
   else
   {
      id.style.backgroundColor = "#ffffff";
      reg_b_fine = true;
      return false;
   }
}

function passCheck()
{
   if ((document.getElementById('reg_p1').value != document.getElementById('reg_p2').value) && (document.getElementById('reg_p1').value.length > 0) && (document.getElementById('reg_p2').value.length > 0))
   {
      document.getElementById('reg_p1').style.backgroundColor = "#ff0000";
      document.getElementById('reg_p2').style.backgroundColor = "#ff0000";
      reg_p_fine = false;
      return false;
   }
   else
   {
      document.getElementById('reg_p1').style.backgroundColor = "#ffffff";
      document.getElementById('reg_p2').style.backgroundColor = "#ffffff";
      reg_p_fine = true;
      return false;
   }
}

function emailCheck()
{
   if ((document.getElementById('reg_e1').value != document.getElementById('reg_e2').value && document.getElementById('reg_e1').value.length > 0 && document.getElementById('reg_e2').value.length > 0) || (!document.getElementById('reg_e1').value.match(/^[\w\-_.]+@[\w\-_.]+\.[a-z]{2,}$/) && document.getElementById('reg_e1').value.length > 0 && document.getElementById('reg_e2').value.length > 0))
   {
      document.getElementById('reg_e1').style.backgroundColor = "#ff0000";
      document.getElementById('reg_e2').style.backgroundColor = "#ff0000";
      reg_e_fine = false;
      return false;
   }
   else
   {
      document.getElementById('reg_e1').style.backgroundColor = "#ffffff";
      document.getElementById('reg_e2').style.backgroundColor = "#ffffff";
      reg_e_fine = true;
      return false;
   }
}

function preventKeypress(e)
{
   if(window.event) // IE
   {
      keynum = e.keyCode
   }
   else if(e.which) // Netscape/Firefox/Opera
   {
      keynum = e.which
   }
   keychar = String.fromCharCode(keynum);
   numcheck = /[\w\r\b\t]/;
   return numcheck.test(keychar);
}