var GAS = {};

GAS.styleComponents = function(){
	$("#menu_services").superDropdown({
		dropdownClass: "div.headerDropdown",
		buttonAnchor: "a.arrowButton",
		useHover: true
	});

	$("#menu_tarife").superDropdown({
		dropdownClass: "div.headerDropdown",
		buttonAnchor: "a.arrowButton",
		useHover: true
	});	
	
	$("ol.teaserList h4 a").bigTarget({
    	hoverClass: 'selected'
  	});
	
	$("ol.teaserList").equalHeights(true);
	
	$('.faqs a').live('click', function(){
  		$(this).parent().toggleClass('selected');
  		$(this).next('div').slideToggle('fast');
  		return false;
  	});

	/**
	 * Horizontal Rulers
	 *
	 * @bugfix
	 * @affected IE6, IE7
	 */
	$('hr').each(function(){
		var oHr = $('<div class="hr">');
		
		if($(this).attr('class')) {
			oHr.addClass($(this).attr('class'));
		}
		
		$(this).wrap(oHr).remove();
	});
};

GAS.emailComponents = function(){
	/**
	 * Transform E-Mail-Address
	 * 
	 * before:
	 * <span class="email" title="E-Mail">exmaple at example.com/span>
	 * <span class="email" title="exmaple at example.com">exmaple at example.com/span>
	 * 
	 * after:
	 * <a href="mailto:exmaple@example.com" class="email">E-Mail</a>
	 * <a href="mailto:exmaple@example.com" class="email">exmaple@example.com</a>
	 */
	$('.email').each(function(){
		var email = String("mailto:" + $(this).html()).replace(/ at /, "@");
		var title = String($(this).attr('title')).replace(/ at /, "@");
		var anchor = $(document.createElement('a')).attr('href', email).text(title);

		if($(this).attr("id")) {
			anchor.attr("id", $(this).attr("id"));
		}

		if($(this).attr("class")) {
			anchor.attr("class", $(this).attr("class"));
		}

		$(this).replaceWith(anchor);
	});
}

GAS.buttonComponents = function(){
	$('.button').live('mouseover mouseout', function(event) {
		if (event.type == 'mouseover') {
			$(this).addClass('selected');
		} else {
			$(this).removeClass('selected');
		}
	});
		
	$('.button input, .button a').live('focus blur', function(event) {
		if (event.type == 'focusin') {
			$(this).parent().addClass('selected');
		} else {
			$(this).parent().removeClass('selected');
		}
	});
	
	// Form submitted using anchors
	$('form .button').live('click', function(){
		if($(this).find('.buttonInner').is('a')) {
			$(this).parents("form").submit();
			return false;
		}
	});
}

GAS.pricingComponents = function(){
	// Toggel Collapsible Content
	$('#toggleA, #toggleB').live('click', function(){
		$('.button').removeClass('disabled');
		var el = '#' + $(this).addClass('disabled').attr('id').split('toggle')[1].toLowerCase();
	
		$('.collapsibleContent').hide().end().find(el).show();
		
		// uncheck radio buttons
		$('input[name=UserDocuments]').attr('checked', false);		
		return false;
	});
	
	// Toggle fieldsets
	$('input[name=UserDocuments]').change(function(){
		$(this).closest('.collapsibleContent').find('.emailWrapper, .postWrapper').hide();
		
		if ($(this).val() == "email") {
			$(this).closest('.collapsibleContent').find('.emailWrapper').show();
		}
		if ($(this).val() == "post") {
			$(this).closest('.collapsibleContent').find('.postWrapper').show();
		}
	});
}

