jQuery.noConflict();
(function($) { 

	var DPAGRentenservice = {
		init: function() {
			if($('.rs_label-input_js').length) {
				DPAGRentenservice.LabelToInput.init($('.rs_label-input_js'));
			}
			if($('.rs_slider_js').length) {
				DPAGRentenservice.Slider.init($('.rs_slider_js'));
			}
			if($('.rs_changemessages_js').length) {
				DPAGRentenservice.ChangeMessages.init($('.rs_changemessages_js'));
				
				var $step2 = $('.rs_changemessages-step2_js');
				
				$step2.find('input').click(function(e) {					
					
					if (  $(this).filter('.not-compatible').is(':checked') ) {
						$step2.find('input').attr({ checked : false, disabled: true });
						$(this).attr('checked', true);
					} else {
						$step2.find('input').attr('disabled', false);
					}
					
					setFormSubmitButton();
					
					$(this).attr('disabled', false);
				});
				
				
			}
			if($('.rs_toggle-box_js').length) {
				DPAGRentenservice.ToggleBox.init($('.rs_toggle-box_js'));
			}
		}
	};
	
	DPAGRentenservice.LabelToInput = {
		identifier: 'rs_label-input_js_', 
		cssDefinitions: {'position':'absolute', 'top': '0px', 'left': '0px', 'z-index': 10},
		init: function(e) {
			var _this = this;
			e.each(function(index) {
				$(this).attr('id', _this.identifier+index);
				_this.setLabel('#'+$(this).attr('id'));
			});
		},
		setLabel: function(id) {
			var _this = this;
			if($(id).find('input').val()) {
				$(id).find('label').hide();
			}
			$(id).css({'position':'relative'});
			$(id).find('label').css(_this.cssDefinitions);
			$(id).find('input').live('focus', function() {
				$(this).parent(id).find('label').hide();
			});
			$(id).find('input').live('blur', function() {
				if(!$(this).val()) {
					$(this).parent(id).find('label').show();
				}
			});
		}
	};
	
	DPAGRentenservice.Slider = {
		identifier: 'rs_slider_js_',
		border: 1,
		elementHolder: 'ul.rs_slider-elements_js',
		element: 'li',
		speed: 1500,
		init: function(e) {
			var _this = this;
			e.each(function(index) {
				$(this).attr('id', _this.identifier+index);
				_this.setSlider('#'+$(this).attr('id'));
			});
		},
		setSlider: function(id) {
			var _this = this, maxWidth = 0;
			$(id).find(_this.element).each(function() {
				maxWidth += $(this).width() + _this.border;
			});
			$(id).find(_this.elementHolder).css({'width':maxWidth + 'px'});
			if(maxWidth > $(id).width()) {
				$(id).parent().append('<a href="#" class="slider-nav slider-prev" rel="prev">prev</a><a href="#" class="slider-nav slider-next" rel="next">next</a>');
				$(id).parent().find('.slider-nav').hover( 
					function() {
						_this.scroll(id, $(this).attr('rel'));
					},
					function() {
						$(id).find(_this.elementHolder).stop(true, false);
					}
				);
				$(id).parent().find('.slider-nav').click(function() {
					return false;
				});
			}
		},
		scroll: function(id, direction) {
			var _this = this, value = 0, divider = parseInt($(id).find(_this.elementHolder).width() + _this.border - $(id).width());
			if(direction == "prev") {
			} else if (direction == "next") {
				value = divider;
			}
			var distance = value + parseInt($(id).find(_this.elementHolder).css('left'));
			distance = distance < 0 ? (distance * -1) : distance;
			var speed = _this.speed / divider * distance;
			speed = speed < 0 ? (speed * -1) : speed;
			$(id).find(_this.elementHolder).animate({left: -value+'px'}, speed);
		}
	};
	
	DPAGRentenservice.ChangeMessages = {
		identifier: 'rs_changemessages_js_',
		nextStep: '.rs_changemessages-step2_js',
		elements: 'li',
		selector: 'APP.nutzerprofil',
		init: function(e) {
			var _this = this;
			e
				.each(function(index) {
					$(this).attr('id', _this.identifier+index);
					_this.setMessageBox('#'+$(this).attr('id'));
				})
				.find('.rs_big-button').hide()
			;
		},
		setMessageBox: function(id) {
			var _this = this;
			$(id).find(_this.nextStep).hide();
			$(id).find(_this.nextStep + ' ' +_this.elements).hide();
			$(id).find('input[name="'+_this.selector+'"]').click(function(){
				_this.showHide(id, $(this).val(), $(this).attr('data-tracking'));	
			});
		},
		showHide: function(id, rel, trackingid) {
			var _this = this;
			$(id).find(_this.nextStep).show();
			$(id).find('.rs_big-button').hide().attr('id', trackingid);
			$(id).find(_this.nextStep +' '+_this.elements).css({'display': 'none', 'visibility': 'hidden'})
				.find('input').attr('checked', false).attr('disabled', false)
			;
			$(id).find(_this.nextStep +' .'+rel+'_js').css({'display':'block', 'visibility':'visible'});
		}
	};
	
	DPAGRentenservice.ToggleBox = {
		identifier: 'rs_toggle-box_',
		handle: '.rs_toggle-handle_js',
		content: '.rs_toggle-content_js',
		active: 'rs_toggle-active_js',
		init: function(e) {
			var _this = this;
			e.each(function(index){
				$(this).attr('id', _this.identifier+index);
				_this.setToggleBox('#'+$(this).attr('id'));
			})
		},
		setToggleBox: function(id) {
			var _this = this;
			$(id).find(_this.content).hide();
			$(id).find('.'+ _this.active + ' ' + _this.content).show();
			$(id).find(_this.handle).click(function() {
				$(this).parents('li').toggleClass(_this.active);
				$(this).parents('li').find(_this.content).slideToggle('fast');
			});
		}
	};
	
	$(function() {
		DPAGRentenservice.init();
	});
	
})(jQuery);

