function MigrationHelper()
{
    if(isDev())
        alert("MigrationHelper is static.  Do not instantiate. Use MigrationHelper.isMigrated() method.");
}

function getPRMHost()
{    
    var PRMHostString = "";
    PRMHostString = window.location.protocol + "//" + window.location.hostname + "/clients/controls/prm/";
    return PRMHostString;
}

MigrationHelper.isMigrated = function(strCuiName)
{    
     var http = new HttpRequest();
	 http.setTarget(getPRMHost() + "GetMigrationStatus.asp");
	 http.setForm(new URLBuilder("Cui", strCuiName));
	 http.requestHeaders.Accept = 'text/plain';	 
	 return http.post();     
     
}


MigrationHelper.getBocaSource = function(strDaytonSource,flag)
{    
     var http = new HttpRequest();
	 http.setTarget(getPRMHost()+"GetBocaSource.asp");
	 http.setForm(new URLBuilder("source", strDaytonSource,"flag",flag));
	 http.requestHeaders.Accept = 'text/plain';	 
	 return http.post();     
}


function isBoca(strSource)
{    
     var http = new HttpRequest();
	 http.setTarget(getPRMHost()+"GetBocaSource.asp");
	 http.setForm(new URLBuilder("source", strSource,"flag","-1"));
	 http.requestHeaders.Accept = 'text/plain';	 
	 if(http.post() == "True")
		return true;
	 else    
	     return false;
}



function checkSfi(sfi)
{
	var src=""
	switch(sfi)
	{
		
		case 'US04NBAssetLocSrch':
		case '2515':
			src='314697';
			break;
		case 'US04NBBankrupSrch':
		case '1375':
		case '2517':
			src='314825';
			break;
		case 'US04NBBoatRegSrch':
			src='314023';
			break;
		case 'US04NBBusLocSrch':
		case '1930':
			src='314670';
			break;
		case 'US04NBCrimHisSrch':
			src='314776';
			break;
		case 'US04NBDriverSrch':
		case '2727':
			src='314700';
			break;
		case 'US04NBJudLiensSrch':
		case '2519':
			src='314784';
			break;
		case 'US04NBMotVehSrch':
		case '2729':
			src='314696';
			break;
		case 'US04NBPerLocSrch':
			src='314667';
			break;
		case 'US04NBSmartBusSrch':
			src='314662';
			break;
		case 'US04NBSmartLocSrch':
			src='314826';
			break;
		case 'US04NBSmartPerSrch':
			src='314664';
			break;
		case 'US04NBUCCFilSrch':
			src='314689';
			break;
		case 'US04NBLicensesSrch':
		case '2522':
			src='314749';
			break;
		case 'US04NBPubRecStSrch':
			src='315581';
			break;	
	 }
	 return src;
}function HttpRequest(returnType)
{
	// Are we returning XML or Text
	if (returnType) {
		this._returnType = returnType
	}
	else
	{
		this._returnType = HttpRequest.RESPONSE_TEXT
	}

	this.xmlhttp = new XMLHttpRequest();

	this.requestHeaders     = new Object();

	// Target defaults to self
	this._target = document.URL

	this._form

}

/**
 * Constant for returning XML
 */
HttpRequest.RESPONSE_XML = "responseXML"

/**
 * Constant for returning Text
 */
HttpRequest.RESPONSE_TEXT = "responseText"


HttpRequest.prototype.getTarget = function()
{
	return this._target
}

HttpRequest.prototype.setTarget = function(target)
{
	this._target = target
}

HttpRequest.prototype.getForm = function()
{
	return this._form
}

HttpRequest.prototype.setForm = function(form)
{
	if (typeof(form) == "object")
	{
		this._form = form.toString()
	}
	else
	{
		this._form = form
	}
}

HttpRequest.prototype._getURI = function()
{
	if (this._form) {
		return this._target + "?" + this._form
	}
	return this._target
}

HttpRequest.prototype.get = function(closure)
{
	if (closure)
	{
		this.asynchronousGet(closure)
	}
	return this.synchronousGet()
}

