function showBox(id, refId) {
	if(document.getElementById(id).style.display == "block"){
		document.getElementById(refId).style.backgroundPosition = null;
		document.getElementById(id).style.display = "none";
	} else {
		document.getElementById(refId).style.backgroundPosition = "0px -21px";
		document.getElementById(id).style.display = "block";
	}
}

function setFooterPosition() {
	if (document.body.offsetHeight+30 > document.documentElement.clientHeight) {
		document.getElementById("footer").style.position = "relative";
	} else {
		document.getElementById("footer").style.position = "absolute";
	}
}

function fixWidth() {
	if ($.browser.msie && $.browser.version == "6.0") {
		if ($(window).width() > 996)
			$('#general').css({
				'width': '100%'
			});
		else
			$('#general').css({
				'width': '996px'
			});
	}
	
}

function clickItemExplorer(obj) {
	if (obj.parentNode.className == "moreclosed") {
		if (obj.parentNode.getElementsByTagName("ul").length) {
			obj.parentNode.getElementsByTagName("ul")[0].style.display = "block";
			obj.parentNode.className = "moreopen";
		}
	} else {
		if (obj.parentNode.getElementsByTagName("ul").length) {
			obj.parentNode.getElementsByTagName("ul")[0].style.display = "none";
			obj.parentNode.className = "moreclosed";
		}
	}
		
}

/*
 *  Interactive map
 */
InteractiveMap = function(){
	_this = this;
};

InteractiveMap.prototype = {
	addEvents: function() {
		_this.addClickEvent("data[Register][location_id]", "map_location");
		_this.addClickEvent("map_location", "data[Register][location_id]");
	},

	addClickEvent: function(selector, relative) {
		var radios = document.getElementsByName(selector);
		for (var i = 0; i < radios.length; i++)
			radios[i].onclick = function () {
				interactiveMap.selectLocation(this, relative);
			}
	},

	selectLocation: function(element, fieldName) {
		var locations = document.getElementsByName(fieldName);
		for (var i = 0; i < locations.length; i++) {
			if (locations[i].value == element.value)
				locations[i].checked = true;
		}
	}
}

/*
 * Registration
 */

Registration = function() {
	this.eventNames = ['event_1', 'event_2', 'event_3', 'event_4', 'event_5', 'event_6', 'event_7'];
	this.denied = [1, 2, 3, 4, 5, 6, 9, 10, 11];
	_thisReg = this;
}

