function initialize() {
	storeFinder.init();
	parcelFinder.init();
	automatFinder.init();
	storeShippingSwitcher.init();	
}
Element.observe(window, 'load', initialize, false);


/**
 * Render a tabbed menu
 */
var tabids = [];
var containerids = [];
function create_tabs()
{
	$$('.tab').all( function( el ) {
			tabids.push( el.id );
			containerids.push( el.id.replace( 'tab_', '' ) );
			el.observe( 'click', handle_tab_click );
			return true;
	} );
}
/**
 * Hande a clicked tab
 */
function handle_tab_click( event )
{
	// Get container id
	containerid = this.id.replace( 'tab_', '' );
	// Set active tab menu point
	tabids.all( function( tab ) {
		$(tab).removeClassName( 'active' );
		return true;
	} );
	this.addClassName( 'active' );
	// Set active tab content container
	containerids.all( function( container ) {
		$(container).hide();
		return true;
	} );
	$(containerid).show();
}

//
// display isStoreShipping-checkbox if checked (via Shop-Finder) and make input-field read-only
// remove isStoreShipping-checkbox on unchecking it.
//
var storeShippingSwitcher = {
	
	checkboxField: 'isStoreShipping_box',
	inputFields: ['shipping_streetName', 'shipping_streetNumber', 'shipping_postalCode', 'shipping_city', 'shipping_company', 'shipping_phoneNumber'],

	init: function(){
		this.checkbox = $(this.checkboxField);
		if(this.checkbox != null){
			this.checkbox.observe('click', storeShippingSwitcher.onCheck.bind(this), false);
		}
	},
	
	onCheck: function(){
		if(!this.checkbox.checked){
			storeShippingSwitcher.setStoreShipping(false);
		}
	},
	
	setStoreShipping: function(enabled){
		if(enabled){
			this.checkbox.removeClassName('nonclickable');
			this.checkbox.checked = true;
			this.inputFields.each(function(field){
				$(field + "_readonly").update($(field).value);
 				$(field + "_readonly").up().show();
 				$(field).addClassName('readonly');
			});
		
		} else {
			this.checkbox.addClassName('nonclickable');
			this.inputFields.each(function(field){
 				$(field + "_readonly").up().hide();
 				$(field).removeClassName('readonly');
 				$(field).value = '';
			});
			if($('shipping_store_id').value.startsWith('Packstation'))
			{
				var element = $('shipping_company').up().up().next().next();
				if(element != null)
				{
					element.insert({ after: $('shipping_company').up().up()});			
				}
			}
			else
			{
				var element = $('shipping_company').up().up().next().next();
				if(element != null)
				{
					element.insert({ after: $('shipping_company').up().up()});			
				}
			}
			$('dwfrm_checkout_customer_shippingmethod_shippingmethodHermes').show();
			$('dwfrm_checkout_customer_shippingmethod_shippingmethodHermes').up().show();
			$('dwfrm_checkout_customer_shippingmethod_shippingmethodDHL').show();
			$('dwfrm_checkout_customer_shippingmethod_shippingmethodDHL').up().show();
			$('shipping_postNumber').up().up().hide();
			$('shipping_company').up().up().show();	
			$('shipping_phoneNumber').up().up().show();			
			$('shipping_company').up().previous().down().innerHTML = 'Zusatz/Firma';
			$('shipping_postNumber').up().previous().down().innerHTML = 'Postnummer';
			$('shipping_store_id').value = '';
			if($('checkoutBox').down().next().down().hasClassName('error')) 
			{
				$('checkoutBox').down().next().down().remove();
			}
		}
	}
};

storeFinder = {
	init: function() {
		
		// bind store finder link
		var link = $('storeFinderLink');
		if(link != null){
			link.observe('click', storeFinder.__onLinkClicked.bindAsEventListener(link), false);
		}
	}
	
	,__onLinkClicked: function(ev){
		var postalCode = $('shipping_postalCode').value;
		var url = DOM_getText($('storeFinderLink_url'));
		if(null!=postalCode && url != null){
			iBox.showURL(url + "?isStore=1&zipCode=" + postalCode);
		}
	}

	,sendZipCode: function() {
		var field = $('locationInputField');
		if( null == field ) return;
		var zipCode = field.value;
		if (zipCode.length > 0) {
			var ajaxUrl = DOM_getText($('storeFinderAjax_url'));
			if( empty(ajaxUrl) ) return;
			if (field.className.substring(0,8) == "warning ") field.className = field.className.substring(8);
			disableStoreButton();
			var ajaxData = {
				method: 'post',
				parameters: {isStore: 1, zipCode: zipCode},
				onSuccess: storeFinder.success.bind(this),
				onFailure: storeFinder.failure.bind(this)
			};
			new Ajax.Request( ajaxUrl, ajaxData );
		} else {
			if (field.className.substring(0,8) != "warning ") field.className = "warning " + field.className;
		}
	}
	
	,success: function(req) {
		var field = $('choosefield');
		if( null!=field ) {
			field.innerHTML = req.responseText;
			enableStoreButton();
		}
	}
	
	,failure: function(req) {
		var msg = req.status + ": " + req.statusText;
		//alert(msg);
		enableStoreButton();
	}
};

