
/*global $,log,app,style,svc,ml,confmodell,modeldisplayCtrl,layoutManager */
/*global country,state,login_ticket,isFuhrparkManager,getBaseConfiguratorURL,tb_show,tb_remove,openWindow,stat,stat_log_cc3,showWait,hideWait,showErrorMessage,
         hideWarningDivs,showPriceChanged,updateHeadline,porsche_merkliste,getModellInfo,loadCCDivs,loadMenuDivs,
         callAngebot,callFarben,backFromAng
*/


// globale Variablen
var merkliste_hashcode = new Date().getTime();
var userData = [];
var saveVehicleDataMode = "";

var afterLogin = null;

//Forward Declarations
/*global showLoginInvalid,loadTextFromLanguageRessource,checkCookie,checkLogin,showLoginPage,showResource,saveRefVehicle,
         loadResource,loadMerkliste,getMerklisteTemplate,setExtraHeader,saveVehicle,getAppCodeLogin,getMklBaseLink,saveVehicleData,
         loadUserDetails,mklUpdateCar,getSelectedOnes 
*/

//- Zugriff auf die Merkliste
function actionShowVehicles()
{
	// wenn kein Ticket und kein Cookie vorhanden Login notwendig
	if (login_ticket !== '' || checkCookie() !== null){	
		checkLogin(loadMerkliste);
	} else {	
		showLoginPage(loadMerkliste);
	}
}

function cmpWithRefVehicles()
{
	setExtraHeader(true, 'mklvgl');
	var arg = '/I/M!' + confmodell.modellcode + '!' + confmodell.fabrikat + '!' + confmodell.farbe + '!' + confmodell.polster + '!GA!' + confmodell.mehrausstattungen;
	showResource ('cc3mklvgl.htm', arg);
}

//- Mit Referenzfahrzeug(en) vergleichen
function actionCmpVehicles()
{
	// wenn kein Ticket und kein Cookie vorhanden Login notwendig
	if (login_ticket !== '' || checkCookie() !== null) {	
		checkLogin(cmpWithRefVehicles);
	} else {	
		showLoginPage(cmpWithRefVehicles);
	}
}


//- Aufruf um Fahrzeuge zu speichern
function actionSaveVehicles()
{
	saveVehicleDataMode = "save";
	// wenn kein Ticket und kein Cookie vorhanden Login notwendig
	if (login_ticket !== '' || checkCookie() !== null){	
		checkLogin(saveVehicle);
	} else {	
		showLoginPage(saveVehicle);
	}
}

//- Aufruf um Fahrzeuge zu speichern
function actionSaveRefVehicle()
{
	saveVehicleDataMode = "save";
	// wenn kein Ticket und kein Cookie vorhanden Login notwendig
	if (login_ticket !== '' || checkCookie() !== null) {	
		checkLogin(saveRefVehicle);
	} else {	
		showLoginPage(saveRefVehicle);
	}
}

//- "Als Referenzfahrzeug abspeichern": Gruppen Checkboxes anzeigen
function showRefVehicleDialog (merkliste_url, args)
{
	merkliste_url += '?width=480&height=350&login=true';
	if (args) {
		merkliste_url += '&' + args;
	}		
	tb_show(null, merkliste_url, false);
}

//- Konfiguratormodell "Als Referenzfahrzeug abspeichern": Gruppen Checkboxes anzeigen
function saveRefVehicle() {
	var merkliste_url = getMklBaseLink();
	merkliste_url = merkliste_url + '/M/' + confmodell.fabrikat + '/' + confmodell.modellcode + '/cc3mklref.htm';
	var args = 'F=' + confmodell.farbe + '&P=' + confmodell.polster + '&M=' + confmodell.mehrausstattungen + '&ART=GA';
	showRefVehicleDialog (merkliste_url, args);
}


//- Referenzfahrzeug Insert|Update
function mklSaveRefVehicle (subpath, data)
{
	var merkliste_url = getMklBaseLink() + subpath + '/refstore.json';

	//- GA Gruppenzuordnungen uebernehmen
	$('input[name=mklFzgGrp]').each(function() {
		if (this.checked) {
			data = data + '&G=' + this.value;
		}
	});
	saveVehicleData (merkliste_url, data);
}

