/**
 * @constructor
 * @private
 */
function V1SearchImp()
{
	throw new Error("V1SearchImp is a static class. Do not instantiate.");
}

V1SearchImp.DEFAULT_DOMAIN = "web.lexis-nexis.com";
V1SearchImp.DEFAULT_VERB   = "v1_search";

// Create API Matrix
// The matrix is used to cast object elements into those used by the API.
V1SearchImp.matrix          = new Object();

// Filter out MQ fields that we don't want in the query string
// V1SearchImp.matrix.pwd      = -1;
// V1SearchImp.matrix.uid      = -1;
V1SearchImp.matrix.domain        = -1;
V1SearchImp.matrix.protocol      = -1;
V1SearchImp.matrix.lastName      = -1;
V1SearchImp.matrix.firstName     = -1;
V1SearchImp.matrix.companyName   = -1;
V1SearchImp.matrix.ssn           = -1;
V1SearchImp.matrix.streetAddress = -1;	
V1SearchImp.matrix.city          = -1;	
V1SearchImp.matrix.state         = -1;	
V1SearchImp.matrix.zip           = -1;	
V1SearchImp.matrix.apinoadf      = -1;
V1SearchImp.matrix.verb          = -1;
V1SearchImp.matrix.TOCTarget     = -1;	

	
// Describe which field names you need to cast into other values
// specific to the API.
V1SearchImp.matrix.client          = "clientid";
V1SearchImp.matrix.menu            = "_menu";
V1SearchImp.matrix.originationCode = "ORIGINATION_CODE";	
V1SearchImp.matrix.search          = "query";
V1SearchImp.matrix.sort            = "newSortMode";
V1SearchImp.matrix.source          = "src";
V1SearchImp.matrix.uid             = "USER_ID";
V1SearchImp.matrix.pwd             = "PASSWORD";	
	
/**
 * This matric 
 */
V1SearchImp.submit = function(chunnel)
{
	// Preprocessor needs to convert generic after field 
	// to XLink's relativedate field
	chunnel = V1SearchImp._preprocessor(chunnel);

	var linker = V1SearchImp.getLink(chunnel);

	// prompt("",linker);

	// 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.
 */
V1SearchImp._preprocessor =  function(chunnel)
{
	if (Truth.isTrue(chunnel.pwd) || (chunnel.source.indexOf("SMRTLX") != -1))
	{
		chunnel.protocol = "https:";
		if (!Truth.isTrue(chunnel.get("LNAUTHSCHEME")))
		{
			chunnel.set("LNAUTHSCHEME", "C");
		}
	}
	
	if (!Truth.isTrue(chunnel.get("verb")))
	{
		chunnel.set("verb", V1SearchImp.DEFAULT_VERB);
	}
	
	return chunnel;
}

V1SearchImp.getLink = function(chunnel)
{
	var domain = V1SearchImp.DEFAULT_DOMAIN;
	
	if (chunnel.domain && chunnel.domain !== "") 
	{
		domain = chunnel.domain;
	}
	
	var action;
	
	if (Truth.isTrue(chunnel.override))
	{
		action = chunnel.override;
	}
	else
	{
		action = chunnel.protocol + "//" + domain + "/api.universe/" + chunnel.get("verb");
	}

	return action + "?" + SearchImplementor.getQueryString(chunnel, V1SearchImp.matrix);

};