/**
 * @constructor
 * @private
 */
function CUIBuilderImp()
{
	throw new Error("CUIBuilderImp is a static class. Do not instantiate.");
}

CUIBuilderImp.DEFAULT_DOMAIN = "www.lexisnexis.com";

CUIBuilderImp.DEFAULT_VERB     = "CUI";

CUIBuilderImp.DEFAULT_LAYOUT   = "ss1";

// Create API Matrix
// The matrix is used to cast object elements into those used by the API.
CUIBuilderImp.matrix          = new Object();

// Filter out MQ fields that we don't want in the query string
// CUIBuilderImp.matrix.pwd      = -1;
// CUIBuilderImp.matrix.uid      = -1;
CUIBuilderImp.matrix.domain        = -1;
CUIBuilderImp.matrix.protocol      = -1;
CUIBuilderImp.matrix.lastName      = -1;
CUIBuilderImp.matrix.firstName     = -1;
CUIBuilderImp.matrix.companyName   = -1;
CUIBuilderImp.matrix.ssn           = -1;
CUIBuilderImp.matrix.streetAddress = -1;	
CUIBuilderImp.matrix.city          = -1;	
CUIBuilderImp.matrix.state         = -1;	
CUIBuilderImp.matrix.zip           = -1;	
CUIBuilderImp.matrix.apinoadf      = -1;	
CUIBuilderImp.matrix.verb          = -1;	
CUIBuilderImp.matrix.TOCTarget     = -1;	
	
// Describe which field names you need to cast into other values
// specific to the API.
CUIBuilderImp.matrix.client          = "clientID";
CUIBuilderImp.matrix.originationCode = "OriginCode";	
CUIBuilderImp.matrix.search          = "query";
CUIBuilderImp.matrix.source          = "src";
CUIBuilderImp.matrix.uid             = "UID";
CUIBuilderImp.matrix.pwd             = "PWD";	
	
/**
 * This matric 
 */
CUIBuilderImp.submit = function(chunnel)
{
	// Preprocessor needs to convert generic after field 
	// to XLink's relativedate field
	chunnel = CUIBuilderImp._preprocessor(chunnel);

	var linker = CUIBuilderImp.getLink(chunnel);

	// If no target, set the target for the same window.	
	if (!Truth.isTrue(chunnel.target))
	{
		chunnel.target = "_self";
	}
	
	// prompt("", linker)
	// And send it on its merry way
	var w = window.open(linker, chunnel.target, NEW_WINDOW_FEATURES); 

};

/**
 * Take any actions that need to be made on the MQ object before it gets
 * submitted to its specific API.
 */
CUIBuilderImp._preprocessor =  function(chunnel)
{
	if (Truth.isTrue(chunnel.pwd))
	{
		chunnel.protocol = "https:";
	}
	
	if (!Truth.isTrue(chunnel.get("layout")))
	{
		chunnel.set("layout", CUIBuilderImp.DEFAULT_LAYOUT)
	}
	
	if (!Truth.isTrue(chunnel.get("verb")))
	{
		chunnel.set("verb", CUIBuilderImp.DEFAULT_VERB)
	}
	
	// If CUI Token isn't set, set it. 
	if (!Truth.isTrue(chunnel.get("cuiToken")))
	{
		var http = new HttpRequest();
		http.setTarget(MasterQuery.baseURL + "getCUIToken.asp");
		chunnel.set("cuiToken", http.get());
	}
	
	return chunnel;
}

CUIBuilderImp.getLink = function(chunnel)
{
	var domain = CUIBuilderImp.DEFAULT_DOMAIN;
	
	if (Truth.isTrue(chunnel.domain)) 
	{
		domain = chunnel.domain;
	}
	
	var action;
	
	if (Truth.isTrue(chunnel.override))
	{
		action = chunnel.override;
	}
	else
	{
		action = chunnel.protocol + "//" + domain + "/clients/";
		
		switch(chunnel.get("verb").toUpperCase())
		{
			case "CUIINT":
				action += "CUIInt/search.asp";
				break;
			case "PQS":
				action += "CUIInt/pqs.asp";
				break;
			case "CUI":
			default:
				action += "CUI/search.asp";
				break;
		}	
		
	}

	return action + "?" + SearchImplementor.getQueryString(chunnel, CUIBuilderImp.matrix);

};