function mklFilterFab (fabonly)
{
	var resource = getMerklisteTemplate();
	if (fabonly) {
		//- Eingeschraenkt nach Fabrikat?
		resource = resource + '?fabonly=' + fabonly;
	}
	loadResource (resource);
}

//- Ticket fuer Kommunikation mit der Anmeldungskomponente speichern
//	wird vom IFrame aufgerufen
function setTicket(ticket)
{
	login_ticket = ticket;
	tb_remove();
	afterLogin();
}

//- Ticket leeren - damit wird dann immer um ein neues Ticket angefragt
function clearTicket()
{
	login_ticket = '';
	// Cookie loeschen
	var options = { path: '/', expires: 10 };
	$.cookie(getAppCodeLogin() + "_ticket", null, options);
}

//- Einloggen abgebrochen
function cancelFromPoiLogon()
{
	tb_remove();
}

//- Pruefen ob bereits ein Cookie gesetzt wurde und Ticket setzen
function checkCookie()
{
	var cookie = $.cookie(getAppCodeLogin() + "_ticket");
	if (cookie !== null ) {
		login_ticket = cookie;
	}
	return cookie;
}

//- Anfrage an die Merkliste mit Ticket um die Userdaten
function checkLogin(nextFunction)
{
	var verify_url = svc.ticketverification_link;
	verify_url = verify_url.replace('$ticket$', login_ticket).replace('$extra_url$', getAppCodeLogin());
	verify_url += "?timestamp=" + new Date().getTime();
	$.ajax({type: "GET", dataType: "json", url: verify_url,
	  success: function(json)
	  {
		userData = json;
		// falls gueltig Status eingeloggt und Merkliste laden
		if (userData.loggedIn)
		{	nextFunction();
		} else
		{	showLoginPage(nextFunction);
		}
	  },
	  error: function(xmlhttprequest)
	  {
   			showLoginPage(nextFunction);
	  }
	});
}

//- Anfrage an die Login-Komponente mit Ticket
function checkTicket(ticket)
{
	var verify_url = svc.ticketverification_link;
	verify_url = verify_url.replace('$ticket$', ticket).replace('$extra_url$', getAppCodeLogin());
	verify_url += "?timestamp=" + new Date().getTime();
	$.ajax({type: "GET", dataType: "json", url: verify_url, success: function(json)	{
		if (json.loggedIn)		{
			isFuhrparkManager = json.role === 'manager';			
		} else {
			showLoginInvalid();
		}

	  },
	  error: function(xmlhttprequest)
	  {
//   			if(typeof console != "undefined")
//   				console.error("invalid ticket");
		  showLoginInvalid();
	  }
	});
}

//- Login Seite von der Anmeldungskomponente laden
function showLoginPage(nextFunction)
{
	afterLogin = nextFunction;
	var lightboxParams = 'TB_iframe=true'; // thickbox parameters
	if (style.isAudi) { lightboxParams += '&height=470&width=740'; }
	else if (style.isSeat || style.isSkoda) { lightboxParams += '&height=400&width=520'; }
	else { lightboxParams += '&height=430&width=520'; }
	lightboxParams += '&login=true';
	var loginURL = svc.login_komponente + "loginpage/" + getAppCodeLogin() + "?" + lightboxParams;
	tb_show(null, loginURL, false);
}

function getMerklisteTemplate(){	
	return app.isGA ? 'cc3merkliste_ga.htm' : 'cc3merkliste.htm';
}

//- Merkliste laden
function loadMerkliste() {
	setExtraHeader(true, 'mklref');	
	showResource (getMerklisteTemplate());
}

function setExtraHeader(visible, cssclass){
	if(!style.isGA) {
		return;
	}
	
	if(visible) {
		$('#extraheader').removeClass();
		$('#extraheader').addClass(cssclass);
		$('#modell_serie_big .navigation_full').hide();
		$('#header').height("165px");
		$('#extraheader').show();		
	} else {
		$('#extraheader').hide();
		$('#header').height("75px");
		$('#modell_serie_big .navigation_full').show();
	}
	
	if(cssclass === "")	{
		$('#logo').attr('src',svc.logo_baseurl + "logo_" + confmodell.fabrikat + ".gif");
	} else {
		$('#logo').attr('src',svc.logo_baseurl + "logo_All.gif");
	}
}