parcelFinder = {
	init: function() {
		var link = $('parcelFinderLink');
		if( null!=link )
			link.observe('click', parcelFinder.__onLinkClicked.bindAsEventListener( link ), false );
	}

	,__onLinkClicked: function( ev ) {
		var postalCode = $('shipping_postalCode').value;
		var url = DOM_getText( $('storeFinderLink_url') );
		if( null!=postalCode && url != null )
			iBox.showURL( url + "?isStore=0&zipCode=" + postalCode);
	}
	
	,sendZipCode: function() {
		var field = $('locationInputField');
		if(null == field) return;
		var zipCode = field.value;
		if(zipCode.length > 0) {
			var ajaxUrl = DOM_getText($('storeFinderAjax_url'));
			if( empty(ajaxUrl) ) return;
			if (field.className.substring(0,8) == "warning ") field.className = field.className.substring(8);
			disableStoreButton();
			var ajaxData = {
				method: 'post',
				parameters: {isStore: 0, zipCode: zipCode},
				onSuccess: parcelFinder.success.bind(this),
				onFailure: parcelFinder.failure.bind(this)
			};
			new Ajax.Request( ajaxUrl, ajaxData );
		} else {
			if (field.className.substring(0,8) != "warning ") field.className = "warning " + field.className;
		}
	}
	
	,success: function(req) {
		var field = $('choosefield');
		if( null!=field ) {
			field.innerHTML = req.responseText;
			enableStoreButton();	
		}
	}
	
	,failure: function(req) {
		var msg = req.status + ": " + req.statusText;
		alert(msg);
		enableStoreButton();
	}
};

automatFinder = {
	init: function() {
		var link = $('automatFinderLink');
		if( null!=link )
			link.observe('click', automatFinder.__onLinkClicked.bindAsEventListener( link ), false );
	}

	,__onLinkClicked: function( ev ) {
		var postalCode = $('shipping_postalCode').value;
		var url = DOM_getText( $('storeFinderLink_url') );
		if( null!=postalCode && url != null ) {
			iBox.showURL( url + "?isStore=2&zipCode=" + postalCode, null,{width: '550', height: '450'});
		}
		setTimeout('create_tabs()',2000);
	}
	
	,sendZipCode: function() {
		var field = $('locationInputField');
		if(null == field) return;
		var zipCode = field.value;
		if(zipCode.length > 0) {
			var ajaxUrl = DOM_getText($('storeFinderAjax_url'));
			if( empty(ajaxUrl) ) return;
			if (field.className.substring(0,8) == "warning ") field.className = field.className.substring(8);
			disableStoreButton();
			var ajaxData = {
				method: 'post',
				parameters: {isStore: 2, zipCode: zipCode},
				onSuccess: automatFinder.success.bind(this),
				onFailure: automatFinder.failure.bind(this)
			};
			new Ajax.Request( ajaxUrl, ajaxData );
		} else {
			if (field.className.substring(0,8) != "warning ") field.className = "warning " + field.className;
		}
	}
	
	,success: function(req) {
		var field = $('choosefield');
		if( null!=field ) {
			field.innerHTML = req.responseText;
			enableStoreButton();	
		}
	}
	
	,failure: function(req) {
		var msg = req.status + ": " + req.statusText;
		alert(msg);
		enableStoreButton();
	}
};

function showAddress(req) {
	var parameters = req.split("##");
	$('store_id').innerHTML = parameters[0] == "null" ? " " : parameters[0];
	$('store_name1').innerHTML = parameters[1] == "null" ? " " : parameters[1];
	$('store_name2').innerHTML = parameters[2] == "null" ? " " : parameters[2];
	$('store_address1').innerHTML = parameters[3];
	$('store_address2').innerHTML = parameters[4] == "null" ? " " : parameters[4];
	$('store_postalCode').innerHTML = parameters[5];
	$('store_city').innerHTML = parameters[6];
	$('store_phone').innerHTML = parameters[7] == "null" ? " " : parameters[7];
	$('shop_hours').innerHTML = parameters[8] == "null" ? " " : parameters[8];
	enableSubmitButton();
}

