/**
 * Blume 2000 Javascript.
 * @author Jens Sieckmann <jens.sieckmann@twt.de>
 * @package out
 * @subpackage b2k
 * @version $id$
 */
/*

/**
 * Klick auf "Weiter" im Checkout-Schritt "Anschrift".
 * Da es zwei Felder fuer Mail und Telefon im HTML gibt, jeweils ein DIV, wenn
 * der Parameter/Checkbox "Liefer- und Rechnungsanschrift sind identisch" ein-
 * und ausgeschaltet ist, muessen die Formfelder umbenannt werden, so dass die
 * OXID-Logik funktioniert.
 * Momentan ist dieses Problem aber ueber eine angepasste OXID-Logik geloest
 * worden.
 */
$(document).ready(function() {
	$('form[name="order"]').submit(function()
	{
		return;

		// Abhaengig von Checkbox "Rechnungsadresse Liefer- und Rechnungsanschrift
		// sind identisch" die jeweils ueberfluessigen doppelten Felder fuer E-Mail
		// und Telefon entfernen, damit sie sich nicht gegenseitig ueberschreiben.
		// Damit muss die OXID-Logik nicht geaendert werden.
		if ($('#f-co-bill-opener').attr('checked') == true)
		{
			// Checkbox an: 2. E-Mail- und Telefonfeld
			// (id "f-bill-email2" und "f-bill-tel2") nutzen.
			$('#f-bill-email').attr('name', 'fake_email');
			$('#f-bill-tel').attr('name', 'fake_phone');
			$('#f-bill-email2').attr('name', 'lgn_usr');
			$('#f-bill-tel2').attr('name', 'invadr[oxuser__oxfon]');
		}
		else
		{
			// Checkbox aus: 1. E-Mail- und Telefonfeld
			// (id "f-bill-email" und "f-bill-tel") nutzen.
			$('#f-bill-email').attr('name', 'lgn_usr');
			$('#f-bill-tel').attr('name', 'invadr[oxuser__oxfon]');
			$('#f-bill-email2').attr('name', 'fake_email');
			$('#f-bill-tel2').attr('name', 'fake_phone');
		} // if
	}); // function

	$('div#box-register-shipping > div.acc-box-body-wrapper form[name="order"]').submit(function()
	{
		// Ist die Loesch-Checkbox aktiviert, wird die Adresse deaktiviert.
		if ($('input[name="delete_address"]').attr('checked') == true)
		{
			$('input[name="deladr[bdeleted]"]').val($('input[name="delete_address"]').val());
		}

		// Setzt die Adress Id aus der Selectbox in das Hidden-Feld.
		$('input[name="oxaddressid"]').val($('select[name="oxaddressid"]').val())

		// Neues Hidden-Feld erstellen.
		oElement = $(document.createElement('input')).attr("type", "hidden");
		var oContainer = $(this);

		// Alle Formularfelder des oberen Feldes durchlaufen.
		$('form.validate:first input,form.validate:first select,form.validate:first textarea').each(function()
		{
			// Nur Felder beruecksichtigen, die mit "invadr" beginnen, diese koennen Pflichtfelder sein.
			if ($(this).attr('name').indexOf('invadr') == 0)
			{
				// Radiobutton, die nicht gesetzt sind, ignorieren.
				if (($(this).attr('type') == 'radio') && ($(this).attr('checked') == false))
				{
					return;
				}

				// Hidden-Feld Clonen und Name sowie Wert setzen.
				oNewElement = oElement.clone();
				oNewElement.attr('name', $(this).attr('name'));
				oNewElement.val($(this).val());

				// Neues Element ans Formular haengen.
				oContainer.append(oNewElement);
			}
		});
	});


	jQuery('#product-order > input').unbind().click(function(event) {
		var sSelectedVariant = '';

		if (jQuery('form#content').data('showReplaceLayer'))
		{
			if(jQuery('form#content').data('displaySelectBox'))
			{
				sSelectedVariant = jQuery('select#f-select-number').val();
			}
			else if(jQuery('form#content').data('displayRadioButtons'))
			{
				sSelectedVariant = $("input[name='aid']:checked").val();
			}

			var sBasketArticle = jQuery('form#content').data('BasketItemId');
			if(sSelectedVariant != sBasketArticle)
			{
				// Nur wenn Varianten vorhanden sind
				if(jQuery('form#content').data('displaySelectBox') || jQuery('form#content').data('displayRadioButtons'))
				{
					var aVariantArray = jQuery('form#content').data('oVariantData');

					//Bildpfad aendern
					$('#.main-product-layer .main-product-layer-body #changeValues img').attr('src',aVariantArray['' + sSelectedVariant + '']['thumb']);
					$('#.main-product-layer .main-product-layer-body #changeValues img').attr('alt',aVariantArray['' + sSelectedVariant + '']['title']);

					//Artikelnummer aendern
					$('#.main-product-layer .main-product-layer-body #changeValues input').attr('value',aVariantArray['' + sSelectedVariant + '']['artnum']);

					//html vom label holen (incl. input Feld)
					sLabelContent = $('#.main-product-layer .main-product-layer-body #changeValues label').html();

					if(!jQuery('form#content').data('oldName'))
					{
						jQuery('form#content').data('oldName',$('#detail-right h1').text());
					}

					//neue Regular Expression, i steht fuer case insensitive
					var re = new RegExp(jQuery('form#content').data('oldName'),"i");

					sLabelContent = sLabelContent.replace(re ,aVariantArray['' + sSelectedVariant + '']['title']);

					//Namen temporaer speichern
					jQuery('form#content').data('oldName',aVariantArray['' + sSelectedVariant + '']['title']);

					$('#.main-product-layer .main-product-layer-body #changeValues label').html(sLabelContent);

				}//if

				jQuery('#main-product-layer').addClass('show');

				jQuery('#main-product-layer').find('input.save-order').unbind().click(function (event) {
					var sArtnum        = jQuery('#main-product-layer').find('input:radio:checked').val();
					var sBasketArtnum  = jQuery('#main-product-layer').find('ul > li:eq(0) > label > input').val();
					var sCurrentArtnum = jQuery('#main-product-layer').find('ul > li:eq(1) > label > input').val();

					jQuery('#main-product-layer').removeClass('show');

					// TODO: Was passiert, wenn nichts gewaehlt worden ist?
					if (sArtnum !== undefined)
					{
						if (sArtnum == sCurrentArtnum)
						{
							oxid.popup.load();
							jQuery('form#content').submit();
						} // if
						else if(sArtnum == sBasketArtnum)
						{
							jQuery('form#main-product-layer').submit();
						} // else if
					} // if

					event.preventDefault();
					return false;
				});

				event.preventDefault();
				return false;
			}//if
		} // if
	});

});


