
try{

// Simple cookie reader
function getCookie(c_name) {
	var i, x, y, ARRcookies = document.cookie.split(";");
	for (i = 0; i < ARRcookies.length; i++) {
		x = ARRcookies[i].substr(0, ARRcookies[i].indexOf("="));
		y = ARRcookies[i].substr(ARRcookies[i].indexOf("=") + 1);
		x = x.replace(/^\s+|\s+$/g, "");
		if (x == c_name) {
			return unescape(y);
		}
	}
}

var popCheck = '';
var sendFormListen = '';
var globalBasketID = getCookie("BasketId");
// set global Startdate
var globalStartDate = new Date();
var globalCalStartDate = new Date();
var globalBasketHeader = '';
var tempBasket = '';
// validation tab #2
var globalErrors = 0;
var errorZipInvalid = 0;
var errorRouteInvalid = 0;

// Load popup and content
var checkout = Class.create({
	initialize: function () {
		// code to execute - insert content
		site.log("Checkout: class initialized");
		var checkoutdiv = document.createElement('div');
		Element.extend(checkoutdiv);
		checkoutdiv.writeAttribute('id', 'checkout');
		checkoutdiv.addClassName('pending').hide();
		// insert it in the document
		document.body.appendChild(checkoutdiv);
		site.log('checkout: container set');
	},
	load: function (pId) {
		// code to execute - show
		new Ajax.Request(pId, {
			method: 'get',
			onSuccess: function (transport) {
				var response = transport.responseText || "no response text";
				// update status
				$('checkout').update(response).removeClassName('pending');
				site.log('checkout: content loaded');
				popCheck = new OverlayWindow('checkout');
				popCheck.show();
				chainWindowLoaded.addFunction(function(){
				document.fire('custom:googletrack', { trackUrl: '/checkout/varer.html' });
				},'trackingcheckout',100001);
				//	uploads = [];
				// pageTracker._trackPageview("/fordele/book+en+boligstylist2/step1.html");
				////document.fire('custom:googletrack', { trackUrl: '/fordele/book+en+boligstylist2/step1.html' });
				// site.log('checkout: pop overlay');
				//alert("Success! \n\n" + response);
			},
			onFailure: function () {
				// site.log('checkout: load failed');
				$('checkout').update('Der opstod en fejl').addClassName('fail');
				$('checkout').removeClassName('pending');
			}
		});
		// refurbish page
		//document.fire("custom:contentrefresh");
	}
});

function loadShoppingCart() {
	new Ajax.Updater('receiver', '/systemservice/checkout/varer?c=1', {
		onComplete: loadShoppingCartDone
	});
}
function loadShoppingCartDone() {
	showItemsInCheckout();
}

// Load any page to target in DOM
var ajaxloadCheckout = Class.create({
	initialize: function () {
		// set up the class
	},
	load: function (pId, target, pType, place, callback) {
		
		// code to execute - insert content
		var newTarget = $(target);
		Element.extend(newTarget);
		newTarget.addClassName('pending');
		// code to execute - show
		new Ajax.Request(pId, {
			method: pType,
			onSuccess: function (transport) {
				var response = transport.responseText || "Siden svarer ikke - prøv venligst igen!";
				// update status
				if (place == 'top') {
					newTarget.insert({
						top: response
					}).removeClassName('pending');
				}
				if (place == 'bottom') {
					newTarget.insert({
						bottom: response
					}).removeClassName('pending');
				}
				if (place == 'update') {
					newTarget.update(response).removeClassName('pending');
				}
				
				eval(''+callback);
				newTarget.removeClassName('pending');
				(function(){ document.fire('custom:refreshCufon'); }).defer();
			},
			onFailure: function () {
				// update status
				newTarget.update('This element is currently not available').addClassName('fail');
				newTarget.removeClassName('pending');
			}
		});
	}
});

// generic ajax-function init
var loadElement = new ajaxloadCheckout();

// Load any form to target
var ajaxloadFormCheckout = Class.create({
	initialize: function (target, pForm) {
		// code to execute - insert content
		// site.log('bookstyle: ajax initiated');
		var newTarget = $(target);
		Element.extend(newTarget);
		// code to execute - show
		// site.log(pForm);
		$(pForm).request({
			parameters: {
				c: 1
			},
			onCreate: function (transport) {
				$(target).addClassName('pending');
			},
			onComplete: function (transport) {
				var response = transport.responseText || "Siden svarer ikke - prøv venligst igen!";
				$(target).update(response);
				$(target).removeClassName('pending');
			},
			onFailure: function () {
				// site.log('bookstyle: load failed');
				$(target).update('Der opstod desværre en fejl i afsendingen').addClassName('fail');
				$(target).removeClassName('pending');
			}
		});
	}
});

var togglePages = Class.create({
	initialize: function () {
		// init class
	},
	toggleTabs: function (elm, index) {
		menuItems = $$('li.unlocked').toArray();
		// remove active classes
		if (elm.hasClassName('unlocked')) {
			if ($('handelsdiv').hasClassName('open')) {
				blindService('handel_btn', 'handelsdiv', 'true', 'false');
				blindService('handel_btn', 'receiver', 'true', 'false');
				blindService('handel_btn', 'handel_toggler', 'true', 'true');
			}
			menuItems.invoke('removeClassName', 'active');
			site.log('checkout: ' + index);
			i = index + 1;
			//document.fire('custom:googletrack', { trackUrl: '/checkout/step'+i+'.html' });
			// set active class
			menuItems[index].addClassName('active');
		}
	}
});

var togglePg = new togglePages('togglePg');

var releaseForm = Class.create({
	initialize: function (formID, functionCall, targetID, releaseInterval, stopItems, stopItemsClass) {
		// init class
		var stopArr = stopItems.split(',');
		
		this.formID = new PeriodicalExecuter(function (pe) {
			// observe all stop-elements
			var classArr = stopItemsClass.split(',');
			for (x in stopArr){
				//site.log('check: stopArr: ' + stopArr[x] + '/' + classArr[x] + '/'+($(stopArr[x]).hasClassName(classArr[x])));
				if ($(stopArr[x].toString()) != undefined) { 
					var stopids = stopArr[x].toString();
					var stopclasses = classArr[x].toString();
					var valid = $(stopids).hasClassName(stopclasses);
					//var valid = $('tab3').hasClassName('active');
					if (valid) {
						pe.stop();
					} else {
						// formcheck
						eval(functionCall.validateForm());
					}
				}
			}
		},releaseInterval);
	}
});

/*** hover states  ***/

var stateObserver = Class.create({
	initialize: function (options) {
		this.options = Object.extend({
			'elementSelector': '.hoverit',
			'className': 'hover',
			'clickName': 'click',
			'startEvent': 'mouseenter',
			'stopEvent': 'mouseleave',
			'downEvent': 'mousedown',
			'upEvent': 'mouseup'
		},
		options || {
		});
		var elements = 0;
		$$(this.options.elementSelector).each(function (element) {
			Event.observe(element, this.options.startEvent, this.onStart.bindAsEventListener(this, element));
			Event.observe(element, this.options.stopEvent, this.onStop.bindAsEventListener(this, element));
			Event.observe(element, this.options.downEvent, this.onDown.bindAsEventListener(this, element));
			Event.observe(element, this.options.upEvent, this.onUp.bindAsEventListener(this, element));
			elements++;
		},
		this);
	},
	onStart: function (event, element) {
		element.addClassName(this.options.className);
	},
	onDown: function (event, element) {
		element.addClassName(this.options.clickName);
	},
	onUp: function (event, element) {
		element.removeClassName(this.options.clickName);
	},
	onStop: function (event, element) {
		element.removeClassName(this.options.className);
	}
});

var observeAll = new stateObserver();

var harvestForm = Class.create({
    initialize: function () {
    },
    watch: function (getItem, pasteItem, pasteItemStr) {
        var callThis = '';
        callThis = $(getItem).observe('change', function (event) {
        	//alert('check, form-field delivery:' + $F('delivery'));
            if ($F('delivery') != 'yes') { this.transfer(getItem, pasteItem, pasteItemStr); }
        }.bind(this));
    },
    transfer: function (c, p, s) {
        site.log('bookstyle: Update field: '+ p );
        site.log('bookstyle: Update string in: '+ s );
        $(p).value = $(c).value; // update field
        site.log('bookstyle: transferred value: '+$(p).value + ' ('+ $(c).name+'/'+ $(p).name+')');
        if (s != '') {$(s).update($F(c));} // update strings
    }
});

chainWindowLoaded.addFunction(function(){
	// Observe mouse-enter/leave
	/*function addHover(){
	new stateObserver();
	};
	addHover.delay(1.5);*/
}, 'stateObserver', 999);

function alignActions() {
	site.log('checkout align: ' + $('check_content').getStyle('height'));
	if ($('check_content').getHeight() > 488) {
		$('check_right').setStyle({
			height: ($('check_content').getHeight() + 35) + 'px'
		});
	} else {
		$('check_right').setStyle({
			height: '523px'
		});
	}
};

function accordionService(toggler, item, collapse) {
	if (collapse != 'collapse') {
		var togglers = $$(toggler);
		var items = $$(item);
		site.log('check:' + items + ' / ' + togglers);
		togglers.each(function (element, index) {
			site.log('check: ' + index + ' add:' + element);
			element.observe('click', function (e) {
				site.log('check: accordion clicked');
				items.each(function (obj) {
					obj.toggleClassName('open');
					obj.toggleClassName('closed');
					Effect.toggle(obj, 'blind', {
						duration: 0.2
					});
				});
				togglers.each(function (obj) {
					obj.toggleClassName('on');
					obj.toggleClassName('off');
				});
				alignActions.delay(0.3);
			},
			togglers[index], 888);
		});
	}
};


function blindService(toggler, item, instant, changetoggler) {
	site.log('blind item: ' + toggler + '/' + item + '/' + instant);
	if (instant != 'true') {
		$(toggler).observe('click', function (e) {
			site.log('blind observer: ' + toggler + '/' + item + '/' + instant)
			Effect.toggle(item, 'blind', {
				duration: 0.2, queue: {
					position: 'end', scope: 'checkout', limit: 4
				}
			});
			$(item).toggleClassName('open');
			$(item).toggleClassName('closed');
			if (changetoggler == 'true') {
				$(toggler).toggleClassName('on');
				$(toggler).toggleClassName('off');
			}
			alignActions.delay(0.5);
			alignActions.delay(1.5);
		},
		toggler + item, 888);
	} else {
		site.log('blind executer: ' + toggler + '/' + item + '/' + instant)
		Effect.toggle(item, 'blind', {
			duration: 0.2, queue: {
				position: 'end', scope: 'checkout', limit: 4
			}
		});
		$(item).toggleClassName('open');
		$(item).toggleClassName('closed');
		if (changetoggler == 'true') {
			$(toggler).toggleClassName('on');
			$(toggler).toggleClassName('off');
		}
		alignActions.delay(0.5);
	}
};

function menuActions(items, item) {
	pItems = $$(items);
	pItems.each(function (element) {
		element.removeClassName('selected');
	});
	$(item).addClassName('selected');
};


/* tab2 functions */



/*********************************************************
******************     templates    *********************
*********************************************************/

if (Object.isUndefined(HarvestProducts)) {
	var HarvestProducts = {
	};
}

HarvestProducts = {
	templates: {
		BS_Table: new Template('' + '#{wrapstart}#{rows}#{wrapend}'),
		BS_TableCol: new Template(
		'#{productNum} #{productName}, #{productCount} stk. - #{productPrice}<br/>')
	}
};

if (Object.isUndefined(resumeHarvestProducts)) {
	var resumeHarvestProducts = {
	};
}

resumeHarvestProducts = {
	templates: {
		BS_Table: new Template('' + '#{wrapstart}#{rows}#{wrapend}'),
		BS_TableCol: new Template(
		'<tr><td class="desc">#{productName}</td><td class="pieces">#{productCount} stk.</td><td class="price">#{productPrice}</td></tr>')
	}
};

if (Object.isUndefined(shopListItems)) {
	var shopListItems = {
	};
}

shopListItems = {
	templates: {
		BS_Table: new Template('' + '#{wrapstart}#{rows}#{wrapend}'),
		BS_TableCol: new Template(
		'<option #{butik_match} value="#{butik_nr}">#{butik_navn}</option>')
	}
};

/*********************************************************
******************    observers    *********************
*********************************************************/

function preWeek(e) {
	Event.stop(e);
	if (Event.element(e).hasClassName('active')) {
		moveDates('pre');
	}
	//site.log('bookstyle: click pre');
}

function nxtWeek(e) {
	Event.stop(e);
	if (Event.element(e).hasClassName('active')) {
		moveDates('nxt');
	}
	//site.log('bookstyle: click nxt');
}

function mOver(e) {
	Event.element(e).addClassName('hover');
}
function mOut(e) {
	Event.element(e).removeClassName('hover');
}
function mClick(e) {
	if (! Event.element(e).hasClassName('selected')) {
		$$('.selected').each(function (s) {
			s.toggleClassName('selected')
		});
		Event.element(e).toggleClassName('selected');
		PreBookDates = Event.element(e).readAttribute('rel').split('_');
		// PreBookDates[1], PreBookDates[0]
		// save items in temp form
		//$('tempDate').setValue(PreBookDates[1]);
		//$('tempRoute').setValue(PreBookDates[0]);
		var showDate = $D(PreBookDates[1])
		$('delivery_time_receiver').update(makeDates(showDate, 'long') + ' ' +PreBookDates[2]);
		saveDeliveryDirect(PreBookDates[0],PreBookDates[1]);
	} else {
		Event.element(e).toggleClassName('selected');
	}
}

var shops = Class.create({
	initialize: function () {
		site.log('check, shoplistObj ready!');
	},
	getit: function (callback) {
		// Call shoplist
		site.log('check, shoplist - getting...');
		
		new Ajax.Request('/systemservice/checkout/shoplist?shoplist=1', {
			onSuccess: this.setit.bind(this)
		});
	},
	setit: function (response) {
		// Update local basket object
		site.log('check, shoplist setit');
		var values = response.responseText.evalJSON();
		
		//($('delivery').checked)? pickThisShop=$F('dZip'):pickThisShop=$F('sZip');

		lines = '';
		pickThisShop=''+globalBasketHeader.order.Header.shopinfo.id;
		site.log('check, shoplist pickThisShop: '+ pickThisShop);
		values.shops.each(function (line) {
			lines += shopListItems.templates.BS_TableCol.evaluate(Object.extend(line, {
				butik_nr: '' + line.shop,
				butik_navn: '' + line.name,
				butik_match: (pickThisShop.toString()==line.shop.toString())? 'selected':''
			}));
		});
		//butik_match: (pickThisShop.toString()==line.shop.toString())? ' rel="'+pickThisShop+'/'+line.shop+'/'+(pickThisShop.toString()==line.shop.toString())+'" selected':' rel="'+pickThisShop+'/'+line.shop+'/'+(pickThisShop.toString()==line.shop.toString())+'"'
		
		// populate dropdown
		$('checkout_getshop').update(shopListItems.templates.BS_Table.evaluate({
			rows: lines,
			wrapstart: '',
			wrapend: ''
		}));
		// check for null-shop
		if (pickThisShop == null) { 
			site.log('check, shoplist pickThisShop xtra reset: '+ pickThisShop);
			//formZipCheck.check('dZip','dCityTag','dCity');
			shoplist.pickone($F('sZip'));
		}
	},
	pickone: function (zip) {
		site.log('check, shoplist get shop by zip');
		dk.ide.webservice.DeliveryService.GetPickupShops(zip, this.setone.bind(this));
	},
	setone: function (num) {
		site.log('check, shoplist set shop by zip');
		opt = $$('#checkout_getshop option');
		//opt.invoke('selected', false);
		setShop = ''; 
		opt.each(function (item) {
			//items += (item.value.valueOf() == num.valueOf()) + '/';
			(parseFloat(item.value) == parseFloat(num))? item.selected = true:site.log('check, shoplist not set shop by zip: '+ item.value.valueOf() +'/'+ num.valueOf()  +'/'+ (parseFloat(item.value) == parseFloat(num))  +' - '+ parseFloat(item.value));
			if (parseFloat(item.value) == parseFloat(num)) { setShop = parseFloat(item.value) };
		});
		if (setShop != '')  { dk.ide.webservice.DeliveryService.SetShopId(CodeCompany.Cookie.read("BasketId"),setShop,simpleLocalBasketUpdate) };
		//site.log('check, shoplist set shop by zip: ' +items);
	},
	saveshop: function (num) {
		dk.ide.webservice.DeliveryService.SetShopId(CodeCompany.Cookie.read("BasketId"),num,simpleLocalBasketUpdate);
	}
});

var shoplist = new shops();

/* Harvest products to service form */

function callBasket() {
	// get basket content
	dk.ide.webservice.BasketService.Get(servicetoken, CodeCompany.Cookie.read("BasketId"), readBasket);
}

function readBasket(data) {
	// check products
	
	var d = (!Object.isUndefined(data.d))? data.d: data;
	data = d.order.Lines;
	
	// write products
	
	if (data[0]) {
		lines = '';
		i = 0;
		
		data.each(function (line) {
			lines += HarvestProducts.templates.BS_TableCol.evaluate(Object.extend(line, {
				rowclass: ((i % 2) == 0)? 'evenrow': 'oddrow',
				rownum: i,
				productName: '' + line.varenavn,
				productCount: '' + line.qty,
				productNum: '' + line.itemId,
				productPrice: '' + line.varepris.printable
			}));
			i += 1;
		});
		
		// populate textarea
		$('pList').setValue(HarvestProducts.templates.BS_Table.evaluate({
			offset: '',
			rows: lines,
			wrapstart: '',
			wrapend: ''
		}));
		site.log('' + HarvestProducts.templates.BS_Table.evaluate({
			offset: '',
			rows: lines,
			wrapstart: '',
			wrapend: ''
		}));
	}
	/* submit the service form */
	var sendForm = new ajaxloadFormCheckout('checkoutreceiver', 'serviceForm');
}


function resumeCallBasket() {
	// get basket content
	dk.ide.webservice.BasketService.Get(servicetoken, CodeCompany.Cookie.read("BasketId"), resumeReadBasket);
	
}

function resumeCallBasketDirect() {
	// get basket content from tab #6
	resumeReadBasket(globalBasketHeader);
}

function resumeReadBasket(data) {
	site.log('check resumeReadBasket: '+data);
	// check products
	
	var d = (!Object.isUndefined(data.d))? data.d: data;
	data = d.order.Lines;
	
	// write products
	
	if (data[0]) {
		lines = '';
		linesAll = '';
		i = 0;
		
		data.each(function (line) {
			if (i<7) {
				lines += resumeHarvestProducts.templates.BS_TableCol.evaluate(Object.extend(line, {
					rowclass: ((i % 2) == 0)? 'evenrow': 'oddrow',
					rownum: i,
					productName: '' + line.varenavn,
					productCount: '' + line.qty,
					productPrice: '' + line.lineAmount.printable
				}));
			} else {
				linesAll += resumeHarvestProducts.templates.BS_TableCol.evaluate(Object.extend(line, {
					rowclass: ((i % 2) == 0)? 'evenrow': 'oddrow',
					rownum: i,
					productName: '' + line.varenavn,
					productCount: '' + line.qty,
					productPrice: '' + line.lineAmount.printable
				}));
			}
			i++;
		});
		
		// populate productarea
		$('first7load').update(HarvestProducts.templates.BS_Table.evaluate({
			offset: '',
			rows: lines,
			wrapstart: '',
			wrapend: ''
		}));
		$('lastload').update(HarvestProducts.templates.BS_Table.evaluate({
			offset: '',
			rows: linesAll,
			wrapstart: '',
			wrapend: ''
		}));
		
		if (i>=7) { $("allBtn").show(); };
	}
}

// Move date window - alt.
var SliderObserver = Class.create({
	initialize: function (options) {
		site.log('check moveDatesAlt initiated');
		var maxnumber = ($$('#dayWindow div.daybox').size() * 101) - 707;
		site.log('check moveDatesAlt,maxnumber:' + maxnumber);
		//$('acctitle').insert('('+ $$('#dayWindow .daybox').size() + ')');
		if (maxnumber == 0) {
			$('nxtweek').addClassName('off');
		}
		$('preweek').addClassName('inactive');
		$('nxtweek').observe('click', function (e) {
			site.log('check moveDatesAlt,maxnumber:' + maxnumber);
			/*var item = $('dayWindow').getLayout(); */
			//var itemPos = item.get('left');
			var itemPos = $('dayWindow').positionedOffset().toArray();
			var itemX = new Number(itemPos[0]);
			site.log('check moveDatesAlt,itemX:' + itemX);
			site.log('check moveDatesAlt,itemX <= 0:' + (itemX <= 0));
			site.log('check moveDatesAlt,itemX > (maxnumber*-1)+1212:' + ((maxnumber * - 1)));
			site.log('check moveDatesAlt,itemX > maxnumber*-1:' + (itemX > (maxnumber * - 1)));
			site.log('check moveDatesAlt,maxnumber >= 101:' + (maxnumber >= 707));
			site.log('check moveDatesAlt,itemPos:' + Object.isNumber(itemPos[0]));
			if (itemX <= 0 && itemX > (maxnumber * - 1) && maxnumber >= 707) {
				if (itemX / 707 == 0) updateWeek('up');
				new Effect.Move('dayWindow', {
					x: - 707, mode: 'relative', queue: {
						position: 'end', scope: 'weeks', limit: 1
					}
				});
				$('preweek').removeClassName('inactive');
			}
			if (itemX <= (maxnumber * - 1) + 707) {
				$('nxtweek').addClassName('inactive');
			}
		},
		'nxtweek', 888);
		$('preweek').observe('click', function (e) {
			var itemPos = $('dayWindow').positionedOffset().toArray();
			var itemX = new Number(itemPos[0]);
			if (itemX < 0) {
				if (itemX / 707 == 0) updateWeek('down');
				new Effect.Move('dayWindow', {
					x: 707, mode: 'relative', queue: {
						position: 'end', scope: 'weeks', limit: 1
					}
				});
				$('nxtweek').removeClassName('inactive');
			}
			if (itemX == - 707) {
				$('preweek').addClassName('inactive');
			}
		},
		'preweek', 888);
	}
});


/********* Validering af postnumre *********/
/*
function validZip(value) {
    zipError = false;
    var zipStr="4592,4944,5985,5970,5960,6720,7884,8305,8592,9940"; 
	var zipItem='/'+value+'+/g';
	(zipItem.match(zipStr))? zipError = true:zipError = false;
    return zipError;
}
	    	
function showError(item) {
    eval($(item+'Error').show());
}
*/

var zipCheck = Class.create({
	initialize: function() {
		site.log('check, zipCheck init');
		this.labelStr = '';
		this.valueStr = '';
		this.zipcode = '';
	},
	check: function(itemZip,itemLabel,itemValue) {
		this.labelStr = itemLabel;
		this.valueStr = itemValue;
		this.zipcode = itemZip;
		site.log('check, zipCheck checking: '+ $F(this.zipcode));
		if (this.zipcode == 'sZip') { $('sCityTag').addClassName('pending'); } else { $('dCityTag').addClassName('pending'); }
		if ($F(this.zipcode) != '')  { dk.ide.webservice.zipservice.GetCity($F(this.zipcode),this.write.bind(this)); }
    },
    write: function(data) {
    	var d = (!Object.isUndefined(data.d))? data.d: data;
		data = d;
		if (this.zipcode == 'sZip') { $('sCityTag').removeClassName('pending'); } else { $('dCityTag').removeClassName('pending'); }
		site.log('check, zipCheck updating ' + data);
		if ($(this.labelStr) != null) { $(this.labelStr).update(data.bynavn); }
		if ($(this.valueStr) != null) { $(this.valueStr).setValue(data.bynavn); }
		if (data.foundroute == true) { 
			errorZipInvalid = 0;
			errorRouteInvalid = 0;
		}
		if (data.isvalidzip == true) { 
			errorZipInvalid = 0;
		}
		if (data.isvalidzip == true && data.foundroute == false && $('pickup').checked) { 
			errorRouteInvalid = 0;
		}
		if (this.zipcode == 'sZip') { popx = '442px';popy = '316px'; } else { popx = '442px';popy = '552px'; }
		if (data.isvalidzip != true && data.foundroute == false) document.fire('errormessage:show', { closeable: false, boxname: 'invalidzip', action: 'zipError("'+this.zipcode+'")',xpos: popx, ypos: popy, errormessage: 'Postnummeret '+$F(this.zipcode)+' er ikke et gyldigt postnummer. Indtast venligst et gyldigt postnummer. Eller opgiv en anden leveringsadresse.' });
		//if (data.isvalidzip != true && data.foundroute == false) document.fire('errormessage:show', { boxname: 'invalidDZip', action: 'dZipError();',xpos: '442px', ypos: '245px', errormessage: 'Postnummeret er ikke et gyldigt postnummer. Indtast venligst et gyldigt postnummer.' });
		if (data.isvalidzip == true && data.foundroute == false && !$('pickup').checked) document.fire('errormessage:show', { closeable: false, boxname: 'invalidroute', action: 'routeError("'+this.zipcode+'")',xpos: popx, ypos: popy, errormessage: 'IDEmøbler kan desværre ikke tilbyde levering til postnummeret '+$F(this.zipcode)+'. Indtast venligst en anden leveringsadresse eller afkryds "Jeg henter selv" for at fuldende din bestilling.' });
    	//document.fire('errormessage:show', { boxname: 'invalidtest', xpos: '442px', ypos: '245px', errormessage: 'TEST: IDEmøbler kan desværre ikke tilbyde levering til din adresse. Indtast venligst en anden leveringsadresse eller afkryds "Jeg henter selv" for at fuldende din bestilling.' });
	}
});

//init zipCheck
var formZipCheck = new zipCheck();


/************************** eventbox ******************************/

document.observe("errormessage:show", function(event) {
	site.log('check , errormessage pop:' + event.memo.boxname);
	var bname = event.memo.boxname;
	var berror = event.memo.errormessage;
	var closeable = (event.memo.closeable)? '':'noclose';
	$('checkoutbox').insert('<div id="'+bname+'" class="smallErrorItem '+closeable+'" style="display:none;"><div class="text" id="'+bname+'text"><xsl:comment/></div></div>');
	$(''+bname+'text').update(berror);
	// fire event or function
	eval(event.memo.action);
	$(bname).setStyle({
  		left: event.memo.xpos,
  		top: event.memo.ypos
	});
	Effect.Appear(bname, { duration: 1.0 });
	if (event.memo.closeable){
		$(bname).observe('click', function (event) {
			Effect.Fade(bname, { duration: 1.0 });
			(function(){ $(bname).remove(); }).delay(1);
	    });
    }
});

function zipError(item) {
	site.log('check , errormessage item:' + item);
	if (item == 'sZip' && !$('delivery').checked) {
		errorZipInvalid = 1;
		$('sZip').removeClassName('validated');
	}
	if (item == 'sZip' && $('delivery').checked) {
		errorZipInvalid = 0;
	}
	if (item == 'dZip') {
		errorZipInvalid = 1;
		$('dZip').removeClassName('validated');
	}
	if (errorZipInvalid == 1) { killerrors('invalidroute'); }
}

function routeError(item) {
	site.log('check , errormessage item:' + item);
	if (item == 'sZip' && $('delivery').checked) {
		errorRouteInvalid = 0;
	} 
	if (item == 'sZip' && !$('delivery').checked) {
		errorRouteInvalid = 1;
		$('sZip').removeClassName('validated');
	}
	if (item == 'dZip') {
		errorRouteInvalid = 1;
		$('dZip').removeClassName('validated');
	}
	if ($('pickup').checked) {
		errorRouteInvalid = 0;
	}
	if (errorRouteInvalid == 1) { killerrors('invalidzip'); }
}


function killerrors(item) {
	var soloItem = (item != '');
	switch(soloItem)
	{
	case true:
	  	if ($(item) != null && $(item) != undefined) { 
	  		Effect.Fade(item, { duration: 1.0 });
			(function(){ if ($(item) != null && $(item) != undefined) { $(item).remove()}}).delay(1);
		}
	  break;
	case false:
	  	var eBoxes = $$('.smallErrorItem')
		eBoxes.each(function (box) {
			if ($(box) != null) { 
				Effect.Fade(box, { duration: 1.0 });
				(function(){ if ($(box) != null && $(box) != undefined) { $(box).remove()}}).delay(1);
			}
		});
		break;
	}
}

/************************** eventbox end  ******************************/ 
/*
function validateZip(itemZip,itemLabel,itemValue){
	dk.ide.webservice.zipservice.getCity(itemZip,populateFromZip);
}
function populateFromZip(data){
	var d = (!Object.isUndefined(data.d))? data.d: data;
	data = d;
	
}*/

/* step #1 */
var customerAddress = Class.create({
	initialize: function () {
		// init
	},
	save: function () {
		site.log('check, customerAddress.save');
		var sBasketID = getCookie("BasketId");
		//CodeCompany.Cookie.read('BasketId');//globalBasketID;48205f36-49f8-47d7-b710-3350049da949
		globalBasketID = getCookie("BasketId");
		var sFirm = $F('sFirm');
		var sAtt = $F('sAtt');
		var sName = $F('sFName') + ' ' + $F('sLName');
		var sAdd = $F('sAdd');
		var sZip = $F('sZip');
		//'8653';
		var sCity = $F('sCity');
		var sEmail = $F('sEmail');
		var sPhone = $F('sPhone');
		site.log('check, pickup:checked:'+($$('#pickup:checked').length));
		//($$('#pickup:checked').length == 1)? pickup=false:pickup=true;
		($('pickup').checked)? delivery=false:delivery=true;
		
		/*var deliveryNew = $('pickup').checked;
		var deliveryOld = (globalBasketHeader.order.Header.deliverymode!='levering');*/
		/*var shopNew = $F('pickup').checked;
		var shopOld = (globalBasketHeader.order.Header.deliverymode!='levering');*/
		//if (deliveryOld == deliveryNew) { var deliveryAltered='altered';} else { var deliveryAltered='samesame';}
		//site.log('check, deliveryAltered: '+deliveryAltered);
		if (!$('delivery').checked) {
			var dFName = $F('sFName');
			var dLName = $F('sLName');
			var dName = dFName + ' ' + dLName;
			var dAdd = $F('sAdd');
			var dZip = $F('sZip');
			var dCity = $F('sCity');
		} else {
			var dFName = ($F('dFName') == '')? $F('sFName'): $F('dFName');
			var dLName = ($F('dLName') == '')? $F('sLName'): $F('dLName');
			var dName = dFName + ' ' + dLName;
			var dAdd = ($F('dAdd') == '')? $F('sAdd'): $F('dAdd');
			var dZip = ($F('dZip') == '')? $F('sZip'): $F('dZip');
			var dCity = ($F('dCity') == '')? $F('sCity'): $F('dCity');	
		}
		var sms = ($F('sms') == 'true')? true: false;
		
		if (delivery==true) {
			if (globalBasketHeader.order.Header.deliveryzipcode == dZip) { // new or changed /* && deliveryAltered='samesame'*/
					dk.ide.webservice.BasketService.UpdateOrderHead(sBasketID, sName, sAdd, sZip, sCity, sEmail, sPhone, delivery, dName, dAdd, dZip, dCity, sms, sAtt, sFirm, saveSuccess, requestFail);
			} else {
					dk.ide.webservice.BasketService.UpdateOrderHead(sBasketID, sName, sAdd, sZip, sCity, sEmail, sPhone, delivery, dName, dAdd, dZip, dCity, sms, sAtt, sFirm, updateSuccess, requestFail);
			}
		} else {
			dk.ide.webservice.BasketService.UpdateOrderHead(sBasketID, sName, sAdd, sZip, sCity, sEmail, sPhone, delivery, dName, dAdd, dZip, dCity, sms, sAtt, sFirm, getPickup, requestFail);
		}
		return true;
	},
	saveOnly: function () {
		site.log('check, customerAddress.saveOnly');
		var sBasketID = getCookie("BasketId");
		globalBasketID = getCookie("BasketId");
		var sFirm = $F('sFirm');
		var sAtt = $F('sAtt');
		var sName = $F('sFName') + ' ' + $F('sLName');
		var sAdd = $F('sAdd');
		var sZip = $F('sZip');
		var sCity = $F('sCity');
		var sEmail = $F('sEmail');
		var sPhone = $F('sPhone');
		site.log('check, pickup:checked:'+($$('#pickup:checked').length));
		($$('#pickup:checked').length == 1)? pickup=false:pickup=true;
			var dFName = ($F('dFName') == '')? $F('sFName'): $F('dFName');
			var dLName = ($F('dLName') == '')? $F('sLName'): $F('dLName');
			var dName = dFName + ' ' + dLName;
			var dAdd = ($F('dAdd') == '')? $F('sAdd'): $F('dAdd');
			var dZip = ($F('dZip') == '')? $F('sZip'): $F('dZip');
			var dCity = ($F('dCity') == '')? $F('sCity'): $F('dCity');
		var sms = ($F('sms') == 'true')? true: false;
		
		dk.ide.webservice.BasketService.UpdateOrderHead(sBasketID, sName, sAdd, sZip, sCity, sEmail, sPhone, pickup, dName, dAdd, dZip, dCity, sms, sAtt, sFirm, justUpdate, requestFail);
		return true;
	},
	populate: function () {
		site.log('check: saveAddress - populate:');
		
		$('sFirm').setValue(globalBasketHeader.order.Header.company);
		$('sAtt').setValue(globalBasketHeader.order.Header.att);
		var sFName = globalBasketHeader.order.Header.salesname.split(' ');
		var nameSize = sFName.size()-1;
		$('sFName').setValue(sFName[0]);
		if (nameSize >= 1){
			i = 1;
			sFNameStr = '';
			while (i <= nameSize) { sFNameStr += sFName[i] + ' '; i++; };
			$('sLName').setValue(sFNameStr);
		}
		
		$('sAdd').setValue(globalBasketHeader.order.Header.salesaddress);
		$('sZip').setValue(globalBasketHeader.order.Header.zipcode);
		$('sCity').setValue(globalBasketHeader.order.Header.city);
		$('sEmail').setValue(globalBasketHeader.order.Header.email);
		$('sPhone').setValue(globalBasketHeader.order.Header.phone);
		var dFName = globalBasketHeader.order.Header.deliveryname.split(' ');
		var nameSized = dFName.size()-1;
		$('dFName').setValue(dFName[0]);
		if (nameSize >= 1){
			j = 1;
			dFNameStr = '';
			while (j <= nameSized) { dFNameStr += dFName[j] + ' '; j++; };
			$('dLName').setValue(dFNameStr);
		}

		if (globalBasketHeader.order.Header.deliverymode == 'levering' && globalBasketHeader.order.Header.deliveryzipcode != '') {
			$('delivery').checked = true;
			$('billing_toggle').toggleClassName('on').toggleClassName('off');
			$('check_billing').toggleClassName('on').toggleClassName('off');
			$('billtable').show();
		} else { 
			$('delivery').checked = false;
		}
		if (globalBasketHeader.order.Header.deliverymode != 'levering') {
			$('pickup').checked = true;
			$('checkout_getshop_holder').show();
			$('delivery').checked = false;
			$("delivery").disable();
			
		}
		
		$('dAdd').setValue(globalBasketHeader.order.Header.deliveryaddress);
		$('dZip').setValue(globalBasketHeader.order.Header.deliveryzipcode);
		$('dCity').setValue(globalBasketHeader.order.Header.deliverycity);
		$('sms').setValue(globalBasketHeader.order.Header.sendsms);
		
		(function(){ formZipCheck.check('sZip','sCityTag','sCity') }).delay(2);
		(function(){ formZipCheck.check('dZip','dCityTag','dCity') }).delay(1);
		
	},
	resume: function () {
		site.log('check: saveAddress - receipt:');
		// money
		site.log('check, basketSubTotal: ' + globalBasketHeader.basketSubTotal.printable);
		$('purchase').update(globalBasketHeader.basketSubTotal.printable);
		$('shipping').update(globalBasketHeader.freight.printable);
		$('total').update(globalBasketHeader.basketTotal.printable);
		/* paddress */
		$('pfirm').update(globalBasketHeader.order.Header.company);
		$('patt').update('Att. '+globalBasketHeader.order.Header.att);
		$('pname').update(globalBasketHeader.order.Header.salesname);
		$('padd').update(globalBasketHeader.order.Header.salesaddress+', '+globalBasketHeader.order.Header.zipcode+' '+ globalBasketHeader.order.Header.city);
		$('pemail').update(globalBasketHeader.order.Header.email);
		$('pphone').update(globalBasketHeader.order.Header.phone);
		
		if (globalBasketHeader.order.Header.deliverymode == 'levering') {
			/* shipping */
			$('dname').update(globalBasketHeader.order.Header.deliveryname);
			$('dadd').update(globalBasketHeader.order.Header.deliveryaddress+', '+globalBasketHeader.order.Header.deliveryzipcode+' '+ globalBasketHeader.order.Header.deliverycity);
			/* delivery */
			$('ddate').update(''+ globalBasketHeader.order.Header.deliveryinfo.deliveryDate.readable);
			dtimeStr = 'Kl. ' + globalBasketHeader.order.Header.deliveryinfo.startHour + ' - ' + globalBasketHeader.order.Header.deliveryinfo.endHour;
			$('dtime').update(dtimeStr);
		} else {
			$('deliveryColholder').hide();
			$('ddate').update(globalBasketHeader.order.Header.shopinfo.name + '<br/>Fra '+ globalBasketHeader.order.Header.pickupdate.readable);
			$('dtime').hide();			
		}
		// cufon
		(function(){ document.fire('custom:refreshCufon'); }).defer();
		// ready
		$('receiver').removeClassName('pending');
				
	},
	receipt: function () {
		site.log('check: saveAddress - receipt:');
		// money
		site.log('check, basketSubTotal: ' + globalBasketHeader.basketSubTotal.printable);
		$('purchase').update(globalBasketHeader.basketSubTotal.printable);
		$('shipping').update(globalBasketHeader.freight.printable);
		$('total').update(globalBasketHeader.basketTotal.printable);
		/* paddress */
		$('pfirm').update(globalBasketHeader.order.Header.company);
		$('patt').update('Att. '+globalBasketHeader.order.Header.att);
		$('pname').update(globalBasketHeader.order.Header.salesname);
		$('padd').update(globalBasketHeader.order.Header.salesaddress+', '+globalBasketHeader.order.Header.zipcode+' '+ globalBasketHeader.order.Header.city);
		$('pemail').update(globalBasketHeader.order.Header.email);
		$('pphone').update(globalBasketHeader.order.Header.phone);
		
		if (globalBasketHeader.order.Header.deliverymode == 'levering') {
			/* shipping */
			$('dname').update(globalBasketHeader.order.Header.deliveryname);
			$('dadd').update(globalBasketHeader.order.Header.deliveryaddress+', '+globalBasketHeader.order.Header.deliveryzipcode+' '+ globalBasketHeader.order.Header.deliverycity);
			/* delivery */
			$('ddate').update(''+ makeDates($D(globalBasketHeader.order.Header.customdlvdate), 'long'));
			dtimeStr = 'KL. ' + globalBasketHeader.order.Header.deliveryinfo.startHour + ' - ' + globalBasketHeader.order.Header.deliveryinfo.endHour;
			$('dtime').update(dtimeStr);
		} else {
			$('deliveryColholder').hide();
			$('ddate').update(globalBasketHeader.order.Header.shopinfo.name + '<br/>Fra '+ makeDates($D(globalBasketHeader.order.Header.customdlvdate), 'long'));
			$('dtime').hide();			
		}
		// cufon
		(function(){ document.fire('custom:refreshCufon'); }).defer();
		// ready
		$('receiver').removeClassName('pending');			
	}
});

var myAdd = new customerAddress();

/* step #2 */
function saveSuccess() {
	// save the address
	site.log('check: saveAddress - success:' + globalBasketID);
	// update temp Basket
	changePage.getit('');
	// load delivery page
	loadElement.load('/systemservice/checkout/levering?c=1', 'receiver', 'get', 'update');
	// start the delivery-request
	//site.log('check globalBasketHeader.order.Header.customdlvdate: ' + ($D(globalBasketHeader.order.Header.customdlvdate).getFullYear() == 1));
	
	if (globalBasketHeader.order.Header.deliverymode == 'afhentning') {
			getPickupDate();
	} else {
		// do we need to get dates at all?
		site.log('delivery tell-tale: ' + (globalBasketHeader.order.deliveryMethodInfo.byPost == true && globalBasketHeader.order.deliveryMethodInfo.byShipment == false));
		if (globalBasketHeader.order.deliveryMethodInfo.byPost == true && globalBasketHeader.order.deliveryMethodInfo.byShipment == false) {
			// do nothing so far
		} else {
			if (globalBasketHeader.order.Header.customdlvdate != globalBasketHeader.order.Header.deliverydate) {
				checkDelivery();
			} else {
				dk.ide.webservice.DeliveryService.RequestDelivery(globalBasketID, checkDelivery, requestFail);
			}
		}
	}
}

function justUpdate() {
	changePage.getit('');
}

var z = '';
globalPickupRetry = 0;

function setPickup(pickupBool) {
	dk.ide.webservice.DeliveryService.SetDeliveryMethod(globalBasketID, pickupBool, justUpdate);
}

function getPickup() {
	// update temp Basket
	changePage.getit('');
	// load delivery page
	loadElement.load('/systemservice/checkout/levering?c=1', 'receiver', 'get', 'update', 'requestPickupDate()');
}

function requestPickupDate() {
	dk.ide.webservice.DeliveryService.RequestDelivery(globalBasketID, getPickupDate(), requestFail);
}

function getPickupDate() {
	if (globalPickupRetry < 4 && scaleCount < 10) {
		site.log('check globalPickupRetry ' + globalPickupRetry);
		forceIt = false;
	} else {
		site.log('check force globalPickupRetry ' + globalPickupRetry);
		forceIt = true;
	}
	dk.ide.webservice.DeliveryService.GetPickupDate(globalBasketID, forceIt, getPickupRetry, getPickupRetry);
}

function getPickupRetry(data) {
	if (globalPickupRetry == 0) {
		scaleIt();
	}
	if (data.dato.toString() == '') {
		if (z != '') {
			clearTimeout(z);
		};
		globalPickupRetry++;
		z = getPickupDate.delay(2);
	} else {
		if (z != '') {
			clearTimeout(z);
		};
		(function(){$('pickTime').update(''+ makeDates($D(data.dato), 'long'))}).defer();
		(function(){$('delivery_time_receiver').update(''+ makeDates($D(data.dato), 'long'))}).defer();
		changePage.getit('');
		globalPickupRetry = 0;
		//drawDefaultTime(data.dato).strftime('%m-%d-%Y').defer();
	}
}

function updateSuccess() {
	// save the address
	site.log('check: updateAddress - success:' + globalBasketID);
	// update temp Basket
	changePage.getit('');
	// load delivery page
	loadElement.load('/systemservice/checkout/levering?c=1', 'receiver', 'get', 'update');
	// start the delivery-request
	dk.ide.webservice.DeliveryService.RequestDelivery(globalBasketID, checkDelivery, requestFail);
}

/* step #3 */
var globalRetry = 0;
var scaleCount = 0;
function checkDelivery() {
	// start the delivery-request
	site.log('check: checking delivery');
	var forceDate = false;
	if (globalRetry >= 3 || scaleCount > 9) {
		forceDate = true;
		//$('load_calendar').addClassName('forced');
	}

	// DETTE SKAL SÆTTES TIL CA. 3 !!!!!!
	site.log('check, checkDelivery - forceDate ' + forceDate);
	dk.ide.webservice.DeliveryService.HasAssignedDelivery(globalBasketID, forceDate, executeReCheck, requestFail);
}

/* step #4 */
function scaleIt() {
	var scaleCount = 0;
	var globalPickupRetry = 0;
	var globalRetry = 0;
	new PeriodicalExecuter(function(pe) {
	  if (scaleCount <= 9) {
	  	scaleCount++;
	  	var scaleStyle = (scaleCount*15).toString() + 'px';
	  	if($('scalebar')!=null) {
	  		site.log('check: scale++: ' + scaleStyle);
	  		$('scalebar').setStyle({
			  'width': scaleStyle
			});
	  	}
	  } else {
	    pe.stop();
	  }
	}, 1);
}

var t = '';
function executeReCheck(data) {
	var d = (!Object.isUndefined(data.d))? data.d: data;
	data = d;
	site.log('check executeDeliveryCheck');
	site.log('check isassigned: ' + data.isassigned);
	site.log('check date: ' + data.date);
	site.log('check custdate: ' + data.custdate);
	site.log('check routeid: ' + data.routeid);
	if (globalRetry == 0) {
		scaleIt();
	}
	
	if (data.isassigned == true) {
		site.log('check field IS present, DOM.size():' + ($$('div#delivery_time_receiver').size()));
		if (t != '') {
			clearTimeout(t);
		};
		
		var showCalendar = true;
		
		(data.routeid != '########')? showCalendar = true:showCalendar = false;
		
		drawDefaultTime(data.custdate, data.date, data.starttime, data.endtime, showCalendar);
		newDate = $D(data.custdate).strftime('%Y-%m-%d');
		
		site.log('check newDate: ' + newDate);
		//sendTime = newDate.toString();
		//$('tempDate').getValue = sendTime;
		//$('tempRoute').value = data.routeid.toString();
		saveDeliveryDirect(data.routeid.toString(),newDate.toString());
		// reset global counter
		globalRetry = 0;
	} else {
		site.log('check data is NOT present and DOMready:' + ($('delivery_time_receiver') != null));
		if (t != '') {
			clearTimeout(t);
		};
		//if (!$('delivery_time_receiver') == undefined) {
		globalRetry++;
		t = checkDelivery.delay(2);
		//}
		//genFakeDeliveryDate();
	}
}

/* step #6 */
var y ='';
function drawDefaultTime(drawDateData, drawStartDateData, drawTimeStart, drawTimeEnd, showCalendar) {
	// show time
	site.log('check drawDefaultTime: ' + drawDateData);
	var data = $D(drawDateData).strftime('%m-%d-%Y');
	if ($('delivery_time_receiver') != null) {
		$('delivery_time_receiver').update(''+ makeDates($D(data), 'long')+' Kl. ' + drawTimeStart + '-' + drawTimeEnd);
		site.log('check levering: ' + globalBasketHeader.order.Header.deliverymode);
		if (globalBasketHeader.order.Header.deliverymode == 'levering' && showCalendar == true) {
			//$('load_calendar').show();
			$('checkout_delivery').show();
			changePage.getit('loadcalendar');
		}
		$('gotoResume').removeClassName('locked').addClassName('unlocked'); 
		$('tab4').removeClassName('locked').addClassName('unlocked');
		if (y != '') {
			clearTimeout(y);
		};
	} else {
		function dlay() {
			if ($('delivery_time_receiver')!=null) { 
				$('delivery_time_receiver').update(''+ makeDates($D(data), 'long')+' Kl. ' + drawTimeStart + '-' + drawTimeEnd);
				if (globalBasketHeader.order.Header.deliverymode == 'levering' && showCalendar == true) {
					//$('load_calendar').show();
					$('checkout_delivery').show();
					changePage.getit('loadcalendar');
				}
				$('gotoResume').removeClassName('locked').addClassName('unlocked'); 
			    $('tab4').removeClassName('locked').addClassName('unlocked');
		    }
		}
		dlay.delay(2);
		dlay.delay(4);
		dlay.delay(6);
	};
	// SET THE FIRST AVAILABLE DATE TO "globalStartDate"
	globalStartDate = data;
	globalCalStartDate = $D(drawStartDateData).strftime('%m-%d-%Y');
}


function loadCalendar() {
	// save the address
	site.log('check: delivery loadCalendar');
	var zipCode = globalBasketHeader.order.Header.deliveryzipcode;
	site.log('check: delivery loadCalendar - deliveryzipcode: ' + zipCode);
	var startDate = globalCalStartDate;
	startDate = $D(startDate).strftime('%Y-%m-%d');
	if (zipCode != '') {
		site.log('check: call GetDeliveryCalendar with: ' + startDate + '/' + zipCode);
		dk.ide.webservice.DeliveryService.GetDeliveryCalendar(startDate, zipCode, drawCalendar, requestFail);
	} else {
		site.log('check: delivery loadCalendar - deliveryzipcode is empty');
	};
	$('t_days').addClassName('pending');
}

// set global Startdate offset
var globalStartOffset = 0;
// set number of selectable days
var globalMaxDays = 0;
// set global weeke number
var globalWeekNumber = '';

function getOffsetDays(newDate, newLastDate) {
	
	var currDate = Date.create(newDate);
	var lastDate = Date.create(newLastDate);
	// simulate other days
	//lastDate = lastDate.add(3);
	// Dagens nummer i dag
	site.log('check getOffsetDays currDate: ' + currDate);
	var currDay = currDate.getDay();
	var lastDay = lastDate.getDay();
	site.log('check getOffsetDays currDay: ' + currDay);
	
	// Tomme dage før første gyldige dato
	var emptyDays = 0;
	// Tomme dage efter første gyldige dato
	var emptyDaysAfter = 0;
	// Korrigeret startdato for fuld først uge
	var corrStart = 0;
	
	// tomme dage i periodens start (søndag og frem)
	switch (currDay) {
		// søndag
		case 0:
		emptyDays = 0;
		break;
		// mandag
		case 1:
		emptyDays = 0;
		break;
		// tirsdag
		case 2:
		emptyDays = 1;
		break;
		// onsdag
		case 3:
		emptyDays = 2;
		break;
		// torsdag
		case 4:
		emptyDays = 3;
		break;
		// fredag
		case 5:
		emptyDays = 4;
		break;
		// lørdag
		case 6:
		emptyDays = 5;
		break;
	}
	switch (lastDay) {
		// søndag
		case 0:
		emptyDaysAfter = 0;
		break;
		// mandag
		case 1:
		emptyDaysAfter = 6;
		break;
		// tirsdag
		case 2:
		emptyDaysAfter = 5;
		break;
		// onsdag
		case 3:
		emptyDaysAfter = 4;
		break;
		// torsdag
		case 4:
		emptyDaysAfter = 3;
		break;
		// fredag
		case 5:
		emptyDaysAfter = 2;
		break;
		// lørdag
		case 6:
		emptyDaysAfter = 1
		break;
	}
	
	globalStartDate = currDate.clone();
	
	site.log('check: getOffsetDays, emptyDays:  ' + emptyDays);
	site.log('check: getOffsetDays, emptyDaysAfter:  ' + emptyDaysAfter);
	
	// the global number of empty days to begin with
	return emptyDays + ',' + emptyDaysAfter;
}

function prettyDay(day) {
	// set weekday-name
	switch (day.toString()) {
		case '1':
		var rowDayName = "MANDAG"
		break;
		case '2':
		var rowDayName = "TIRSDAG"
		break;
		case '3':
		var rowDayName = "ONSDAG"
		break;
		case '4':
		var rowDayName = "TORSDAG"
		break;
		case '5':
		var rowDayName = "FREDAG"
		break;
		case '6':
		var rowDayName = "LØRDAG"
		break;
		case '0':
		var rowDayName = "SØNDAG"
		break;
	}
	return rowDayName;
}


function prettyMonth(month) {
	// set month-name
	switch (month.toString()) {
		case '0':
		var rowMonthName = "JAN."
		break;
		case '1':
		var rowMonthName = "FEB."
		break;
		case '2':
		var rowMonthName = "MAR."
		break;
		case '3':
		var rowMonthName = "APR."
		break;
		case '4':
		var rowMonthName = "MAJ"
		break;
		case '5':
		var rowMonthName = "JUN."
		break;
		case '6':
		var rowMonthName = "JUL."
		break;
		case '7':
		var rowMonthName = "AUG."
		break;
		case '8':
		var rowMonthName = "SEPT."
		break;
		case '9':
		var rowMonthName = "OKT."
		break;
		case '10':
		var rowMonthName = "NOV."
		break;
		case '11':
		var rowMonthName = "DEC."
		break;
	}
	return rowMonthName;
}

/*********************************************************
******************     templates    *********************
*********************************************************/

if (Object.isUndefined(BookingSlots)) {
	var BookingSlots = {
	};
}

BookingSlots = {
	templates: {
		BS_Table: new Template('' + '#{wrapstart}#{rows}#{wrapend}'),
		BS_TableCol: new Template(
		'<div class="daybox #{rowclass}">' +
		'<div class="day">#{rowdate}</div>' +
		'<div class="slots">' +
		'<div rel="#{rs1}_#{rowdateReal}_#{rt1}" class="hoverit slot #{rr1}">#{rst1}#{price1}</div>' +
		'<div rel="#{rs2}_#{rowdateReal}_#{rt2}" class="hoverit slot #{rr2}">#{rst2}#{price2}</div>' +
		'<div rel="#{rs3}_#{rowdateReal}_#{rt3}" class="hoverit slot #{rr3}">#{rst3}#{price3}</div>' +
		'<div rel="#{rs4}_#{rowdateReal}_#{rt4}" class="hoverit slot #{rr4}">#{rst4}#{price4}</div>' +
		'</div></div>')
	}
};


function drawCalendar(data) {
	// show times
	var d = (! Object.isUndefined(data.d))? data.d: data;
	data = d;

	$('t_message').update('Tider hentet!'); //  + data[0].slots.size()
	
	if (data.size() != 0) {
		var lines = '';
		var linesAfter = '';
		var i = 0;
		var yearNum = '';
		var dayCount = '';
		//var tempDayCount = data.size(); // indtil rigtig kalender er aktiv
		// change the date format - MAY BE OBSOLETE!
		var splitDate = data[0].date.split('-');
		var splitLastDate = data[data.size() - 1].date.split('-');
		var newDate = Date.create(splitDate[1] + '-' + splitDate[0] + '-' + splitDate[2]);
		var newLastDate = Date.create(splitLastDate[1] + '-' + splitLastDate[0] + '-' + splitLastDate[2]);
		// korriger startdato
		globalStartOffset = getOffsetDays(newDate, newLastDate).split(',');
		//site.log('check globalstartoffset:' + globalStartOffset[0] + ',' + globalStartOffset[1]);
		j = globalStartOffset[0];
		while (j > 0) {
			thisDayTitle = ($D(newDate).clone().add(- j).getDate()) + '. ' + prettyMonth($D(newDate).clone().add(- j).getMonth()) + '<br />' + prettyDay($D(newDate).clone().add(- j).getDay())
			lines += "<div class='daybox'><div class='day'>" + thisDayTitle + "</div><div class='slots'><div class='slot empty'>&nbsp;</div><div class='slot empty'>&nbsp;</div><div class='slot empty'>&nbsp;</div><div class='slot empty'>&nbsp;</div></div></div>";
			j--;
		}
		
		site.log('check drawCalendar, emptylines:' + lines);
		
		
		// dynamiske slot-tider
		var slotSize = data[0].slots.size();
		if (slotSize > 0) {
			var slotTime1 = 'KL. ' + data[0].slots[0].starttime + '-' + data[0].slots[0].endtime;
		} else {
			var slotTime1 = ' ';
		}
		if (slotSize > 1) {
			var slotTime2 = 'KL. ' + data[0].slots[1].starttime + '-' + data[0].slots[1].endtime;
		} else {
			var slotTime2 = ' ';
		}
		if (slotSize > 2) {
			var slotTime3 = 'KL. ' + data[0].slots[2].starttime + '-' + data[0].slots[2].endtime;
		} else {
			var slotTime3 = ' ';
		}
		if (slotSize > 3) {
			var slotTime4 = 'KL. ' + data[0].slots[3].starttime + '-' + data[0].slots[3].endtime;
		} else {
			var slotTime4 = ' ';
		}
		/* $('slotTime1').update(slotTime1);
		$('slotTime2').update(slotTime2);
		$('slotTime3').update(slotTime3);
		$('slotTime4').update(slotTime4);*/
		
		var rowLastDate = '';
		data.each(function (line) {
			var slotSize = line.slots.size();
			// make correct date format
			var strDate = line.date.split('-');
			var rowRealDate = Date.create(strDate[1] + '-' + strDate[0] + '-' + strDate[2]);
			rowLastDate = rowRealDate;
			//rowRealDate = $D(line.date);
			if (slotSize > 0) {
				var rowSlot1 = line.slots[0].routeID;
				var rowRes1 = line.slots[0].capacity
				var rowPrice1 = (line.slots[0].routeprice != '0')? '<div class="price">+' + line.slots[0].routeprice + ',-</div>':'';
				var rowTime1 = (rowRes1 > 0)? 'KL. ' + line.slots[0].starttime + '-' + line.slots[0].endtime: '';
				var rowShortTime1 = (rowRes1 > 0)? '' + line.slots[0].starttime + '-' + line.slots[0].endtime: '';
			} else {
				var rowSlot1 = '';
				var rowRes1 = '';
				var rowTime1 = '';
				var rowPrice1 = '';
			};
			if (slotSize > 1) {
				var rowSlot2 = line.slots[1].routeID;
				var rowRes2 = line.slots[1].capacity;
				var rowPrice2 = (line.slots[1].routeprice != '0')? '<div class="price">+' + line.slots[1].routeprice + ',-</div>':'';
				var rowTime2 = (rowRes2 > 0)?  'KL. ' + line.slots[1].starttime + '-' + line.slots[1].endtime:'';
				var rowShortTime2 = (rowRes2 > 0)?  '' + line.slots[1].starttime + '-' + line.slots[1].endtime:'';
			} else {
				var rowSlot2 = '';
				var rowRes2 = '';
				var rowTime2 = '';
				var rowPrice2 = '';
			};
			if (slotSize > 2) {
				var rowSlot3 = line.slots[2].routeID;
				var rowRes3 = line.slots[2].capacity;
				var rowPrice3 = (line.slots[2].routeprice != '0')? '<div class="price">+' + line.slots[2].routeprice + ',-</div>':'';
				var rowTime3 = (rowRes3 > 0)?  'KL. ' + line.slots[2].starttime + '-' + line.slots[2].endtime:'';
				var rowShortTime3 = (rowRes3 > 0)?  '' + line.slots[2].starttime + '-' + line.slots[2].endtime:'';
			} else {
				var rowSlot3 = '';
				var rowRes3 = '';
				var rowTime3 = '';
				var rowPrice3 = '';
			};
			if (slotSize > 3) {
				var rowSlot4 = line.slots[3].routeID;
				var rowRes4 = line.slots[3].capacity;
				var rowPrice4 = (line.slots[3].routeprice != '0')? '<div class="price">+' + line.slots[3].routeprice + ',-</div>':'';
				var rowTime4 = (rowRes4 > 0)?  'KL. ' + line.slots[3].starttime + '-' + line.slots[3].endtime:'';
				var rowShortTime4 = (rowRes4 > 0)?  '' + line.slots[3].starttime + '-' + line.slots[3].endtime:'';
			} else {
				var rowSlot4 = '';
				var rowRes4 = '';
				var rowTime4 = '';
				var rowPrice4 = '';
			};
			
			rowDay = rowRealDate.getDay();
			rowDate = rowRealDate.getDate();
			rowMonth = rowRealDate.getMonth();
			rowYear = rowRealDate.getFullYear();
			
			rowDateCorr = (rowRealDate.getDate().toString().length == 1)? '0' + rowRealDate.getDate(): rowRealDate.getDate();
			rowMonthCorr = ((rowRealDate.getMonth() + 1).toString().length == 1)? '0' +(rowRealDate.getMonth() + 1): (rowRealDate.getMonth() + 1);
			
			rowDayName = prettyDay(rowDay.toString());
			rowMonthName = prettyMonth(rowMonth.toString());
						
			//if (rowDay != 0) {
				lines += BookingSlots.templates.BS_TableCol.evaluate(Object.extend(line, {
					rowclass: ((i % 2) == 0)? 'evenrow': 'oddrow',
					rownum: i,
					rowdate: rowRealDate.getDate() + '. ' + rowMonthName + '<br />' + rowDayName,
					rowdateReal: rowYear + '-' + rowMonthCorr + '-' + rowDateCorr,
					rs1: rowSlot1,
					rs2: rowSlot2,
					rs3: rowSlot3,
					rs4: rowSlot4,
					rt1: rowTime1,
					rt2: rowTime2,
					rt3: rowTime3,
					rt4: rowTime4,
					rst1: rowShortTime1,
					rst2: rowShortTime2,
					rst3: rowShortTime3,
					rst4: rowShortTime4,
					price1: rowPrice1,
					price2: rowPrice2,
					price3: rowPrice3,
					price4: rowPrice4,
					rr1: (rowSlot1 == globalBasketHeader.order.Header.routeid && ($D(rowRealDate).valueOf() == $D(globalBasketHeader.order.Header.customdlvdate).valueOf()))? (rowRes1 > 0)? 'selected free': 'selected full':(rowRes1 > 0)? 'free': 'full',
					rr2: (slotSize > 1)? (rowSlot2 == globalBasketHeader.order.Header.routeid && ($D(rowRealDate).valueOf() == $D(globalBasketHeader.order.Header.customdlvdate).valueOf()))? (rowRes2 > 0)? 'selected free': 'selected full':(rowRes2 > 0)? 'free': 'full':'empty',
					rr3: (slotSize > 2)? (rowSlot3 == globalBasketHeader.order.Header.routeid && ($D(rowRealDate).valueOf() == $D(globalBasketHeader.order.Header.customdlvdate).valueOf()))? (rowRes3 > 0)? 'selected free': 'selected full':(rowRes3 > 0)? 'free': 'full':'empty',
					rr4: (slotSize > 3)? (rowSlot4 == globalBasketHeader.order.Header.routeid && ($D(rowRealDate).valueOf() == $D(globalBasketHeader.order.Header.customdlvdate).valueOf()))? (rowRes4 > 0)? 'selected free': 'selected full':(rowRes4 > 0)? 'free': 'full':'empty'
				}));
			//}
			
			i += 1;
		});
		
		newEndDate = $D(rowLastDate);
		newEndDate = newEndDate.add(1);
		// newDate
		site.log('check newEndDate' + $D(rowLastDate) + '/' + newEndDate);
		var j = globalStartOffset[1];
		var k = 0;
		// temp empty dayslots
		// override j
		/*var tempAddDays = (tempDayCount%6);
		switch(tempAddDays)
		{
		case 0:
			j=0;
			break;
		case 1:
			j=5;
			break;
		case 2:
			j=4;
			break;
		case 3:
			j=3;
			break;
		case 4:
			j=2;
			break;
		case 5:
			j=6;
			break;
		case 6:
			j=0;
			break;
		}*/

		while (j > 0) {
			thisDayTitle = ($D(newEndDate).clone().add(k).getDate()) + '. ' + prettyMonth($D(newEndDate).clone().add(k).getMonth()) + '<br />' + prettyDay($D(newEndDate).clone().add(k).getDay())
			lines += "<div class='daybox'><div class='day'>" + thisDayTitle + "</div><div class='slots'><div class='slot empty'>&nbsp;</div><div class='slot empty'>&nbsp;</div><div class='slot empty'>&nbsp;</div><div class='slot empty'>&nbsp;</div></div></div>";
			j--;
			k++;
		}
		
		// number of selectable days
		globalMaxDays = i;
		//site.log('bookstyle: globalMax:' +globalMaxDays)
		
		// set visual stats
		//site.log('bookstyle: globalStartDate1: ' + globalStartDate);
		globalWeekNumber = globalStartDate.getISOWeek();
		//site.log('bookstyle: globalStartDate2: ' + globalStartDate);
		//$('bs_stats').update('UGE ' + globalWeekNumber + ', ' + globalStartDate.getFullYear());
		
		// populate view
		$('t_days').update(BookingSlots.templates.BS_Table.evaluate({
			offset: 'offset_' + globalStartOffset,
			rows: lines,
			wrapstart: "<div id='dayWindow'>",
			wrapend: "</div>"
		}));
		
		$('t_message').hide();
		$('t_days').removeClassName('pending');
		//$('slotTimes').show();
			
		// show hidden elements
		//$("bs_stats").show();
		$("weeks").show();
		$("bs_heading").show();
		
		// set up listeners
		$$('.free').each(function (s, index) {
			////site.log('køb: array built ' +s +'/'+ index);
			Event.observe(s, 'mouseover', mOver.bindAsEventListener(this));
			Event.observe(s, 'mouseout', mOut.bindAsEventListener(this));
			Event.observe(s, 'click', mClick.bindAsEventListener(this));
		});
		
		moveDates = new SliderObserver;
		
		// make sure, that IE set x-axis to 0
		$("dayWindow").setStyle({
			left: '0'
		});
		
		// refurbish page
		document.fire("custom:contentrefresh");
		// cufon
		(function(){ document.fire('custom:refreshCufon'); }).defer();
	} else {
		// $('orders').removeClassName('pending');
		$('t_message').update('Der er desværre ingen ledige tidspunkter.');
	}
	//debugger;
}

var newWeekDate = Date.create(globalStartDate).clone();
function updateWeek(direction) {
	if (direction == 'up') {
		$('bs_stats').update('UGE ' + newWeekDate.add(7).getISOWeek() + ', ' + newWeekDate.add(7).getFullYear());
	}
	if (direction == 'down') {
		$('bs_stats').update('UGE ' + newWeekDate.add(- 7).getISOWeek() + ', ' + newWeekDate.add(- 7).getFullYear());
	}
	(function(){ document.fire('custom:refreshCufon'); }).defer();
}

/* tab 4 functions */

/* save the chosen or given delivery date */
/*function saveDelivery() {
	site.log('check - saveDelivery');
	dk.ide.webservice.DeliveryService.Book($('tempDate').getValue(), $('tempRoute').getValue(), globalBasketID, saveDeliverySuccess);
}*/

function saveDeliveryDirect(route,timestamp) {
	site.log('check - saveDeliveryDirect');
	dk.ide.webservice.DeliveryService.Book(timestamp, route, globalBasketID, saveDeliverySuccess);
}

function saveDeliverySuccess(data) {
	// check success
	var d = (! Object.isUndefined(data.d))? data.d: data;
	data = d;
	if (data.status == 'OK') {
		site.log('check - action success: confirmed');
		changePage.getit('');
	} else {
		site.log('check - action success: NOT confirmed');
	}
}

/* step failed */
function requestFail() {
	// report the error
 	document.fire('errormessage:show', { boxname: 'commonerror',xpos: '350px', ypos: '245px', errormessage: 'Der er desværre opstået en fejl. Hvis fejlen betyder, at du ikke kan komme videre, så forsøg at gå tilbage til forrige trin og prøv igen. Får du fortsat fejl vil det være en stor hjælp hvis du vil fortælle om fejlen - skriv til eButik@ide.dk.' });
	site.log('check - action failed');
}

/* make nice dates */
function makeDates(isoDate, type) {
	var rowRealDate = new Date();
	rowRealDate = $D(isoDate);
	var rowDay = rowRealDate.getDay();
	var rowDate = rowRealDate.getDate();
	var rowMonth = rowRealDate.getMonth();
	var rowYear = rowRealDate.getFullYear();
	if (type == 'long') {
		
		switch (rowDay.toString()) {
			case '0':
			var rowDayName = "Søndag"
			break;
			case '1':
			var rowDayName = "Mandag"
			break;
			case '2':
			var rowDayName = "Tirsdag"
			break;
			case '3':
			var rowDayName = "Onsdag"
			break;
			case '4':
			var rowDayName = "Torsdag"
			break;
			case '5':
			var rowDayName = "Fredag"
			break;
			case '6':
			var rowDayName = "Lørdag"
			break;
		}
		// set month-name
		switch (rowMonth.toString()) {
			case '0':
			var rowMonthName = "januar"
			break;
			case '1':
			var rowMonthName = "februar"
			break;
			case '2':
			var rowMonthName = "marts"
			break;
			case '3':
			var rowMonthName = "april"
			break;
			case '4':
			var rowMonthName = "maj"
			break;
			case '5':
			var rowMonthName = "juni"
			break;
			case '6':
			var rowMonthName = "juli"
			break;
			case '7':
			var rowMonthName = "august"
			break;
			case '8':
			var rowMonthName = "september"
			break;
			case '9':
			var rowMonthName = "oktober"
			break;
			case '10':
			var rowMonthName = "november"
			break;
			case '11':
			var rowMonthName = "december"
			break;
		}
		niceNess = rowDayName + ', den ' + rowDate + '. ' + rowMonthName;
		return niceNess;
	}
}

Date.prototype.getMDay = function () {
	return (this.getDay() + 6) % 7;
};
Date.prototype.getISOYear = function () {
	var thu = new Date(this.getFullYear(), this.getMonth(), this.getDate() + 3 - this.getMDay());
	return thu.getFullYear();
};
Date.prototype.getISOWeek = function () {
	var onejan = new Date(this.getISOYear(), 0, 1);
	var wk = Math.ceil((((this - onejan) / 86400000) + onejan.getMDay() + 1) / 7);
	if (onejan.getMDay() > 3) {
		wk--
	};
	return wk;
};

/******** login functions **********/

var logincallback = function (result) {

	var filler= new CodeCompany.FormFiller({
		prefix: '',
		firstnamefield: 'sFName',
		lastnamefield: 'sLName',
		dayphonefield: 'sPhone',
		emailfield: 'sEmail',
		shopfield: 'Butik',
		adress: 'sAdd',
		city: 'sCity',
		zipcode: 'sZip'
	});
	filler.render();
	killerrors('');
	(function(){ formZipCheck.check('sZip','sCityTag','sCity') }).delay(1);
}

function doLogin() {
    dk.ide.webservice.LoginService.Login(servicetoken, $F('check_email'), $F('check_pw'), logincallback);
}

Object.extend(Prototype.Browser, {
    ie6: (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) ? (Number(RegExp.$1) == 6 ? true : false) : false,
    ie7: (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) ? (Number(RegExp.$1) == 7 ? true : false) : false,
    ie8: (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) ? (Number(RegExp.$1) == 8 ? true : false) : false,
    ie9: (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) ? (Number(RegExp.$1) == 9 ? true : false) : false
});


var Cufonify = Class.create({
	initialize: function() {
		site.log('check, cufonify init');
		document.observe('custom:refreshCufon',this.resetCufon.bindAsEventListener(this));
	},
	resetCufon: function(evt) {
		site.log('check, cufonify exec (IE7 disabled: ' + Prototype.Browser.ie7 + ')');
		//if (Prototype.Browser.ie7 != true) { document.fire('custom:systemfontreplace'); }
		document.fire('custom:systemfontreplace');
    }
});

new Cufonify();


/************** Change page **************/

var basketObj = Class.create({
	initialize: function () {
		site.log('check, getBasketObj ready!');
		this.data = '';
		this.callback = '';
	},
	getit: function (callbackstr) {
		// Call basketservice
		site.log('check, globalBasketHeader getting...');
		switch(callbackstr)
		{
		case 'getreceipt':
			site.log('check, getreceipt process');
			this.getreceipt.bind(this);
			break;
		case 'getfail':
			site.log('check, getfail process');
			this.getfail.bind(this);
			break;
		case 'getdelivery':
			site.log('check, getdelivery process');
			dk.ide.webservice.BasketService.Get(servicetoken, globalBasketID, this.getdelivery.bind(this));
			break;
		default:
			this.callback = callbackstr;
			//(callback != '')? dk.ide.webservice.BasketService.Get(servicetoken, globalBasketID, eval('this.' + callback + '.bind(this)')): dk.ide.webservice.BasketService.Get(servicetoken, globalBasketID, this.setit.bind(this));
			dk.ide.webservice.BasketService.Get(servicetoken, globalBasketID, this.setit.bind(this));
			site.log('check callback (getit): ' + this.callback);
		}
	},
	setit: function (response) {
		// Update local basket object
		site.log('check, globalBasketHeader updated!');
		var d = (! Object.isUndefined(response.d))? response.d: response;
		this.data = d;
		globalBasketHeader = this.data;
		site.log('check globalBasketHeader: ' + this.data.order.Header.customdlvdate);
		if (this.callback != '' && this.callback != undefined) { dk.ide.webservice.BasketService.Get(servicetoken, globalBasketID, eval('this.' + this.callback + '.bind(this)')); }
		site.log('check callback (setit): ' + this.callback + ' / '+ (this.callback != '' && this.callback != undefined));

	},
	/******** Tab #1 ********/
	getproducts: function () {
		//this.setit(getdata);
		if ($('tab1').hasClassName('unlocked')) {
			if ($('tab2').hasClassName('active')) {
				myAdd.saveOnly();
			}
			/*if (!$('tab1').hasClassName('active')) {
				$('receiver').addClassName('pending');
			}*/
			
			loadShoppingCart();
			togglePg.toggleTabs($("tab1"), 0);
			// disable forward
			$('tab2').removeClassName('unlocked').addClassName('locked');
			$('tab3').removeClassName('unlocked').addClassName('locked');
			$('tab4').removeClassName('unlocked').addClassName('locked');
			$('tab5').removeClassName('unlocked').addClassName('locked');
			$('tabdescription').update('Varer: Trin 1 af 6');
			// kill tab#2 errors
			killerrors('');
			document.fire('custom:googletrack', { trackUrl: '/checkout/varer.html' });
		}
	},
	/******** Tab #2 ********/
	getaddresses: function () {
		//this.setit(getdata);
		if ($('tab2').hasClassName('unlocked')) {
			$('receiver').addClassName('pending');
			loadElement.load('/systemservice/checkout/adresser?c=1', 'receiver', 'get', 'update');
			// disable forward
			togglePg.toggleTabs($("tab2"), 1);
			$('tab3').removeClassName('unlocked').addClassName('locked');
			$('tab4').removeClassName('unlocked').addClassName('locked');
			$('tab5').removeClassName('unlocked').addClassName('locked');
			$('tabdescription').update('Adresser: Trin 2 af 6');
			document.fire('custom:googletrack', { trackUrl: '/checkout/adresser.html' });
		}
	},
	/******** Tab #3 ********/
	getdelivery: function () {
		//this.setit(getdata);
		site.log('check getdelivery');
		if ($('tab3').hasClassName('unlocked')) {
			$('receiver').addClassName('pending');
			if ($('tab2').hasClassName('active')) {
				myAdd.save();
			} else {
				saveSuccess();
			}
			togglePg.toggleTabs($("tab3"), 2);
			$('tab4').removeClassName('unlocked').addClassName('locked');
			$('tabdescription').update('Levering: Trin 3 af 6');
			// kill tab#2 errors
			killerrors('');
			document.fire('custom:googletrack', { trackUrl: '/checkout/levering.html' });
		}
	},
	/******** Tab #3 - load calendar ********/
	loadcalendar: function () {
		//this.setit(getdata);
		site.log('check loadcalendar');
		loadCalendar();
	},
	/******** Tab #4 ********/
	getresume: function () {
		//this.setit(getdata);
		if ($("tab4").hasClassName('unlocked')) {
			$('receiver').addClassName('pending');
			if ($('tab3').hasClassName('active') && globalBasketHeader.order.Header.deliverymode =='levering') {
				//saveDelivery();
			}
			loadElement.load('/systemservice/checkout/resume?c=1', 'receiver', 'get', 'update');
			//new Ajax.Updater('receiver', '/systemservice/checkout/resume?c=1',{onComplete:myAdd.receipt()});
			// populate view
			function delayPop() {
				myAdd.resume();
			}
		    delayPop.delay(3);
		    $("tab5").removeClassName('locked').addClassName('unlocked');
		    togglePg.toggleTabs($("tab4"), 3);
		    $('tabdescription').update('Resume: Trin 4 af 6');
		    document.fire('custom:googletrack', { trackUrl: '/checkout/resume.html' });
		}
	},
	/******** Tab #5 ********/
	getpayment: function () {
		//this.setit(getdata);
		if ($("tab4").hasClassName('unlocked')) {
			$('receiver').addClassName('pending');
			new ID.Payment('receiver', getCookie("BasketId"));
			togglePg.toggleTabs($("tab5"), 4);
			$('tabdescription').update('Betaling: Trin 5 af 6');
			document.fire('custom:googletrack', { trackUrl: '/checkout/betaling.html' });
		}
	},
	/******** Tab #6 ********/
	getreceipt: function () {
		if ($("tab6").hasClassName('unlocked')) {
			//new Ajax.Updater('receiver', '/systemservice/checkout/resume?c=1&payment=success');
			//loadElement.load('/systemservice/checkout/resume?c=1&payment=success', 'receiver', 'get', 'update');
			/*function delayPop() {
				myAdd.receipt();
			}
			delayPop.delay(3);*/
		}
	},
	/******** Tab #6 ********/
	getfail: function () {
		//new Ajax.Updater('receiver', '/systemservice/checkout/resume?c=1&payment=fail');
		//loadElement.load('/systemservice/checkout/kvittering?c=1&payment=fail', 'receiver', 'get', 'update');
		/*function delayPop() {
			myAdd.receipt();
		}
		delayPop.delay(3);*/
	}
});

// class for loading pages in checkout
var changePage = new basketObj();

// observe payment callsbacks
document.observe("payment:fail", function() {
	$('receiver').addClassName('pending');
	var xx = new Ajax.Updater('receiver', '/systemservice/checkout/resume?c=1&payment=fail');
	//oldBasketHeader = globalBasketHeader;
	//changePage.getit('getfail');
	site.log('check payment:fail');
	$$('li.unlocked').invoke('removeClassName','active');
	//$('tab6').removeClassName('locked').addClassName('unlocked').addClassName('active');
	$('tab5').removeClassName('locked').addClassName('unlocked').addClassName('active');

	var w = '';
	function busyWait() {
		site.log('test:' +($('first7')!=null));
		if ($('first7')!=null) {
			if (w != '') {
				clearTimeout(w);
			};
			// populate products
			var getProductsNow = resumeCallBasketDirect();
			var myA = new customerAddress();
			var mya = myA.receipt();
		} else { 
			busyRepeat(); 
		};
	}
	function busyRepeat() {
		w = busyWait.delay(1);
	}
	$('tabdescription').update('Fejl i betalingen: Trin 5 af 6');
	(function(){ document.fire('custom:refreshCufon'); busyWait(); }).defer();
	document.fire('custom:googletrack', { trackUrl: '/checkout/betalingsfejl.html' });
});

document.observe("payment:accept", function() {
	$('receiver').addClassName('pending');
	var xx = new Ajax.Updater('receiver', '/systemservice/checkout/resume?c=1&payment=success');
	site.log('check payment:accept');
	//oldBasketHeader = globalBasketHeader;
	//changePage.getit('getreceipt');
	$$('li.unlocked').invoke('removeClassName','unlocked').invoke('removeClassName','active').invoke('addClassName','locked');
	$('tab6').removeClassName('locked').addClassName('unlocked').addClassName('active');
	var w = '';
	function busyWait() {
	site.log('test:' +($('first7')!=null));
		if ($('first7')!=null) {
			if (w != '') {
				clearTimeout(w);
			};
			// populate products
			var getProductsNow = resumeCallBasketDirect();
			var myA = new customerAddress();
			var mya = myA.receipt();
		} else { 
			busyRepeat(); 
		};
	}
	function busyRepeat() {
		w = busyWait.delay(1);
	}
	$('tabdescription').update('Kvittering: Trin 6 af 6');
	(function(){ document.fire('custom:refreshCufon'); busyWait(); }).defer();
	document.fire('custom:googletrack', { trackUrl: '/checkout/kvittering.html' });
});

function simpleLocalBasketUpdate() {
	changePage.getit('');
} 

}catch(ex){
	site.log('Failed to process checkout.js: '+ex);
}

