/**
 * Funktionalitäten des Teasermoduls
 * 
 * @param filterTargetGroup string - Zielgruppe nach der gefiltert werden soll, oder leerer String
 * @param urlsData string - Urls zu JSON-Daten
 * @param localization array - Feld 0: Länderkürzel des aktuellen Projekts, Feld 1: Sprachkürzel zur Zuordnung der Mappingdaten
 * @returns {JobSearchTeaser}
 */
function JobSearchTeaser(filterTargetGroup, urlData, localization)
{	
	var jobs = new Object();	//Variable für aus Jobdaten generiertes Objekt
	var mapping = new Object();	//Variable für aus Mappingdaten generiertes Objekt
	var localTest = false;
	
	//Zuordnung der Ländercodes zu den Country-IDs
	var mappingCountryCodes =
	{
		"UKE" : "5", "DED" : "10", "FRF" : "11", "TRT" : "12", "ITI" : "54", "ESS" : "55", "ATD" : "56", "SES" : "57",
		"NON" : "58", "FIS" : "59", "DKD" : "60", "GRG" : "61", "PTP" : "62", "PLP" : "64", "CZC" : "65", "RUR" : "66",
		"HUU" : "67", "SKS" : "68", "SIS" : "69", "ROR" : "70", "HRC" : "61", "BGB" : "72", "ILH" : "74",
		"USE" : "158", "MXE" : "596", "AUE" : "688", "CNC" : "694", "INH" : "705", "JPJ" : "717", "KRK" : "723",
		"PHP" : "738", "TWC" : "744", "THT" : "750", "AGS" : "755", "BRB" : "756", "CLS" : "757", "CHG" : "925", "AUS" : "688", "SAE" : "1227"
	};
	var filterKeyCountry = "";
	
	if(mappingCountryCodes[localization[1]] != undefined)
		filterKeyCountry = mappingCountryCodes[localization[1]];
	
	if(window.location.href.indexOf("localhost") != -1)
		localTest = true;
	
	//JSON - Daten laden
	$.ajax({	//Mapping - Daten
		type : "POST", 
		url : urlData + "map_city-" + localization[0] + ".json", 
		success : function(data)
					{	
						if(localTest)
							data = $.parseJSON(data);
						
						if(typeof(data) == "string")
							handleLoadingError();
						else
							triggerStart("city", data);	
							
					},
		error : function(){handleLoadingError();}
	});

	$.post(urlData + "jobs.json", 
			function(data, status)
			{
				if(localTest)
					data = $.parseJSON(data);
				
				triggerStart("jobs", data);
			}
	);	//Job - Daten

	
	/**
	 * Wenn Mapping - Daten in einer bestimmten Sprache nicht geladen werden konnten,
	 * die jeweiligen Daten in der Sprache mit dem Kürzel "enuk" laden
	 */
	var handleLoadingError = function()
	{
		$.ajax({
			type : "POST", 
			url : urlData + "map_city-enuk.json", 
			success : function(data)
						{
							if(localTest)
								data = $.parseJSON(data);
							
							triggerStart("city", data);
						}
		});
	};
	
	
	var countFiles = 0;
	
	/**
	 * Geladene JSON - Daten vorverarbeiten und eigentlichen Programmablauf starten, sobald alle Daten geladen wurden
	 * 
	 * @param nameData - Schlüssel zur Identifizierung der Datenquelle
	 * @param dataLoaded - Geladene JSON - Daten
	 */
	var triggerStart = function(nameData, dataLoaded)
	{	
		var limitFiles = 2;	//Anzahl der Datenquellen
		
		countFiles ++;
		var nodeRoot = dataLoaded;

		if(nameData == "jobs")
			jobs = nodeRoot["jobList"]["job"];
		else
			mapping["cityId"] = nodeRoot["MappingTables"]["LineList"]["Line"];
	
		//Alle Daten wurden geladen
		if(countFiles == limitFiles)
			showTeaserlist();	//Jobliste
	};
	
	
	/**
	 * Jobliste für Teaser ausgeben
	 * 
	 * @returns boolean
	 */
	var showTeaserlist = function()
	{	
		var countTeaser = 0;
		var limitTeaser = 4;
		var searchForHotjobs = true;
		var joblist = jobs;
		var markup = "";
		var titleCurrent = "";
		
		$("#outputJobteaser").html("");
		
		for(var i = 0; i < 2; i ++)
		{	
			$.each(
				joblist,
				function(index, value)
				{//console.log("filterTargetGroup: " + filterTargetGroup);
					if((filterTargetGroup == "" || (filterTargetGroup == value["targetGrp"]["targetGrpId"])) && (filterKeyCountry == "" || filterKeyCountry == value["countryId"]))
					{
						if((searchForHotjobs && value["hotJob"]["isHotJob"] != "false") || !searchForHotjobs)
						{
							if(value["posTitle"] == "")
								titleCurrent = value["posTitle_en"];
							else
								titleCurrent = value["posTitle"];
							
							markup += "<li><a class=\"arrowRed\" href=\"javascript:void(0);\" title=\"" + titleCurrent + "\" ";
							markup += "onclick=\"window.open('" + value["JobViewUrl"] + "', '', 'width=840, scrollbars=yes, resizable=yes');\">";		
							markup += titleCurrent + "&nbsp;-&nbsp;" + getNameCity(value["cityId"]);
							markup += "</a></li>";
							
							countTeaser ++;
						}
					}
					if(countTeaser == limitTeaser)	//Schleife abbrechen, nachdem Limit erreicht wurde
						return false;
				}
			);
			
			//Wurden Hotjobs gefunden, Schleife abbrechen, sonst Schleife noch einmal durchlaufen um "normale" Jobs auszugeben 
			if(countTeaser != 0)
				break;
			else
				searchForHotjobs = false;
		}
		
		if(countTeaser > 0)
		{
			$("#teaserTwoColumnHalf .imgDescr").hide();
			$("#outputJobteaser").append("<ul>" + markup + "</ul>");
		}	
	};
	
	
	/**
	 * Zuordnung von Werten in Jobdaten zu Wlerten in Mappingtabelle
	 * Wenn für den Key keine Mappingdaten existieren, oder in den Mappingdaten
	 * kein zugehöriger Wert existiert, wird der Wert aus den Jobdaten zurückgegeben
	 * 
	 * @param valueMap - Wert auf den das Mapping angewendet werden soll
	 * @returns string
	 */
	var getNameCity = function(valueToMap)
	{

		if(mapping["cityId"] != undefined)	//Wenn für Key Mappingdaten existieren, zugehörigen Wert ermitteln
		{
			$.each(
				mapping["cityId"],
				function(indexCell, valueCell)
				{
					if(valueCell["Cell"][0]["content"] == valueToMap)
					{
						valueMapped = valueCell["Cell"][1]["content"];
						return false;	//Schleife abbrechen
					}	
				}
			);
		}
		
		return valueMapped;
	};
}
