var xmlhttp, xmlhttp2, page, udTM, datelist = null,cpid=0;

function setSelectionRange(input, selectionStart, selectionEnd) {
  if (input.setSelectionRange) {
    input.focus();
    input.setSelectionRange(selectionStart, selectionEnd);
  }
  else if (input.createTextRange) {
    var range = input.createTextRange();
    range.collapse(true);
    range.moveEnd('character', selectionEnd);
    range.moveStart('character', selectionStart);
    range.select();
  }
}

function setCaretToEnd (input) {
  setSelectionRange(input, input.value.length, input.value.length);
}

setCookie("comsperpage","10",20);

function MtoWord(code) {
switch (code) {
   case "01": return "Jan"; break;
   case "02": return "Feb"; break;
   case "03": return "Mar"; break;
   case "04": return "Apr"; break;
   case "05": return "May"; break;
   case "06": return "Jun"; break;
   case "07": return "Jul"; break;
   case "08": return "Aug"; break;
   case "09": return "Sep"; break;
   case "10": return "Oct"; break;
   case "11": return "Nov"; break;
   case "12": return "Dec"; break;
}
}

function ServerDate(datestring) {
  var d=new Date();
  d.setTime(Date.parse(datestring.slice(0,4)+" "+MtoWord(datestring.slice(5,7))+" "+datestring.slice(8))-((600-d.getTimezoneOffset())*60000));
  return d;
}

function Since(date1,date2) {
  var d = new Date(); d.setTime(date2.getTime()-date1.getTime());
  if (d.getUTCFullYear()-1970<0) return "A few seconds";
  if (d.getUTCFullYear()-1970) return ""+d.getUTCFullYear()+" years and "+d.getUTCMonth()+" months";
  if (d.getUTCMonth()) return ""+d.getUTCMonth()+" months and "+d.getUTCDate()+" days";
  if (d.getUTCDate()>7) {weeksy=Math.floor(d.getUTCDate()/7); return ""+weeksy+" weeks and "+(d.getUTCDate()-weeksy*7)+" days";}
  if (d.getUTCDate()-1) return ""+d.getUTCDate()+" days and "+d.getUTCHours()+" hours";
  if (d.getUTCHours()) return ""+d.getUTCHours()+" hours and "+d.getUTCMinutes()+" minutes";
  if (d.getUTCMinutes()) return ""+d.getUTCMinutes()+" minutes and "+d.getUTCSeconds()+" seconds";
  return ""+d.getUTCSeconds()+" seconds";
}

function UpdateDates() {
  var id, now=new Date();
  for (id in datelist) {
	$i("datedisplay"+id).innerHTML=Since(datelist[id], now);
  }
  udTM = setTimeout("UpdateDates()",1000);
}

function recursiveParse(patch) {
var result=""; 
for (var i=0;i<patch.length;i++) {
   if (patch[i].nodeType ==3) {result+=patch[i].nodeValue;}
      else {result+="<"+patch[i].nodeName+">"+recursiveParse(patch[i].childNodes)+"</"+patch[i].nodeName+">";}
   }
return result;
}

function YoutubeEmbed(id) {
return '<center><object width="480" height="385"><param name="movie" value="http://www.youtube.com/v/'+id+'&hl=en&fs=1&color1=0x2b405b&color2=0x6b8ab6"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/'+id+'&hl=en&fs=1&color1=0x2b405b&color2=0x6b8ab6" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object><br/><a href="http://www.youtube.com/watch?v='+id+'">See the video on Youtube Here</a></center>';
}

function parseVideos(str) {
  var pattern = /<youtube>.{11}<\/youtube>/;
  var kill = 20,g=str.search(pattern),code="";
  while (g>0 && kill>0) {
     kill--;
     code = str.slice(g+9,g+20);
     str=str.replace(/<youtube>.{11}<\/youtube>/,YoutubeEmbed(code));
     g=str.search(pattern);
  }
  return str;
}

function checkPage() {
if (xmlhttp.readyState==4)
  {// 4 = "loaded"
  if (xmlhttp.status==200)
    {
	cont.innerHTML=xmlhttp.responseText;
    }
  else
    {
    alert("Problem loading page: status code "+xmlhttp.status);
    }
  }
}