Registration.prototype = {
	fillAllRequired: function() {
		var inputs = $("input.required, select.required");
		for (var i = 0; i < inputs.length; i++) {
			if ($(inputs[i]).val().length < 1 || ($(inputs[i]).attr("type") == "checkbox" && !$(inputs[i]).attr("checked"))) {
				$(inputs[i]).addClass("registerError");
				if ($(inputs[i]).attr("type") == "checkbox")
					$(inputs[i]).next().addClass("registerError");
				else
					$(inputs[i]).prev().addClass("registerError");
				_thisReg.showErrorMessage('Please, fill all required fields.', 3);
			} else {
				$(inputs[i]).removeClass("registerError");
				$(inputs[i]).prev().removeClass("registerError");
			}
		}
	},
    
	getRequired: function(classes) {
		if (classes) {
			var arrClasses = classes.split(" ");

			for (var i = 0; i < arrClasses.length; i++) {
				if (arrClasses[i] == 'required')
					return true;
			}
		}
		return false;
	},

	getCurrentStep: function(currentStep) {
		var pattern = /step/;
		return parseInt(currentStep.id.replace(pattern, ''));
	},

	getEventInfo: function(event) {
		if (event) {
			return event.value;
		}
		return false;
	},

	getLocationInfo: function(checked) {
		if (checked) {
			return $(checked).parent().parent().find('td:eq(2)').html();
		}
		return false;
	},

	getSelectedRadio: function(elements) {
		if (elements) {
			for (var i = 0; i < elements.length; i++) {
				if(elements[i].checked == true)
					return elements[i];
			}
		}
		return false;
	},

	goToNextStep: function (currentElement, step) {
		_thisReg.updateSchedule();
		var currentStep = currentElement.parentNode;
		var currentStepNumber = _thisReg.getCurrentStep(currentStep);

		if (_thisReg.validateStep(currentStepNumber)) {
			if (_thisReg.isDenied($('input[name="data[Register][location_id]"]:checked').val()))
				document.getElementsByName('formregister')[0].action = document.getElementsByName('formregister')[0].action.replace('step2', 'step3');

			document.getElementsByName('formregister')[0].submit();
			return true;
		}
		else {
			setFooterPosition();
			return false;
		}
	},

	goToStep: function(action) {
            if ($('input[name="data[Register][location_id]"]').val() == "1" && action.search(/step2/i) >= 0) {
                action = action.replace('step2', 'index');
            }

            $('form[name="formregister"]').attr('action', action);
            $('form[name="formregister"]').submit();
	},

	removeErrorsFromChecked: function(elements) {
		for (var i = 0; i < elements.length; i++) {
			elements[i].parentNode.parentNode.className = "noError";
		}
	},

	removeBtnEvents: function(element) {
		$(element).unbind('click').attr('onclick', null);
	},

	addBtnEvents: function(element) {
		$(element).bind('click', function() {
			registration.submitForm(this);
		});
	},

	showErrorMessage: function(message, step) {
		document.getElementById("error-step" + step).innerHTML = message;
	},

	submitForm: function(element) {
		if (_thisReg.validateStep(3)) {
			var data = $("form[name='formregister']").serialize();

			var el, dataField;
			$.ajax({
				url: PATH + '/registers/validateForm',
				data: data,
				type: "post",
				dataType: "text",
				beforeSend: function() {
					_thisReg.removeBtnEvents(element)
				},
				success: function(data) {
					//under linux data returns a break line and under windows returns two break lines
					if (data.replace('\n', '').replace('\r', '') != "true") {
						_thisReg.fillAllRequired();
						dataField = data.split("|");
						el = $('input[name="'+dataField[0]+'"]');
						el.addClass("registerError")
						el.prev().addClass("registerError");
						if (typeof(dataField[1]) != "undefined")
							document.getElementById('error-step3').innerHTML = dataField[1];
						_thisReg.addBtnEvents(element);
						return false;
					} else {
						el = $('input.registerError');
						el.removeClass("registerError")
						el.prev().removeClass("registerError");
						document.getElementsByName('formregister')[0].submit();
						return true;
					}
				},
				error: function() {
					alert("error. form non submited.");
				}
			});
		}
	},

	updateSchedule: function() {
		var location = _thisReg.getSelectedRadio(document.getElementsByName('data[Register][location_id]'));
		var locationInfo = _thisReg.getLocationInfo(location);
		if (locationInfo)
			$('#schedule-location').html(locationInfo).show();

		for (var i = 0; i < _thisReg.eventNames.length; i++) {
			var selected = _thisReg.getSelectedRadio(document.getElementsByName('data[Register]['+_thisReg.eventNames[i]+']'));
			var eventInfo = _thisReg.getEventInfo(selected);
			if (eventInfo)
				$('#schedule-event' + (i+1)).html(eventInfo).show();
		}
	},

	validateStep: function(currentStep) {
		switch (currentStep) {
			case 1:
				return _thisReg.validateStep1();
				break;
			case 2:
				return _thisReg.validateStep2();
				break;
			case 3:
				return _thisReg.validateStep3();
				break;
			default:
				return false;
				break;
		}
	},

	validateStep1: function() {
		var inputsElement = document.getElementsByTagName('input');

		for (var i = 0; i < inputsElement.length; i++) {
			if (inputsElement[i].name == 'data[Register][location_id]' && inputsElement[i].checked == true) {
				document.getElementById('locations-list').className = "";
				_thisReg.showErrorMessage('', 1);
				return true;
			}
		}

		_thisReg.showErrorMessage('Please select a location', 1);

		document.getElementById('locations-list').className = "registerError";
		return false;
	},

	validateStep2: function() {
		var eventsMsg = _thisReg.validateEvents();
		var questionMsg = _thisReg.validateQuestion();
		var errorMsg = "";

		if (eventsMsg.message)
			errorMsg += "<li>" + eventsMsg.message + "</li>";

		if (questionMsg.message)
			errorMsg += "<li>" + questionMsg.message + "</li>";

		if (errorMsg.length > 0) {
			_thisReg.showErrorMessage("<p>Please, fill all required fields.</p><ul>" + errorMsg + "</ul>", 2);
			return false;
		}
		else {
			_thisReg.showErrorMessage("", 2);
			return true;
		}
	},

	validateStep3: function() {
		var formStep = document.getElementsByName('formregister')[0];
		var inputs = formStep.getElementsByTagName('input');

		for (var i = 0; i < inputs.length; i++) {
			if (_thisReg.getRequired(inputs[i].getAttribute('class'))) {
				if (inputs[i].value.length < 1 || ($(inputs[i]).attr("type") == "checkbox" && !$(inputs[i]).attr("checked"))) {
					_thisReg.fillAllRequired();
					return false;
				}
			}
		}
		return true;
	},

	validateEvents: function() {
		var message;
		var checkedElements = $('input[name="data[Register][event_1]"]:checked, input[name="data[Register][event_2]"]:checked, input[name="data[Register][event_3]"]:checked, input[name="data[Register][event_4]"]:checked, input[name="data[Register][event_5]"]:checked, input[name="data[Register][event_6]"]:checked, , input[name="data[Register][event_7]"]:checked');
		if (checkedElements.length < 1) {
			document.getElementById('events-list').className = "registerError";
			_thisReg.removeErrorsFromChecked(checkedElements);
			message = {"message": "You must select at least one event."};
		}
		else {
			message = {"message": false}
			document.getElementById('events-list').className = "";
		}

		return message;
	},
	
	validateQuestion: function() {
		var message;
		var leadershipElements = document.getElementsByName('data[Register][leadership]');
		var error = true;

		if (leadershipElements.length > 0) {
			for (var i = 0; i < leadershipElements.length; i++) {
					if (leadershipElements[i].checked == true)
							error = false;
			}
		}
		else {
			error = false;
		}

		if (error) {
			message = {"message": "You should select if you also be attending the Thought Leadership Event"};
			$('.leadership-question').addClass("registerErrorInline");
		}
		else {
			message = {"message": false};
			var leadershipQuestion = $('.leadership-question');
			if (leadershipQuestion && leadershipQuestion.length > 0) {
				leadershipQuestion.removeClass('registerErrorInline');
				leadershipQuestion.addClass('noError');
			}
		}

		return message;
	},

	isDenied: function(value) {
		for (var i = 0; i < _thisReg.denied.length; i++) {
			if (_thisReg.denied[i] == value)
				return true;
		}

		return false;
	}
}