var b2k = {
	// Objekt zur Speicherung der Anrede-Radiobutton-Werte.
	oSalutations: {},

	// Entfernt die Checkbox "Diese Lieferadresse loeschen".
	removeDeleteCheckbox: function(iValue){
		if (iValue == -1)
		{
			oDeleteDiv = $('li.li-save > div.box-delete');
			oDeleteDiv.remove();
		} // if
	},

	// Werte der Anrede-Radiobuttons sichern.
	saveRadioValues: function(form){
		var oSal = {};
		$('form.validate:last input[name="deladr[oxaddress__oxsal]"]').each(function()
		{
			sName = $(this).attr('id');
			oSal[sName] = $(this).val();
		});

		oSalutations = oSal;
	},

	// Werte der Anrede-Radiobuttons wieder setzen.
	setRadioValues: function(form){
		$.each(oSalutations, function(index, value)
		{
			$('form.validate:last input[id="'+index+'"]').val(value);
		});
	},

	//Felder wieder enablen und schreibbar machen
	unlockDeliveryFields: function(stop,form,pattern) {
		if(stop) { return; }
	    var _fields = document.forms[form].elements, i;
	    if(_fields) {
	        for (i=0;i<_fields.length;i++) {
	            if( pattern.test(_fields[i].name) ) {
	                if( _fields[i].tagName.toUpperCase() === 'INPUT' )
	                {
	                	_fields[i].removeAttribute("readonly");
	                	_fields[i].disabled = false;
	                }
	            }
	        }
	    }
	}//function
}

/**
 * Vereinfachung der AJAX-Requests.
 * @param String sAJAXURL         Die anfragende URL.
 * @param String sSuccessCallback Welcher Callback soll im Erfolgsfall aufgerufen werden?
 * @returns {TWT_AjaxRequest}
 */
