var HOME = "http://www.maliciousguild.org/";
var itemCache = Array();
var activeTooltip = 0;
var date = new Date();
var cal_curr_day = date.getDate();
var cal_curr_month = date.getMonth();
var cal_curr_year = date.getFullYear();
var ATTENDENCE = Array("Unavailable", "Available", "Leaving Early", "Arriving Late", "No Schedule") ;
var reqnum = 0;

var month_name=new Array('January','Febuary','March','April','May','June','July','August','September','October','November','December');

var MAX_DUMP_DEPTH = 10;

 function dumpObj(obj, name, indent, depth) {

              if (depth > MAX_DUMP_DEPTH) {

                     return indent + name + ": <Maximum Depth Reached>\n";

              }

              if (typeof obj == "object") {

                     var child = null;

                     var output = indent + name + "\n";

                     indent += "\t";

                     for (var item in obj)

                     {

                           try {

                                  child = obj[item];

                           } catch (e) {

                                  child = "<Unable to Evaluate>";

                           }

                           if (typeof child == "object") {

                                  output += dumpObj(child, item, indent, depth + 1);

                           } else {

                                  output += indent + item + ": " + child + "\n";

                           }

                     }

                     return output;

              } else {

                     return obj;

              }

       }



function getObj(objID)
{
    if (document.getElementById) {return document.getElementById(objID);}
    else if (document.all) {return document.all[objID];}
    else if (document.layers) {return document.layers[objID];}
}

	function getText(obj)
	{
		if (document.all) 
		{
			return obj.text;
		}else {
			return obj.textContent;
		}		
	}

var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";

function encode64(input) {
   var output = "";
   if(input == "") return "";
   var chr1, chr2, chr3;
   var enc1, enc2, enc3, enc4;
   var i = 0;

   do {
      chr1 = input.charCodeAt(i++);
      chr2 = input.charCodeAt(i++);
      chr3 = input.charCodeAt(i++);

      enc1 = chr1 >> 2;
      enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
      enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
      enc4 = chr3 & 63;

      if (isNaN(chr2)) {
         enc3 = enc4 = 64;
      } else if (isNaN(chr3)) {
         enc4 = 64;
      }

      output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2) + 
         keyStr.charAt(enc3) + keyStr.charAt(enc4);
   } while (i < input.length);
   
   return output;
}

function decode64(input) {
	if(input == "") return "";
   var output = "";
   var chr1, chr2, chr3;
   var enc1, enc2, enc3, enc4;
   var i = 0;

   // remove all characters that are not A-Z, a-z, 0-9, +, /, or =
   input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");

   do {
      enc1 = keyStr.indexOf(input.charAt(i++));
      enc2 = keyStr.indexOf(input.charAt(i++));
      enc3 = keyStr.indexOf(input.charAt(i++));
      enc4 = keyStr.indexOf(input.charAt(i++));

      chr1 = (enc1 << 2) | (enc2 >> 4);
      chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
      chr3 = ((enc3 & 3) << 6) | enc4;

      output = output + String.fromCharCode(chr1);

      if (enc3 != 64) {
         output = output + String.fromCharCode(chr2);
      }
      if (enc4 != 64) {
         output = output + String.fromCharCode(chr3);
      }
   } while (i < input.length);

	//output = output.replace(/[\xA0]*/g, "");

   return output;
}

function getX(obj) 
{
  var curleft = 0;
  if (obj.offsetParent) 
  {
    while (obj.offsetParent) 
        {
            curleft += obj.offsetLeft
            obj = obj.offsetParent;
        }
    }
    else if (obj.x)
        curleft += obj.x;
    return curleft;
}


