/*	This function was added because, in order to maintain sublist filtering, we
   	had to keep the core field names on the search page.  However, before sending
	the search to the core code we have to rename these fields so that it doesn't
	send them off to FAST as is but rather uses what we specify in filter.py */

function convertSearchableFields()
{
	var fieldsToChange = ["FLD_JPM_COUNTRY", "JPM_LOCATION"];
	for(var i = 0; i< fieldsToChange.length; i++)
	{
		changeFields(fieldsToChange[i]);
	}

}

function changeFields(fieldName)
{
	var target = document.getElementById("idcom.peopleclick.cp.formdata." + fieldName);
	target.name = "nonsearchable." + fieldName;
}


/* Added for services LISA.  Remove when moving to core solution. */

function convertLIJSONToXML(jsonObject)
{
	var convertedDocument = getXMLDocument();

	mapData(jsonObject, convertedDocument.documentElement);

	return(convertXMLDocumentToString(convertedDocument));
		

}

function getXMLDocument()
{
	var baseDocument = '<job-application />';
	var xmlDoc;	
	if (window.DOMParser)
	{
		parser=new DOMParser();
		xmlDoc=parser.parseFromString(baseDocument,"text/xml");
	}
	else
	{
		xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
		xmlDoc.async="false";
		xmlDoc.loadXML(baseDocument);
	}
	return(xmlDoc);
}

function convertXMLDocumentToString(xmlDoc)
{
	if (window.DOMParser)
	{
		return(new XMLSerializer().serializeToString(xmlDoc));
	}
	else
	{
		return(xmlDoc.xml);
	}
}

function createElement(data, parentElement, elementName)
{
	if(data != null)
	{
		var element = parentElement.ownerDocument.createElement(elementName);
		if(data != "")
		{
			if (window.DOMParser)
			{
				element.textContent = data;
			}
			else
			{
				element.text = data;
			}
		}
		parentElement.appendChild(element);
		return(element);
	}
	return(parentElement);
}

function mapData(jsonObject, parentElement)
{
	createElement(jsonObject.coverLetter, parentElement, "coverLetter");
	createElement(jsonObject.meta, parentElement, "meta");
	if(jsonObject.questions)
	{
		mapQuestions(jsonObject.questions, parentElement);
	}
	if(jsonObject.person)
	{
		mapPerson(jsonObject.person, parentElement);
	}

}

function mapQuestions(questionsObject, parentElement)
{
	var questionsElement = createElement("", parentElement, "questions");
	for(var i = 0; i < questionsObject._total; i++)
	{
		var questionElement = createElement("", questionsElement, "question");
		createElement(questionsObject.values[i].question, questionElement, "question");
		createElement(questionsObject.values[i].answer, questionElement, "answer");
	}
}

function mapPerson(personObject, parentElement)
{
	var personElement = createElement("", parentElement, "person");

	createElement(personObject.firstName, personElement, "first-name");
	createElement(personObject.lastName, personElement, "last-name");
	createElement(personObject.emailAddress, personElement, "email-address");
	createElement(personObject.publicProfileUrl, personElement, "public-profile-url");
	createElement(personObject.summary, personElement, "summary");
	createElement(personObject.headline, personElement, "headline");
	createElement(personObject.specialties, personElement, "specialties");
	createElement(personObject.honors, personElement, "honors");
	createElement(personObject.id, personElement, "id");

	if(personObject.location)
	{
		mapLocation(personObject.location, personElement);
	}
	if(personObject.phoneNumbers)
	{
		mapPhoneNumbers(personObject.phoneNumbers, personElement);
	}
	if(personObject.skills)
	{
		mapSkills(personObject.skills, personElement);
	}
	if(personObject.positions)
	{
		mapPositions(personObject.positions, personElement);
	}
	if(personObject.recommendationsReceived)
	{
		mapRecommendations(personObject.recommendationsReceived, personElement);
	}
	if(personObject.educations)
	{
		mapEducations(personObject.educations, personElement);
	}
	if(personObject.patents)
	{
		mapPatents(personObject.patents, personElement);
	}
	if(personObject.languages)
	{
		mapLanguages(personObject.languages, personElement);
	}
	if(personObject.publications)
	{
		mapPublications(personObject.publications, personElement);
	}
	if(personObject.certifications)
	{
		mapCertifications(personObject.certifications, personElement);
	}
	
}

function mapLocation(locationObject, parentElement)
{
	var locationElement = createElement("", parentElement, "location");
	createElement(locationObject.postalCode, locationElement, "postal-code");
	createElement(locationObject.name, locationElement, "name");
	var countryElement = createElement("", locationElement, "country");
	createElement(locationObject.country.code, countryElement, "code");
}

function mapPhoneNumbers(phoneObject, parentElement)
{
	var phoneNumbersElement = createElement("", parentElement, "phone-numbers");
	for(var i = 0; i < phoneObject._total; i++)
	{
		var phoneElement = createElement("", phoneNumbersElement, "phone-number")
		createElement(phoneObject.values[i].phoneNumber, phoneElement, "phone-number");
		createElement(phoneObject.values[i].phoneType, phoneElement, "phone-type");
	}
}

function mapSkills(skillsObject, parentElement)
{
	var skillsElement = createElement("", parentElement, "skills");
	for(var i = 0; i < skillsObject._total; i++)
	{
		var skillElement = createElement("", skillsElement, "skill");
		createElement(skillsObject.values[i].id, skillElement, "id");

		//This is to match the XML format used by LI.  This is not how I would've done it.
		var skillSubElement = createElement("", skillElement, "skill");
		createElement(skillsObject.values[i].skill.name, skillSubElement, "name");
	}
}