/*
 * Tooltip
 */

Tooltip = function() {
	this.classSelector = 'ico-info';
	this.tooltipElement = document.getElementById('tooltip');
	this.tooltipContent = document.getElementById('tooltip-content');
	this.screenLockElement = document.body;
	_thisTT = this;
}

Tooltip.prototype = {
	addEvent: function(element) {
		element.onclick = function() {
			_thisTT.showTooltip(element);
		}
	},

	addEventToBody: function() {
		if (_thisTT.screenLockElement.addEventListener)
			_thisTT.screenLockElement.addEventListener('click', _thisTT.hideTooltip, true);
		else {
			_thisTT.screenLockElement.attachEvent('onclick', _thisTT.hideTooltip);
		}
	},

	getElementPositions: function(element) {
		var curleft, curtop;
		curleft = curtop = 0;
		if (element.offsetParent) {
			while (element != null) {
				curleft += element.offsetLeft;
				curtop += element.offsetTop;
				element = element.offsetParent;
			}

			return {
				'top': curtop,
				'left': curleft
			}
		}
		return false;
	},

	getElementSizes: function(element) {
		return {
			'width': element.offsetWidth,
			'height': element.offsetHeight
		}
	},

	hideTooltip: function (e, force) {
		var x, y;
		if (!e) var e = window.event;

		if (e.pageX || e.pageY) 	{
			x = e.pageX;
			y = e.pageY;
		}
		else if (e.clientX || e.clientY) 	{
			x = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
			y = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;
		}

		if (!_thisTT.validateTooltipPosition(x, y) || force)
			_thisTT.tooltipElement.style.display = 'none';
	},

	setupTooltip: function() {
		var anchorElements = document.getElementsByTagName('a');
		var pattern = new RegExp(_thisTT.classSelector);

		for (var i = 0; i < anchorElements.length; i++) {
			if (pattern.test(anchorElements[i].className)) {
				_thisTT.addEvent(anchorElements[i]);
			}
		}

		var inlineElements = document.getElementsByTagName('span');
		var patternInline = new RegExp('inline-info');

		for (var i = 0; i < inlineElements.length; i++) {
			if (patternInline.test(inlineElements[i].className)) {
				_thisTT.addEvent(inlineElements[i]);
			}
		}
	},

	showTooltip: function(element) {
		var html;
		if (element.className == 'inline-info')
			html = '<span>' + element.getElementsByTagName('span')[0].innerHTML + '</span>';
		else
			html = element.innerHTML;

		var iconPositions = _thisTT.getElementPositions(element);
		_thisTT.tooltipContent.innerHTML = html;

		_thisTT.tooltipElement.style.top = iconPositions.top + 'px';
		_thisTT.tooltipElement.style.left = iconPositions.left + 'px';

		_thisTT.addEventToBody();
	
		_thisTT.tooltipElement.style.display = 'block';
	},

	validateTooltipPosition: function(x, y) {
		var positions = _thisTT.getElementPositions(_thisTT.tooltipContent.parentNode);
		var sizes = _thisTT.getElementSizes(_thisTT.tooltipContent.parentNode);

		var elementX = positions.left + sizes.width;
		var elementY = positions.top + sizes.height;

		if ((x >= positions.left && x <= elementX) && (y >= positions.top && y <= elementY))
			return true;

		return false;
	}
}