function parseMail () {
  datelist=new Array();
  document.title="My Mailbox - DLCgameReviews.com"
  cont.innerHTML="<img src='images/mail.png' alt='mail logo'/>"
  var tabler="<table class='mb'>",sender="";sendername="";
  messages=page.getElementsByTagName("message");
  if (!messages.length) {cont.innerHTML+="<br/>No messages."} else {
    for (var i=0;i<messages.length;i++){
      datelist[i]=ServerDate(messages[i].getElementsByTagName("time")[0].firstChild.nodeValue);
      sender=messages[i].getElementsByTagName("user")[0];
      sendername =sender.getElementsByTagName("name")[0].firstChild.nodeValue;
      tabler+="<tr><td class='mb_author' rowspan='2'><table align='center'><tr valign='middle'><td style='padding-top:5px;'><img height='20px' alt='avatar' src='avatar.php?id="+sender.getElementsByTagName("avatar")[0].firstChild.nodeValue+"'/></td><td>"+sendername+"</td></tr></table></td><td class='mb_message'><a onclick=\'addtoComments(\"@"+sendername+" \");\'>"+recursiveParse(messages[i].getElementsByTagName("txt")[0].childNodes)+"</a></td></tr><tr><td class='mb_tools'><a onclick=\'addtoComments(\"@"+sendername+":\");\'>reply</a> - unread - <a onclick='loadMail("+messages[i].getElementsByTagName("id")[0].firstChild.nodeValue+")'>delete</a> - <span id='datedisplay"+i+"'>"+i+" minutes</span> ago<td></tr>";
    }
    cont.innerHTML+=tabler+"</table>";
    UpdateDates();
  }
}

function writeComment(cn) {
  var avatar = cn.attributes.getNamedItem("avatar").value,authorname=cn.attributes.getNamedItem("author").value,cid=cn.attributes.getNamedItem("id").value,rater="";
  switch (cn.attributes.getNamedItem("irated").value) {
	case "-1":rater="<a href='javascript:loadComments(cpid,1,getCookie(\"comsperpage\"),"+cid+",1)'>[+]</a><a href='javascript:loadComments(cpid,1,getCookie(\"comsperpage\"),"+cid+",0)'>[X]</a>";break;
	case "0":rater="<a href='javascript:loadComments(cpid,1,getCookie(\"comsperpage\"),"+cid+",1)'>[+]</a><a href='javascript:loadComments(cpid,1,getCookie(\"comsperpage\"),"+cid+",-1)'>[-]</a>";break;
	case "1":rater="<a href='javascript:loadComments(cpid,1,getCookie(\"comsperpage\"),"+cid+",0)'>[X]</a><a href='javascript:loadComments(cpid,1,getCookie(\"comsperpage\"),"+cid+",-1)'>[-]</a>";break;
  }
  return "<div class='comment'><img height='40' class='floatleft' src='avatar.php?id="+avatar+"' alt='avatar'/><div class='cAuthor'><a href=\'javascript:addtoComments(\"@"+authorname+" \");\'>"+authorname+"</a> - [karma "+cn.attributes.getNamedItem("karma").value+"] <div class='c-id'><a href=\'javascript:addtoComments(\"#"+cid+" \");\'>#"+cid+"</a></div> <div class='cTools'>Rated "+cn.attributes.getNamedItem("rating").value+" "+rater+" - <a href=\'javascript:addtoComments(\"#"+cid+" \");\'>Reply</a> - <a href=\'javascript:addtoComments(\"@"+authorname+" \");\'>PM</a></div></div><a onclick=\'addtoComments(\"#"+cid+" \");\'>"+recursiveParse(cn.getElementsByTagName("message")[0].childNodes)+"</a></div>"+crecursive(cn.getElementsByTagName("children")[0].childNodes);
}

function crecursive(list) {
  result = "";
  for (var i=0;i<list.length;i++) {
     result += "<div class='comcontainer'>"+writeComment(list[i])+"</div>";
  }
  return result;
}

function brecursive(list) {
  result = "";
  for (var i=0;i<list.length;i++) {
     result += writeComment(list[i]);
  }
  return result;
}

function parseComments() {
  var cdisplay=$i("commentstream"), roots=xmlhttp2.responseXML.firstChild.childNodes;
  cdisplay.innerHTML=roots.length?brecursive(roots):"<div style='background-image:url(\"images/cbBorder/dark.gif\");'>No comments as of yet. Write one! Be first!</div>";
  showComments();
}

function parseError() {
  alert(xmlhttp.responseText);
}

