/**
 * @constructor
 * @private
 */
function SeisintImp()
{
	throw new Error("SeisintImp is a static class. Do not instantiate.");
}

// CONSTANTS
SeisintImp.DEFAULT_DOMAIN          = "www.lexis.com";
// SeisintImp.DEFAULT_DOMAIN          = "cert-2610.lexis.com";
// SeisintImp.DEFAULT_DOMAIN          = "wmitzjx.lexis.com";


SeisintImp.SMRTLX_COMPANY_LIBFILE  = "SMRTLX;BSNRPT"
SeisintImp.SMRTLX_PERSONAL_LIBFILE = "SMRTLX;PERRPT"
SeisintImp.SMRTLX_LOCATION_LIBFILE = "SMRTLX;LOCRPT"

SeisintImp.SMRTLX_COMPANY_CSI      = "174612"
SeisintImp.SMRTLX_PERSONAL_CSI     = "174611"
SeisintImp.SMRTLX_LOCATION_CSI     = "174613"

SeisintImp.SEISNT_COMPANY_LIBFILE  = "SMRTLX;BSNRPT"
SeisintImp.SEISNT_PERSONAL_LIBFILE = "SMRTLX;PERRPT"
SeisintImp.SEISNT_LOCATION_LIBFILE = "SMRTLX;LOCRPT"


// Create API Matrix
// The matrix is used to cast object elements into those used by the API.
SeisintImp.matrix          = new Object();

// Filter out MQ fields that we don't want in the query string
SeisintImp.matrix.pwd           = -1;
SeisintImp.matrix.uid           = -1;
SeisintImp.matrix.domain        = -1;
SeisintImp.matrix.protocol      = -1;

SeisintImp.matrix.lastName      = -1;
SeisintImp.matrix.firstName     = -1;
SeisintImp.matrix.companyName   = -1;
SeisintImp.matrix.ssn           = -1;
SeisintImp.matrix.streetAddress = -1;
SeisintImp.matrix.state         = -1;
SeisintImp.matrix.zip           = -1;
SeisintImp.matrix.telephone     = -1;
SeisintImp.matrix.birthDate     = -1;
SeisintImp.matrix.searchRadius  = -1;
SeisintImp.matrix.TOCTarget     = -1;	

// Describe which field names you need to cast into other values
// specific to the API.
SeisintImp.matrix.originationCode = "ORIGINATION_CODE";
	
/**
 * This matric 
 */
SeisintImp.submit = function(chunnel)
{
	// Preprocessor needs to convert generic after field 
	// to XLink's relativedate field
	SeisintImp._preprocessor(chunnel);

	// If no target, set the target for the same window.	
	if (!Truth.isTrue(chunnel.target))
	{
		chunnel.target = "_self";
	}
	
	// Get the XML
	var xml;
SeisintImp.SMRTLX_COMPANY_CSI      = "174612"


	switch(chunnel.getSource())
	{
		case SeisintImp.SMRTLX_COMPANY_LIBFILE:
		case SeisintImp.SMRTLX_COMPANY_CSI:
			xml = SeisintImp.getBusinessXML(chunnel);
			chunnel.set("reporttype", "BUS");
			break;
		case SeisintImp.SMRTLX_LOCATION_LIBFILE:
		case SeisintImp.SMRTLX_LOCATION_CSI:
			xml = SeisintImp.getLocationXML(chunnel);
			chunnel.set("reporttype", "LOC");
			break;
		case SeisintImp.SMRTLX_PERSONAL_LIBFILE:
		case SeisintImp.SMRTLX_PERSONAL_CSI:
		default:
			xml = SeisintImp.getPersonXML(chunnel);
			chunnel.set("reporttype", "PER");
			break;
	}
	
	chunnel.setSearchtype("seisint");
	chunnel.setSearch("");
	chunnel.setMenu("");
	// chunnel.setSource("");
	
	// chunnel.set("mj", "");
	// chunnel.setMenu("MIDDLEWARE_CODE", "");
	
	var linker = SeisintImp.getLink(chunnel);
	

	var f = "<form method='post' action='";
	f += linker;
	f += "' id='masterQueryDynaForm' name='masterQueryDynaForm' target='"
	f += chunnel.target
	f += "'>";
	
	f += FormUtil.getHiddenFieldVal('USER_ID', chunnel.getUID());
	f += FormUtil.getHiddenFieldVal('PASSWORD', chunnel.getPWD());
	f += FormUtil.getHiddenFieldVal('LNAUTHSCHEME', 'CP');
	f += FormUtil.getHiddenFieldVal('xsearch', xml);

	f += "</form>";

	var diver = document.getElementById("masterQueryDynaFormDiv");
	
	// Only create a new div if the existing div doesn't exist
	if (diver == null)
	{
		diver = document.createElement("div");
		diver.id = "masterQueryDynaFormDiv"
	}
	
	diver.innerHTML = f;
	document.body.appendChild(diver);
	
	var dForm = document.getElementById("masterQueryDynaForm");

	// prompt("", linker)

	dForm.submit();

	
	chunnel = null;
};

/**
 * Take any actions that need to be made on the MQ object before it gets
 * submitted to its specific API.
 */
SeisintImp._preprocessor =  function(chunnel)
{
	var relativedate = LNParser.convertAfterToRelative(chunnel.getAfter());
	chunnel.c_relativedate = relativedate;
	chunnel.after = "";
	
	if (Truth.isTrue(chunnel.pwd))
	{
		chunnel.protocol = "https:";
	}
	return chunnel;
}