function showResource (file, args)
{
	loadResource (file, args);
	// fuer Audi Image statt gerenderten Text
	if (style.isAudi) {
		$("#headline_image").attr('src', svc.stat_images_lang + "header_merkliste.gif");
	} else {
		loadTextFromLanguageRessource('cc3.myFavouritesHeadline', function (jsonText) {
			if (style.isSeat)
			{	$("#headline_image_rendered_text").attr('src',(svc.headline_link + escape(jsonText)));
			}
			else
			{	$("#headline_image_rendered_text").attr('src',(svc.headline_link + jsonText));
			}
		});
	}
	$("#headline_image_zusatz").hide();
	$("#rundherum").addClass('hide_it');
	$("#navigation").addClass('hide_it');
	$("#modell_serie_big").removeClass('remove_it').addClass('merkliste');
	$("#nav_back_serie").addClass('enabled');
	// statistics
    stat_log_cc3(stat.step_merkliste, false);
}

//- Merkliste laden (ohne Statistics)
function mklBackToList()
{
	if (style.isAudi) {
		$("#headline_image").attr('src', svc.stat_images_lang + "header_merkliste.gif");
	}
	loadResource (getMerklisteTemplate());
	setExtraHeader(true, 'mklref');
}

//- Mail Form/Confirmation entfernen
function mklHideMailForm()
{
	tb_remove();
}

function mklShowMailForm()
{
	var url = getMklBaseLink() + '/cc3merkmail.txt';
	var lightboxParams;
	$('#lbInlineDiv').load(url + "?", function(){
		if (style.isAudi) { lightboxParams = 'height=470&width=740'; }
		else if (style.isSeat || style.isSkoda) { lightboxParams = 'height=400&width=520'; }
		else { lightboxParams = 'height=520&width=520'; }
		tb_show(null, "#TB_inline?" + lightboxParams + "&inlineId=lbInlineDiv", false);
	});
}

function mklSendListAsMail()
{
	var merkliste_url = getMklBaseLink() + '/cc3merkmail.txt';

	var from    = $('#mkl_send_from').attr('value');
	var email   = $('#mkl_send_email').attr('value');
	var subject = $('#mkl_send_subject').attr('value');
	var comment = $('#mkl_send_comment').attr('value');

	$.post(merkliste_url,
		{ 'mail.from': from,
		  'mail.to': email,
		  'mail.subject': subject,
		  'mail.body': comment
		},
		function(data) {
			$('#TB_ajaxContent').html(data);
		}
	);
}

//- Liste von Fahrzeugen
function loadResource (resource, fzgids)
{
	showWait();
	var callmerkliste = getMklBaseLink();
	if (fzgids)
	{	//- Durch '|' getrennte Fzg-ID's
		callmerkliste = callmerkliste + fzgids;
	}
	callmerkliste += '/' + resource;

	$.get(callmerkliste, function(data) {
		$("#modell_serie_text").html(data);
		loadUserDetails();
		if (typeof showPriceChanged === "function") {
			showPriceChanged();
		} else {
			hideWait();
		}
	});
}

//- Back-Button von Merkliste geklickt
function backClickMerkliste() {
	$("#modell_serie_big").addClass('remove_it').removeClass('merkliste');
	var imgurl = $('#nav_back_serie').attr('src');
	imgurl = imgurl.replace('but_zurueck_alt.gif','but_zurueck.gif');
	imgurl = imgurl.replace('but_zurueck_alt_ro.gif','but_zurueck.gif');
	$('#nav_back_serie').attr('src', imgurl);
	$("#rundherum").removeClass('hide_it');
	$("#navigation").removeClass('hide_it');
	
	updateHeadline();
	setExtraHeader(false, "");
	
	if (style.isPorsche) {
		$("#layercdr").removeClass('hide_it');
		porsche_merkliste = false;
	}
	
	layoutManager.resetState();
	layoutManager.doLayout();
	layoutManager.updateInfoSize();
}