findYourWay = function() {
	this.formSel = $('#find-your-way-form');

	_thisFYW = this;
}

findYourWay.prototype = {
	init: function() {
		var form = _thisFYW.formSel;
		var isValid = _thisFYW.validate();
		if (isValid) {
                    var saddr = $('input[name="street"]').val() + ", " + $('input[name="city"]').val() + ", " + $('input[name="state"]').val() + ", " + $('input[name="zip"]').val();
                    _thisFYW.addError();

                    var newForm = _thisFYW.createForm(form, saddr);
                    if (newForm[0].submit())
                        newForm[0].remove();
		}
	},

	addError: function() {
		if ($("input[name='daddr']:checked").length == 0)
			_thisFYW.formSel.find('table').addClass('registerError');
		else
			_thisFYW.formSel.find('table').removeClass('registerError');

		$('input.required').each(function() {
			if ($(this).val().length < 1) {
				$(this).addClass("registerError");
				$(this).prev().addClass("registerError");
			} else {
				$(this).removeClass("registerError");
				$(this).prev().removeClass("registerError");
			}
		});
	},

	createForm: function(form, saddr) {
		var daddr = form.find('input[name="daddr"]:checked').val();
		var newForm = $("form").attr({"action": form[0].action, "method": "get", "target": "_bank", "style": "display:none;"});
		newForm.append($('<input type="hidden">').attr({"name": "saddr"}).val(saddr));
		newForm.append($('<input type="hidden">').attr({"name": "daddr"}).val(daddr));

		$('body').append(newForm);

		return newForm;
	},

	errorMessage: function(message) {
		if (message.length > 0)
			$('#error-yourway').html(message).fadeIn();
		else
			$('#error-yourway').html('').fadeOut();
	},

	validate: function() {
		var requiredLength = $('input.required').length + 1;
		var requiredCount = 0;

		if ($("input[name='daddr']:checked").length > 0)
			++requiredCount;

		$('input.required').each(function() {
			if ($(this).val().length > 0)
				++requiredCount;
		});

		if (requiredCount == requiredLength) {
			_thisFYW.errorMessage('');
			return true;
		}
		
		_thisFYW.errorMessage('Please, fill all required fields.');
		_thisFYW.addError();
		return false;
	}
}