GAS.buildEnergyCalculator = function(){
	var updateField = $("input#ChargeSize");
	var returnField = $("input#ChargeEnergy");
	
	var sliderValue = 95;
	var sliderMin = 30;
	var sliderMax = 400;
	var sliderStep = 5;
	
	var kwhMax = 300000;
	
	$('<div class="sliderWrapper"><a id="minus" class="replaced" href="#">weniger</a><div id="sliderRange" /><a id="plus" class="replaced" href="#">mehr</a></div>').appendTo('#slider');

	var slider = $('#sliderRange').slider({
		range: "min",
		value: sliderValue,
		min: sliderMin,
		max: sliderMax,
		step: sliderStep,
		slide: function(event, ui) {
			onSliderChange(ui.value);
		}
	});

	$("#minus").live('click', function(){
		onSliderChange(slider.slider("value") - sliderStep);
		return false;
	});
	$("#plus").live('click', function(){
		onSliderChange(slider.slider("value") + sliderStep);
		return false;
	});
	
	returnField.val(calculateQmToKwh(sliderValue));
	
	returnField.change(function(){
		onSliderChange(calculateKwhToQm($(this).val()));
	}).change();
	
	/**
	 * On slider change
	 * 
	 * @param 	(Integer)	iQm
	 */
	function onSliderChange (iQm) {
		// clean and format the value
		iQm = cleanAndFormat(iQm);
		
		// observe slider-min-range
		if (iQm < sliderMin) {
			iQm = sliderMin;
		}
		
		// calculate qm to kwh
		var kwh = calculateQmToKwh(iQm);
		
		// observe slider-max-range
		if (iQm > sliderMax) {
			iQm = sliderMax;
			
			if (kwh > kwhMax) {
				kwh = kwhMax;
			}
		}
		
		// clean
		iQm = Math.round(iQm);
		kwh = Math.round(kwh);
		
		// update slider
		slider.slider("value", iQm);

		// update input fields
		updateField.val(iQm);
		returnField.val(kwh);
	}
	
	/**
	 * Calculate qm to kwh
	 * 
	 * @param 	(Integer)	iQm
	 * @return 	(Integer)
	 */
	function calculateQmToKwh (iQm) {
		if (iQm < 70) {
			result = 5000;
			result += (10000 / ((70 - sliderMin) / sliderStep)) * ((iQm - sliderMin) / sliderStep);
		} else if (iQm < 120) {
			result = 15000;
			result += (10000 / ((120 - 70) / sliderStep)) * ((iQm - 70) / sliderStep);
		} else if (iQm < 200) {
			result = 25000;
			result += (10000 / ((200 - 120) / sliderStep)) * ((iQm - 120) / sliderStep);	
		} else if (iQm < 300) {
			result = 35000;
			result += (10000 / ((300 - 200) / sliderStep)) * ((iQm - 200) / sliderStep);			
		} else {
			result = 45000;
			result += (25000 / ((sliderMax - 300) / sliderStep)) * ((iQm - 300) / sliderStep);
		}
		
		return result;
	}
	
	/**
	 * Calculate kwh to qm
	 * 
	 * @param 	(Integer)	iKwh
	 * @return 	(Integer)
	 */
	function calculateKwhToQm (iKwh) {
		if (iKwh < 15000) {
			result = (iKwh / 250) + 10;
		} else if (iKwh < 25000) {
			result = (iKwh / 200) - 5;	
		} else if (iKwh < 35000) {
			result = (iKwh / 125) - 80;		
		} else if (iKwh < 45000) {
			result = (iKwh / 100) - 150;		
		} else {
			result = (iKwh / 250) + 120;
		}

		return result;
	}
	
	/**
	 * Clean and Format
	 * 
	 * @param 	(Integer)	iAmount
	 * @return 	(Integer)
	 */
	function cleanAndFormat(iAmount) {
		var i = parseFloat(iAmount);
		if(isNaN(i)) {
			i = 0.00;
		}
		var minus = '';
		if(i < 0) {
			minus = '-';
		}
		i = Math.abs(i);
		i = parseInt((i + .005) * 100);
		i = i / 100;
		s = new String(i);
		if(s.indexOf('.') < 0) {
			s += '.00';
		}
		if(s.indexOf('.') == (s.length - 2)) {
			s += '0';
		}
		return minus + s;
	}
};

var carouselElement = document.getElementById('clientCarousel');