//- Fahrzeug speichern
function saveVehicle ()
{
	var merkliste_url = getMklBaseLink();
	merkliste_url = merkliste_url + '/M/' + confmodell.fabrikat + '/' + confmodell.modellcode;
	merkliste_url += '/speichern.json';

	//- Modellkonfiguration
	var data =  'F=' + confmodell.farbe +
	            '&P=' + confmodell.polster +
	            '&M=' + confmodell.mehrausstattungen +
	            '&ART=CC';
	saveVehicleData (merkliste_url, data);
}

//- SL-Fahrzeug speichern
function saveSLVehicle(fab, lagfzgkey)
{
	var merkliste_url = getMklBaseLink() + '/M/' + fab + '/' + lagfzgkey + '/speichern.json';
	var data = 'F=&P=&M=&ART=SL';
	saveVehicleData (merkliste_url, data);
}

function saveVehicleData (merkliste_url, data)
{
	$.ajax({type: "POST", dataType: "json", url: merkliste_url, data: data,
	  success: function(mkl_response)
	  {
		if (mkl_response.hashcode && mkl_response.hashcode !== '0') {
			merkliste_hashcode = mkl_response.hashcode;
		}

		switch(mkl_response.status) {
			//- Speichern OK
			case "OK":
				$('input[name=fzgid]').val(mkl_response.fzgid);
				hideWarningDivs();
				if (saveVehicleDataMode === "edit") {
					// Referenzfahrzeug bearbeitet, Merkliste neu laden
					loadResource (getMerklisteTemplate());
				} else {
					// neues Fahrzeug gespeichert, OK Meldung zeigen
					$("#mkl_saved_information").show();
					$("#lighbox_close_button").show();
					tb_show(null,"#TB_inline?height=170&width=280&inlineId=lightbox",false);
				}
				break;
			//- INFO: "mehr als 12 Fahrzeuge"
			case "NOTOK":
				hideWarningDivs();
				$("#mkl_toomuch_saved").show();
				$("#lighbox_close_button").show();
				tb_show(null,"#TB_inline?height=170&width=280&inlineId=lightbox",false);
				break;
			case "NOAUTH":
				showLoginPage(saveVehicle);
				break;
			default:
				break;
		}
	  },
	  error: function(xmlhttprequest)
	  {
		  showErrorMessage();
	  }
	});
}

//- Fahrzeug(e) loeschen
function mklDeleteCar(fzgid)
{
	mklUpdateCar(fzgid,'/loeschen.json');
}

//- GA Gruppenzuordnungen
function mklAssignCar (fzgid)
{
	saveVehicleDataMode = "edit";
	var merkliste_url = getMklBaseLink() + '/F/' + fzgid + '/cc3mklref.htm';
	showRefVehicleDialog (merkliste_url, '');
}

//- Fahrzeug(e) aktualisieren (geaenderten Preis uebernehmen)
function mklAktualisieren (fzgid)
{
	mklUpdateCar(fzgid,'/aktualisieren.json');
}

//- Fahrzeug(e) update
function mklUpdateCar(fzgid,action)
{
	var merkliste_url = getMklBaseLink();
	merkliste_url = merkliste_url + '/I/' + fzgid + action;

	$.ajax({type: "POST", dataType: "json", url: merkliste_url,
	  success: function(mkl_response)
	  {
		if (mkl_response.hashcode && mkl_response.hashcode !== '0') {
			merkliste_hashcode = mkl_response.hashcode;
		}
		switch(mkl_response.status) {
			case "OK":
				mklBackToList();
				break;
			case "NOTOK":
				showErrorMessage();
				break;
			case "NOAUTH":
				showErrorMessage();
				break;
			default:
				showErrorMessage();
		}
	  },
	  error: function(xmlhttprequest) {
		  showErrorMessage();
	  }
	});

}

function mklAddCmp (fzgids)
{
	loadResource (getMerklisteTemplate(), '/X/' + fzgids);
}