function parseHome() {
  var updates = page.getElementsByTagName("updates")[0].childNodes;
  cont.innerHTML=""
  for (var i=0; i<updates.length; i++) {
	cont.innerHTML+='<div class="reviewlink"><img src="tiny.php?id='+updates[i].getElementsByTagName("img")[0].childNodes[0].nodeValue+'" onmouseover="this.parentNode.childNodes[3].style.display=\'inline\'" onmouseout="this.parentNode.childNodes[3].style.display=\'none\'"/><div class="title"><a href="javascript:loadPage('+updates[i].getElementsByTagName("id")[0].childNodes[0].nodeValue+')">'+updates[i].getElementsByTagName("title")[0].childNodes[0].nodeValue+'</a></div><div class="description">'+updates[i].getElementsByTagName("description")[0].childNodes[0].nodeValue+'</div><div class="author"><img height=25px src="http://dlcgamereviews.com/avatar.php?id='+updates[i].getElementsByTagName("author")[0].attributes.getNamedItem("avatar").value+'"/>'+updates[i].getElementsByTagName("author")[0].attributes.getNamedItem("name").value+'</div></div>';
  }
  cont.innerHTML+='<br/><center>Latest site news on Twitter:<br/><a href="http://twitter.com/IJustRealized"><img alt="Ijustrealized" src="http://tweetsnap.com/twitter/ijustrealized.png" /></a></center>'
}

function checkComSend() {
if (xmlhttp.readyState==4)
  {// 4 = "loaded"
  if (xmlhttp.status==200)
    {
    if (xmlhttp.responseText=="golden") {
	$i("commentfield").value="";
	loadComments(cpid,1,getCookie("comsperpage"));
	} else {alert(xmlhttp.responseText);}
    }
  else
    {
    alert("Problem posting comments: status code "+xmlhttp.status);
    }
  }
}

function state_Change()
{
if (xmlhttp.readyState==4)
  {// 4 = "loaded"
  if (xmlhttp.status==200)
    {
    page = xmlhttp.responseXML.firstChild;
    switch (page.nodeName) {
       case "page": parsePage(); break;
       case "mailbox": parseMail(); break;
       case "error": parseError(); break;
       case "homepage": parseHome(); break;
       }
    }
  else
    {
    alert("Problem retrieving XML data: status code "+xmlhttp.status);
    }
  }
}

function login_Check()
{
if (xmlhttp.readyState==4)
  {// 4 = "loaded"
  if (xmlhttp.status==200)
    {
    if (xmlhttp.responseText=="golden") {
	login($i("loginname").value);
	loadHome();
	} else alert(xmlhttp.responseText);
    }
  else
    {
    alert("Problem logging in: status code "+xmlhttp.status);
    }
  }
}

function logout_Check()
{
if (xmlhttp.readyState==4)
  {// 4 = "loaded"
  if (xmlhttp.status==200)
    {
    if (xmlhttp.responseText=="golden") {
	logout();
	} else alert(xmlhttp.responseText);
    }
  else
    {
    alert("Problem logging in: status code "+xmlhttp.status);
    }
  }
}


function loadXMLDoc(url, notifier)
{
xmlhttp=null;
if (window.XMLHttpRequest)
  {// code for all new browsers
  xmlhttp=new XMLHttpRequest();
  }
else if (window.ActiveXObject)
  {// code for IE5 and IE6
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
if (xmlhttp!=null)
  {
  xmlhttp.onreadystatechange=notifier;
  xmlhttp.open("GET",url,true);
  xmlhttp.send(null); 
  }
else
  {
  alert("Your browser does not support XMLHTTP.");
  }
}

function checkComments() {
if (xmlhttp2.readyState==4)
  {// 4 = "loaded"
  if (xmlhttp2.status==200)
    {
	parseComments();
	//alert(xmlhttp2.responseText);
    }
  else
    {
    alert("Problem loading comments: status code "+xmlhttp2.status);
    }
  }
}

function loadComments(id,page,perpage,rateid,rateamount)
{
xmlhttp2=null;
if (window.XMLHttpRequest)
  {// code for all new browsers
  xmlhttp2=new XMLHttpRequest();
  }
else if (window.ActiveXObject)
  {// code for IE5 and IE6
  xmlhttp2=new ActiveXObject("Microsoft.XMLHTTP");
  }
if (xmlhttp2!=null)
  {
  xmlhttp2.onreadystatechange=checkComments;
  var ratepart = (rateid)?"&rateid="+rateid+"&rateamount="+rateamount:"";
  xmlhttp2.open("GET","comments.php?gc="+id+ratepart+"&page="+page+"&rand="+Math.random(),true);
  xmlhttp2.send(null); 
  }
else
  {
  alert("Your browser does not support XMLHTTP.");
  }
}

function loadPage(id) {
  current_page = "http://dlcgamereviews.com/index.php?page="+id;
  cpid = id;
  loadXMLDoc("view2.php?id="+id, checkPage);
  loadComments(id,1,getCookie("comsperpage"),0,0);
}

function loadMail(deleteid) {
  hideComments();
  loadXMLDoc((deleteid)?"mailbox.php?deleteid="+deleteid:"mailbox.php", state_Change);
}

function loadHome() {
  location.href = 'http://dlcgamereviews.com/index2.php';
  //hideComments();
  //loadXMLDoc("homepage.php", state_Change);
}