function showAutomatAddress(req) {
	var parameters = req.split("##");
	$('automat_id').innerHTML = parameters[0] == "null" ? " " : parameters[0];
	$('automat_number').innerHTML = parameters[1] == "null" ? " " : parameters[1];
	$('automat_street').innerHTML = parameters[2] == "null" ? " " : parameters[2];
	$('automat_streetno').innerHTML = parameters[3];
	$('automat_district').innerHTML = parameters[4] == "null" ? " " : parameters[4];
	$('automat_postalCode').innerHTML = parameters[5];
	$('automat_city').innerHTML = parameters[6];
	$('automat_remark').innerHTML = parameters[7] == "null" ? " " : parameters[7];
	$('automat_hours').innerHTML = parameters[8] == "null" ? " " : parameters[8];
	enableSubmitButton();
}

function copyAddress(isStore) {
	$('shipping_lastName').value   = $('dwfrm_checkout_customer_base_lastName')   == null ? $('temp_lastName').innerHTML : $('dwfrm_checkout_customer_base_lastName').value 
	$('shipping_firstName').value  = $('dwfrm_checkout_customer_base_firstName')  == null ? $('temp_firstName').innerHTML : $('dwfrm_checkout_customer_base_firstName').value 
	$('shipping_salutation').value = $('dwfrm_checkout_customer_base_salutation') == null ? $('temp_salutation').innerHTML : $('dwfrm_checkout_customer_base_salutation').value 
	
//	$('shipping_salutation').value = $('temp_salutation').innerHTML;
//	$('shipping_firstName').value = $('temp_firstName').innerHTML;
//	$('shipping_lastName').value = $('temp_lastName').innerHTML;

//	$('shipping_salutation').value = $('dwfrm_checkout_customer_base_salutation').value;
//	$('shipping_firstName').value = $('dwfrm_checkout_customer_base_firstName').value;
//	$('shipping_lastName').value = $('dwfrm_checkout_customer_base_lastName').value;
			
	switch(isStore)
	{
		case 0:
			// change label and move up
			if($('shipping_company').up().previous().down().innerHTML != 'Shop' && $('shipping_company').up().previous().down().innerHTML != 'Filiale')
			{
				var element = $('shipping_company').up().up().previous().previous();
				element.insert({ before: $('shipping_company').up().up()});
			}

			// switch fields visibility
			$('shipping_company').up().up().show();	
			$('shipping_phoneNumber').up().up().show();
			$('dwfrm_checkout_customer_shippingmethod_shippingmethodHermes').hide();
			$('dwfrm_checkout_customer_shippingmethod_shippingmethodHermes').up().show();
			$('dwfrm_checkout_customer_shippingmethod_shippingmethodDHL').up().hide();
			$('shipping_postNumber').up().up().hide();
			
			// set values
			$('shipping_company').up().previous().down().innerHTML = 'Shop';	
			$('shipping_postNumber').up().previous().down().innerHTML = 'Postnummer';
			$('shipping_postNumber').value = '';
			$('shipping_store_id').value = $('store_id').innerHTML.unescapeHTML();
			if ((copyAddress.arguments.length > 0) && isStore){
				$('shipping_company').value = $('store_name1').innerHTML.unescapeHTML();
			} else {
				$('shipping_company').value = $('store_name1').innerHTML.unescapeHTML() + ", " + $('store_name2').innerHTML.unescapeHTML();
			}
			if ($('store_address2').innerHTML == " ") {
				streetArray = getStreetName($('store_address1').innerHTML.unescapeHTML());
				$('shipping_streetName').value = streetArray[0];
				$('shipping_streetNumber').value = streetArray[1];
			} else {
				$('shipping_streetName').value = $('store_address1').innerHTML.unescapeHTML();		
				$('shipping_streetNumber').value = $('store_address2').innerHTML.unescapeHTML();
			}
			$('shipping_postalCode').value = $('store_postalCode').innerHTML.unescapeHTML();
			$('shipping_city').value = $('store_city').innerHTML.unescapeHTML();
			$('shipping_phoneNumber').value = $('store_phone').innerHTML.unescapeHTML();
			$('dwfrm_checkout_customer_shippingmethod_shippingmethodHermes').writeAttribute("checked", "checked");
			break;
		case 1:
			// change label and move up
			if($('shipping_company').up().previous().down().innerHTML != 'Shop' && $('shipping_company').up().previous().down().innerHTML != 'Filiale')
			{
				var element = $('shipping_company').up().up().previous().previous();
				element.insert({ before: $('shipping_company').up().up()});
			}

			// switch fields visibility
			$('shipping_postNumber').up().up().hide();
			$('shipping_company').up().up().show();	
			$('shipping_phoneNumber').up().up().show();
			$('dwfrm_checkout_customer_shippingmethod_shippingmethodHermes').hide();
			$('dwfrm_checkout_customer_shippingmethod_shippingmethodHermes').up().show();
			$('dwfrm_checkout_customer_shippingmethod_shippingmethodDHL').up().hide();			
			
			// set values
			$('shipping_company').up().previous().down().innerHTML = 'Filiale';	
			$('shipping_postNumber').up().previous().down().innerHTML = 'Postnummer';
			$('shipping_postNumber').value = '';
			$('shipping_store_id').value = $('store_id').innerHTML.unescapeHTML();
			if ((copyAddress.arguments.length > 0) && isStore){
				$('shipping_company').value = $('store_name1').innerHTML.unescapeHTML();
			} else {
				$('shipping_company').value = $('store_name1').innerHTML.unescapeHTML() + ", " + $('store_name2').innerHTML.unescapeHTML();
			}
			if ($('store_address2').innerHTML == " ") {
				streetArray = getStreetName($('store_address1').innerHTML.unescapeHTML());
				$('shipping_streetName').value = streetArray[0];
				$('shipping_streetNumber').value = streetArray[1];
			} else {
				$('shipping_streetName').value = $('store_address1').innerHTML.unescapeHTML();		
				$('shipping_streetNumber').value = $('store_address2').innerHTML.unescapeHTML();
			}
			$('shipping_postalCode').value = $('store_postalCode').innerHTML.unescapeHTML();
			$('shipping_city').value = $('store_city').innerHTML.unescapeHTML();
			$('shipping_phoneNumber').value = $('store_phone').innerHTML.unescapeHTML();
			$('dwfrm_checkout_customer_shippingmethod_shippingmethodHermes').writeAttribute("checked", "checked");
			break;
		case 2:
			// move element
			var element = $('shipping_company').up().up().next().next();
			if(element != null)
			{
				element.insert({ after: $('shipping_company').up().up()});			
			}
			
			// switch fields visibility
			$('shipping_company').up().up().hide();	
			$('shipping_phoneNumber').up().up().hide();
			$('shipping_postNumber').up().up().show();
			$('dwfrm_checkout_customer_shippingmethod_shippingmethodHermes').up().hide();
			$('dwfrm_checkout_customer_shippingmethod_shippingmethodDHL').up().show();
			$('dwfrm_checkout_customer_shippingmethod_shippingmethodDHL').hide();
			
			// set values			
			$('shipping_store_id').value = $('automat_number').innerHTML.unescapeHTML();
			$('shipping_streetName').value = "Packstation";		
			$('shipping_streetNumber').value = $('automat_id').innerHTML.unescapeHTML();
			$('shipping_postalCode').value = $('automat_postalCode').innerHTML.unescapeHTML();
			$('shipping_city').value = $('automat_city').innerHTML.unescapeHTML();
			$('shipping_phoneNumber').value = '';
			$('shipping_company').value = '';
			$('shipping_postNumber').up().previous().down().innerHTML = 'Postnummer<span class="required">*</span>';
			$('dwfrm_checkout_customer_shippingmethod_shippingmethodDHL').writeAttribute("checked", "checked");
			break;
	}
	
	var updateForm = storeShippingSwitcher.setStoreShipping.bind(storeShippingSwitcher, true);
	updateForm();
	
	iBox.hide();
}

function disableStoreButton() {
	$('StoreProgressButton').style.display='inline';
	$('StoreSearchButton').style.display='none';
	$('VirtualSearchButton').style.display='inline';
}

function enableStoreButton() {
	$('StoreProgressButton').style.display='none';
	$('StoreSearchButton').style.display='inline';
	$('VirtualSearchButton').style.display='none';
}

function enableSubmitButton() {
	($('VirtualSubmitButton') != undefined) && ($('VirtualSubmitButton').style.display='none');
	($('VirtualSubmitButton') != undefined) && ($('StoreSubmitButton').style.display='inline');
}

/*
 * Splits address field to name and number.
 */
function getStreetName(street) {
	var values = street.split(' ');
	var number = values.pop();
	var name = values.join(' ');
	var result = new Array(name, number);
	return result;	
}