//- Details zum User von Anmeldekomponente laden und in DOM einbinden
function loadUserDetails() {
	var userdetailURL = svc.login_komponente + "infopage/" + getAppCodeLogin() + "/" + login_ticket;
	$.get (userdetailURL, function(data) {
		$("#mkl_userdetails").html (data);

		//set actions to links
		//Mein Profil
		var $old_url = $("#action_mkl_show_profile").attr("href");
		var lightboxParams = 'TB_iframe=true'; // thickbox parameters
		if (style.isAudi) { lightboxParams += '&height=470&width=740'; }
		else if (style.isSeat || style.isSkoda) { lightboxParams += '&height=400&width=520'; }
		else { lightboxParams += '&height=430&width=520'; }
		lightboxParams += '&login=true';
		var $new_url = $old_url + "?" + lightboxParams;
		$("#action_mkl_show_profile").attr("href", "#");
		$('#action_mkl_show_profile').click(function(){tb_show(null, $new_url, false);});

		//Abmelden
		var $run_later = $("#action_mkl_logout").attr("href");
		$("#action_mkl_logout").attr("href", "#");
		$("#action_mkl_logout").click(function()
			{
				$.ajax ({ url: $run_later});
				clearTicket();
				if (style.isAudi) {
					if (state.ansicht === 'bild' || state.ansicht === 'liste') {
						$("#headline_image").attr('src', svc.stat_images_lang + "header.gif");
					} else {
						$("#headline_image").attr('src', svc.stat_images_lang + "header_cc.gif");
					}
				}
				backClickMerkliste();
			}
		);
    });
}

//- Ausgewaehlte Fahrzeuge loeschen
function mklDeleteSelected() {
	var selectedOnes = getSelectedOnes();
	// wenn kein Fahrzeug ausgewaehlt wurde Fehlermeldung bringen
	if (selectedOnes.count < 1) {
		hideWarningDivs();
		$("#mkl_delete_min").show();
		$("#lighbox_close_button").show();
		tb_show(null,"#TB_inline?height=170&width=280&inlineId=lightbox",false);
	} else {
		mklDeleteCar (selectedOnes.selection);
	}
}

function mklShowCmp (fzgids)
{
	loadResource ('cc3mklvgl.htm', '/I/' + fzgids);
	setExtraHeader(true, 'mklvgl');
}

//- Ausgewaehlte Fahrzeuge vergleichen
function mklCompareSelected() {
	var selectedOnes = getSelectedOnes();
	// wenn mehr als drei zum Vergleich ausgewaehlt wurden Fehlermeldung bringen
	if (selectedOnes.count < 1) {
		hideWarningDivs();
		$("#mkl_delete_min").show();
		$("#lighbox_close_button").show();
		tb_show(null,"#TB_inline?height=170&width=280&inlineId=lightbox",false);
	} else	if (selectedOnes.count > 3) {
		hideWarningDivs();
		$("#mkl_compare_max").show();
		$("#lighbox_close_button").show();
		tb_show(null,"#TB_inline?height=170&width=280&inlineId=lightbox",false);
	}
	else {
		mklShowCmp (selectedOnes.selection);
	}
}

//- Welche Fahrzeuge wurden ausgewaehlt (= welche Checkboxes sind geklickt)
function getSelectedOnes()
{
	var selection = '';
	var count = 0;
	$("input[name='mkl_modelle']:checked").each(function(){
			count++;
			selection += $(this).val() + '|';
	});
	return { "selection" : selection , "count" : count };
}

