/*global de*/
de = this.de || {};
de.datev = de.datev || {};
de.datev.portal = de.datev.portal || {};
de.datev.portal.produkte = de.datev.portal.produkte || {};
de.datev.portal.produkte.bestellbutton = function () {
    var thisNamespace = de.datev.portal.produkte.bestellbutton || {};


	////////////////////////////////////////////////////////////////
	/////////// Bestellmanger- Erkennung ///////////////////////////
	////////////////////////////////////////////////////////////////

	var MIN_BESTELL_MGR_VERSION = 1.7;
	var PROG_ID_DVBMEK_COM_SERVER_11 = "DVBestMgr.VersionAccess.1";
	var PROG_ID_DVBMEK_COM_SERVER_12 = "DVBestMgrEK.VersionAccess.1";
	var FIREFOX_PLUGIN_VERSION_11_NAME = "DATEV Bestellmanager Plug-in";
	var FIREFOX_PLUGIN_VERSION_12_NAME = "DATEV Bestell-Manager Plug-in";
	var REG_EXP_FIREFOX_VERSION = /^.*V([0-9]+\.[0-9]+)$/;

	////////////////////////////////////////////////////////////////
	// (2) Cookie checken
	////////////////////////////////////////////////////////////////
	var checkCookie = function () {

			//Cookies erlaubt?
			if(navigator.cookieEnabled) {

				//bestellmanagerCookie gesetzt?
				var bestellmanagerCookie = document.cookie.indexOf('bestellmanager=');
				if (bestellmanagerCookie != -1) {

					var bestellmanagerCookieStart = bestellmanagerCookie + 1;
					//bestellmanagerCookie=false?
					var bestellmanagerCookieFalse = document.cookie.indexOf('false', bestellmanagerCookieStart);
					if (bestellmanagerCookieFalse != -1) {
						//Bestellmanager nicht installiert: kein BestellmanagerCheck
						//-> (9)Formularaufruf
						formularAufrufen();
					}
					else {
						// -> (3) BestellmanagerCheck weil Cookie=true
						initBestellbutton();
					}
				}
				else {
					// -> (3) BestellmanagerCheck weil (noch) kein Cookie gesetzt
					initBestellbutton();
				}
			}
			else {
				//-> (3) BestellmanagerCheck ohne CookieCheck - weil Cookies deaktiviert
				initBestellbutton();
			}
	};

	////////////////////////////////////////////////////////////////
	// (3) Linkwahl
	////////////////////////////////////////////////////////////////
	var initBestellbutton = function () {

		var popup = de.datev.portal.popup;
		var dom = de.datev.dom;
		var events = de.datev.events;

		//Alle Bestellbuttons
		var alleButtons = dom.getElementsByTagAndClassName("a","bestellen");
		
		if (alleButtons && alleButtons.length>0) {

			//->(4)/(5)
			var isBestellManagerInstalled = isSupportedBestellMgrAvailable();
			
			if (isBestellManagerInstalled) {
				for(var i=0; i<alleButtons.length; i++) {
	
					var button = alleButtons[i];
	
					//wenn es ein span gibt, dann Inhalt auslesen
					var bmlinks = dom.getChildrenByClassName(button, "bestellmanagerlink");
					if (bmlinks.length>0) for(var j=0; j<bmlinks.length; j++) {
	
						var bmLinksText = bmlinks[j].firstChild.nodeValue.trim();
					}
	
					//Button da && Bestellmanager installiert && BM Link da
					if (button && isBestellManagerInstalled && bmLinksText) {
	
						//button.setAttribute("target", "_blank");
						//button.attributes.href.nodeValue = bmLinksText;
	
						//->(6)
						//Statistikevent mit Klick auf Bestellmanageraufruf verbinden
						events.addEvent(button, "click", startBestellmanagerSAS);
						//href leeren
						button.attributes.href.nodeValue = "javascript:;";
						//Aufruf muss als onclick geschehen, da IE href bei onclick ignoriert
						events.addEvent(button, "click", function () { window.open(bmLinksText, "bestellmanager"); } );
	
					}
	
				}/*end - button*/
			}else {
				
				//-> (9) Formularaufruf (mit )
				formularAufrufen(alleButtons);
			}
		}

		else {return;}
	};

	////////////////////////////////////////////////////////////////
	// (4) Bestellmanager
	////////////////////////////////////////////////////////////////
	var isSupportedBestellMgrAvailable = function () {

		//->(5) Bestellmanger installiert?
		var strVersion = getBestellMgrVersion();
		if (strVersion == null)
		{
			//BestellmanagerCookie: false
			document.cookie = "bestellmanager=false";
			return false;
		}

		strVersion = parseFloat(strVersion);
		if (strVersion >= MIN_BESTELL_MGR_VERSION)
		{
			//BestellmanagerCookie: true
			document.cookie = "bestellmanager=true";
			return true;
		}
		//BestellmanagerCookie: false
		document.cookie = "bestellmanager=false";
		return false;
	};


	////////////////////////////////////////////////////////////////
	// (5) Bestellmanger installiert? (liefert Version)
	////////////////////////////////////////////////////////////////
	var getBestellMgrVersion = function()
	{
		try
		{
			// IE + Bestell-Manager >= 1.7.1
			var oBmgrEk = new ActiveXObject(PROG_ID_DVBMEK_COM_SERVER_12);
			return oBmgrEk.GetCompVersion();
		}
		catch(e)
		{
			try
			{
				// IE + Bestell-Manager = 1.7
				var dummy = new ActiveXObject(PROG_ID_DVBMEK_COM_SERVER_11);
				// Workaround
				return MIN_BESTELL_MGR_VERSION;
			}
			catch(e)
			{
				// Firefox
				return getBestellMgrVersionFirefox();
			}
		}
	};
	
	var getBestellMgrVersionFirefox = function()
	{
		if (navigator.plugins)
		{
			// Firefox
			var dvbmPlugin = navigator.plugins[FIREFOX_PLUGIN_VERSION_12_NAME];
			var version = extractPluginVersion(dvbmPlugin);
			if (version == null)
			{
				// Fallback
				dvbmPlugin = navigator.plugins[FIREFOX_PLUGIN_VERSION_11_NAME];
				version = extractPluginVersion(dvbmPlugin);
			}
			return version;
		}
		return null;
	};
	
	var extractPluginVersion = function(plugin)
	{
		if (plugin && plugin.description)
		{
			var versionStr = plugin.description;
			var bmVersion = REG_EXP_FIREFOX_VERSION.exec(versionStr);
	
			if (bmVersion.length > 0)
			{
				return bmVersion[1];
			}
		}
		return null;
	};
	
	////////////////////////////////////////////////////////////////
	// (7) SAS-Event ins HTML haengen
	////////////////////////////////////////////////////////////////
	var startBestellmanagerSAS = function () {
		//->(8)
		if (!document.bestellmanagerAufruf)
		{
			try
			{
				var b = document.getElementsByTagName("body")[0];
				var i = document.createElement("img");
				i.src = getBestellmanagerStartedEventUrl();
				i.alt = "";
				i.style.display = "block";
				i.style.position = "absolute";
				i.style.left = "-1500px";
				i.style.height = "0";
				i.style.width = "0";
				i.style.overflow = "hidden";
				b.appendChild(i);
			}
			catch(e)
			{
				//alert("DEBUGGING: " + e.message ? e.message : e);
				// Fehler ignorieren
			}
		}
		document.bestellmanagerAufruf = true;
		return false;
	};

	////////////////////////////////////////////////////////////////
	// (8) SAS-Event bauen
	////////////////////////////////////////////////////////////////
	var getBestellmanagerStartedEventUrl = function () {
		var result = "http://www.datev.de/statistik/sas.event.css?" +
					"anw=dpbm" +
					"&req=Seite" +
					"&stseite=n" +
					"&bez=Bestellmanager";
		return result;
	};


	////////////////////////////////////////////////////////////////
	//  (9) Formular im Popup oeffnen
	////////////////////////////////////////////////////////////////
	var formularAufrufen = function (alleButtons) {


		var popup = de.datev.portal.popup;
		var dom = de.datev.dom;

		//Funktion wird aus Cookie-Check aufgerufen und kennt noch keine Buttons
		if(!alleButtons) {
			var alleButtons = dom.getElementsByTagAndClassName("a","bestellen");
		}

		if (alleButtons && alleButtons.length>0) for(var i=0; i<alleButtons.length; i++) {

			var button = alleButtons[i];

			var formularUrl = button.attributes.href.value.trim();
			var buttonId = "bestellen"+i;
			button.id = buttonId;
			popup.setPopupHandler(buttonId, popup.openKontaktInfoPage, formularUrl, true);
		}
	};

    //////////////////////////////////////////////////////
    // PUBLIC
    //////////////////////////////////////////////////////
    thisNamespace.checkCookie = checkCookie;

    return thisNamespace;
}(); // de.datev.portal.bestellbutton



////////////////////////////////////////////////////////////////
// (1) Ausfuehrung
////////////////////////////////////////////////////////////////
de.datev.events.addEvent(window, "load", de.datev.portal.produkte.bestellbutton.checkCookie);