function validateNLSubscription($form) {
	if ( typeof $form == 'undefined') {return false;}

	var $email			= $form.find('#pemail')
		$label			= $email.siblings('label')
		$requiredInfo	= $form.find('small')			
	;

	/*
	 * Regular Expressions for email validation. These were adopted
	 * from RuleEmail.java, which is used for Server-Side validation.
	 */
	var EMAIL_GROUP_3_PATTERN			= /^(.+)@(.+)\.(.+)$/,
		EMAIL_GROUP_2_PATTERN			= /^(.+)@(.+)$/,
		EMAIL_USER_PATTERN				= /^[a-zA-Z0-9]([\._-]?[a-zA-Z0-9]+)*$/,
		EMAIL_SYMBOLIC_DOMAIN_PATTERN	= /^[a-zA-Z0-9]([\._-]?[a-zA-Z0-9]+)*$/,
		EMAIL_TLD_PATTERN				= /^([a-zA-Z0-9]{2,})$/,
		EMAIL_IP_DOMAIN_PATTERN			= /^(\d{1,3})[.](\d{1,3})[.](\d{1,3})[.](\d{1,3})$/,

		email							= $email.val()
		emailCheck						= false,
		emailParts						= email.match(EMAIL_GROUP_3_PATTERN)
	;

	if(emailParts) { //email is well formed
		emailCheck = emailParts[1].match(EMAIL_USER_PATTERN);
		if(emailCheck) { //User-Part is valid

			emailCheck = (emailParts[2].match(EMAIL_SYMBOLIC_DOMAIN_PATTERN) && emailParts[3].match(EMAIL_TLD_PATTERN));
			if(!emailCheck) { //Domain AND/OR TLD is invalid. Check for IP
				emailParts = email.match(EMAIL_GROUP_2_PATTERN);
				if(emailParts) {
					emailCheck = emailParts[2].match(EMAIL_IP_DOMAIN_PATTERN);
				}
			}
		}
	}
	
	$label.toggleClass('error', !emailCheck);
	$email.toggleClass('error', !emailCheck);
	$requiredInfo.toggleClass('error', !emailCheck);

	return !!emailCheck;
}

