/* This is a Javascript tool for returning the available range of Carrington
Rotations using AJAX */

var __CRInfo = new CRInfo();
var __AJAXTimeout = null;
var __bodyExistTimeout = null;
var __captionTimeout = null;
var __CRListTimeout
var __embedComplete;


_findAllCRs();
_findAllCRDates();
_CreateRangeObject();

var CRRange = null;

function _CreateRangeObject()
{
	_embedComplete = null;

	var crList = document.getElementById("_CRList");
	var crCaption = document.getElementById("_CRCaption");
	var crDates = document.getElementById("_CRDates");

	if(crList && crCaption && crDates)
	{
		var crStr = crList.innerHTML
		var crStrArr = crStr.split(" ");
		var crArray = new Array();
	
		for(var i=0; i<crStrArr.length; i++)
		{	//create integer array from string array
			crArray[i] = parseInt(crStrArr[i]);
		}

		CRRange = 
		{	
			array:crArray,
			list:crStr,
			crCaption:"( "+crCaption.innerHTML+" )",
			dateCaption:"( "+crDates.innerHTML+" )",			

			ValidateCR: function(cr)
			{
				for(var j=0; j<crArray.length; j++)
				{
					if(parseInt(cr) == crArray[j])
					{
						return true;
					}
				}
				return false;
			},
			ValidateDate: function(date)
			{
				/*for(var j=0; j<crArray.length; j++)
				{
					if(parseInt(date) == crArray[j])
					{
						return true;
					}
				}
				return false;
				*/
			}


		};

	}
	else
	{
		__embedComplete = setTimeout("_CreateRangeObject()",100); 
	}
		
}


function CRInfo()
{
	this.allCRs = null;
	this.caption = null;
	this.valid = false;
}

function CRRange()
{

	this.request = _createRequest();

	//alert(document.getElementById("documentBody"));

	this.findAllCRs = function()
	{
		_findAllCRs();
	}
		
	this.insertCaption = new Function("id","this.captionId=id;_insertCRCaption(id);");	

	//this.allCRs = _getAllCRs();

	/*this.findAllCRs = function()
	{
	
	  if(this.request != null)
	  {
	    var php_script = "/stereo/ajax/findAllCRs.php";
	
	    this.request.open("GET",php_script);
	
	    // The "setRequestHeader" method is required for all POST requests (not GET)
	    //request.setRequestHeader("Content-Type",
	      //"application/x-www-form-urlencoded; charset=UTF-8");
	
			

	    this.request.onreadystatechange = _stateChange(this);

	      function()
	      {
					//alert(_exposeObject(this.readyState,'this.readyState'));
					alert("this.constructor: "+this.constructor);

						
							
	        if(this.readyState == 4)
	        {       
	          var cr_text = this.responseText;
	          //alert(cr_text);
	          var crs = cr_text.split(/\s+/);
	
						var int_crs = new Array();
						for(var j=0;j<crs.length;j++)
						{
							int_crs[j]=parseInt(crs[j]);
						}
			
						__CRInfo.allCRs = int_crs;
						__CRInfo.caption = _createCaption(crs);
	        }       
	      }

	    this.request.send(null);
	  }
	  else
	  {
	    alert("Your browser must be upgraded in order to view AJAX enabled pages.\n"
	      +"This site is best viewed in Firefox, which can be downloaded here:\n\thttp://www.mozilla.com/en-US/firefox/");
			return false;
	  }
	
	}*/
		

	this.showAll = new Function("varName","_alertArray(this.allCRs,varName+'.allCRs')");

	//this.caption = _findAllCRs().caption;

	//var t=setTimeout("_alertArray(this.crs,'CRRange.crs')",2000);
	//this.list = new Function("_alertArray(this.crs,'CRRange.crs");
	//this.toCaption = new Function("_createCaption(this.crs)");
	//var t=setTimeout("this.setProps()",2000);

	//this.setProps = new Function("this.allCRs=this.range.crArray;this.caption=this.range.caption");

	this.expose = new Function("name","_exposeObject(this,'name')");

}

function _stateChange(obj)
{
	if (obj.request.readyState == 4)
	{
		var cr_text = obj.responseText;
	  //alert(cr_text);
	  var crs = cr_text.split(/\s+/);
	
		var int_crs = new Array();
		for(var j=0;j<crs.length;j++)
		{
			int_crs[j]=parseInt(crs[j]);
		}

		_alertArray(int_crs);

	}
	else
	{
		alert(obj.request.readyState);
	}
	
}

function _findAllCRs()
{
	var request = _createRequest();

	if(request != null)
	{
		var php_script = "/stereo/ajax/findAllCRs.php";

		request.open("GET",php_script);

		// The "setRequestHeader" method is required for all POST requests (not GET)
		//request.setRequestHeader("Content-Type",
			//"application/x-www-form-urlencoded; charset=UTF-8");

		request.onreadystatechange = 
			function()
			{
				if(request.readyState == 4)
				{
					var cr_text = request.responseText;
					//alert(cr_text);
					var crs = cr_text.split(/\s+/);
					var cap = _createCaption(crs);
					_embedHiddenInfo("_CRList",cr_text);
					_embedHiddenInfo("_CRCaption",cap);
				}
			}
		request.send(null);
	}
	else
	{
		alert("Your browser must be upgraded in order to view AJAX enabled pages.\n"
			+"This site is best viewed in Firefox, which can be downloaded here:\n\thttp://www.mozilla.com/en-US/firefox/");
	}

} 