if (carouselElement) {
	var carousel = new ContentFlow(carouselElement, {
		scrollWheelSpeed: false,
		reflectionHeight: .4,
		scaleFactorLandscape: "max",
		scaleFactorPortrait: "max"
	});
	
	$(function(){
		$('.prev').live('#clientCarousel click', function() {
			carousel.moveTo('pre');
			return false;
		});

		$('.next').live('#clientCarousel click', function() {
			carousel.moveTo('next');
			return false;
		});	
	});
}

$(function(){
	GAS.styleComponents();
	GAS.emailComponents();
	GAS.buttonComponents();
	GAS.pricingComponents();
	GAS.buildEnergyCalculator();
	
	if (window.location.toString().indexOf("?debugJS") !== -1) {
		var c = '<h6 style="text-align: left; font-weight: bold;">Snippets:</h6>';
			c += '<ul class="list">';
			c += '<li><a href="/elements.html">elements.html</a></li>';
			c += '</ul><br />';
			
			c += '<h6 style="text-align: left; font-weight: bold;">Main pages:</h6><ul class="list">';
			c += '<li><a href="/home.html">home.html</a></li>';
			c += '<li><a href="/tarif-informationen.html">tarif-informationen.html</a></li>';
			c += '<li><a href="/tarif-wechsel.html">tarif-wechsel.html</a></li>';
			c += '<li><a href="/tarif-fragen.html">tarif-fragen.html</a></li>';
			c += '<li><a href="/tarif-siegel.html">tarif-siegel.html</a></li>';
			c += '<li><a href="/login.html">login.html</a></li>	';
			c += '<li><a href="/kontakt.html">kontakt.html</a></li>';
			c += '<li><a href="/agb.html">agb.html</a></li>';
			c += '<li><a href="/datenschutz.html">datenschutz.html</a></li>';
			c += '<li><a href="/wiederrufsrecht.html">wiederrufsrecht.html</a></li>';
			c += '<li><a href="/impressum.html">impressum.html</a></li>';
			c += '</ul><br />';
		
			c += '<h6 style="text-align: left; font-weight: bold;">Special pages:</h6>';
			c += '<ul class="list">';
			c += '<li><a href="/tarifrechner.html">tarifrechner.html</a></li>';
			c += '<li><a href="/angebotsseite.html">angebotsseite.html</a></li>';
			c += '<li><a href="/angebotsseite-vertrieb.html">angebotsseite-vertrieb.html</a></li>';
			c += '<li><a href="/bestellprozess-1.html">bestellprozess-1.html</a></li>';
			c += '<li><a href="/bestellprozess-2.html">bestellprozess-2.html</a></li>';
			c += '<li><a href="/bestellprozess-3.html">bestellprozess-3.html</a></li>';
			c += '<li><a href="/bestellprozess-4.html">bestellprozess-4.html</a></li>';
			c += '<li><a href="/selfcare.html">selfcare.html</a></li>';
			c += '<li><a href="/selfcare-kundendaten.html">selfcare-kundendaten.html</a></li>';
			c += '<li><a href="/selfcare-zaehlerstand.html">selfcare-zaehlerstand.html</a></li>';
			
			c += '</ul><br />';
			
		$("body").append('<div id="js_debug"><div id="js_console"style="text-align: left;">' + c + '</div><a href="#" id="js_debug_show">Show Pages</a><a href="#" id="js_debug_hide">Hide Pages</a></div>');
		
		$("#js_console").hide();
		$("#js_debug_hide").hide();
		$("#js_debug").css({
			"text-align": "right",
			padding: "10px",
			"background-color": "#efefef",
			position: "fixed",
			bottom: "10px",
			right: "10px",
			"z-index": "9000"
		});
		$("#js_debug_show").live('click', function(){
			$(this).hide();
			$("#js_debug_hide").show();
			$("#js_console").show();
			return false
		});
		$("#js_debug_hide").live('click', function(){
			$(this).hide();
			$("#js_debug_show").show();
			$("#js_console").hide();
			return false
		});
	}
});