function setFormSubmitButton() {
	var $step2 = $('.rs_changemessages-step2_js'),
		submitButtonUrls = { // all possible combinations for the "Änderungsmitteilung" form and it's associated page urls
			// IMPORTANT: concatenated values have to be in alphabetical order!
			'rentner': {
				'konto'					: 'https://www.rentenservice.com/dprs/multiapps?lang=de_DE&xmlFile=6000686&PA.CONTEXT=rs_konto_rentner_de_DE&APP.nutzer=rentner&APP.rentenart=gesetzlich',
				'adresse'				: 'https://www.rentenservice.com/dprs/multiapps?lang=de_DE&xmlFile=6000688&PA.CONTEXT=rs_adresse_rentner_de_DE&APP.nutzer=rentner&APP.rentenart=gesetzlich',
				'name'					: 'https://www.rentenservice.com/dprs/multiapps?lang=de_DE&xmlFile=6000690&PA.CONTEXT=rs_name_rentner_de_DE&APP.nutzer=rentner&APP.rentenart=gesetzlich',
				'adresse-konto'			: 'https://www.rentenservice.com/dprs/multiapps?lang=de_DE&xmlFile=6000692&PA.CONTEXT=rs_konto_adresse_rentner_de_DE&APP.nutzer=rentner&APP.rentenart=gesetzlich',
				'konto-name'			: 'https://www.rentenservice.com/dprs/multiapps?lang=de_DE&xmlFile=6000696&PA.CONTEXT=rs_konto_name_rentner_de_DE&APP.nutzer=rentner&APP.rentenart=gesetzlich',
				'adresse-name'			: 'https://www.rentenservice.com/dprs/multiapps?lang=de_DE&xmlFile=6000694&PA.CONTEXT=rs_adresse_name_rentner_de_DE&APP.nutzer=rentner&APP.rentenart=gesetzlich',
				'adresse-konto-name'	: 'https://www.rentenservice.com/dprs/multiapps?lang=de_DE&xmlFile=6000698&PA.CONTEXT=rs_konto_adresse_name_rentner_de_DE&APP.nutzer=rentner&APP.rentenart=gesetzlich'
			},
			'auftrag' : {
				'konto'					: 'https://www.rentenservice.com/dprs/multiapps?lang=de_DE&xmlFile=6000687&PA.CONTEXT=rs_konto_dritter_de_DE&APP.nutzer=auftrag&APP.rentenart=gesetzlich',
				'adresse'				: 'https://www.rentenservice.com/dprs/multiapps?lang=de_DE&xmlFile=6000689&PA.CONTEXT=rs_adresse_dritter_de_DE&APP.nutzer=auftrag&APP.rentenart=gesetzlich',
				'name'					: 'https://www.rentenservice.com/dprs/multiapps?lang=de_DE&xmlFile=6000691&PA.CONTEXT=rs_name_dritter_de_DE&APP.nutzer=auftrag&APP.rentenart=gesetzlich',
				'sterbefall'			: 'https://www.rentenservice.com/dprs/multiapps?lang=de_DE&xmlFile=6000684&PA.CONTEXT=rs_sterbefall_de_DE&APP.nutzer=auftrag&APP.rentenart=gesetzlich',
				'adresse-konto'			: 'https://www.rentenservice.com/dprs/multiapps?lang=de_DE&xmlFile=6000693&PA.CONTEXT=rs_konto_adresse_dritter_de_DE&APP.nutzer=auftrag&APP.rentenart=gesetzlich',
				'konto-name'			: 'https://www.rentenservice.com/dprs/multiapps?lang=de_DE&xmlFile=6000697&PA.CONTEXT=rs_konto_name_dritter_de_DE&APP.nutzer=auftrag&APP.rentenart=gesetzlich',
				'adresse-name'			: 'https://www.rentenservice.com/dprs/multiapps?lang=de_DE&xmlFile=6000695&PA.CONTEXT=rs_adresse_name_dritter_de_DE&APP.nutzer=auftrag&APP.rentenart=gesetzlich',
				'adresse-konto-name'	: 'https://www.rentenservice.com/dprs/multiapps?lang=de_DE&xmlFile=6000699&PA.CONTEXT=rs_konto_adresse_name_dritter_de_DE&APP.nutzer=auftrag&APP.rentenart=gesetzlich'
			},
			'betreuer' : {
				'konto'					: 'https://www.rentenservice.com/dprs/multiapps?lang=de_DE&xmlFile=6000687&PA.CONTEXT=rs_konto_dritter_de_DE&APP.nutzer=betreuer&APP.rentenart=gesetzlich',
				'adresse'				: 'https://www.rentenservice.com/dprs/multiapps?lang=de_DE&xmlFile=6000689&PA.CONTEXT=rs_adresse_dritter_de_DE&APP.nutzer=betreuer&APP.rentenart=gesetzlich',
				'name'					: 'https://www.rentenservice.com/dprs/multiapps?lang=de_DE&xmlFile=6000691&PA.CONTEXT=rs_name_dritter_de_DE&APP.nutzer=betreuer&APP.rentenart=gesetzlich',
				'sterbefall'			: 'https://www.rentenservice.com/dprs/multiapps?lang=de_DE&xmlFile=6000684&PA.CONTEXT=rs_sterbefall_de_DE&APP.nutzer=betreuer&APP.rentenart=gesetzlich',
				'betreuung'				: 'https://www.rentenservice.com/dprs/multiapps?lang=de_DE&xmlFile=6000685&PA.CONTEXT=rs_betreuung_de_DE&APP.nutzer=betreuer&APP.rentenart=gesetzlich',
				'adresse-konto'			: 'https://www.rentenservice.com/dprs/multiapps?lang=de_DE&xmlFile=6000693&PA.CONTEXT=rs_konto_adresse_dritter_de_DE&APP.nutzer=betreuer&APP.rentenart=gesetzlich',
				'konto-name'			: 'https://www.rentenservice.com/dprs/multiapps?lang=de_DE&xmlFile=6000697&PA.CONTEXT=rs_konto_name_dritter_de_DE&APP.nutzer=betreuer&APP.rentenart=gesetzlich',
				'adresse-name'			: 'https://www.rentenservice.com/dprs/multiapps?lang=de_DE&xmlFile=6000695&PA.CONTEXT=rs_adresse_name_dritter_de_DE&APP.nutzer=betreuer&APP.rentenart=gesetzlich',
				'adresse-konto-name'	: 'https://www.rentenservice.com/dprs/multiapps?lang=de_DE&xmlFile=6000699&PA.CONTEXT=rs_konto_adresse_name_dritter_de_DE&APP.nutzer=betreuer&APP.rentenart=gesetzlich'
			},
			'kontoaenderung' : {
				'konto'					: 'https://www.rentenservice.com/dprs/multiapps?lang=de_DE&xmlFile=6001441&PA.CONTEXT=rs_konto_rueckmeldung_de_DE&APP.nutzer=kontoaenderung&APP.rentenart=gesetzlich'
			},
			'bestatter' : {
				'sterbefall'			: 'https://www.rentenservice.com/dprs/multiapps?lang=de_DE&xmlFile=6000684&PA.CONTEXT=rs_sterbefall_de_DE&APP.nutzer=bestatter&APP.rentenart=gesetzlich'
			},
			'ausland': {		
				// there are no URLs for this section, so it's just a copy of the 'auftrag' section
				'konto'					: 'https://www.rentenservice.com/dprs/multiapps?lang=de_DE&xmlFile=6000687&PA.CONTEXT=rs_konto_dritter_de_DE&APP.nutzer=auftrag&APP.rentenart=gesetzlich',
				'adresse'				: 'https://www.rentenservice.com/dprs/multiapps?lang=de_DE&xmlFile=6000689&PA.CONTEXT=rs_adresse_dritter_de_DE&APP.nutzer=auftrag&APP.rentenart=gesetzlich',
				'name'					: 'https://www.rentenservice.com/dprs/multiapps?lang=de_DE&xmlFile=6000691&PA.CONTEXT=rs_name_dritter_de_DE&APP.nutzer=auftrag&APP.rentenart=gesetzlich',
				'sterbefall'			: 'https://www.rentenservice.com/dprs/multiapps?lang=de_DE&xmlFile=6000684&PA.CONTEXT=rs_sterbefall_de_DE&APP.nutzer=auftrag&APP.rentenart=gesetzlich',
				'adresse-konto'			: 'https://www.rentenservice.com/dprs/multiapps?lang=de_DE&xmlFile=6000693&PA.CONTEXT=rs_konto_adresse_dritter_de_DE&APP.nutzer=auftrag&APP.rentenart=gesetzlich',
				'konto-name'			: 'https://www.rentenservice.com/dprs/multiapps?lang=de_DE&xmlFile=6000697&PA.CONTEXT=rs_konto_name_dritter_de_DE&APP.nutzer=auftrag&APP.rentenart=gesetzlich',
				'adresse-name'			: 'https://www.rentenservice.com/dprs/multiapps?lang=de_DE&xmlFile=6000695&PA.CONTEXT=rs_adresse_name_dritter_de_DE&APP.nutzer=auftrag&APP.rentenart=gesetzlich',
				'adresse-konto-name'	: 'https://www.rentenservice.com/dprs/multiapps?lang=de_DE&xmlFile=6000699&PA.CONTEXT=rs_konto_adresse_name_dritter_de_DE&APP.nutzer=auftrag&APP.rentenart=gesetzlich'
			}
		}
	
	
	
	// we don't need all the fuzz, if the user didn't check the needed input fields
	if ( $step2.find('input:checked').length > 0 ) {
		// get selected user type and initiate the change type's array
		var usertype = $step2.parents('form').find('input:radio:checked').val(),
			changetypes = []
		;
		
		// get all checked change types and concate them in alphabetic order
		$step2.find('input:checkbox:checked').each(function() {
			changetypes.push( $(this).val() )
		});
		changetypes = changetypes.sort().join('-');
		
		// try setting the submit button's href to the associated page or hide it on error
		try{
			$step2.parent('form').find('.rs_big-button')
				.attr('href', submitButtonUrls[usertype][changetypes])
				.show()
			;
		} catch(e){
			/*
			console.info(usertype, changetypes);
			console.debug(e);
			*/
			$step2.parent('form').find('.rs_big-button')
				.attr('href', '#')
				.hide()
			;
		}

	} else {
		// incomplete selecton, therefor hide the submit button
		$step2.parent('form').find('.rs_big-button')
			.attr('href', '#')
			.hide()
		;
	}
	
					
}