SeisintImp.getLink = function(chunnel)
{
	var domain = SeisintImp.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 + "/research/xlink";
	}

	return action + "?" + SearchImplementor.getQueryString(chunnel, SeisintImp.matrix);

};


SeisintImp.getPersonXML = function(chunnel)
{
	var xml = '<search type="person"><fieldList>';
	
	if (Truth.isTrue(chunnel.get("firstName"))) 
	{
		xml += SeisintImp.getField(chunnel.get("firstName"), "firstName", "First Name");
	}
	if (Truth.isTrue(chunnel.get("lastName"))) 
	{
		xml += SeisintImp.getField(chunnel.get("lastName"), "lastName", "Last Name");
	}
	if (Truth.isTrue(chunnel.get("middleName"))) 
	{
		xml += SeisintImp.getField(chunnel.get("middleName"), "middleName", "Middle Name");
	}
	if (Truth.isTrue(chunnel.get("similiarLastName"))) 
	{
		xml += SeisintImp.getField(chunnel.get("similiarLastName"), "similiarLastName", "Sounds Like");
	}
	if (Truth.isTrue(chunnel.get("streetAddress"))) 
	{
		xml += SeisintImp.getField(chunnel.get("streetAddress"), "streetAddress", "Street");
	}
	if (Truth.isTrue(chunnel.get("city"))) 
	{
		xml += SeisintImp.getField(chunnel.get("city"), "city", "City");
	}
	if (Truth.isTrue(chunnel.get("state"))) 
	{
		xml += SeisintImp.getField(chunnel.get("state"), "state", "State");
	}
	if (Truth.isTrue(chunnel.get("zip"))) 
	{
		xml += SeisintImp.getField(chunnel.get("zip"), "zip", "ZIP");
	}
	if (Truth.isTrue(chunnel.get("searchRadius"))) 
	{
		xml += SeisintImp.getField(chunnel.get("searchRadius"), "searchRadius", "Search Radius");
	}
	if (Truth.isTrue(chunnel.get("telephone"))) 
	{
		xml += SeisintImp.getField(chunnel.get("telephone"), "telephone", "Telephone");
	}
	if (Truth.isTrue(chunnel.get("ssn"))) 
	{
		xml += SeisintImp.getField(chunnel.get("ssn"), "ssn", "SSN");
	}
	if (Truth.isTrue(chunnel.get("birthDate"))) 
	{
		xml += SeisintImp.getField(chunnel.get("birthDate"), "birthDate", "Birth Date");
	}

	return xml + '</fieldList></search>';

};


SeisintImp.getBusinessXML = function(chunnel)
{
	var xml = '<search type="business"><fieldList>';

	if (Truth.isTrue(chunnel.get("companyName"))) 
	{
		xml += SeisintImp.getField(chunnel.get("companyName"), "companyName", "Company Name");
	}	
	if (Truth.isTrue(chunnel.get("streetAddress"))) 
	{
		xml += SeisintImp.getField(chunnel.get("streetAddress"), "streetAddress", "Street");
	}
	if (Truth.isTrue(chunnel.get("city"))) 
	{
		xml += SeisintImp.getField(chunnel.get("city"), "city", "City");
	}
	if (Truth.isTrue(chunnel.get("state"))) 
	{
		xml += SeisintImp.getField(chunnel.get("state"), "state", "State");
	}
	if (Truth.isTrue(chunnel.get("zip"))) 
	{
		xml += SeisintImp.getField(chunnel.get("zip"), "zip", "ZIP");
	}
	if (Truth.isTrue(chunnel.get("telephone"))) 
	{
		xml += SeisintImp.getField(chunnel.get("telephone"), "telephone", "Telephone");
	}

	if (Truth.isTrue(chunnel.get("firstName"))) 
	{
		xml += SeisintImp.getField(chunnel.get("firstName"), "firstName", "First Name");
	}
	if (Truth.isTrue(chunnel.get("lastName"))) 
	{
		xml += SeisintImp.getField(chunnel.get("lastName"), "lastName", "Last Name");
	}
	return xml + '</fieldList></search>';

};


SeisintImp.getLocationXML = function(chunnel)
{
	var xml = '<search type="location"><fieldList>';

	if (Truth.isTrue(chunnel.get("streetAddress"))) 
	{
		xml += SeisintImp.getField(chunnel.get("streetAddress"), "streetAddress", "Street");
	}
	if (Truth.isTrue(chunnel.get("city"))) 
	{
		xml += SeisintImp.getField(chunnel.get("city"), "city", "City");
	}
	if (Truth.isTrue(chunnel.get("state"))) 
	{
		xml += SeisintImp.getField(chunnel.get("state"), "state", "State");
	}
	if (Truth.isTrue(chunnel.get("zip"))) 
	{
		xml += SeisintImp.getField(chunnel.get("zip"), "zip", "ZIP");
	}

	return xml + '</fieldList></search>';

};


SeisintImp.getField = function(value, type, formId)
{
	if (formId === null) 
	{
		formId = type;
	}

	value = value.replace(/\W/g, " ");
	
	return '<field type="' + type + '" formId="' + formId + '">' + value + '</field>';

};

SeisintImp.useGet = function(chunnel)
{
	if (Truth.isTrue(chunnel.pwd) && Truth.isTrue(chunnel.uid)) 
	{
		return false;
	}
	if (Truth.isTrue(chunnel.getSearch()))
	{
		return false;
	}
	return true;
}