$(document).ready(function () {
	$('#lightBoxFlash').lightBoxFlash(getFlashData('#lightBoxFlash'));
});

function getFlashData(selector) {
	if ($(selector).length == 0)
		return {}
	
	var strData = $(selector).attr('href');
	if (strData.search('flashData=') == -1)
		return {}

	var arrData = strData.split('flashData=');
	var obj = eval('('+ arrData[1] +')');
	
	
	var conf =  {
		callBack: function () {
			loadFlashLayer(obj[0], obj[1], obj[2], obj[3], obj[4], obj[5], 1000);
		},
		imageLoading: PATH + '/img/lightbox-ico-loading.gif',
		imageBtnPrev: PATH + '/img/lightbox-blank.gif',
		imageBtnNext: PATH + '/img/lightbox-blank.gif',
		imageBtnClose: PATH + '/img/lightbox-btn-close.gif',
		imageBlank: PATH + '/img/lightbox-blank.gif'
	}
	
	return conf;
}

var timerId;
function loadFlashLayer(path, title, width, height, scale, bgcolor, time) {
	if (!time) time = 2000;
	if (!bgcolor) bgcolor = "";

	function loadFlash() {
		var settings = {"width":width, "height":height, "path":PATH, "video":"/media/_common/30sec_smart_grid_solutions.flv", "image":"/img/_common/preview_video.jpg", "target":"lightbox-container-image"}
		flashvideoplayer(settings);
	}
	
	clearTimeout(timerId);
	timerId = setTimeout(loadFlash, time);
}

function flashvideoplayer(settings) {
// Params
	var params = {};
	params.allowFullscreen = "true";
	params.wmode = "transparent";
// Flashvars
	var flashvars = {};
	flashvars.width = settings.width;				// *required			Video-Width (min. 150px) 
	flashvars.height = settings.height;				// *required			Video-Height (min. 50px)
	flashvars.flv_path = 							// *required			Pfad zur FLV-Datei/MP4-Datei
					settings.path + settings.video; 						
					flashvars.flv_start_img = settings.path + settings.image; // [default:""]		Pfad zum Start-Bild	 	
					flashvars.flv_start_btn = true; // [default:false]		Zeige Play-Button
	flashvars.flv_smoothing = true; 				// [default:true]		Video-Smoothing	
	flashvars.flv_autoplay = false;					// [default:true]		Autoplay 
	flashvars.flv_buffertime = 3;					// [default:3]			Buffertime 
	flashvars.flv_repeat = false;					// [default:true]		Auto-Repeat
	flashvars.flv_show_speaker = true; 				// [default:true]		Show Speaker
	flashvars.flv_show_control = true; 				// [default:true]		Show Controlbar
	flashvars.flv_autohidecontrol = true;			// [default:true]		Autohide Controlbar
	flashvars.flv_autohidecontroldelay = 1;			// [default:2]			Autohide Controlbar Delay (sec.)
	flashvars.flv_allow_fullscreen = false;			// [default:true]		Allow Fullscreen (requires params.allowFullscreen = "true";)
	flashvars.flv_fullscreen_bg = "0x000000"		// [default:"0x000000"]	Fullscreen Background-Color (Hexadecimal)
	flashvars.flv_fullscreen_bg_alpha = 1			// [default:1]			Fullscreen Background-Transparency (0-1)
	flashvars.flv_volume = 1;						// [default:1]			Video-Volume (0-1);
		flashvars.flv_error_message = 				// [default:"Stream not found"]
								"Stream not found";	// Error-Message invalid FLV-Path			
	// Run sfwobject
	swfobject.embedSWF(settings.path + "/media/_common/siemensvideoplayer.swf", settings.target, flashvars.width, flashvars.height, "9.0.0", "", flashvars, params);
}