//- Detail-Anzeige eines Fahrzeuges im CC aus der Merkliste
function mklDetailCar (fab, mc, auv, farbe, polster, maus, back, innen, imoimgb, imoimg)
{
	// Modell und Daten fuer den CC setzen
	confmodell.setModellInformation(mc, auv, farbe, polster, maus, fab);
	// Modellgruppe und Bezeichnung setzen
	// (um auf die Seite mit den Ausstattungsvarianten zurueckkehren zu koennen)
	var modellInfo = getModellInfo(mc);
	if (modellInfo !== null) {
		confmodell.setFabrikat(modellInfo.fab);
		confmodell.setModellgruppe(modellInfo.imoimg);
		confmodell.setBezeichnung(modellInfo.imoimgb);
	}
	else {
		confmodell.setFabrikat(fab);
		confmodell.setModellgruppe(imoimg);
		confmodell.setBezeichnung(imoimgb);
	}

	// Basis Element fuer den CC laden
	if (state.ansicht === 'bild' || state.ansicht === 'liste' || state.ansicht === 'modell') {
		// wenn von der Startseite Modellbild einfuegen
		if (state.ansicht === 'bild' || state.ansicht === 'liste') {
			$("#info_text_picture").removeClass('remove_it');
			$("#info_picture").hide();
			$("#info_header_big-div").removeClass('remove_it');
			$("#navigation").show();
		}
		loadCCDivs();
		loadMenuDivs();
		var callmenu = getBaseConfiguratorURL ("cc3menu.txt");
		$.get(callmenu,function(data) {
			$("#menu").html(data);
			if (mc && farbe && polster)	{	
				callAngebot();
			} else {	
				callFarben();
			}
		});
	}
	else {
		// Verlinkung auf die jeweilige Seite
		if (mc && farbe && polster)
		{	callAngebot();
		} else
		{
			if (state.ansicht === 'cc.angebot') {
				backFromAng();
			}
			callFarben();
		}
	}

	//- Ueberschrift aktualisieren
	updateHeadline();
	$("#rundherum").scrollTop(0);
	
	if (modeldisplayCtrl.mediaservice !== null) {
		modeldisplayCtrl.setView('front');
	}

	backClickMerkliste();
	hideWait();
}

//- Merkliste drucken
function mklPrintAll () {
	var xhtml2pdfURL = getMklBaseLink() + '/cc3mklpdf.xml';
	var pdfURL = svc.nwapp + '?SVC=XHTML2PDF&XMLURL=' + escape(xhtml2pdfURL);
	var pdfWin = openWindow(pdfURL, 'pdfDruck', 'resizable=yes,scrollbars=no,width=950,height=650,screenX=50,screenY=50');
	pdfWin.window.focus();
}

// Fahrzeug Vergleich drucken
function mklPrintComparison (fzgids) {
	var xhtml2pdfURL = getMklBaseLink() + "/I/" + fzgids + '/cc3mklvglpdf.xml';
	var pdfURL = svc.nwapp + '?SVC=XHTML2PDF&XMLURL=' + escape(xhtml2pdfURL);
	var pdfWin = openWindow(pdfURL, 'pdfDruck', 'resizable=yes,scrollbars=no,width=950,height=650,screenX=50,screenY=50');
	pdfWin.window.focus();
}

// Fahrzeug Detail drucken aus der Merkliste
function mklPrintCar(fab, mc, auv, farbe, polster, maus)
{
	var xhtml2pdfURL = svc.cfgapp + "cc3pdf.xml" + "?MODELL=" + mc + "&F=" + farbe + "&P=" + polster + "&M=" + maus + "&FAB=" + fab;
	var pdfURL = svc.nwapp + '?SVC=XHTML2PDF&XMLURL=' + escape(xhtml2pdfURL);
	var pdfWin = openWindow(pdfURL, 'pdfDruck', 'resizable=yes,scrollbars=no,width=950,height=650,screenX=50,screenY=50');
	pdfWin.window.focus();
}


function getAppCodeLogin()
{
	if (style.isGA){
		return "ga";
	}

	return "cc3_" + country + "_" + (style.isVw ? "vw": style.value.toLowerCase());
}

function getMklBaseLink()
{
	//- "/MERKLISTE/(**ENV**)/$ticket$/$app$/$hashcode$"
	var mklBaseURL = svc.merkliste_link;
	mklBaseURL = mklBaseURL.replace('$ticket$',   login_ticket);
	mklBaseURL = mklBaseURL.replace('$app$',      getAppCodeLogin());
	mklBaseURL = mklBaseURL.replace('$hashcode$', merkliste_hashcode);
	return mklBaseURL;
}
