/*
* Setup initial vars...
*/
var oXHR = getXHRequestObj();
var sRemoteText = null;
var sCacheCont = '';

/**
* Returns an element in the document object model by specified ID.
*
* @return DOM element object
*/
function $(id)
{
	return document.getElementById(id);
}	

/**
* Returns true if a vairal is set or false if the variable is not set or undefined.
* @return True if set, False if not set.
*/
function isset(variable)
{
        var undefined; return ( variable == undefined ? false : true );
}

/**
* Create XMLHttpRequest object.
*
* Creates an XML_HTTP request object according to browser type.
*
* @return the XMLHttpRequest object
*/
function getXHRequestObj()
{
	var xmlHTTP = null;

	try {
		xmlHTTP = new XMLHttpRequest();
	} catch (e) {
		try {
			xmlHTTP = new ActiveXObject("Msxml2.XMLHTTP")
		} catch(e) {
			var success = false;
			var MSXML_XMLHTTP_PROGIDS = new Array(
				'Microsoft.XMLHTTP',
				'MSXML2.XMLHTTP',
				'MSXML2.XMLHTTP.5.0',
				'MSXML2.XMLHTTP.4.0',
				'MSXML2.XMLHTTP.3.0'
			);
			for (var i=0;i < MSXML_XMLHTTP_PROGIDS.length && !success; i++) {
				try {
					xmlHTTP = new ActiveXObject(MSXML_XMLHTTP_PROGIDS[i]);
					success = true;
				} catch (e) {
					xmlHTTP = null;
				}
			}
		}
	}
	
	return xmlHTTP;
}
		
/**
* Detects CSS or XSS Javascript injection attempts
* @return The provided value or an error.
*/
function sanitize(value)
{
	if(typeof(value) == 'object')
	{
		var size = value.length;
		for (i = 0; i < size; i++)
		{
			if (value[i].match(/.*<script.*/) || value[i].match(/.*@import.*/))
			{
				// XSS Javascript or CSS Injection attempt
				// window.location.href = "./login.php";
				alert('JScript Detected an XSS Attempt');
			}
		}
	}
	else
	{
		if (value.match(/.*<script.*/) || value.match(/.*@import.*/)) {
		// XSS Javascript or CSS Injection attempt
		// window.location.href = "./login.php";
		alert('JScript Detected an XSS Attempt');
		}
	}
	return value;
}

/**
*  Normalizes whitespace between mozilla and IE
*    - removes blank text nodes (where "blank" is defined as "containing no non-space characters")
*  @param  domObj    the root of the DOM object to normalize
*/
function normalizeWhitespace(domObj)
{
	// with thanks to the kind folks in this thread:
	//    http://www.codingforums.com/archive/index.php/t-7028
	if (document.createTreeWalker) {
		var filter = {
			acceptNode: function(node) {
					if (/\S/.test(node.nodeValue)) {
						return NodeFilter.FILTER_SKIP;
					}
				return NodeFilter.FILTER_ACCEPT;
			}
		}
		
		var treeWalker = document.createTreeWalker(domObj, NodeFilter.SHOW_TEXT, filter, true);
		while (treeWalker.nextNode()) {
		treeWalker.currentNode.parentNode.removeChild(treeWalker.currentNode);
		treeWalker.currentNode = domObj;
		}
		
		return domObj;
	} else {
		
		return domObj;
	}
}