function _findAllCRDates()
{
	var request = _createRequest();

	if(request != null)
	{
		var php_script = "/stereo/ajax/findAllCRs.php";

		request.open("GET",php_script+'?return=dates');

		// The "setRequestHeader" method is required for all POST requests (not GET)
		//request.setRequestHeader("Content-Type",
			//"application/x-www-form-urlencoded; charset=UTF-8");

		request.onreadystatechange = 
			function()
			{
				if(request.readyState == 4)
				{
					var datesCaption = request.responseText;
					_embedHiddenInfo('_CRDates',datesCaption);
				}
			}
		request.send(null);
	}
	else
	{
		alert("Your browser must be upgraded in order to view AJAX enabled pages.\n"
			+"This site is best viewed in Firefox, which can be downloaded here:\n\thttp://www.mozilla.com/en-US/firefox/");
	}

} 

function _embedCRData(cr_list,caption)
{
	var docBody=document.getElementsByTagName("body")[0];

	if(docBody)
	{
		var hiddenDiv1 = document.createElement("div");
		hiddenDiv1.setAttribute("id","_CRList");
		hiddenDiv1.setAttribute("style","display:none;");
		var crstr = document.createTextNode(cr_list);
		hiddenDiv1.appendChild(crstr);
	
		var hiddenDiv2 = document.createElement("div");
		hiddenDiv2.setAttribute("id","_CRCaption");
		hiddenDiv2.setAttribute("style","display:none;");
		var cap = document.createTextNode(caption);
		hiddenDiv2.appendChild(cap);
	
		docBody.appendChild(hiddenDiv1);
		docBody.appendChild(hiddenDiv2);
	}
	else
	{
		__bodyExistTimeout=setTimeout("_embedCRData('"+cr_list+"','"+caption+"')",100);
	}

}

function _embedHiddenInfo(id,info)
{

	var docBody=document.getElementsByTagName("body")[0];

	if(docBody)
	{
		var hiddenEl = document.createElement("div");
		hiddenEl.setAttribute("id",id);
		hiddenEl.setAttribute("style","display:none");
		var infoNode = document.createTextNode(info);
		hiddenEl.appendChild(infoNode);
	
		docBody.appendChild(hiddenEl);
	}
	else
	{
		
		__bodyExistTimeout=setTimeout("_embedHiddenInfo('"+id+"','"+info+"')",100);

	}
}


function _insertCRCaption(elementId)
{
	var captionParent = document.getElementById(elementId);
	var hiddenCaptionEl = document.getElementById("_CRCaption");

	if(hiddenCaptionEl)
	{
		captionParent.innerHTML = "("+hiddenCaptionEl.innerHTML+")";
	}
	else
	{
		__captionTimeout = setTimeout("_insertCRCaption('"+elementId+"')",100);
	}
}


function _attemptCRValidate(cr)
{
	var hiddenCRListEl = document.getElementById("_CRList");
	var cr_int = parseInt(cr);

	if(hiddenCRListEl)
	{
		var crList = hiddenCRListEl.innerHTML.split(" ");

		for(var i=0; i<crList.length; i++)
		{
			if(parseInt(crList[i]) == cr)
			{
				return true;
			}
		}

	}
	else
	{
		alert("document.getElementById('_CRList') == null");
		return false;
	}
		
	if(arguments.length == 2)	//arguments[1] == captionId
	{
		document.getElementById(arguments[1]).style.color = 'red';
	}

	return false;
}


function _createCaption(cr_arr)
{
	//var cr_arr = crstr.split(" ");
	var caption = "";	

	for( var i=1; i<cr_arr.length; i++ )
	{
		var prev = parseInt(cr_arr[i-1]);
		var curr = parseInt(cr_arr[i]);

		if(prev == (curr-1) && caption.lastIndexOf("-") != caption.length-1)
		{
			caption += prev.toString()+"-";
		}
		else if ( (curr-prev) > 1)
		{
			caption += prev.toString()+", ";
		}
		
		if(i == cr_arr.length-1){
			caption += curr.toString();
		}
		
	}

	//alert(caption);
	return caption
}


function _createRequest()
{
	var xmlhttp=null;
	
	if (window.XMLHttpRequest)
	{	// all new browsers excluding IE5 & IE6
		xmlhttp = new XMLHttpRequest();
	}
	else if (window.ActiveXObject)
	{	// Microsoft IE5 & IE6  
		xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
	}
	
	if(xmlhttp != null)
	{	// Request object successfully created!
		return xmlhttp;
	}
	else
	{	// Browser is not compatible with AJAX. 
		return false;
	}

}

function _alertArray(arr,name)
{

	var arrstr = "Contents of Array: " + name + "\n";

	for(var i; i<arr.length; i++ )
	{
		arrstr += arr[i].toString() + "\n";
	}
	
	alert(arrstr);
}

function _exposeObject(obj,name)
{
  var logId = "ObjectLog_"+name.toString();

  if(document.getElementById(logId))
  {
    var logDiv = document.getElementById(logId);
    document.getElementsByTagName("body")[0].removeChild(logDiv);
  }
  else
  {
    var details = "Object Details: "+name.toString()+"\n";
    
    for(var el in obj) 
    {
      details += name+'.'+el+" = "+obj[el]+"\n"; 
    }
   
		alert(details);
 
  }
}