HttpRequest.prototype.post = function(closure)
{
	if (closure)
	{
		this.asynchronousPost(closure)
	}
	return this.synchronousPost()
}

HttpRequest.prototype.asynchronousGet = function(closure)
{
	// This, as in the this Object, no longer refers to this in closures,
	// so we need to copy it.
	// A good article on this is
	// http://w3future.com/html/stories/callbacks.xml
	var me = this

	// For asynchronous calls you can't use on
	var http = new XMLHttpRequest();
	http.open("GET", this._getURI(), true)

	http.onreadystatechange = function()
    {
        if(http.readyState == 4)
        {
            http.onreadystatechange = function(){}

            if (closure != null)
            {
				closure(http[me._returnType])
			}
        }
    };
	http.send(null)
}

HttpRequest.prototype.asynchronousPost = function(closure)
{
	var me = this
	var http = new XMLHttpRequest();

	http.open("POST", this.getTarget(), true);
	http.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8")

	http.onreadystatechange = function()
    {
        if(http.readyState == 4)
        {
            http.onreadystatechange = function(){}

            closure(http[me._returnType])
        }
    };
	http.send(this.getForm())
}


HttpRequest.prototype.synchronousGet = function()
{
	var ret = ""

	this.xmlhttp.open("GET", this._getURI(), false)

	for(var header in this.requestHeaders)
	{
        this.xmlhttp.setRequestHeader(header, this.requestHeaders[header])
	}

	this.xmlhttp.send(null)
	if (this.xmlhttp.status == 200)
	{
		ret = this.xmlhttp.responseText
	}
	return ret
}

HttpRequest.prototype.synchronousPost = function(target, content)
{
	var ret = ""

	this.xmlhttp.open("POST", this.getTarget(), false);

	// Needed for form posting
	this.xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8")
	for(var header in this.requestHeaders)
	{
        this.xmlhttp.setRequestHeader(header, this.requestHeaders[header])
	}

	this.xmlhttp.send(this.getForm())
	if (this.xmlhttp.status == 200)
	{
		ret = this.xmlhttp.responseText
	}
	return ret
}

////////////////////////////////////////////////////////////////////////////////
// XMLHttpRequest

/**
 * Cross-browser XMLHttpRequest instantiation. Posted by Gyoung-Yoon Noh
 * on the Ruby on Rails mailing list.
 *
 * Usage:
 *
 *        xmlhttp = new XMLHttpRequest()
 *
 * @author Gyoung-Yoon Noh
 * @link   http://hieraki.goodlad.ca/read/chapter/8#page16
 */


if ((typeof XMLHttpRequest == 'undefined') ||
	 (typeof XMLHttpRequest == null) ||
	  (typeof XMLHttpRequest == undefined))
{
	XMLHttpRequest = function ()
	{
		var msxmls = ['MSXML3', 'MSXML2', 'Microsoft']
		for (var i=0; i < msxmls.length; i++)
		{
			try
			{
				return new ActiveXObject(msxmls[i]+'.XMLHTTP')
			}
			catch (e) { }
		}
		//throw new Error("No XML component installed!")
	}
}








// XMLHttpRequest
////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////
// URLBuilder

/**
 * Class to facilitate GET and POST query strings.
 *
 * Vars can be passed in through the constructor:
 *
 *    var u = new URLBuilder("word", "ping", "name", "pang")
 *
 * u.toString() returns "word=ping&name=pang"
 */
function URLBuilder()
{
	this._vars = new Object()

	if (arguments.length > 0)
	{
		for (var x = 0; x < arguments.length; x = x + 2)
		{
			if (arguments[x + 1] == undefined)
			{
				arguments[x + 1] = ""
			}
			this.addVar(arguments[x], arguments[x + 1])
		}
	}
}

URLBuilder.prototype.addVar = function(key, val)
{
	this._vars[encodeURIComponent(key)] = encodeURIComponent(val)
}

URLBuilder.prototype.toString = function()
{
	var delim = '';
	var url = '';
	for (key in this._vars)
	{
		url += delim + key + '=' + this._vars[key];
			delim = '&'
	}
	return url
}