/**
* Gets data from URL via XMLHttpRequest
*
* @return 
*
*/
function getURL(reqObject, reqType, url, responseObj)
{
	/* Setup a var for error messages */
	var sError = null;
	var reqState = 0;
	var reqStatus = 0;

	
	/* Validate the request type */
	switch(reqType.toUpperCase())
	{
		case "POST":
			/* Not supported in this revision */
			alert('The function: GET_URL does not currently support POST type methods. If you continue to receive this message, please contact a support representative.');
			return false;
			break;
			
		case "GET":
			break;
		
		case "HEAD":
			/* Not support in this revision */
			alert('The function: GET_URL does not currently support methods of the HEAD type. If you continue to receive this message, please contact a support representative.');
			return false;
			break;
			
		default:
			reqType = 'get'
			break
	}
	
	/* Make the variable uppercase */
	reqType = reqType.toUpperCase();
	
	/* Validate the URL */
	if (null == url || '' == url) {
		return false;
		
	}

	
	/* Set on-progress functionality */
	//reqObject.onprogress = function (current, total) {
 		//alert(current + " of " + total + " = " + ((total - current)/total) + "%");
 	//}

	/* Set the function called by changes in the request objects' state */
	reqObject.onreadystatechange = function getXMLHttpResponse()
	{
		try {
			reqState = reqObject.readyState;
			
		} catch (e) {
			sError = e;
			reqStatus = 0;
			
		}
		
		try {
			reqStatus = reqObject.status;
			
		} catch (e) {
			sError = e;
			reqStatus = -1;
			
		}
		

		/* Locally hosted files do not have a status -- we account for this with `sReqStatus == 0` */
		if ((reqState == 4 && reqStatus == 200) || (reqState == 4 && reqStatus == 0)) {
			/* Return the response */
                        if ($('msg_block')) {
				e = $('msg_block');
				e.style.visibility = 'hidden';
                                e.innerHTML = '';

                        }

			processXMLHttpRequest(responseObj, reqObject.responseText);
			

                } else if (reqState == 1) {
                        /* Setup and use msg_block element for providing status to users */
                        if ($('msg_block')) {
				var sMessage = '<center><table cellpadding="15"><tr><td><img src="http://www.seohosting.com/images/tools/tools-notice-00.jpg" /></td>';
				sMessage += '<td align="left"><h2>Loading...</h2><br/>The system is fetching the information you requested. ';
                                sMessage += 'Please wait one moment while we gather your data!</td></tr></table></center>';

                                e = $('msg_block');
				e.style.visibility = 'visible';
                                e.innerHTML = sMessage;

                        }

		}

	}

	try {
		reqObject.open(reqType, url, true);
		reqObject.send(null);
	
	} catch (e) {
		alert(e);
	}
	return true;
}

function processXMLHttpRequest(responseObj, responseText) 
{
	if (responseText) {
		$(responseObj).style.visibility = 'visible';
		$(responseObj).style.top = '540px';
		$(responseObj).style.left = document.documentElement.offsetWidth/2 - ($(responseObj).offsetWidth/2 - 8) + 'px';
		$(responseObj).innerHTML = responseText;
		
		oXHR.abort();
	}
}

function resetVerification(curWkgDir)
{
		var randomnumber = Math.round(Math.random() * 1000000000);
		document.getElementById('v_code').value = '';
		document.getElementById('v_img').src = '';
		document.getElementById('v_img').src=curWkgDir + 'include/image_verification.php?randomnumber=' + randomnumber;
}



function cacheOutBlockElement(eid)
{
                sCacheCont = $(eid).innerHTML;
                $(eid).innerHTML = '';
		$(eid).style.visibility = 'hidden';
}

function cacheInBlockElement(eid)
{
                $(eid).innerHTML = sCacheCont;
		$(eid).style.visibility = 'visible';
                sCacheCont = '';
}

function showRemoteBlock(url)
{
        if (url) {

                sRemoteText = '<table id="remote_block_tbl"><tr><td class="rsv_title" align="left">SEO-Tools :: Remote Site Viewer - '+ url
                                + '</td><td class="rsv_close_ctrls" align="right"><a id="rsv_close_ctrls" href="#" onClick="killRemoteBlock()">[CLOSE][X]'
                                + '</a></td></tr><tr><td class="remote_data" style="height:100%" colspan="2" valign="top"><iframe id="rsv_iframe" style="border:0px;width:100%;" border="0" height="100%"  src='+ url +'>'
                                + '</iframe></td></tr></table>';

                $('remote_block').style.visibility = 'visible';
		$('remote_block').style.left = document.documentElement.offsetWidth/2 - ($('remote_block').offsetWidth/2 - 8) + 'px';
		$('remote_block').style.top = '50px';
                $('remote_block').innerHTML = sRemoteText;
                cacheOutBlockElement('response_block');

        }
}

function killRemoteBlock()
{
        if ($('remote_block')) {
                $('remote_block').innerHTML = '';
                $('remote_block').style.visibility = 'hidden';

		cacheInBlockElement('response_block');
        }
}