function slideShow(selector) {
	this.selector = $(selector);
	this.thumbs = this.selector.find('.items').children();
	this.countThumbs = this.thumbs.length;
	this.bigImage = $('#image_wrap img');
	this.spinner = $('#slideshow .loading');
	this.currentPosition = 0;
	this.currentImageIndex = 1;
	_thisSS = this;
}

slideShow.prototype = {
	init: function() {
		this.addEvents();
	},

	addEvents: function() {
		this.selector.parent().find('.next').bind('click', this.nextThumbnails);
		this.selector.parent().find('.prev').bind('click', this.prevThumbnails);
		this.thumbs.find('img').bind('click', this.loadImage);
		this.counter();
		this.setupNavigationButtons();
		this.setupThumbs();
	},

	counter: function(element) {
		if (element)
			_thisSS.currentImageIndex = _thisSS.thumbs.find('img').index(element) + 1;

		var imagesCount = _thisSS.thumbs.find('img').length;
		$("#slide-counter").html(_thisSS.currentImageIndex + "/" + imagesCount);
	},

	setupNavigationButtons: function() {
		if (_thisSS.currentPosition == 0)
			_thisSS.selector.parent().find('.prev').addClass('prev-inactive');
		else
			_thisSS.selector.parent().find('.prev').removeClass('prev-inactive');

		if (_thisSS.currentPosition == (_thisSS.countThumbs - 1))
			_thisSS.selector.parent().find('.next').addClass('next-inactive');
		else
			_thisSS.selector.parent().find('.next').removeClass('next-inactive');
	},

	setupThumbs: function() {
		_thisSS.thumbs.each(function() {
			$(this).children(':first').addClass('first-item');
			$(this).children(':last').addClass('last-item');
		});
	},

	getThumbnails: function(target) {
		var currentElement = $(_thisSS.thumbs[_thisSS.currentPosition]);
		if (target == 'next')
			_thisSS.currentPosition++;
		if (target == 'prev')
			_thisSS.currentPosition--;

		currentElement.parent().animate({'left': - (currentElement.width() * _thisSS.currentPosition)}, _thisSS.setupNavigationButtons);
	},

	loadImage: function(event) {
		var element = $(event.target);
		if (!element.hasClass('active')) {
			element.parent().parent().find('.active').removeClass('active');
			element.addClass('active');
			_thisSS.bigImage.fadeOut(function() {
				_thisSS.spinner.show();
				_thisSS.counter(event.target);
				var url = element.attr('src').replace('thumbs/', '') + "?random=" + Math.random()*99999;
				_thisSS.bigImage.attr('src', url).load(function() {
					_thisSS.spinner.hide();
					$(this).fadeIn();
					$(this).parent().animate({height: $(this).height()}, {queue: false});
	             });
			})
		}
			
	},

	nextThumbnails: function() {
		if (_thisSS.currentPosition == (_thisSS.countThumbs - 1))
			return false;
		else {
			return _thisSS.getThumbnails('next');
		}
	},

	prevThumbnails: function() {
		if (_thisSS.currentPosition == 0)
			return false;
		else {
			return _thisSS.getThumbnails('prev');
		}
	}
}