function mapPositions(positionsObject, parentElement)
{
	var positionsElement = createElement("", parentElement, "positions");
	for(var i = 0; i < positionsObject._total; i++)
	{
		var positionElement = createElement("", positionsElement, "position");
		createElement(positionsObject.values[i].summary, positionElement, "summary");
		createElement(positionsObject.values[i].id, positionElement, "id");
		createElement(positionsObject.values[i].title, positionElement, "title");
		createElement(positionsObject.values[i].isCurrent ? "on" : "", positionElement, "is-current");
		mapDate(positionsObject.values[i].startDate, positionElement, "start-date");
		mapDate(positionsObject.values[i].endDate, positionElement, "end-date");
		var companyElement = createElement("", positionElement, "company");
		createElement(positionsObject.values[i].company.id, companyElement, "id");
		createElement(positionsObject.values[i].company.name, companyElement, "name");
		createElement(positionsObject.values[i].company.industry, companyElement, "industry");
		createElement(positionsObject.values[i].company.type, companyElement, "type");
		createElement(positionsObject.values[i].company.ticker, companyElement, "ticker");
		createElement(positionsObject.values[i].company.size, companyElement, "size");
	}
	
}

function mapDate(dateObject, parentElement, elementName)
{
	if(dateObject != null)
	{
		var dateElement = createElement("", parentElement, elementName);
		createElement(dateObject.month, dateElement, "month");
		createElement(dateObject.year, dateElement, "year");
		createElement(dateObject.day, dateElement, "day");
		return(dateElement);
	}
	else
	{
		return(parentElement);
	}
	
}

function mapRecommendations(recommendationsObject, parentElement)
{
	var recommendationsElement = createElement("", parentElement, "recommendations-received");
	for(var i = 0; i< recommendationsObject._total; i++)
	{
		var recommendationElement = createElement("", recommendationsElement, "recommendation");
		createElement(recommendationsObject.values[i].id, recommendationElement, "id");
		createElement(recommendationsObject.values[i].recommendationText, recommendationElement, "recommendation-text");
		var recommendationTypeElement = createElement("", recommendationElement, "recommendation-type");
		createElement(recommendationsObject.values[i].recommendationType.code, recommendationTypeElement, "code");
		var recommenderElement = createElement("", recommendationElement, "recommender");
		createElement(recommendationsObject.values[i].recommender.id, recommenderElement, "id");
		createElement(recommendationsObject.values[i].recommender.lastName, recommenderElement, "last-name");
		createElement(recommendationsObject.values[i].recommender.firstName, recommenderElement, "first-name");
		
	}
}

function mapEducations(educationsObject, parentElement)
{
	var educationsElement = createElement("", parentElement, "educations");
	for(var i = 0; i < educationsObject._total; i++)
	{
		var educationElement = createElement("", educationsElement, "education");
		mapDate(educationsObject.values[i].startDate, educationElement, "start-date");
		mapDate(educationsObject.values[i].endDate, educationElement, "end-date");
		createElement(educationsObject.values[i].id, educationElement, "id");
		createElement(educationsObject.values[i].fieldOfStudy, educationElement, "field-of-study");
		createElement(educationsObject.values[i].degree, educationElement, "degree");
		createElement(educationsObject.values[i].schoolName, educationElement, "school-name");
		createElement(educationsObject.values[i].activities, educationElement, "activities");
		createElement(educationsObject.values[i].notes, educationElement, "notes");
	}
}

function mapPatents(patentsObject, parentElement)
{
	var patentsElement = createElement("", parentElement, "patents");
	for(var i = 0; i < patentsObject._total; i++)
	{
		var patentElement = createElement("", patentsElement, "patent");
		mapDate(patentsObject.values[i].date, patentElement, "date");
		createElement(patentsObject.values[i].id, patentElement, "id");
		createElement(patentsObject.values[i].title, patentElement, "title");
	}

}

function mapLanguages(languagesObject, parentElement)
{
	var languagesElement = createElement("", parentElement, "languages");
	for(var i = 0; i < languagesObject._total; i++)
	{
		var languageElement = createElement("", languagesElement, "language");
		createElement(languagesObject.values[i].id, languageElement, "id");
		var languageSubElement = createElement("", languageElement, "language");
		createElement(languagesObject.values[i].language.name, languageSubElement, "name");
	}
}

function mapPublications(publicationsObject, parentElement)
{
	var publicationsElement = createElement("", parentElement, "publications");
	for(var i = 0; i < publicationsObject._total; i++)
	{
		var publicationElement = createElement("", publicationsElement, "publication");
		createElement(publicationsObject.values[i].id, publicationElement, "id");
		createElement(publicationsObject.values[i].title, publicationElement, "title");
		mapDate(publicationsObject.values[i].date, publicationElement, "date");
	}
}

function mapCertifications(certificationsObject, parentElement)
{
	var certificationsElement = createElement("", parentElement, "certifications");
	for(var i = 0; i < certificationsObject._total; i++)
	{
		var certificationElement = createElement("", certificationsElement, "certification");
		createElement(certificationsObject.values[i].id, certificationElement, "id");
		createElement(certificationsObject.values[i].name, certificationElement, "name");
	}
}
