﻿var local = true;

var username;
var password;

var xmlhttpCheckLinks;
var xmlhttpDatesLoaded;

var results;

var allLinks = 'https://api.del.icio.us/v1/posts/all?';
var dateLinks = 'https://api.del.icio.us/v1/posts/dates?';


var current = 0;
var lastWritten = -1;
var count404 = 0;

function CheckLinks(test)
{
	current = 0;
	lastWritten = -1;
	count404 = 0;
	
	if (test == true)
	{
		allLinks = 'http://harriyott.com/HackDay/all.xml';
	}
	else
	{
		allLinks = GetCall(allLinks);
	}

	results = document.getElementById('results');
	results.innerHTML = '';
	
	username = document.getElementById('username').value;
	password = 	document.getElementById('password').value;
	
	if (local)
	{
		xmlhttpDatesLoaded = loadXMLDoc(allLinks,LinksLoaded);
	}
	else
	{
		xmlhttpCheckLinks = loadXMLDoc(GetCall(dateLinks),DatesLoaded);
	}
	return false;
}

function GetCall(url)
{
	return GetAnonCall(url) + '&u=' + 
	username  + '&p=' + password;
}


function loadXMLDoc(url, method)
{
	var xmlhttp=null
	// code for Mozilla, etc.
	if (window.XMLHttpRequest)
	{
		xmlhttp=new XMLHttpRequest();
	}
	// code for IE
	else if (window.ActiveXObject)
	{
		xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
	}
	if (xmlhttp!=null)
	{
		xmlhttp.onreadystatechange=method;
		xmlhttp.open("GET",url,true);
		xmlhttp.send(null);
	}
	else
	{
		alert("Your browser does not support XMLHTTP.");
	}
	return xmlhttp;
}

function DatesLoaded()
{
	if (xmlhttpCheckLinks != null &&
		xmlhttpCheckLinks.readyState==4)
	{
		// if "OK"
		if (xmlhttpCheckLinks.status==200)
		{
			var response  = xmlhttpCheckLinks.responseXML.documentElement;
			var dateElements = response.getElementsByTagName('date');
			
			if (dateElements.length > 0)
			{
				var date = dateElements[0].getAttributeNode('date').value;	
				xmlhttpDatesLoaded = 
					loadXMLDoc(GetCall('https://api.del.icio.us/v1/posts/get?dt=' + date), 
					LinksLoaded);
			}
			else
			{
				var errorElements = response.getElementsByTagName('error');
				ShowMessage('Error loading links by date from del.icio.us. ');
			}
		}
		else
		{
			alert("Problem retrieving XML data " + xmlhttpCheckLinks.status);
		}
	}
	else
	{
		//alert("Problem retrieving XML data - not ready");
	}

}


function LinksLoaded()
{
  // if xmlhttp shows "loaded"
  if (xmlhttpDatesLoaded != null &&
		xmlhttpDatesLoaded.readyState==4)
  {
	// if "OK"
	if (xmlhttpDatesLoaded.status==200)
	{
		var response  = xmlhttpDatesLoaded.responseXML.documentElement;
		postElements = response.getElementsByTagName('post');
		if (postElements.length == 0)
		{
			SetMessage('Sorry, the Yahoo! API isn\'t working at the mo.&nbsp;&nbsp;&nbsp;<a href="https://api.del.icio.us/v1/posts/all?">See the Yahoo! page</a> for details, or <a href="StillDelicious.aspx?t=1">see the test results</a>.');
		}
		else
		{
			VisitLink();
		}
	}
  }
}

var xmlhttpVisit;
var href;
var desc;

var postElements;

function VisitLink()
{
	if (current < postElements.length)
	{
		var linkItem = postElements[current];
		href = linkItem.getAttributeNode('href').value;
		desc = linkItem.getAttributeNode('description').value;
		
		xmlhttpVisit = loadXMLDoc(GetAnonCall(href), LinkVisited); 
		current ++;
	}
	else
	{
		ShowMessage('Done.');
	}
}

function LinkVisited()
{
	// if xmlhttp shows "loaded"
	if (xmlhttpVisit != null &&
		xmlhttpVisit.readyState==4)
	{
		// if "OK"
		if (xmlhttpVisit.status==200)
		{
			if (lastWritten != current)
			{
				lastWritten = current;
				MessageBox(current + ' + ' + href);
				
				var result = xmlhttpVisit.responseXML.documentElement;
				var code = result.firstChild.nodeValue;
				
				var className='linkOk';
				
				if (code.substring(0,3) != '200')
				{
					count404 ++;
					className='linkBad';
				}
				
				ShowMessage('<span class="' + className + '">' + code.substring(0,3)
					 + '</span>: <a href="' + href + '">' + desc + '</a>'); 
				VisitLink();
				
				SetStats();
			}
		}
	}	
}

function SetStats()
{
	stats = document.getElementById('stats');
	if (count404 != 1)
	{
		stats.innerHTML = 'You have ' + count404 + ' dead links.';
	}
	else
	{
		stats.innerHTML = 'You have ' + count404 + ' dead link.';
	}
}

function ShowMessage(message)
{
	results.innerHTML = message + "<br />" + results.innerHTML;
}

function SetMessage(message)
{
	results.innerHTML = message + "<br />";
}

function MessageBox(message)
{
	//alert(message);
}