var xmlreqs = new Array();

function dumpObj(obj, name, indent, depth) 
{
	var MAX_DUMP_DEPTH = 100;
	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 login()
{
	document.getElementById("bloginbox").style.display = "";
	document.getElementById('username').focus();
}
	
function resetaccess()
{
	document.getElementById("bloginbox").style.display = "none";
}

function unhide(buttonID, divID)
{
	document.getElementById(divID).style.visibility = "visible";
	document.getElementById(divID).style.display = "block";
	document.getElementById(buttonID).innerHTML = "<div onclick=\"hide('" + buttonID + "', '" + divID + "');\">Hide</div>"
}

function hide(buttonID, divID)
{
	document.getElementById(divID).style.visibility = "hidden";
	document.getElementById(divID).style.display = "none";
	document.getElementById(buttonID).innerHTML = "<div onclick=\"unhide('" + buttonID + "', '" + divID + "');\">More</div>"
}
	
function togglesuffixcheckbox()
{
	var scb = document.getElementById('socialsuffix');
	//alert(scb.checked);
	if(scb.checked)
	{
		document.getElementById("socialsuffixpathlabel").style.display = "";
		document.getElementById("socialsuffixpath").style.display = "";
	}
	else
	{
		document.getElementById("socialsuffixpathlabel").style.display = "none";
		document.getElementById("socialsuffixpath").style.display = "none";
	}
}


// function to initialise XML HTTP Request for AJAX
function GetXmlHttpObject()
{
	if (window.XMLHttpRequest)
	{
		// code for IE7+, Firefox, Chrome, Opera, Safari
		return new XMLHttpRequest();
	}

	if (window.ActiveXObject)
	{
		// code for IE6, IE5
		return new ActiveXObject("Microsoft.XMLHTTP");
	}

	return null;
}

function load(pageID)
{
	//alert(pageID);
	if (pageID == 'addsource')
	{
		document.getElementById("main").innerHTML = "addsource";
		fetch("addsourceform.php");
	}
	else if (pageID == 'adddestination')
	{
		document.getElementById("main").innerHTML = "adddestination";
		fetch("adddestinationform.php");
	}
	else if (pageID == 'addlink')
	{
		document.getElementById("main").innerHTML = "addlink";
		fetch("addlinkform.php");
	}
	else	if (pageID == 'addsourcebulk')
	{
		document.getElementById("main").innerHTML = "addsourcebulk";
		fetch("addbulksourceform.php");
	}
	else if (pageID == 'adddestinationbulk')
	{
		document.getElementById("main").innerHTML = "adddestinationbulk";
		fetch("addbulkdestinationform.php");
	}
	else	if (pageID == 'addlinkbulk')
	{
		document.getElementById("main").innerHTML = "addlinkbulk";
		fetch("addbulklinkform.php");
	}
	else if (pageID == 'viewsources')
	{
		document.getElementById("main").innerHTML = "viewsources";
		fetch("viewsources.php");
	}
	else if (pageID == 'viewdestinations')
	{
		document.getElementById("main").innerHTML = "viewdestinations";
		fetch("viewdestinations.php");
	}
	else if (pageID == 'viewlinks')
	{
		document.getElementById("main").innerHTML = "viewlinks";
		fetch("viewlinks.php");
	}
	else if (pageID == 'deletesource')
	{
		document.getElementById("main").innerHTML = "deletesource";
		fetch("deletesourceform.php");
	}
	else if (pageID == 'deletesourcebulk')
	{
		document.getElementById("main").innerHTML = "deletesourcebulk";
		fetch("deletebulksourceform.php");
	}
	else if (pageID == 'deletedestination')
	{
		document.getElementById("main").innerHTML = "deletedestination";
		fetch("deletedestinationform.php");
	}
		else if (pageID == 'deletedestinationbulk')
	{
		document.getElementById("main").innerHTML = "deletedestinationbulk";
		fetch("deletebulkdestinationform.php");
	}
	else if (pageID == 'deletelink')
	{
		document.getElementById("main").innerHTML = "deletelink";
		fetch("deletelinkform.php");
	}
	else
	{
		document.getElementById("main").innerHTML = pageID + " pageID not found!!";
	}
}


function makePOSTRequest(url, parameters, postfetch)
{
	var http_request = GetXmlHttpObject();

	if (http_request == null)
	{
		alert ("Browser does not support HTTP Request");
		return;
	}

	http_request.open('POST', url, true);

	http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	http_request.setRequestHeader("Content-length", parameters.length);
	http_request.setRequestHeader("Connection", "close");
	http_request.send(parameters);

	http_request.onreadystatechange = function()
	{
		if (http_request.readyState == 4)
		{
			if ( postfetch === undefined )
			{
				document.getElementById("myspan").innerHTML += http_request.responseText + "<br />";
			}
			else
			{
				document.getElementById("main").innerHTML = "fetching...";
				fetch(postfetch);
			}
		}
	}
}

function get(obj, pageID)
{
	if (pageID == 'source')
	{
		document.getElementById("myspan").innerHTML = "Response:<br /><hr />";
		var poststr = "fm-source=" + encodeURI( document.getElementById("fm-source").value );
		makePOSTRequest('addsourcesubmit.php?s=y', poststr);
		document.getElementById("myspan").innerHTML += "<hr />";
	}
	else if (pageID == 'destination')
	{
		document.getElementById("myspan").innerHTML = "Response:<br /><hr />";
		var poststr = "fm-destination=" + encodeURI( document.getElementById("fm-destination").value );
		makePOSTRequest('adddestinationsubmit.php?s=y', poststr);
		document.getElementById("myspan").innerHTML += "<hr />";
	}
	else if (pageID == 'sourcebulk')
	{
		document.getElementById("myspan").innerHTML = "Response:<br /><hr />";
		var ele = document.forms['fm-form'].elements['fm-source'];
		var str = ele.value;
		var ary = str.split("\n");
		var i = 0;
		var poststr = "";

		for (i = 0; i < ary.length; i++)
		{
			poststr = "fm-source=" + encodeURI(ary[i]);
			document.getElementById("myspan").innerHTML += poststr + "<br />";
			makePOSTRequest('addsourcesubmit.php?s=y', poststr);
		}

		document.getElementById("myspan").innerHTML += "<hr />";
	}
	else if (pageID == 'destinationbulk')
	{
		document.getElementById("myspan").innerHTML = "Response:<br /><hr />";
		var ele = document.forms['fm-form'].elements['fm-destination'];
		var str = ele.value;
		var ary = str.split("\n");
		var i = 0;
		var poststr = "";

		for (i = 0; i < ary.length; i++)
		{
			poststr = "fm-destination=" + encodeURI(ary[i]);
			document.getElementById("myspan").innerHTML += poststr + "<br />";
			makePOSTRequest('adddestinationsubmit.php?s=y', poststr);
		}

		document.getElementById("myspan").innerHTML += "<hr />";
	}
	else if (pageID == 'linkbulk')
	{
		var postDest = "fm-destination=" + encodeURI( document.getElementById("fm-destination").value );
		var allBoxes = document.forms['fm-form'].elements['fm-sourceboxes'];
		var numBoxes = allBoxes.length;
		var txt = "";
		var countBoxes = 0;
		var boxArray = new Array();
		
		for (var i = 0; i < numBoxes; i++)
		{
			if (allBoxes[i].checked)
			{
				boxArray[countBoxes] = allBoxes[i].value;
				txt = txt + allBoxes[i].value + " ";
				countBoxes++;
			}
		}
		
		document.getElementById("myspan").innerHTML = "Response:<br /><hr />";
		
		var poststr = "";
		var postSource = "";
		if (txt == "")
		{
			document.getElementById("myspan").innerHTML += "No Boxes ticked<br />";
		}
		else
		{
			var messageText = countBoxes + "/" + numBoxes + "\n" + txt + "\n" + boxArray.length + "\n";
			for (var i = 0; i < boxArray.length; i++)
			{
				postSource = "fm-source=" + encodeURI(boxArray[i]);
				poststr = postSource + '&' + postDest;
				messageText +=  poststr + "\n";
				
				document.getElementById("myspan").innerHTML += poststr + "<br />";
				makePOSTRequest('addlinksubmit.php?s=y', poststr, "addbulklinkform.php");
			}
		}		
		document.getElementById("myspan").innerHTML += "<hr />";
	}
	else if (pageID == 'link')
	{
		document.getElementById("myspan").innerHTML = "Response:<br /><hr />";
		var poststr1 = "fm-source=" + encodeURI( document.getElementById("fm-source").value );
		var poststr2 = "fm-destination=" + encodeURI( document.getElementById("fm-destination").value );
		makePOSTRequest('addlinksubmit.php?s=y', poststr1 + '&' + poststr2);
		document.getElementById("myspan").innerHTML += "<hr />";
	}
	else
	{
		alert("Found nothing");
	}
}

function del(obj, pageID)
{
	if (pageID == 'source')
	{
		var poststr = "fm-source=" + encodeURI( document.getElementById("fm-source").value );
		makePOSTRequest('deletesourcesubmit.php?s=y', poststr, "deletesourceform.php");

		document.getElementById("myspan").innerHTML = "Response:<br /><hr />";
		document.getElementById("myspan").innerHTML += poststr;
		document.getElementById("myspan").innerHTML += "<hr />";
	}
	else if (pageID == 'sourcebulk')
	{		
		//alert("Delete bulk Source");
		var allBoxes = document.forms['fm-form'].elements['fm-sourceboxes'];
		//alert(allBoxes);
		var numBoxes = allBoxes.length;
		var txt = "";
		var countBoxes = 0;
		var boxArray = new Array();

		for (var i = 0; i < numBoxes; i++)
		{
			if (allBoxes[i].checked)
			{
				boxArray[countBoxes] = allBoxes[i].value;
				txt = txt + allBoxes[i].value + " ";
				countBoxes++;
			}
		}
		
		document.getElementById("myspan").innerHTML = "Response:<br /><hr />";
		
		var poststr = "";
		if (txt == "")
		{
			document.getElementById("myspan").innerHTML += "No Boxes ticked<br />";
		}
		else
		{
			var messageText = countBoxes + "/" + numBoxes + "\n" + txt + "\n" + boxArray.length + "\n";
			for (var i = 0; i < boxArray.length; i++)
			{
				poststr = "fm-source=" + encodeURI(boxArray[i]);
				document.getElementById("myspan").innerHTML += poststr + "<br />";
				makePOSTRequest('deletesourcesubmit.php?s=y', poststr, "deletebulksourceform.php");
				//alert(poststr);
			}
			
		}		
		document.getElementById("myspan").innerHTML += "<hr />";		
	}
	else if (pageID == 'destination')
	{
		var poststr = "fm-destination=" + encodeURI( document.getElementById("fm-destination").value );
		makePOSTRequest('deletedestinationsubmit.php?s=y', poststr, "deletedestinationform.php");

		document.getElementById("myspan").innerHTML = "Response:<br /><hr />";
		document.getElementById("myspan").innerHTML += poststr;
		document.getElementById("myspan").innerHTML += "<hr />";
	}
	else if (pageID == 'destinationbulk')
	{		
		// alert("Delete bulk destination");
		var allBoxes = document.forms['fm-form'].elements['fm-destinationboxes'];
		//alert(allBoxes);
		var numBoxes = allBoxes.length;
		var txt = "";
		var countBoxes = 0;
		var boxArray = new Array();

		for (var i = 0; i < numBoxes; i++)
		{
			if (allBoxes[i].checked)
			{
				boxArray[countBoxes] = allBoxes[i].value;
				txt = txt + allBoxes[i].value + " ";
				countBoxes++;
			}
		}
		
		document.getElementById("myspan").innerHTML = "Response:<br /><hr />";
		
		var poststr = "";
		if (txt == "")
		{
			document.getElementById("myspan").innerHTML += "No Boxes ticked<br />";
		}
		else
		{
			var messageText = countBoxes + "/" + numBoxes + "\n" + txt + "\n" + boxArray.length + "\n";
			for (var i = 0; i < boxArray.length; i++)
			{
				poststr = "fm-destination=" + encodeURI(boxArray[i]);
				document.getElementById("myspan").innerHTML += poststr + "<br />";
				makePOSTRequest('deletedestinationsubmit.php?s=y', poststr, "deletebulkdestinationform.php");
				// alert(poststr);
			}
			
		}		
		document.getElementById("myspan").innerHTML += "<hr />";		
	}
	else if (pageID == 'link')
	{

		var poststr = "fm-link=" + encodeURI( document.getElementById("fm-link").value );
		makePOSTRequest('deletelinksubmit.php?s=y', poststr, "deletelinkform.php");

		document.getElementById("myspan").innerHTML = "Response:<br /><hr />";
		document.getElementById("myspan").innerHTML += poststr;
		document.getElementById("myspan").innerHTML += "<hr />";
	}
	else
	{
		alert("Found nothing");
	}
}

function fetch(url)
{
	var xmlSubmit = GetXmlHttpObject();

	if (xmlSubmit == null)
	{
		alert ("Browser does not support HTTP Request");
		return;
	}

	// fire open
	xmlSubmit.open("GET", url, true);

	xmlSubmit.send(null);

	xmlSubmit.onreadystatechange = function()
	{
		if (xmlSubmit.readyState == 4)
		{
			document.getElementById("main").innerHTML = xmlSubmit.responseText;
		}
	}
}

function disableSelection(target)
{
	if (typeof target.onselectstart != "undefined")
	{
		//IE route
		target.onselectstart = function()
		{
			return false;
		}
	}
	else if (typeof target.style.MozUserSelect != "undefined")
	{
		//Firefox route
		target.style.MozUserSelect = "none";
	}
	else
	{
		//All other route (ie: Opera)
		target.onmousedown = function()
		{
			return false;
		}

		target.style.cursor = "default";
	}
}

function runcheck()
{


	var http_request = GetXmlHttpObject();

	if (http_request == null)
	{
		alert ("Browser does not support HTTP Request");
		return;
	}

	var url = "fetchlinks.php";

	http_request.open("GET", url, true);
	http_request.send(null);

	http_request.onreadystatechange = function()
	{
		if (http_request.readyState == 4)
		{
			//for OK
			if (http_request.status == 200)
			{
				var JSONFile = "someVar = " + http_request.responseText;
				eval( JSONFile);
				document.getElementById("main").innerHTML = "";

				var ar = someVar.data;
				var i = 0;
				var linkArray = new Array();
				var newUrl = "";

				if (ar.length < 1)
				{
					document.getElementById("main").innerHTML = "<fieldset><legend>No Check</legend><div id='header'>No links to check.</div></fieldset>";
				}
				else
				{
					document.getElementById("main").innerHTML = "<fieldset><legend>Run Check</legend><div id='header'>Checking " + ar.length + " links...</div><div id='list'>";

					for (i = 0;i <= ar.length;i++)
					{
						linkArray[i] = new Link(ar[i].linkID, ar[i].sourceURL, ar[i].destinationURL);
						newUrl = "checkForLinks.php?" + linkArray[i].parameters ;
						document.getElementById("list").innerHTML += '<div id="' + i + '">Checking... ' + linkArray[i].toString + '</div>';
						xmlreqGET(newUrl, i);
					}

					document.getElementById("main").innerHTML += "</div></fieldset>";

				}
			}
		}
	}
}


function Link(id, source, destination)
{
	this.id = id;
	this.source = source;
	this.destination = destination;
	this.toString = this.id + ": " + this.source + " ->" + this.destination;
	this.parameters = "source=" + this.source + "&destination=" + this.destination;
}

function CXMLReq(freed, index)
{
	this.freed = freed;
	this.xmlhttp = false;
	this.index = index;

	if (window.XMLHttpRequest)
	{
		this.xmlhttp = new XMLHttpRequest();
	}
	else if (window.ActiveXObject)
	{
		this.xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
	}
}

function xmlreqGET(url, index)
{
	var pos = -1;

	for (var i = 0; i < xmlreqs.length; i++)
	{
		if (xmlreqs[i].freed == 1)
		{
			pos = i;
			break;
		}
	}

	if (pos == -1)
	{
		pos = xmlreqs.length;
		xmlreqs[pos] = new CXMLReq(1, index);
	}

	if (xmlreqs[pos].xmlhttp)
	{
		xmlreqs[pos].freed = 0;
		xmlreqs[pos].xmlhttp.open("GET", url, true);
		xmlreqs[pos].xmlhttp.onreadystatechange = function()
		{
			if (typeof(xmlhttpChange) != 'undefined')
			{
				xmlhttpChange(pos);
			}
		}

		if (window.XMLHttpRequest)
		{
			xmlreqs[pos].xmlhttp.send(null);
		}
		else if (window.ActiveXObject)
		{
			xmlreqs[pos].xmlhttp.send();
		}
	}
}

function xmlreqPOST(url, index, data)
{
	var pos = -1;

	for (var i = 0; i < xmlreqs.length; i++)
	{
		if (xmlreqs[i].freed == 1)
		{
			pos = i;
			break;
		}
	}

	if (pos == -1)
	{
		pos = xmlreqs.length;
		xmlreqs[pos] = new CXMLReq(1, index);
	}

	if (xmlreqs[pos].xmlhttp)
	{
		xmlreqs[pos].freed = 0;
		xmlreqs[pos].xmlhttp.open("POST", url, true);
		xmlreqs[pos].xmlhttp.onreadystatechange = function()
		{
			if (typeof(xmlhttpChange) != 'undefined')
			{
				xmlhttpChange(pos);
			}
		}

		xmlreqs[pos].xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		xmlreqs[pos].xmlhttp.send(data);
	}
}

function xmlhttpChange(pos)
{
	if (typeof(xmlreqs[pos]) != 'undefined' && xmlreqs[pos].freed == 0 && xmlreqs[pos].xmlhttp.readyState == 4)
	{
		if (xmlreqs[pos].xmlhttp.status == 200 || xmlreqs[pos].xmlhttp.status == 304)
		{
			handle_response(xmlreqs[pos].xmlhttp.responseText, xmlreqs[pos].index);
		}
		else
		{
			handle_error();
		}

		xmlreqs[pos].freed = 1;
	}
}

function handle_response(responseText, index)
{
	//alert(index + "\n" + responseText);
	document.getElementById(index).innerHTML = responseText;
}

function handle_error()
{
	//alert("Error!!");
}

function urlencode (str) {
    // http://kevin.vanzonneveld.net
    // +   original by: Philip Peterson
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +      input by: AJ
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Brett Zamir (http://brett-zamir.me)
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +      input by: travc
    // +      input by: Brett Zamir (http://brett-zamir.me)
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Lars Fischer
    // +      input by: Ratheous
    // +      reimplemented by: Brett Zamir (http://brett-zamir.me)
    // %          note 1: This reflects PHP 5.3/6.0+ behavior
    // *     example 1: urlencode('Kevin van Zonneveld!');
    // *     returns 1: 'Kevin+van+Zonneveld%21'
    // *     example 2: urlencode('http://kevin.vanzonneveld.net/');
    // *     returns 2: 'http%3A%2F%2Fkevin.vanzonneveld.net%2F'
    // *     example 3: urlencode('http://www.google.nl/search?q=php.js&ie=utf-8&oe=utf-8&aq=t&rls=com.ubuntu:en-US:unofficial&client=firefox-a');
    // *     returns 3: 'http%3A%2F%2Fwww.google.nl%2Fsearch%3Fq%3Dphp.js%26ie%3Dutf-8%26oe%3Dutf-8%26aq%3Dt%26rls%3Dcom.ubuntu%3Aen-US%3Aunofficial%26client%3Dfirefox-a'
 
    var hexStr = function (dec) {
        return '%' + dec.toString(16).toUpperCase();
    };
 
    var ret = '',
            unreserved = /[\w.-]/; // A-Za-z0-9_.- // Tilde is not here for historical reasons; to preserve it, use rawurlencode instead
    str = (str+'').toString();
 
    for (var i = 0, dl = str.length; i < dl; i++) {
        var ch = str.charAt(i);
        if (unreserved.test(ch)) {
            ret += ch;
        }
        else {
            var code = str.charCodeAt(i);
            // Reserved assumed to be in UTF-8, as in PHP
            if (code === 32) {
                ret += '+'; // %20 in rawurlencode
            }
            else if (code < 128) { // 1 byte
                ret += hexStr(code);
            }
            else if (code >= 128 && code < 2048) { // 2 bytes
                ret += hexStr((code >> 6) | 0xC0);
                ret += hexStr((code & 0x3F) | 0x80);
            }
            else if (code >= 2048 && code < 65536) { // 3 bytes
                ret += hexStr((code >> 12) | 0xE0);
                ret += hexStr(((code >> 6) & 0x3F) | 0x80);
                ret += hexStr((code & 0x3F) | 0x80);
            }
            else if (code >= 65536) { // 4 bytes
                ret += hexStr((code >> 18) | 0xF0);
                ret += hexStr(((code >> 12) & 0x3F) | 0x80);
                ret += hexStr(((code >> 6) & 0x3F) | 0x80);
                ret += hexStr((code & 0x3F) | 0x80);
            }
        }
    }
    return ret;
}

function getBaseURL() {
    var url = location.href;  // entire url including querystring - also: window.location.href;
    var baseURL = url.substring(0, url.indexOf('/', 14));


    if (baseURL.indexOf('http://localhost') != -1) {
        // Base Url for localhost
        var url = location.href;  // window.location.href;
        var pathname = location.pathname;  // window.location.pathname;
        var index1 = url.indexOf(pathname);
        var index2 = url.indexOf("/", index1 + 1);
        var baseLocalUrl = url.substr(0, index2);

        return baseLocalUrl + "/";
    }
    else {
        // Root Url for domain name
        return baseURL + "/";
    }

}