/*
Author:
*/


// define global project namespace. Use this namespace for any eprimo-specific functions
var eprimo = {
	actions: {
		// defines actions that can be triggered by CTA's and teaser elements
		list: ['redirect', 'anchor', 'videoPlayer', 'lightbox', 'infoOverlay', 'postOnFacebook', 'tellja','tarifrechner'], 	// defines possible actions
		currentAction: {
			// use this object to store information on current Actions
			trigger: null,	// element which triggered the current action
			type: null 		// type of current action
		}
	}

};

$(document).ready( function() {
	
    // Hotfix für IE Icon in Google-Maps...
  if ($.browser.msie)
  {
    $("div#map").find("img.gmnoscreen").hide();
  } 

  
	/* HOTFIX für Umfrageformular */
	$('form[name=survey]').submit(function(e){e.stopPropagation; return false;})
	
	/* "Klapp-Container"
 	* functions - toggle contents of collapsible sections
 	*/
	
	if(document.URL.split("/#")) {
		
		var anchor = document.URL.split("/#")[1]
		if($('a[name='+anchor+']').exists()) {
			$('a[name='+anchor+']').each( function(i,el) {
				
				var ele = $(el).parent()
				openSection(ele)
			})
		}
	}
	
	$('.section .section-header .toggler').parent().click( function(e) {
		e.preventDefault();
		var section = $(this).parents('.section');
		if(section.hasClass('open')) {
			//section.find('.section-content').fadeOut('fast', function(){
			section.addClass('closed').removeClass('open');
			//})
		} else if(section.hasClass('closed')) {
			//section.find('.section-content').fadeIn('fast', function(){
			section.addClass('open').removeClass('closed');
			//})
		}
	})
	
	$('.nav.anchors a').click( function(e) {

		var index = $('.nav.anchors a').index(this)
		$('div.section').each( function(i,el) {

			var element = $(el);
			if(index == i) {
				if(element.hasClass('closed')) {
					element.addClass('open').removeClass('closed');
				}
			}
		})
	})
	
	$('.subsection .subsection-header .toggler').click( function(e) {
		e.preventDefault();
		var section = $(this).parents('.subsection');
		if(section.hasClass('open')) {
			//section.find('.section-content').fadeOut('fast', function(){
			section.addClass('closed').removeClass('open');
			//})
		} else if(section.hasClass('closed')) {
			//section.find('.section-content').fadeIn('fast', function(){
			section.addClass('open').removeClass('closed');
			//})
		}
	})
	
	// "To to" functionality - onClick scroll page to top without showing #target in url
	$('.section .section-footer .top').click( function(e) {
		e.preventDefault();
		$(this).blur()
		window.scroll(0,0)
	})
	/* Collect actions assigned to teasers an CTA-Elements
 	* reqired values of an object in that array:
 	*
 	* type: can be 'redirect', 'anchor', 'videoPlayer', 'lightbox', 'infoOverlay', 'postOnFacebook', 'tellja' or 'tarifrechner'
 	* param: can be the url to redirect to or the id of the video to show
 	*/
	$('[data-action-1]').each( function(i,el) {

		var element = $(el);
		if(element.is('.flash')) { // case flash teaser
			element.mousedown( function(e) {
				eprimo.actions.currentAction.trigger = element;
			})
		} else if(element.is('.image')) {  // case image teaser
			element.find('a').click( function(e) {
				e.preventDefault();
				triggerAction(JSON.parse($(this).parents('.teaser').attr('data-action-1').replace(/'/g, "\"")), $(this).parents('.teaser'))
			})
		} else if(element.is('.teaser')) { // case html teaser
			element.find('a').click( function(e) {
				e.preventDefault();
				triggerAction(JSON.parse($(this).parents('.teaser').attr('data-action-1').replace(/'/g, "\"")), $(this).parents('.teaser'));
			})
		} else if(element.is('.cta') || element.is('.cta-link')) { // case CTA
			element.click( function(e) {
				e.preventDefault();
				triggerAction(JSON.parse($(this).attr('data-action-1').replace(/'/g, "\"")), $(this))
			})
		}
	})
	initDownloads();
	initPressReleases();

	// initalizes faqs
	if($('.faqs').exists())
		initFaqs();

	// set layer to doc-height
	var docHeight = $(document).height();
	//alert('dheight'+docHeight);
	//$('.shim').css('height':'300');

	/*
	if($('.shim').exists()) {
	var docHeight = $(document).height();
	$('.shim').css(height:"300px");
	}*/

	//ToDo: replace this if time, cause it's dirty
	becomeCostumerTeaser();
	
	// initalizes calculators
	initCalculator();
	if($('div.teaser.tarifrechner').exists())
		initCalculatorTeaser();

	eprimoFormHandler.init();

	//debug.log(eprimoFormHandler.jsFormProxy)
	//debug.log(eprimoFormHandler.jsFormProxy.isSAPAvailable)

	if (!eprimoFormHandler.jsFormProxy.isSAPAvailable(function(result, e) {})) {
		if (window.location.href.indexOf("eprimo-kunde")>-1) {
			window.location.href='/nicht-verfügbar/';
		}
	}
	eprimoFormHandler.jsMyEprimoProxy.findNewMessages(initMyEprimo)

	/**
 	* refresh cookie after timestamp
 	*/
	var refreshCookie = false
	clearInterval(refreshCookie)
	refreshCookie = setInterval(eprimoFormHandler.refreshCookie,300000) ;
	// init ET
	try {
		initET();
	} catch (err) {
		//debug.log("jquery(window).load: initET could not be run: " + err);
	}

	if($('html').is('.ie')) { // on lightbox close, in ie, remove and re-inject iframe with video to stop it
		$(document).bind('lightboxClosed', function(e, options) {
			if(options.lightbox.find('.video').exists()) {
				var iFrameElement = options.lightbox.find('iframe');
				if(iFrameElement.exists()) {
					var container = iFrameElement.parents('div').eq(0);
					var iFrameSrc = iFrameElement.attr('src');
					iFrameElement.remove();
					container.append('<iframe scrolling=no height=313 width=512 frameborder=0 src="'+ iFrameSrc +'"> </iframe>')
				}
			}
		})
	}
});

/*
 * open Section
 */
function openSection(ele) {

	var section = false
	if(ele.parent('.section').exists())
		section = ele.parent('.section');
	else {
		if(ele.parent('.subsection').exists())
			section = ele.parent('.subsection');
	}
	if(section.hasClass('closed')) {
		section.addClass('open').removeClass('closed');
	}
}

/*
 * close lightbox
 */
function closeOverlay() {

	if($('div.overlay').exists()) {
		
		$('div.overlay').each( function(i,el) {
			
			$(el).prev('.shim').hide()
			$(el).hide()
		})
	}
}

/*
 * Trigger Teaser Actions
 *
 * this function is called from Flash or at click from CTA's and teaser elements
 * and passes an index for an action to be called
 * calls triggerAction below
 */
function triggerTeaserAction(index) {

	//debug.log('### trigger action from Flash ###')
	var actions = [];
	var element = eprimo.actions.currentAction.trigger;

	for(j=1;j<7;j++) {
		if(typeof element.attr('data-action-'+ j) != 'undefined') {
			actions.push(JSON.parse(element.attr('data-action-'+ j).replace(/'/g, "\"")))
		}
	}
	if(actions.length > 0) {
		if(actions[index-1]) {
			triggerAction(actions[index-1])
		} else {
			debug.log('data-action-'+ (index-1) +' is not defined as attribute of the flash container')
		}
	}
}

/* triggers an action. can be called for example via triggerAction({type:'lightbox', containerID:'xyz'})
 * or by defining data-action-1 attribute on an element for example data-action-1="{'type':'lightbox','containerId':'calculator'}"
 */
function triggerAction(action, element) {

	//debug.log('### trigger action ###')
	//debug.log(action)
	//debug.log(element)
	//debug.log('===')

	var type = action.type;
	var orderType = 10;
	var orderValue = false;
	var consumption = '3000';
	var zip = '';

	/*
 	* Tarifrechner
 	*/
	if(type=='tarifrechner') {

		//debug.log('### trigger Overlay Tarifrechner ###')
		if(action.error) {
			debug.log('ERROR in Action Definition ('+ type +'):');
			debug.log('ERROR: '+ action.error);
		} else {
			// show or don't show calculator - default: show
			if (action.show === undefined || action.show == 1 ) {
				openOverlay({type: type, container: 'calculator'});
			}
		}
		if(action.strom) {
			orderType = 10;
			orderValue = action.strom;
		}
		if(action.gas) {
			orderType = 20;
			orderValue = action.gas;
		}
		if(orderValue!==false){
			consumption = orderValue.substr(1, orderValue.length);
		}
		// set order type
		$('input[name=orderType]').each( function(index, item) {
			if(orderType == 10)
				$('#calculator #calculator_orderType_radio_0').trigger('click');
			if(orderType == 20)
				$('#calculator #calculator_orderType_radio_1').trigger('click');

		});
		// set value for consumption
		if(consumption) {
			$('input[name=consumption]').val(consumption);
			$('input[name=consumption]').trigger('keyup');
		}

		// set value for zip
		if(action.plz) {
			zip = action.plz.substr(1, action.plz.length);
			$('#calculator input[name=zip]').val(zip);
		}

		// set/unset öko
		if(action.oeko)
			$('input[name=isOeko]').attr("checked",true);
		else
			$('input[name=isOeko]').attr("checked",false);

	}

	/*
 	* redirect
 	*/
	if(type=='redirect') {

		if(action.url == 'null') {
			if(action.error) {
				debug.log('ERROR redirect: '+ action.error);
			}
		} else {
			if(action.url) {
				if(action.extern) {
					var newWindow = window.open(action.url)
					newWindow.focus();
				} else {
					window.location.href=action.url;
				}
			} else if(action.email) {
				//debug.log('TODO: open Email Client or redirect to contact page.'+ action.email)
			}
		}
	}

	/*
 	* videoPlayer, lightbox, infoOverlay
 	*/
	if(type=='videoPlayer' || type=='lightbox' || type=='infoOverlay') {

		//debug.log('### trigger Overlay Lightbox, Videoplayer, InfoOverlay ###')
		if(action.error) {
			debug.log('ERROR in Action Definition ('+ type +'):');
			debug.log('ERROR: '+ action.error);
		} else {
			//debug.log(action.containerId)
			openOverlay({type: type, container: action.containerId})
		}
	}

	/*
 	* tellja
 	*/
	if(type=='tellja') {

		//debug.log('### trigger Overlay tellja ###')
		if(action.error) {
			debug.log('ERROR in Action Definition ('+ type +'):');
			debug.log('ERROR: '+ action.error);
		} else {
			// 0 == strom
			// 1 == gas
			// 2 == oekostrom
			// 3 == oekogas
			if($('#tellja_container').exists()) {
				$('#tellja_container').remove()
			}
			var telljaMarkup = '<div id="tellja_container" class="on-demand hidden">';
			telljaMarkup += '<iframe width="530" scrolling="no" height="415" frameborder="0" allowtransparency="true" src="https://t.tellja.de/widget/button/P'+ action.campaign_code.substr(1,action.campaign_code.length) +'?skin=16&center=true&standalone=true&t_mc=kwk&t_art_number='+ action.product.substr(1,action.product.length) +'&btn='+ action.button_img.substr(1, action.button_img.length) +'"></iframe>';
			telljaMarkup += '</div>'
			$('body').append(telljaMarkup);

			//debug.log(action.containerId)
			openOverlay({type: 'tellja', container: 'tellja_container'})
		}
	}

	/*
 	* jumps to anchor on the same page
 	*/
	if(type=='anchor') { // Seiten interner Link

		if(action.containerId == 'null') {
			if(action.error) {
				debug.log('ERROR 309: '+ action.error);
			}
		} else {
			
			//debug.log('### Anchor ###')
			//debug.log(action)
			if(action.containerid) {
				
				var base_url = document.URL.split("/#")[0];
				var anchor_url = base_url + action.containerid;
				window.location.href = anchor_url;
				
				closeOverlay()
				
				var anchor = document.URL.split("/#")[1]
				//if($('a[name='+anchor+']').exists()) {
					$('a[name='+anchor+']').each( function(i,el) {
						
						var ele = $(el).parent()
						openSection(ele)
					})
				//}
			}
		}
	};

	/*
 	* opens new Window where the ueser can post a given url on his board
 	*/
	if(type=='postOnFacebook') {
		if(action.url == 'null') {
			if(action.error) {
				debug.log('ERROR: '+ action.error);
			}
		} else {
			var newWindow = window.open('https://www.facebook.com/sharer/sharer.php?u=http%3A%2F%2Fwww.eprimo.de', 'facebook', "width=920,height=500,left=200,top=200")
			newWindow.focus();
		}
	};

	if(type=='energyMeter') {
		if(action.url == 'null') {
			if(action.error) {
				debug.log('ERROR 338: '+ action.error);
			}
		} else {
			var newWindow = window.open(action.url)
			newWindow.focus();
		}
	}
	// et trigger
	if(typeof et_functions != 'undefined' && typeof et_functions.et_trigger != 'undefined'){
		//debug.log("triggerAction: etracker: " + action.type);
		et_functions.et_trigger(action, this);
	}  
}


/**
 * Open AjaxLoader
 */      
/* 
(function(){
	function openAjaxLoader(options) {
		var zIndex = 1000; // make sure the overlay to show has the highest zIndex of all open overlays
		var type = options.type;
		switch(type){
			case 'feedback':
				// Is there an overlay already open?
				if($('.overlay:visible').length == 0){
					$('body').append('<div class="feedback-aura" id="'+options.container+'"><div class="feedback-indicator"></div><div>');
					var container = $('#'+ options.container);
					if(!container.exists()){
						debug.log('there is no container in the dom with the id: '+ options.container)
						return;
					}
					var shim = null;
					if(container.prev('.shim').exists()) {
						shim = container.prev('.shim');
						shim.show();
					} else {
						shim = $('<div class="shim"></div>');
						shim.insertBefore(container);
					};
					shim.css({'zIndex':zIndex+10});
					var dHeight = $(document).height();
					shim.css({'height':dHeight}).addClass(type);
					container.css({'zIndex': parseInt(zIndex)+500}).makePositionable().center().show();
				}
				break;
			case 'editFormBlock':
				var group = options.container;
				group.append('<div class="feedback-aura"><div class="feedback-indicator"></div><div>');
				break;
			}
		}
	$(document).bind('validate-button-clicked', function(e,options){
		openAjaxLoader(options)
	}).bind('group-save-button-clicked', function(e,options){
		openAjaxLoader(options)
	})
})();

// Close Ajax Loader Overlay 
(function (){
	$(document).bind('end_form-validate', function(e, options){
		if($('.overlay:visible').length == 0){
			$('.feedback-aura').prev('.shim').hide().removeClass('feedback');
			$('.feedback-aura').hide();
		}
	});
})()
*/

/**
 * Open overlay
 */
 
function openOverlay(options) {

	var type = options.type;
	if(type=='tellja') {
		options.container = 'tellja_container';
	}
	var container = $('#'+ options.container);
	
	if(!container.exists()){
		debug.log('there is no container in the dom with the id: '+ options.container)
		return;
	}
	
	var zIndex = 1000; // make sure the overlay to show has the highest zIndex of all open overlays

	$('.overlay:visible').each( function(i,el) {
		var overlaysZindex = parseInt($(el).css('zIndex'));
		if(overlaysZindex>zIndex) {
			zIndex=overlaysZindex;
		}
	});
	var shim = null;

	if(type!='infoOverlay') {
		if(container.prev('.shim').exists()) {
			shim = container.prev('.shim');
			shim.show()
		} else {
			shim = $('<div class="shim"></div>');
			shim.insertBefore(container);
		};
		shim.css({'zIndex':zIndex+10});
		var dHeight = $(document).height();
		shim.css({'height':dHeight});

	}

	container.css({'zIndex': parseInt(zIndex)+500});

	if(!$(container).find('a.btn-close').exists() && type != 'feedback') {
		var closeButton = $('<a class="btn-close">schließen</a>')
		closeButton.click( function() {
			container.prev('.shim').hide();
			container.hide();

			//publish event
			var lightbox = $(this).parents('.lightbox');
			$(document).trigger('lightboxClosed', {lightbox: lightbox})
		})
		$(container).prepend(closeButton)
	}

	if(type=='feedback' || type=='lightbox' || type=='videoPlayer' || type=='tellja' || type=='tarifrechner') {
		if(container.hasClass('infoOverlay')) {
			container.removeClass('infoOverlay')
		}
		if(type != 'feedback'){
			$(container).addClass('lightbox').addClass('overlay');
		}
		$(container).makePositionable().center().show();

	}

	if(type=='infoOverlay') {
		if(container.hasClass('lightbox')) {
			container.removeClass('lightbox')
		}
		$(container).makePositionable().addClass('infoOverlay').center().addClass('overlay').show()
	}
}

/**
 * init FAQs
 */
function initFaqs() {

	//debug.log('### init faqs ###');
	$('.faqs h2').each( function(i,el) {
		$(el).click( function() {
			var faqgroup = $(this).parents('.faqs');
			if(faqgroup.is('.open')) {
				faqgroup.removeClass('open').addClass('closed')
			} else if(faqgroup.is('.closed')) {
				faqgroup.removeClass('closed').addClass('open')
			}
		})
	})
	$('.faq .question').each( function(i,el) {
		$(el).click( function() {
			var qAndA = $(this).parents('.faq');
			if(qAndA.is('.open')) {
				qAndA.removeClass('open').addClass('closed')
			} else if(qAndA.is('.closed')) {
				qAndA.removeClass('closed').addClass('open')
			}
		})
	})
}

/**
 * init MyEprimo
 */
function initMyEprimo(messages) {

	//debug.log('### init myEprimo ###')
	//debug.log(messages)

	// messages
	isBill = false;
	isReading = false;
	isContact = false;
	if(messages.length > 0) {
		var messagesStr = ''
		var myEprimoMsg = '<div class="myeprimo-msg">HINWEIS: '
		for(i=0; i<messages.length; i++) {
			switch(messages[i].type) {
				case 'bill':
					messagesStr += messages[i].msg + ' '
					isBill = true;
					break;
				case 'reading':
					messagesStr += messages[i].msg + ' '
					isReading = true;
					break;
				case 'contact':
						isContact = true;
					break;
			}
			myEprimoMsg += messagesStr
		}
		if(messagesStr) {
			myEprimoMsg += '<a class="close">schließen</a></div>'
			$('.page >.header').after(myEprimoMsg)
		}
		
		$('.myeprimo-msg a.close').click( function() {
			$('.myeprimo-msg').remove()
		})
		if(isBill) {
			$('div.subsection-header').find('a.toggler').each( function(i,el) {
				if(i == 2) {
					$(el).after('<div class="bill-msg">&nbsp;</div>')
				}
			})
		}
		if(isReading) {
			$('div.subsection-header').find('a.toggler').each( function(i,el) {
				if(i == 3) {
					$(el).after('<div class="reading-msg">&nbsp;</div>')
				}
			})
		}
		if(isContact) {
			//alert('Hier kommt der Funktionsteaser, wenn er wieder funktioniert')
			if($('#optinOption').exists())
				triggerAction({type: 'lightbox', containerId: 'optinOption'})
		}
	}
	
	if($('div[rel=recentPayments]').find('span').hasClass('not-paid')) {
		var notPaidMsg = '<div class="nopaid-msg">Eine Abschlagszahlung ist nicht beglichen. Bitte setzten Sie sich mit unserem Kundenservice in Verbindung!</div>'
		$('div[rel=recentPayments] table').after(notPaidMsg)
	}
}

/**
 * init PressReleases
 */
function initPressReleases() {

	//debug.log('### init press releases ###');

	$('.press-releases h2').each( function(i,el) {
		$(el).click( function() {
			var pressReleaseGroup = $(this).parents('.press-releases');
			if(pressReleaseGroup.is('.open')) {
				pressReleaseGroup.removeClass('open').addClass('closed')
			} else if(pressReleaseGroup.is('.closed')) {
				pressReleaseGroup.removeClass('closed').addClass('open')
			}
		})
	})
	$('.press-release .header').each( function(i,el) {
		$(el).click( function() {
			var pressRelease = $(this).parents('.press-release');
			if(pressRelease.is('.open')) {
				pressRelease.removeClass('open').addClass('closed')
			} else if(pressRelease.is('.closed')) {
				pressRelease.removeClass('closed').addClass('open')
			}
		})
	})
}

/**
 * init Downloads
 */
function initDownloads() {

	//debug.log('### init downloads ###');

	$('.downloads h2').each( function(i,el) {
		$(el).click( function() {
			var downloadgroup = $(this).parents('.downloads');
			if(downloadgroup.is('.open')) {
				downloadgroup.removeClass('open').addClass('closed')
			} else if(downloadgroup.is('.closed')) {
				downloadgroup.removeClass('closed').addClass('open')
			}
		})
	})
}

/**
 * init ContractForm
 */
function initContractForm() {

	//debug.log('### init ContractForm ###');

	var formName= "contract";
	formHandler = new EpFormHandler();

	$.jsonRPC.withOptions({
		endPoint: '/rpc/form'
	}, function() {
		this.request('getDefinition', {
			params: [formName],
			success: function(result) {
				// Do something with the result here
				// It comes back as an RPC 2.0 compatible response object
				$(document).trigger('gotFormDefinition')
				formHandler.formDefinition=result.result;
				formHandler.initHandlers();
				formHandler.setDefaults();
			},
			error: function(result) {
				debug.log('ERROR:'+result.error.message)
				// Result is an RPC 2.0 compatible response object
			}
		});
	});
	formHandler.clearMessages();
	formHandler.validateForm(result.result);	
}

/**
 * formEnhancements
 */

function formEnhancements() {

	//debug.log('### formEnhancements ###');

	//show hint on focus if there is any
	$('input').focus(function() {
		var hintContent = $(this).next('.hint').html() === null ? false : $(this).next('.hint').html();
		if(!hintContent) {
			return
		}
		var hint = $('<div class="tooltip" rel="' + $(this).attr('id') + '">' + $(this).next('.hint').html() + '</div>');
		hint.appendTo($('body'))
		hint.alignWith($(this), 'clcr', {
			x : 10,
			y : 0
		})
		$(this).blur(function() {
			$('.tooltip[rel=' + $(this).attr('id') + ']').remove();
		})
	})
	//show tooltips
	$('form span.info').hover(function() {
		var hintContent = $(this).find('.hint').html() === null ? false : $(this).find('.hint').html();
		if(!hintContent) {
			return
		}
		var hint = $('<div class="tooltip" rel="' + $(this).parents('fieldset').attr('id') + '">' + hintContent + '</div>');
		hint.appendTo($('body'))
		hint.alignWith($(this), 'clcr', {
			x : 10,
			y : 0
		})
		$(this).blur(function() {
			$('.tooltip[rel=' + $(this).attr('id') + ']').remove();
		})
	}, function() {
		$('.tooltip').remove();
	})
	// workaround for browsers which don't support the placeholder attribute
	if(supports_input_placeholder() == false) {
		$('input[type=password]').each(function() {
			if($(this).attr('placeholder')) {

				var passwordInput = $(this);
				var placeholderText = $('<span class="password-placeholder">' + $(this).attr('placeholder') + '</span>');

				passwordInput.css({
					'position' : 'relative',
					'zIndex' : 10,
					'backgroundColor' : 'transparent'
				})
				placeholderText.css({
					'position' : 'absolute',
					'zIndex' : 5,
					left : 0
				})
				$(this).parents('div.password').prepend(placeholderText)
			}
		})
		$('input[placeholder]').each(function(i, el) {
			if(!$(this).parents('div').is('.password')) {
				$(this).val($(this).attr('placeholder'))
				$(this).addClass('with-placeholder')
			}
			$(this).focus(function() {
				if($(this).parents('div').is('.password')) {
					$(this).parents('div.password').find('.password-placeholder').hide()
				}
				$(this).removeClass('with-placeholder')
				if($(this).val() == $(this).attr('placeholder')) {
					$(this).val('')
				}
			})
		})
	}

}

/**
 * init CalculatorTeaser
 */
var calculatorTeaser = {
	orderType: false
}
function initCalculatorTeaser() {

	//debug.log('### init CalculatorTeaser ###');

	function updateOrderType(options) {

		calculatorTeaser.orderType = $('.teaser.tarifrechner input[name=orderType]:checked').val();
		var orderType = parseInt(calculatorTeaser.orderType) == 10 ? 'strom' : 'gas';
		if(options && options.resetConsumption==true) {
			if(orderType=='strom') {
				$(".teaser.tarifrechner input[name=consumption]").val('2800')
			} else {
				$(".teaser.tarifrechner input[name=consumption]").val('23000')
			}
		}
		adjustSliderTeaser()
	}

	$('.teaser.tarifrechner input[type=radio]').change( function() {
		updateOrderType({resetConsumption: true})
	})
	$('.teaser.tarifrechner input[name=calculateAction]').click( function() {
		var orderType = parseInt(calculatorTeaser.orderType);
		var orderValue = $('.teaser.tarifrechner input[name=consumption]').val();
		var zip = $('.teaser.tarifrechner input[name=zip]').val();
		var isOeko = $('.teaser.tarifrechner input[name=isOeko]:checked').val() == 'oeko' ? 1 : 0;
		//debug.log('is oeko')
		//alert(orderType+'-'+orderValue+'-'+zip+'-'+isOeko)

		if(orderType == 10) {
			if(isOeko)
				triggerAction({'type':'tarifrechner',
					'strom':'/'+orderValue,
					'plz':'/'+zip,
					'oeko': 1});
			else
				triggerAction({'type':'tarifrechner',
					'strom':'/'+orderValue,
					'plz':'/'+zip});
		}
		if(orderType == 20) {
			if(isOeko)
				triggerAction({'type':'tarifrechner',
					'gas':'/'+orderValue,
					'plz':'/'+zip,
					'oeko': 1});
			else
				triggerAction({'type':'tarifrechner',
					'gas':'/'+orderValue,
					'plz':'/'+zip});
		}
		$('form[name=calculator] input[name=calculateAction]').click();
	})
	$(".teaser.tarifrechner input[name=consumption]").keyup( function(e) {
		adjustSliderTeaser(e);
	});
	try {
		var consumption = $(".teaser.tarifrechner input[name=consumption]").val();
		updateOrderType({resetConsumption: ( consumption=='' || IsNumeric(consumption)==false)})
		adjustSliderTeaser();
		handleSliderTeaser()
	} catch (e) {
		debug.log('ERROR: ' + e);
	}

	function handleSliderTeaser() {

		var min = 0;
		var max = $("#slider-teaser").width() - ($("#indicator-teaser").width());

		$('#indicator-teaser').drag( function(event, dd) {
			xpos = dd.offsetX - $(this).parent().offset().left;
			if (xpos < min) {
				xpos = min;
			} else if (xpos > max) {
				xpos = max;
			} else {
				xpos = xpos;
			}
			$(this).css({
				left: xpos
			});
			var perc = (min + xpos) / (max + min);
			perc = perc < 0 ? 0 : perc;
			var xval=parseInt(perc*100, 10);
			var kwh = (-(0.000214721886 * Math.pow(xval,4))) + (0.044225549909 * Math.pow(xval,3)) - (2.827377138319 * Math.pow(xval,2)) + (90.575097894247*xval) + 1500;
			if(parseInt(calculatorTeaser.orderType) == 10) {
				if(kwh > 4999) {
					kwh=5000;
				}
			} else {
				kwh=31000*perc+5000;
				if(kwh > 35000) {
					kwh=35000;
				}
			}
			adjustIconsTeaser(Math.round(kwh))
			$(".teaser.tarifrechner input[name=consumption]").val(Math.round(kwh));
			$("#fill-teaser").width(xpos + ($("#indicator-teaser").width() / 2));
		});
	}

	function adjustIconsTeaser(consumption) {

		var kwh = consumption;
		var orderType = parseInt(calculatorTeaser.orderType) == 10 ? 'strom' : 'gas';
		$('.teaser.tarifrechner .calculator-icons > div').removeClass()
		switch(orderType) {

			case 'strom':
				if(kwh >= 5000) { /* STEP 5 */
					$('.teaser.tarifrechner .calculator-icons > div').addClass('step step5')
				} else if(kwh >= 4000) { /* STEP 4 */
					$('.teaser.tarifrechner .calculator-icons > div').addClass('step step4')
				} else if(kwh >= 3000) { /* STEP 3 */
					$('.teaser.tarifrechner .calculator-icons > div').addClass('step step3')
				} else if(kwh >= 2500) { /* STEP 2 */
					$('.teaser.tarifrechner .calculator-icons > div').addClass('step step2')
				} else if(kwh > 0) { /* STEP 1 */
					$('.teaser.tarifrechner .calculator-icons > div').addClass('step step1')
				}
				break;

			case 'gas':
				if(kwh >= 35000) {
					$('.teaser.tarifrechner .calculator-icons > div').addClass('step step5')
				} else if(kwh >= 25000) {
					$('.teaser.tarifrechner .calculator-icons > div').addClass('step step4')
				} else if(kwh >= 15000) {
					$('.teaser.tarifrechner .calculator-icons > div').addClass('step step3')
				} else if(kwh >= 10000) {
					$('.teaser.tarifrechner .calculator-icons > div').addClass('step step2')
				} else if(kwh > 0) {
					$('.teaser.tarifrechner .calculator-icons > div').addClass('step step1')
				}
				break;
		}
	}

	function adjustSliderTeaser(e) {

		if(IsNumeric($(".teaser.tarifrechner input[name=consumption]").val())) {
			if(calculatorTeaser.orderType == 20) {
				if($(".teaser.tarifrechner input[name=consumption]").val().length>3) {
					xpos = Math.round( (((parseInt($(".teaser.tarifrechner input[name=consumption]").val())-5000) / 30000) * ($("#slider-teaser").width() - ($("#indicator-teaser").width()))));
					if($(".teaser.tarifrechner input[name=consumption]").val()<5001) {
						xpos=0;
					}
					if($(".teaser.tarifrechner input[name=consumption]").val()>34999) {
						xpos=($("#slider-teaser").width() - ($("#indicator-teaser").width()));
					}
					$("#indicator-teaser").css({
						"left": xpos
					});
					$("#fill-teaser").width(xpos + ($("#indicator-teaser").width() / 2));
				} else {
					$("#indicator-teaser").css({
						"left": 0
					});
					$("#fill-teaser").width(0);
				}
			}
			if(parseInt(calculatorTeaser.orderType) == 10) {
				if($(".teaser.tarifrechner input[name=consumption]").val().length>3) {
					xpos = Math.round( ((($(".teaser.tarifrechner input[name=consumption]").val()-1500) / 3500) * ($("#slider-teaser").width() - ($("#indicator-teaser").width()))));
					if($("#edit-verbrauch").val()<1501) {
						xpos=0;
					}
					if($(".teaser.tarifrechner input[name=consumption]").val()>4499) {
						xpos=($("#slider-teaser").width() - ($("#indicator-teaser").width()));
					}
					$("#indicator-teaser").css({
						"left": xpos<0?0:xpos
					});
					$("#fill-teaser").width(xpos + ($("#indicator-teaser").width() / 2));
				} else {
					$("#indicator-teaser").css({
						"left": 0
					});
					$("#fill-teaser").width(0);
				}
			}
			adjustIconsTeaser(Math.round($(".teaser.tarifrechner input[name=consumption]").val()))
		}
	}

}

/**
 * init Calculator
 */
var calculator = {
	orderType: false
}
function initCalculator() {

	//debug.log('### init calculator ###');

	var calculatorForm = $('.on-demand form[name=calculator]');
	if(calculatorForm.exists()==false) {
		var newForm = $('<div class="on-demand hidden widget" id="calculator"><form data-definition=\'{"endpoint":"/rpc/form", "validPage":"/neukunde/bestellen/"}\' name="calculator"></form></div>');
		newForm.appendTo('body')
		calculatorForm = newForm.find('form');
	}
	$(document).bind('lightboxClosed', function(e, options) {
		if(options.lightbox.attr('id')=='calculator') {
			if(options.lightbox.find('input[name=backToCalculator]').exists()) {
				options.lightbox.find('input[name=backToCalculator]').click();
			}
		}
		//debug.log(options)
	})
}

function initCalculatorSlider(form) {

	function updateOrderType(options) {
		calculator.orderType = $('#calculator input[name=orderType]:checked').val();
		var orderType = parseInt(calculator.orderType) == 10 ? 'strom' : 'gas';
		if(options && options.resetConsumption==true) {
			if(orderType=='strom') {
				$("#calculator input[name=consumption]").val('2800')
			} else {
				$("#calculator input[name=consumption]").val('23000')
			}
		}
		form.removeClass('strom').removeClass('gas')
		form.addClass(orderType)
		adjustSlider()
		adjustIcons($("#calculator input[name=consumption]").val())
	}

	$('#calculator input[type=radio]').change( function() {
		updateOrderType({resetConsumption: true})
	})
	$("#calculator input[name=consumption]").keyup( function(e) {
		adjustSlider($("#calculator input[name=consumption]").val());
	});
	if(!$('div.slider-container').exists())
		$.tmpl('sliderTemplate', {icons: true}).insertAfter(form.find('input[name=consumption]'))
	updateOrderType({resetConsumption: ( $("#calculator input[name=consumption]").val()=='' || IsNumeric($("#calculator input[name=consumption]").val())==false)})

	adjustSlider();
	handleSlider()

	function handleSlider() {

		var min = 0;
		var max = $("#slider").width() - ($("#indicator").width());

		$('#indicator').drag( function(event, dd) {

			xpos = dd.offsetX - $(this).parent().offset().left;
			if (xpos < min) {
				xpos = min;
			} else if (xpos > max) {
				xpos = max;
			} else {
				xpos = xpos;
			}
			$(this).css({
				left: xpos
			});

			var perc = (min + xpos) / (max + min);
			perc = perc < 0 ? 0 : perc;

			var xval=parseInt(perc*100, 10);

			var kwh = (-(0.000214721886 * Math.pow(xval,4))) + (0.044225549909 * Math.pow(xval,3)) - (2.827377138319 * Math.pow(xval,2)) + (90.575097894247*xval) + 1500;

			if(parseInt(calculator.orderType) == 10) {
				if(kwh > 4999) {
					kwh=5000;
				}
			} else {
				kwh=31000*perc+5000;
				if(kwh > 35000) {
					kwh=35000;
				}
			}
			adjustIcons(Math.round(kwh))

			$("#calculator input[name=consumption]").val(Math.round(kwh));
			$("#fill").width(xpos + ($("#indicator").width() / 2));
		});
	}

	function adjustIcons(consumption) {

		if(!form.find('.calculator-icons').exists()) {
			return;
		}
		var kwh = consumption;
		var orderType = parseInt(calculator.orderType) == 10 ? 'strom' : 'gas';
		var iconContainer ={
			strom: form.find('.calculator-icons .strom'),
			gas: form.find('.calculator-icons .gas')
		}
		switch(orderType) {

			case 'strom':

				if(kwh >= 5000) {
					iconContainer.strom.find('.step5').addClass('active')
				} else {
					iconContainer.strom.find('.step5').removeClass('active')
				}
				if(kwh >= 4000) {
					iconContainer.strom.find('.step4').addClass('active')
				} else {
					iconContainer.strom.find('.step4').removeClass('active')
				}
				if(kwh >= 3000) {
					iconContainer.strom.find('.step3').addClass('active')
				} else {
					iconContainer.strom.find('.step3').removeClass('active')
				}
				if(kwh >= 2500) {
					iconContainer.strom.find('.step2').addClass('active')
				} else {
					iconContainer.strom.find('.step2').removeClass('active')
				}
				if(kwh > 0) {
					iconContainer.strom.find('.step1').addClass('active')
				}
				break;

			case 'gas':
				if(kwh >= 35000) {
					iconContainer.gas.find('.step4').addClass('active')
				} else {
					iconContainer.gas.find('.step4').removeClass('active')
				}
				if(kwh >= 25000) {
					iconContainer.gas.find('.step3').addClass('active')
				} else {
					iconContainer.gas.find('.step3').removeClass('active')
				}
				if(kwh >= 15000) {
					iconContainer.gas.find('.step2').addClass('active')
				} else {
					iconContainer.gas.find('.step2').removeClass('active')
				}
				if(kwh > 0) {
					iconContainer.gas.find('.step1').addClass('active')
				}
				break;
		}
	}

	function adjustSlider(e) {

		if(IsNumeric($("#calculator input[name=consumption]").val())) {
			if(calculator.orderType == 20) {
				if($("#calculator input[name=consumption]").val().length>3) {
					xpos = Math.round( (((parseInt($("#calculator input[name=consumption]").val())-5000) / 30000) * ($("#slider").width() - ($("#indicator").width()))));
					if($("#calculator input[name=consumption]").val()<5001) {
						xpos=0;
					}
					if($("#calculator input[name=consumption]").val()>34999) {
						xpos=($("#slider").width() - ($("#indicator").width()));
					}
					$("#indicator").css({
						"left": xpos
					});
					$("#fill").width(xpos + ($("#indicator").width() / 2));
				} else {
					$("#indicator").css({
						"left": 0
					});
					$("#fill").width(0);
				}
			}
			if(parseInt(calculator.orderType) == 10) {
				if($("#calculator input[name=consumption]").val().length>3) {
					xpos = Math.round( ((($("#calculator input[name=consumption]").val()-1500) / 3500) * ($("#slider").width() - ($("#indicator").width()))));
					if($("#edit-verbrauch").val()<1501) {
						xpos=0;
					}
					if($("#calculator input[name=consumption]").val()>4499) {
						xpos=($("#slider").width() - ($("#indicator").width()));
					}
					$("#indicator").css({
						"left": xpos<0?0:xpos
					});
					$("#fill").width(xpos + ($("#indicator").width() / 2));
				} else {
					$("#indicator").css({
						"left": 0
					});
					$("#fill").width(0);
				}
			}
			adjustIcons(Math.round($("#calculator input[name=consumption]").val()))
		} else {
			/*var xpos= (($("#slider").width()/2) - ($("#indicator").width()/2));
 			$("#indicator").css({
 			"left": xpos
 			});
 			$("#fill").width(xpos + ($("#indicator").width() / 2));
 			adjustIcons(Math.round($("#calculator input[name=consumption]").val()))
 			*/
		}
	}

	$(document).trigger('calculator-enhanced')
}

/**
 * form rendered
 */
$(document).bind('formRendered', function(e, options) {

	//debug.log('### form rendered ###')

	/*
 	* add custom rendering here
 	*/

	var form = options.form;
	var fieldsetgroups = form.find('fieldset > .group');
	$.each(fieldsetgroups, function(i,group) {
		if(i==2 || i==5) {
			if((i+1) < fieldsetgroups.length) {
				$(group).after('<div class="hr"></div>')
			}
		}
	})
	// general custom enhancements
	formEnhancements()

	var header = $('.section-header');
	var breadcrumb = $.tmpl('contractBreadcrumbsTemplate', {step: options.root.split('page')[1]});
	if($('.section-header > a[name=bestellbestätigung]').exists()) {
		$('.section-header > a[name=bestellbestätigung]').replaceWith(breadcrumb)
		$('.section-header a[name=step_3]').addClass('current')
	}
	if($('.section-header > a[name=bestellung_abgeschlossen]').exists()) {
		$('.section-header > a[name=bestellung_abgeschlossen]').replaceWith(breadcrumb)
		$('.section-header a[name=step_3]').addClass('current')
	}

// contract form
	if(form.attr('name')=='contract') {

		if($('.section-header > a[name=bestellung]').exists())
			$('.section-header > a[name=bestellung]').replaceWith(breadcrumb)
		else
			$('.section-header .breadcrumbs').replaceWith(breadcrumb)

		$('div[rel=oekoConfirmationText]').click( function() {
			triggerAction(JSON.parse("{\"type\":\"tarifrechner\"}"),null);
		})
		$('div[rel=oekoConfirmationTextGas]').click( function() {
			triggerAction(JSON.parse("{\"type\":\"tarifrechner\"}"),null);
		})
		$('div[rel=contactInfoPhone] label').click( function(e) {
			if($('input[name=contactInfoPhone]').attr("checked"))
				$('input[name=contactInfoPhone]').attr("checked",false)
			else
				$('input[name=contactInfoPhone]').attr("checked",true)
		})
		$('div[rel=contactInfoEmail] label').click( function(e) {
			if($('input[name=contactInfoEmail]').attr("checked"))
				$('input[name=contactInfoEmail]').attr("checked",false)
			else
				$('input[name=contactInfoEmail]').attr("checked",true)
		})
	}

	// calculator form
	if(form.attr('name')=='calculator') {

		try {
			var form = options.form;
			var formDefinition = jQuery.extend(true, {}, form.data('definition'));
			form.find('div.error-messages').remove()
			form.find('div[rel=calculateAction]').before('<div class="error-messages"></div>')
			if(formDefinition.currentValues['eprimo_AGB'] || formDefinition.currentValues['eprimo_Antragsformular'])
				$('.calculator-form div[rel=backToCalculator]').after('<div class="calculator-links"></div>')
			if(formDefinition.currentValues['eprimo_AGB'])
				$('.calculator-form .calculator-links').append('<a href="/fileadmin/sap_upload/vertraege/' +  formDefinition.currentValues['eprimo_AGB'] + '" class="agb-download" target="_blank">AGB</a>')
			if(formDefinition.currentValues['eprimo_Antragsformular'])
				$('.calculator-form .calculator-links').append('<a href="/fileadmin/sap_upload/vertraege/' +  formDefinition.currentValues['eprimo_Antragsformular'] + '" class="antrag-download" target="_blank">Vertragsformular</a>')
		} catch (e) {
			//debug.log('Calculator ERROR:' + e)
		}

		if(!form.parents('.on-demand').find('a.cta-link.legal-info').exists()) {
			var moreInfolink = $('.footerinfo a').clone(true).addClass('legal-info')
			form.parents('.on-demand').append(moreInfolink)
		}

	}

	// registration form
	if(form.attr('name')=='registration') {
		// add horizontal line
		$('form[name=registration]').before('<div class="hr"></div>')
	}

  //console.debug("HERE");
  //console.debug(form);
   
// remove group class
	$('div[name=contactInfo]').removeClass('group')
	$('div[name=contactInfo]').addClass('contactInfoBox')
	$('div[name=contactDisclaimer1]').removeClass('group')
	$('div[name=contactDisclaimer1]').addClass('contactInfoBox')
	$('div[name=contactDisclaimer2]').removeClass('group')
	$('div[name=contactDisclaimer2]').addClass('contactInfoBox')

	// add horizontal lines TODO
  //console.debug("HERE");
	$('div[name=oekoConfirmation] + .hr').remove()
	$('div[name=oekoConfirmationGas]').after('<div class="hr"></div>')

	$('div[name=deliveryAddressSummary] + .hr').remove()
	$('div[name=deliverySummary]').after('<div class="hr"></div>')

	$('div[name=deliveryAddress] + .hr').remove()
	$('div[name=delivery]').after('<div class="hr"></div>')

	// add horizontal line after rate details
	$('div[name=rateDetailsPage2]').after('<div class="hr"></div>')

	// add horizontal line after contact infos
	$('div[name=contactInfo]').after('<div class="hr"></div>')

	// add element for disclaimer error
	form.find('div[name=contactDisclaimer] div.error-messages').remove()
	$('div[name=contactDisclaimer2]').append('<div class="error-messages"><div class="message" rel="contactInfoDisclaimer"></div></div>')

	if(!form.find('a.cta-link.legal-info').exists()) {
		var moreInfolink = $('.footerinfo a').clone(true).addClass('legal-info')
		if(form.find('div[name=rateDetails]')) {
			form.find('div[name=rateDetails]').append(moreInfolink)
		}
		if($(form).find('div[name=rateDetailsPage2]')) {
			$(form).find('div[name=rateDetailsPage2]').append(moreInfolink)
		}
	}
  

	// contract form
	if(form.attr('name')=='contract') {

		form.find('.editable').each( function(i,el) {

			var group = $(el).parents('.group');
			group.addClass('view');
			group.find('.error-messages').after('<div class="editor"></div>');
			var rel = $(el).attr('rel')
			var clas = $(el).attr('class')

			var changeButton = $('<input type="button" class="view" value="Daten ändern" />')
			var cancelButton = $('<input type="button" class="edit" value="Abbrechen" />')
			var saveButton = $('<input type="button" class="edit" value="Speichern" />')

			$(el).parents('.group').append(changeButton).append(cancelButton).append(saveButton)
			changeButton.bind('click', function() {
				var group = $(this).parents('.group');
				group.removeClass('view').addClass('edit')
				if(group.find('.editor').is(':empty')) {

					var formDom = eprimoFormHandler.renderForm(form, {
						rootElement: group.attr('name').split('Summary')[0],
						returnDom: true
					})
					group.find('.editor').append(formDom)
					eprimoFormHandler.updateForm(form, {
						rootElement: group.attr('name').split('Summary')[0],
						rerender: false,
						initHandlers: false
					})
					/* eprimoFormHandler.initHandlerChange(form, {
						rootElement: group.attr('name').split('Summary')[0],
						returnDom: true
					}) */
					eprimoFormHandler.initHandlers(form, {
						rootElement: group.attr('name').split('Summary')[0],
						throwEvent: false
					})
				}
				//eprimoFormHandler.setValues(form)
			})
			cancelButton.bind('click', function() {
				var group = $(this).parents('.group');
				group.removeClass('edit').addClass('view')
				group.find('.editor').html('');
				eprimoFormHandler.clearMessages(form, {
					rootElement: group.attr('name').split('Summary')[0],
					throwEvent: true
				})
				eprimoFormHandler.updateForm(form, {
					rootElement: group.attr('name').split('Summary')[0],
					rerender: false
				})
			})
			saveButton.bind('click', function() {
				var group = $(this).parents('.group');
				$(document).trigger('group-save-button-clicked', {type: 'editFormBlock', container: group})
//				openAjaxLoader({type: 'editFormBlock', container: group});
				eprimoFormHandler.validateAction(form, {
					rootElement: group.attr('name').split('Summary')[0],
					throwEvent: true
				})
			})
			form.bind('validated', function(e) {
				group.removeClass('edit').addClass('view');
				eprimoFormHandler.updateForm(form, {
					rootElement: group.attr('name').split('Summary')[0],
					rerender: false,
					initHandlers: false
				})
			})
		})
		
	}  


})
/**
 * handlers initialized
 */
$(document).bind('handlersInitialized', function(e, options) {
	
	//debug.log('### init handler in script.js ###')

	/*
 	* form is ready for custom actions
 	*/

	var form = options.form;
	var formDefinition = jQuery.extend(true, {}, form.data('definition'));

	// calculator form
	if(form.attr('name')=='calculator') {
		
		//debug.log('calculator formDefinition')
		//debug.log(formDefinition)
		
		if(typeof formDefinition.currentValues != 'undefined') {
			
			$('div[rel=eprimoRateInfo]').html(formDefinition.currentValues['rateInfos']['eprimo'])
			$('div[rel=primaryRateInfo]').html(formDefinition.currentValues['rateInfos']['primary'])
			
			// insert tooltips
			if(formDefinition.currentValues['tooltips'][1])
				$('div[rel=savingsText] span.text').after('<span class="info" style="float: right; margin-top: -25px;"><div class="hint">'+formDefinition.currentValues['tooltips'][1]+'</div></span>')
			if(formDefinition.currentValues['tooltips'][2])
				$('div[rel=bonusText] span.bonustext').after('<span class="info"><div class="hint">'+formDefinition.currentValues['tooltips'][2]+'</div></span>')
			if(formDefinition.currentValues['tooltips'][3])
				$('div[rel=eprimoRateInfo] span.bonus').after('<span class="info"><div class="hint">'+formDefinition.currentValues['tooltips'][3]+'</div></span>')
			if(formDefinition.currentValues['tooltips'][4])
				$('div[rel=eprimoRateInfo] span.tarifdetails').after('<span class="info"><div class="hint">'+formDefinition.currentValues['tooltips'][4]+'</div></span>')
			if(formDefinition.currentValues['tooltips'][5])
				$('div[rel=primaryRateInfo] span.tarifdetails').after('<span class="info"><div class="hint">'+formDefinition.currentValues['tooltips'][5]+'</div></span>')
		}
		
		// general custom enhancements
		formEnhancements()
	}

})
/**
 * updated values
 */
$(document).bind('updatedValues', function(e, form) {

	//debug.log('### updatedValues ###')
	//debug.log(form)
	
	if(form.name=='calculator'){
		$(document).trigger('calculatorInitialized');
	}

	// contract form
	if(form.name == 'contract') {

		/*
		if(form.currentValues['savingsText'])
			$('div[name=calculatorSavingsSummary] > h2').html(String(form.currentValues['savingsText']))
		
		if(form.currentValues['savageSummary'])
			$('div[rel=calculatorSummaryText] p').html(String(form.currentValues['savageSummary']))
		
		if(form.currentValues['rateDetails'])
			$('div[rel=rateDetailsText] p').html(form.currentValues['rateDetails'][0])
		*/
		
		if(typeof form.currentValues != 'undefined') {
			var aufschlag = "0,4"
			var ordertype = parseInt(form.currentValues['orderType'])
			if(ordertype == 20) {
				aufschlag = "0,15"
			}

			var isoeko = 0;
			if((typeof form.currentValues['isOeko'] != 'undefined') && (form.currentValues['isOeko']=='oeko')) {
				isoeko = 1;
			}

			// kein fremdanbieter
			if(form.currentValues['kein_fremdanbieter'] == 1) {

				var kosten = form.currentValues['eprimo_KostenMonat']
				$('div[name=calculatorSavingsSummary] > h2').html('Ihr monatlicher Abschlag')
				$('div[name=calculatorSavingsSummary] span.saving-amount').html(kosten)
				$('div[name=calculatorSavingsSummary] span.saving-info').html('')

			}
			if(!form.currentValues['eprimo_PreisgarantieDatum']) {
				$('span.eprimo_PreisgarantieDatum').remove()
			}

			// handle bonus
			if(form.currentValues['eprimo_Bonus']) {
				var eprimo_bonus = '<span class="eprimo_Bonus">Einmaliger Bonus *: ' + form.currentValues['eprimo_Bonus'] + '</span>';
				if(!$('span.eprimo_Bonus').exists()){
					$('span.eprimo_ArbeitsPreisBrutto').after(eprimo_bonus)
				}
			}

			// is oeko
			if(isoeko) {
				var eprimo_oeko = '<span class="eprimo_Oeko">+ Aufpreis PrimaKlima '+ aufschlag +' ct pro kWh</span>';
				if(!$('span.eprimo_Oeko').exists()){
					$('span.eprimo_ArbeitsPreisBrutto').after(eprimo_oeko)
				}
			}
		}

		// bank account name
		if($('span[class=bankAccountFirstName]').exists()) {
			if(form.currentValues['selectBanking'] == 1) {
				var b_name = form.currentValues['firstName'] + ' ' + form.currentValues['lastName']
				$('span[class=bankAccountFirstName]').html('Kontoinhaber: ' + b_name)
			}
		}
		// text for salutation
		if($('span[class=salutation]').exists()) {
			$.each(form.elements.salutation.parameters.options.values, function(name, element) {
				if(element.id == form.currentValues['salutation'])
					$('span[class=salutation]').html(element.value)
			})
		}
		// text for title
		if($('span[class=title]').exists()) {
			$.each(form.elements.title.parameters.options.values, function(name, element) {
				if(element.id == form.currentValues['title'])
					$('span[class=title]').html(element.value)
			})
		}
		// text for delivery address
		if($('span[class=selectDeliveryAddress]').exists()) {
			if(form.currentValues['selectDeliveryAddress'] == 2)
				$('span[class=selectDeliveryAddress]').html('Diese Adresse ist meine neue Wohnanschrift.')
			else
				$('span[class=selectDeliveryAddress]').html('')
		}
		// text for delivery
		if($('span[class=selectDelivery]').exists()) {
			if(form.currentValues['selectDelivery'] == 1)
				$('span[class=selectDelivery]').html('eprimo soll den Vertrag beim derzeitigen Versorger für mich kündigen.')
			else
				$('span[class=selectDelivery]').html('Ich habe bereits gekündigt.')
		}
		// text for billing address
		if($('div[rel=billingAddressTextSummary]').exists()) {
			if(form.currentValues['selectBillingAddress'] == 1) {
				$('div[rel=billingAddressTextSummary]').html('<p>Selbe wie Lieferadresse</p>')
			}
		}

	}

	// myeprimo personal
	if(form.name == 'myeprimo-personal') {

		//debug.log(form)

		/** manipulation dom for fixing style */

		// for userData
		$('div[name=userData] .error-messages').after('<div style="height: 62px;">&nbsp;</div>')
		
		// for billingAddress
		$('div[name=billingAddress] div[rel=saveBillingAddress]').before('<div style="height: 90px;">&nbsp;</div>')
		
		// for bankingInformation
		$('div[name=bankingInformation] div[rel=saveBankAccountData]').before('<div style="height: 90px;">&nbsp;</div>')		

	}
})
/**
 * listen for calculator update
 */
$(document).bind('end_form-update', function(e, options) {

	var form = options.form;
	if(options.form.attr('name') == 'calculator') {

		if(form.find("input[name=consumption]").exists()) { // case page1 in calculator
			initCalculatorSlider(form) // init slider and icons and stuff
		}
		if(form.find(".savings.field .text").exists()) { // case page2 in calculator
			var formDefinition = form.data('definition')
			if(formDefinition.currentValues.fehler_code=='NoGV') {
				form.find(".savings.field .text").html('Ihr monatlicher Abschlag')
				form.find(".savings.field .info .hint").html('<div class="header">Ihr monatlicher Abschlag:</div><div class="text">Der Abschlag ist eine Teilzahlung auf die zu erwartenden Kosten für den angegeben Jahresverbrauch. Er errechnet sich wie folgt:<br />	Arbeitspreis (brutto) x Verbrauch/Jahr + Grundpreis/Jahr = Rechnungsbetrag<br />Rechnungsbetrag / 12 Monate = monatlicher Abschlag</div>')
				form.find(".savings.field .price").html(formDefinition.currentValues.eprimo_KostenMonat)
				form.find("div[rel=savageSummary]").hide()
				form.find("div[rel=primaryRateInfo]").hide()
			}
		}

		// update savings notification in header
		var calculatorResultContainer = $('.cta-area .calculator-savings');
		if(calculatorResultContainer.exists()) {
			if(options && options.result && options.result.differenz) {
				
				var orderTypeString = parseInt(options.result.orderType) == 10 ? 'Strom' : 'Gas';
				calculatorResultContainer.html('Ihr Ersparnis bei unserem<br />'+ orderTypeString + '-Tarif: <strong>' + options.result.differenz +'</strong>' )
				$('.cta-area a').attr('rel','contract')
				$('.cta-area .close-calculator-savings').removeClass('hidden')
			}
			else {
				
				$('.cta-area .calculator-savings a').attr('rel','')
				$('.cta-area .close-calculator-savings').addClass('hidden')
			}
		}
	}
})
/**
 * listen for error on contract form.
 * Start calculator, if it was not filled out before
 */
$(document).bind('end_form-init', function(e, options) {
	if(options.form.attr('name')=='contract') {
		if(options.error) {
			if(options.errordata.code==-32000) {
				options.form.data('definition').defaultErrorBehaviour = false;
				$(document).bind('calculator-enhanced', function(e) {
					triggerAction({type: 'lightbox', containerId: 'calculator'})
				})
			}
		}
	}
})
/** Markup Template for "Tarifrechner" lightbox */
var calculatorIconsMarkup = '<div class="calculator-icons">';
calculatorIconsMarkup += '<div class="gas">';
calculatorIconsMarkup += '<div class="step step1">';
calculatorIconsMarkup += '</div>';
calculatorIconsMarkup += '<div class="step step2">';
calculatorIconsMarkup += '</div>';
calculatorIconsMarkup += '<div class="step step3">';
calculatorIconsMarkup += '</div>';
calculatorIconsMarkup += '<div class="step step4">';
calculatorIconsMarkup += '</div>';
calculatorIconsMarkup += '</div>';
calculatorIconsMarkup += '<div class="strom">';
calculatorIconsMarkup += '<div class="step step1">';
calculatorIconsMarkup += '</div>';
calculatorIconsMarkup += '<div class="step step2">';
calculatorIconsMarkup += '</div>';
calculatorIconsMarkup += '<div class="step step3">';
calculatorIconsMarkup += '</div>';
calculatorIconsMarkup += '<div class="step step4">';
calculatorIconsMarkup += '</div>';
calculatorIconsMarkup += '<div class="step step5">';
calculatorIconsMarkup += '</div>';
calculatorIconsMarkup += '</div>';
calculatorIconsMarkup += '</div>';
$.template( "calculatorIconsTemplate", calculatorIconsMarkup );

var sliderMarkup = '<div class="slider-container">';
sliderMarkup += '{{if icons==true}}';
sliderMarkup += '{{tmpl "calculatorIconsTemplate"}}';
sliderMarkup += '{{/if}}';
sliderMarkup += '<div id="slider">';
sliderMarkup += '<div id="fill" style="width: 126px;">';
sliderMarkup += '</div>';
sliderMarkup += '<div id="indicator" style="left: 109px;">';
sliderMarkup += '</div>';
sliderMarkup += '</div>';
sliderMarkup += '</div>';
$.template( "sliderTemplate", sliderMarkup );

var contractBreadcrumbsMarkup = '<div class="breadcrumbs">';
contractBreadcrumbsMarkup += '<a {{if step==1}}class="current"{{/if}} name="step_1"><span>1</span>Bestellung</a>';
contractBreadcrumbsMarkup += '<a {{if step==2}}class="current"{{/if}} name="step_2"><span>2</span>Bestellung Prüfen</a>';
contractBreadcrumbsMarkup += '<a {{if step==3}}class="current"{{/if}} name="step_3"><span>3</span>Bestätigung</a>';
contractBreadcrumbsMarkup += '</div>';
$.template("contractBreadcrumbsTemplate", contractBreadcrumbsMarkup);

// this does the following:
// looks for form[name=becomeCostumer] in header and replaces this form with some markup (see below)
function becomeCostumerTeaser() {
	
	$('form[name=BecomeCustomer]').replaceWith($.tmpl("becomeCustomerTeaserTemplate"))
	$('.calculator-area a.cta').click( function(e) {
		if($(this).attr('rel')=='contract') {
			window.location.href='/neukunde/bestellen';
		} else {
			triggerAction({type:'lightbox', containerId: 'calculator'})
		}
	})
	$('.calculator-area a.close-calculator-savings').click( function(e) {
		var cta = $(this).parents('.cta-area').find('.cta')
		var savingsText =  $(this).parents('.cta-area').find('.calculator-savings')
		$(this).addClass('hidden');
		savingsText.html('')
		cta.attr('rel','')
		// calculator form leeren
		eprimoFormHandler.flushForm('calculator')
	})
	$('.service-hotline').mouseover( function(e) {
		$('.hotline-tooltip').show()
	})
	$('.service-hotline').mouseout( function(e) {
		$('.hotline-tooltip').hide()
	})
}

var becomeCustomerTeaserMarkup = '<div class="calculator-area">';
becomeCustomerTeaserMarkup += '<div class="calculator-savings"></div>';
becomeCustomerTeaserMarkup += '<a class="close-calculator-savings hidden">&nbsp;</a>';
becomeCustomerTeaserMarkup += '<a class="cta">Jetzt Kunde werden</a>';
becomeCustomerTeaserMarkup += '<div class="service-hotline">';
becomeCustomerTeaserMarkup += '<span class="hotline-text">Service-Hotline:</span><span class="hotline">0800 / 60 60 110</span>';
becomeCustomerTeaserMarkup += '<span class="hotline-info">kostenlos aus dem deutschen Festnetz</span>';
becomeCustomerTeaserMarkup += '<span class="hotline-tooltip">Erreichbar: Mo-Fr. 08.00 - 20.00 Uhr, Sa. 10.00 - 16.00 Uhr.</span>';
becomeCustomerTeaserMarkup += '</div>';
becomeCustomerTeaserMarkup += '</div>';
$.template("becomeCustomerTeaserTemplate", becomeCustomerTeaserMarkup);

function areCookiesEnabled() {

	document.cookie = "__verify=1";
	var supportsCookies = document.cookie.length > 1 &&
	document.cookie.indexOf("__verify=1") > -1;
	var thePast = new Date(1978, 1, 1);
	document.cookie = "__verify=1;expires=" + thePast.toUTCString();
	return supportsCookies;
}

// decrypt helper function
function decryptCharcode(n,start,end,offset) {
	n = n + offset;
	if (offset > 0 && n > end) {
		n = start + (n - end - 1);
	} else if (offset < 0 && n < start) {
		n = end - (start - n - 1);
	}
	return String.fromCharCode(n);
}

// decrypt string
function decryptString(enc,offset) {
	var dec = "";
	var len = enc.length;
	for(var i=0; i < len; i++) {
		var n = enc.charCodeAt(i);
		if (n >= 0x2B && n <= 0x3A) {
			dec += decryptCharcode(n,0x2B,0x3A,offset);	// 0-9 . , - + / :
		} else if (n >= 0x40 && n <= 0x5A) {
			dec += decryptCharcode(n,0x40,0x5A,offset);	// A-Z @
		} else if (n >= 0x61 && n <= 0x7A) {
			dec += decryptCharcode(n,0x61,0x7A,offset);	// a-z
		} else {
			dec += enc.charAt(i);
		}
	}
	return dec;
}

// decrypt spam-protected emails
function linkTo_UnCryptMailto(s) {
	location.href = decryptString(s,-1);
}