function getY(obj) 
{
    var curtop = 0;
    if (obj.offsetParent) 
    {
        while (obj.offsetParent) 
        {
            curtop += obj.offsetTop
            obj = obj.offsetParent;
        }
    }
    else if (obj.y)
        curtop += obj.y;
    return curtop;
}
	
	
	
	function makeRequest(url) {
		//if( loading ) return false;
		url="/data/"+url+"&seq="+(reqnum++);
        var httpRequest;

        if (window.XMLHttpRequest) { // Mozilla, Safari, ...
            httpRequest = new XMLHttpRequest();
            if (httpRequest.overrideMimeType) {
                httpRequest.overrideMimeType('text/xml');
                // See note below about this line
            }
        } 
        else if (window.ActiveXObject) { // IE
            try {
				httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
			} catch (e) {
				try {
                    	httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
				} catch (e) {}
			}
		}
                                       

        if (!httpRequest) {
            alert('Giving up :( Cannot create an XMLHTTP instance');
            return false;
        }

        httpRequest.onreadystatechange = function() { alertContents(httpRequest); };
        httpRequest.open('GET', url, true);
        httpRequest.send('');

    }

    function alertContents(httpRequest) {
        if (httpRequest.readyState == 4) {
            if (httpRequest.status == 200) {
                //alert(httpRequest.responseText);
                var data = httpRequest.responseXML.getElementsByTagName('data').item(0);;
                for( i=0; i<data.childNodes.length; i++)
                {
                	var cmd = data.childNodes.item(i);
                	switch( cmd.nodeName )
                	{
                		case "error":
                			alert(getText(cmd));
                			break;
                		case "item":
                			var id = cmd.attributes.getNamedItem("id").nodeValue;
                			itemCache['ic'+id]=decode64(getText(cmd));
                			if( activeTooltip == id )
                			{
                				getObj("tooltip").innerHTML=itemCache['ic'+id];
                			}
                			break;
                		case "month":
								cal_set(cmd);
                			break;
                		case "event":
                			cal_gotDetailts(cmd);
                			break;
                		case "claim":
                			claim_update(cmd);
                			break;
                		case "note":
                			getObj("note_note").value="";
                			break;
                		case "request_item":
                			var id = cmd.attributes.getNamedItem("id").nodeValue;
                			if( item == id ) {
                				getObj("req_curr_item").innerHTML = decode64(getText(cmd));
                			}
                			break;
                		case "request_pending":
                			getObj("requests_pending").innerHTML = decode64(getText(cmd));
                			break;
                		default:
                			
                			alert("Dont Know "+cmd.nodeName);
                			break;
                	}
					}
            } else {
                alert('There was a problem with the request.');
            }
        }
    }
    
   function overItemLink(id)
   {
   	if( document.onmousemove == null) {
   		var tt = getObj("tooltip");
			if(itemCache['ic'+id])
			{
				tt.innerHTML=itemCache['ic'+id];
			}else{
				itemCache['ic'+id]="Loading...";
				tt.innerHTML="Loading..";
				makeRequest("item.php?id="+id);
			}
			activeTooltip=id;
    	 	document.onmousemove = moveTooltip;
    	 }
   }
   
   function outTooltip(id)
   {
		if( activeTooltip == id ) {
			var tt = getObj("tooltip");
	   	tt.style.visibility = 'hidden';
   		tt.innerHTML="hidden";
   		tt.style.top=0;
			tt.style.left=0;
   		activeTooltip=0;
   		document.onmousemove = null;
   	}
   }
   
   function moveTooltip(e)
	{
		if( activeTooltip )
		{
   		var x, y;
   		var xoff=15;
   		var yoff=15;
   		if (document.all) 
   		{ 
				x = event.clientX + document.body.scrollLeft;
				y = event.clientY + document.body.scrollTop;
		} else {  
				x = e.pageX;
				y = e.pageY;
		}
			var tt = getObj("tooltip");
			
			var w=document.body.scrollWidth;
			var h=document.body.scrollHeight;
			
			x+=xoff; y+=yoff;
			
			if( x+tt.offsetWidth > w ) {x=w-xoff-tt.offsetWidth;}
			if( y+tt.offsetHeight > h ) {y=y-yoff-yoff-tt.offsetHeight;} //alert(y+", "+tt.offsetHeight+", "+h); 
							
							
			tt.style.top=y;
			tt.style.left=x;
			tt.style.visibility = 'visible';
			
		}
	}
	
	
	function cal_month(id, year)
	{
		var append = "";
		if( year != date.getFullYear() ) append = " "+year;
		getObj("cd_month").innerHTML = "<b>"+month_name[id]+append+"</b";
		for(i=0; i<42; i++) getObj("cd"+i).innerHTML="&nbsp;"; 
		getObj("cd7").innerHTML="L";
		getObj("cd8").innerHTML="o";
		getObj("cd9").innerHTML="a";
		getObj("cd10").innerHTML="d";
		getObj("cd11").innerHTML="i";
		getObj("cd12").innerHTML="n";
		getObj("cd13").innerHTML="g";
		
		makeRequest("raids.php?cmd=events&p1="+year+"-"+(Number(id)+1)+"-1");
		
	}
	
	function cal_next()
	{
		if( cal_curr_month == 11 )
		{
			cal_curr_month=0;
			cal_curr_year++;
		}else{
			cal_curr_month++
		}
			
		cal_month(cal_curr_month, cal_curr_year);
	}
	
	function cal_prev()
	{
		if( cal_curr_month == 0 )
		{
			cal_curr_month=11;
			cal_curr_year--;
		}else{
			cal_curr_month--
		}
		
		cal_month(cal_curr_month, cal_curr_year);
	}
	
	function cal_set(data)
	{
		var id = Number(data.attributes.getNamedItem("id").nodeValue)-1;
		var year = Number(data.attributes.getNamedItem("year").nodeValue);
				
		if( id == cal_curr_month && year == cal_curr_year )
		{
			var start = Number(data.attributes.getNamedItem("start").nodeValue);
			var days = Number(data.attributes.getNamedItem("days").nodeValue);
			for(i=0; i<start; i++)
			{
				var f = getObj("cd"+i);
				f.innerHTML="&nbsp;";
				f.className="cd_empty";
				f.onmouseover = null;
				f.onmouseout = null;
				f.onclick = null;
			}
			for(i=0; i<days; i++)
			{
				var f = getObj("cd"+(start+i));
				f.innerHTML=i+1;
				f.className="cd_noevent";
				f.onmouseover = null;
				f.onmouseout = null;
				f.onclick = null;
			}
			for(i=start+days; i<42; i++)
			{
				var f = getObj("cd"+i);
				f.innerHTML="&nbsp;";
				f.className="cd_empty";
				f.onmouseover = null;
				f.onmouseout = null;
				f.onclick = null;
			}
			
			var ev = data.firstChild;
			do {
				var day = start+Number(ev.attributes.getNamedItem("day").nodeValue)-1;
				var desc = '<center>'+ev.attributes.getNamedItem("desc").nodeValue+'</center>';
				var f = getObj("cd"+day);
				f.className="cd_event_normal";
				var pi = ev.firstChild;
				var state = 5;
				if( pi ) do {
					var newstate = Number(pi.attributes.getNamedItem("state").nodeValue);
					if( state != newstate ) {
						state = newstate;
						desc+='<div class="attendence'+state+'">'+ATTENDENCE[state]+'</div>';
					}					
					var name = pi.attributes.getNamedItem("name").nodeValue;
					var pclass = Number(pi.attributes.getNamedItem("class").nodeValue);
					desc+='<a href="#" style="padding-left: 25px;" class="class'+pclass+'">'+name+'</a><br>';
				}while( (pi=pi.nextSibling) );
;				f.onmouseover = new Function('cal_setTooltip('+day+', "'+escape(desc)+'");');
				f.onmouseout = new Function('outTooltip("cal"+'+day+');');
				f.onclick = new Function('cal_getDetails("'+year+'-'+(id+1)+'-'+ev.attributes.getNamedItem("day").nodeValue+'");');
			}while( (ev=ev.nextSibling) );
			
		} 
	}
	
	function cal_setTooltip(day, text)
	{
		var tt = getObj("tooltip");
		tt.innerHTML=unescape(text);
		activeTooltip="cal"+day;
    	document.onmousemove = moveTooltip;
	}
	
	function cal_getDetails(date)
	{
		makeRequest("raids.php?cmd=event&p1="+date);	
	}
	
	function cal_gotDetailts(data)
	{
		var desc = '<center>'+data.attributes.getNamedItem("desc").nodeValue+'</center><table width="100%"  border="0" cellpadding="5" cellspacing="0">';
		var date = data.attributes.getNamedItem("date").nodeValue;
		if( getObj("note_date") ) getObj("note_date").innerHTML=date;
		var pi = data.firstChild;
		var state = 5;
		if( pi ) do {
			var newstate = Number(pi.attributes.getNamedItem("state").nodeValue);
			if( state != newstate ) {
				state = newstate;
				desc+='<tr><td colspan="2" style="border-top: 1px solid #000000" class="attendence'+state+'">'+ATTENDENCE[state]+'</tr></tr>';
			}					
			var name = pi.attributes.getNamedItem("name").nodeValue;
			var pclass = Number(pi.attributes.getNamedItem("class").nodeValue);
			desc+='<tr><td style="padding-left: 10px;" width="20%" valign="top"><a href="#" class="class'+pclass+'">'+name+'</a></td><td width="80%">'+decode64(getText(pi))+'</td></tr>';
		}while( (pi=pi.nextSibling) );
		desc+='</table>';
		getObj("cal_notes").innerHTML=desc;		
	}
	
	function claim_start() {
		makeRequest("claim.php?cmd=start");
		getObj("claim_title").tryc=0;
	}
	
	function claim_update(cmd)
	{
		
		var cc = getObj("claim_content");
		var ct = getObj("claim_title");
		var state = Number(cmd.attributes.getNamedItem("state").nodeValue);
		if( state == 0 ) {
			cc.innerHTML='Enter you Character Name: (Spell it right, or you wil have to wait 2 hours before you can try again) <br><Br><input id="claim_name" type="text"> <a onClick="claim_next(0)"> Next </a>';		
			ct.innerHTML="Choose A Character";
		}else if( state == 1) {
			cc.innerHTML='Please Purchase and Equip: '+decode64(getText(cmd))+'<br><a onClick="claim_next(1)">Check Now</a>';		
			ct.innerHTML="Equip Item";
		}else if( state == 2) {
			cc.innerHTML='Checked, but Not Found!!<br><br> Check your armory page and double check its updated ( you may need to wait a few minutes). You can always come back here later to continue. Your claim request will be deleted in about 1 hour. Please Purchase and Equip: '+decode64(getText(cmd))+'<br><br><a onClick="claim_next(2)">Check Again</a>';		
			ct.innerHTML="Not Found ("+(ct.tryc++)+")";
		}else if( state == 3) {
			cc.innerHTML='Your Character has been claimed. You may now remove that item and continue your adventures. <br><Br><a href="/account.php">Back to My Account</a>';		
			ct.innerHTML="All Done!";
		}
	}
	
	function claim_next(state) {
		if( state== 0 ) {
			makeRequest("claim.php?cmd=claim&p1="+getObj("claim_name").value);
		}else {
			makeRequest("claim.php?cmd=start");
		}
	}
	
	function sch_save() {
		for(i=0; i<7; i++)
		{
			var start=Number(getObj("sch_from"+i).value);
			var duration=Number(getObj("sch_to"+i).value)-start;
			if( duration ==0) { start =0; duration=0; }
			if(duration >= 0 )
			{
				makeRequest("members.php?cmd=schedule&p1="+start+"&p2="+duration+"&p3="+i);
			}
			 
		}
		alert("You Schedule has been saved");
	}
	
	function note_save() {
		var date = getObj("note_date").innerHTML;
		var state = getObj("note_state").value;
		var note = encode64(getObj("note_note").value);
		if( date && note ) makeRequest("raids.php?cmd=note&p1="+date+"&p2="+state+"&p3="+note);
	}
	
	function Loading(state) {
		var tt = getObj("loading");
		if( state ) {
			document.onmousemove = Loading_Move;
			tt.style.top=0;
			tt.style.left=0;
			tt.style.visibility = 'visible';
		}else{
			document.onmousemove = null;
			tt.style.visibility = 'hidden';
		}
	}
	
	function Loading_Move(e) {
		var tt = getObj("loading");
		
			var x, y;
   		var xoff=15;
   		var yoff=15;
   		if (document.all) 
  			{ 
				x = event.clientX + document.body.scrollLeft;
				y = event.clientY + document.body.scrollTop;
			} else {  
				x = e.pageX;
				y = e.pageY;
			}
	
			var w=document.body.scrollWidth;
			var h=document.body.scrollHeight;
				
			x+=xoff; y+=yoff;
			
			if( x+tt.offsetWidth > w ) {x=w-xoff-tt.offsetWidth;}
			if( y+tt.offsetHeight > h ) {y=y-yoff-yoff-tt.offsetHeight;} //alert(y+", "+tt.offsetHeight+", "+h); 
							
			tt.style.top=y;
			tt.style.left=x;
		
		
	}
	
	