function TWT_AjaxRequest(sAJAXURL, sSuccessCallback)
{
	/**
	 * Soll das JavaScript nicht auf den Request warten?
	 * @var Boolean
	 */
	var bIsAsync = true;

	/**
	 * Wird gerade etwas geladen?
	 * @var Boolean
	 */
	var bIsLoading = false;

	/**
	 * Zusaetzliche Parameter.
	 * @var Object
	 */
	var oParams = {};

	/**
	 * Das eigene Objekt
	 * @var TWT_AjaxRequest
	 */
	var oSelf = this;

	/**
	 * Der Callback bei "erfolg"
	 * @var String
	 */
	var sSuccess = sSuccessCallback;

	/**
	 * Der Callback bei "fehler"
	 * @var String
	 */
	var sError = '';

	/**
	 * Der Callback zum "Laden"
	 * @var String
	 */
	var sLoading = '';

	/**
	 * Dieser Typ wird fuer den AJAX-Request genutzt.
	 * @var String
	 */
	var sType = 'GET';

	/**
	 * Fuegt Request-Parameter hinzu.
	 * @param  mixed  mValue
	 * @param  String sName
	 * @return TWT_AjaxRequest
	 */
	this.addParam = function(mValue, sName)
	{
		oParams[sName] = mValue;

		return this;
	}; // function

	/**
	 * Run Ajax-Request
	 * @return void
	 */
	this.execute = function()
	{
		if (this.isLoading())
		{
			return null;
		} // if

		this.isLoading(true);

		if (sLoading && typeof window[sLoading] == 'function')
		{
			window[sLoading]();
		} // if

		jQuery.ajax(
				sAJAXURL,
			{
				async: this.isAsynchronous(),
				data: oParams,
				error: function()
				{
					if (sError && typeof window[sError] == 'function')
					{
						window[sError]();
					} // if
				},
				success: function(oResult)
				{
					if (typeof window[sSuccessCallback] == 'function')
					{
						window[sSuccessCallback](oResult);
					}
				},
				type: sType
			}
		);
	}; // function

	/**
	 * Soll der Browser nicht auf den Request warten?
	 * @param  Boolean bNewState Neuer Zustand.
	 * @return Boolean Der alte Zustand.
	 */
	this.isAsynchronous = function(bNewState)
	{
		var bOldState = bIsAsync;

		if (typeof arguments[0] !== 'undefined')
		{
			bIsAsync = bNewState;
		} // if

		return bOldState;
	}; // function

	/**
	 * Wird aktuell etwas geladen?
	 * @param  Boolean bNewState Neuer Zustand.
	 * @return Boolean Der alte Zustand.
	 */
	this.isLoading = function(bNewState)
	{
		var bOldState = bIsLoading;

		if (typeof arguments[0] !== 'undefined')
		{
			bIsLoading = bNewState;
		} // if

		return bOldState;
	}; // function

	/**
	 * Setzt den "Error"-Callback
	 * @param String sCallback Der Callback
	 * @return TWT_AjaxRequest
	 */
	this.setErrorCallback = function(sCallback)
	{
		sError = sCallback;

		return this;
	}; // function

	/**
	 * Setzt den "Error"-Callback
	 * @param String sCallback Der Callback
	 * @return TWT_AjaxRequest
	 */
	this.setLoadingCallback = function(sCallback)
	{
		sLoading = sCallback;

		return this;
	} // function

	/**
	 * Setzt den Request-Type.
	 * @param  String der Requesttype.
	 * @return TWT_AjaxRequest
	 */
	this.setType = function(sRequestType)
	{
		sType = sRequestType;

		return this;
	}; // function
}; // class


/**
 * Bietet Funktionalitaet zum deaktivieren Bestimmter Links der CO-Navi bei Change- oder
 * Klick-Events
 * @param sSelect Selector fuer CO-Navi.
 * @param iStep Aktueller CO-Schritt.
 * @returns {B2K_Checkout_Navigation}
 */
function B2K_Checkout_Navigation(sSelect, iStep)
{
	var sNavigationSelect = sSelect;
	var iCurrentStep = iStep;
	var bDisabled = false;

	/**
	 * Deaktiviert in Abhaengigkeit vom aktuellen Checkout-Schritt bestimmte Teile
	 * der Checkout-Navi.
	 * @return void
	 * @author Pascal Streichert <pascal.streichert@twt.de>
	 */
	var disableNavigation = function()
	{
		if (!bDisabled)
		{
			$(sNavigationSelect).children().each(function (iIndex, oElement)
			{
				// CO-Schritt weiter als der aktuelle?
				if (iIndex > iCurrentStep - 1)
				{
					// Links entfernen.
					sText = $(oElement).children('a').text();
					$(oElement).html(sText);
					bDisabled = true;
				} // if
			});
		} // if
	}; // function

	/**
	 * Fuegt einen neuen Listener hinzu.
	 * @return B2K_Checkout_Navigation this
	 * @author Pascal Streichert <pascal.streichert@twt.de>
	 */
	this.addChangeListener  = function(sSelect)
	{
		$(sSelect).bind('change', disableNavigation);

		return this;
	}; // function

	/**
	 * Fuegt einen neuen Listener hinzu.
	 * @return B2K_Checkout_Navigation this
	 * @author Pascal Streichert <pascal.streichert@twt.de>
	 */
	this.addClickListener  = function(sSelect)
	{
		$(sSelect).bind('click', disableNavigation);

		return this;
	}; // function
}; // function

