//xhtml work around to open all links with re=new-window as new tab or window
$(function(){	
	//check all hrefs, if external, open in blank window
	$('a').filter(function(){
		pattern = /http|ftp(s)?/i;			//basic regex patterm case insensitive
		result = pattern.test($(this).attr('href'));	//rung using test method
				
		if(result == true){
			$(this).attr({
				target: "_blank", 
				title: "Opens in a new window"
			});
		}
	});
});


$(document).ready(function(){

	if(jQuery.fn.inputfocus){
		if($('#main #main-left-panel div.side-panel div.item form div.input').length > 0 ){ // check if element is on page
			//apply form field effect
			$('#main #main-left-panel div.side-panel div.item form div.input').inputfocus({
				bgColourFocus:'#EEEAE8',
				bgColour:'#E8E9DC',			
				animate:true
			});
		}
		if($('#inner.wide #main #main-center-panel div.row-1 div.col-1 div#response-box div.side-panel div.item form div.input').length > 0 ){ // check if element is on page
			//apply form field effect
			$('#inner.wide #main #main-center-panel div.row-1 div.col-1 div#response-box div.side-panel div.item form div.input').inputfocus({
				bgColourFocus:'#EEEAE8',
				bgColour:'#E8E9DC',			
				animate:true
			});
		}
		if ($('#mega-footer-outer-wrapper .wrapper .col-1 #div-form-contact .input').length > 0 ){ // check if element is on page
			//apply form field effect
			$('#mega-footer-outer-wrapper .wrapper .col-1 #div-form-contact .input').inputfocus({
				bgColourFocus:'#ffffff',
				bgColour:'none',
				animate:true
			});
		}
	}

	//apply form validation
	function jqueryValidate(){
		
		if(jQuery.fn.validate){

			//setup default actions for validate plugin
			$.validator.setDefaults({
				submitHandler: function(form) {
					//on submit make sure that any inputs that have the same value as their label then blank the value
					
					//pass form id to local var
					var formId = jQuery(form).attr('id');

					//iterate through submit elements
					$('#'+formId+' input[type=text],select,textarea,radio,checkbox').each(function(){
						
						//get current_input 
						var current_input = $(this);
						//get label for current_input 
						var current_label = $('label[for=' + current_input.attr('id') + ']');
						//check that the element is either a text or textarea
						if(current_input.attr('type') == 'text' || current_input.attr('cols')){
							//if label and input the same then blank the value
							if(current_label.text() == current_input.val()){	
								current_input.val('');
							}
						}
					});

					//submit form
					form.submit();
				}
			});
			
			if($('#FormSignup').length > 0 ){ // check if element is on page
				
				//custom validation rule - text is not the prefilled content     
				$.validator.addMethod("notLabelText",
					
					function(value, element) {
						// compate elements value with its label 
						// excluding the error label generated by the validation script
						// usin jQuery selector filter element[attribute!=value]
						var result = ($(element).val() == $('label[for=' + $(element).attr('id') + '][generated!=true]').text()) ? false : true;
						return result;
					} 		
				);

				$("#FormSignup").validate({
					highlight: function(element, errorClass) {
						$(element).animate({
							opacity: 0.9
						}, 400, function () {
							$(element).css('color','#000000'); //red background for invalid data
							$(element).css('background-color','#FBE3E4'); //red background for invalid data
							$(element).css('border-color','#FBC2C4'); //red border for invalid data
						});
					},
					unhighlight: function(element, errorClass) {
						$(element).animate({
							opacity: 1.0
						}, 400, function () {
							$(element).css('color','#000000'); //red background for invalid data
							$(element).css('background-color','#E6EFC2'); //green background for valid data
							$(element).css('border-color','#C6D880'); //green border for valid data
						});
					},
					rules: {
						"data[FormSignup][name]": {  
							required: true,  
							notLabelText: true            
						},
						"data[FormSignup][email]": {
							required: true,
							email: true
						}
					},
					messages: {
						"data[FormSignup][name]": "Please enter your name.",
						"data[FormSignup][email]": {required: "Please enter your email.",
													email: "Email address is invalid."
													}
					}

				});

			}
			
			
			if($('#FormContact').length > 0 ){ // check if element is on page

				//custom validation rule - text is not the prefilled content     
				$.validator.addMethod("notLabelText",
					
					function(value, element) {
						// compate elements value with its label 
						// excluding the error label generated by the validation script
						// usin jQuery selector filter element[attribute!=value]
						var result = ($(element).val() == $('label[for=' + $(element).attr('id') + '][generated!=true]').text()) ? false : true;
						return result;
					} 		
				);

				$("#FormContact").validate({
					highlight: function(element, errorClass) {
						$(element).animate({
							opacity: 0.9
						}, 400, function () {
							$(element).css('color','#000000'); //red background for invalid data
							$(element).css('background-color','#FBE3E4'); //red background for invalid data
							$(element).css('border-color','#FBC2C4'); //red border for invalid data
						});
					},
					unhighlight: function(element, errorClass) {
						$(element).animate({
							opacity: 1.0
						}, 400, function () {
							$(element).css('color','#000000'); //red background for invalid data
							$(element).css('background-color','#E6EFC2'); //green background for valid data
							$(element).css('border-color','#C6D880'); //green border for valid data
						});
					},
					rules: {
						"data[User][firstname]": {  
							required: true,  
							notLabelText: true            
						},
						"data[User][lastname]": {  
							required: true,  
							notLabelText: true            
						},
						"data[FormContact][enquiry]": {  
							required: true,  
							notLabelText: true            
						}
					},
					messages: {
						"data[User][firstname]": "Please enter your first name.",
						"data[User][lastname]": "Please enter your last name.",
						"data[FormContact][enquiry]": "Please enter your enquiry."
					}

				});

			}
			
			
			if($('#SiteSearchForm').length > 0 ){ // check if element is on page
				
				//custom validation rule - text is not the prefilled content     
				$.validator.addMethod("notLabelText",
					
					function(value, element) {
						// compate elements value with its label 
						// excluding the error label generated by the validation script
						// usin jQuery selector filter element[attribute!=value]
						var result = ($(element).val() == $('label[for=' + $(element).attr('id') + '][generated!=true]').text()) ? false : true;
						return result;
					} 		
				);

				$("#SiteSearchForm").validate({
					highlight: function(element, errorClass) {
						$(element).animate({
							opacity: 0.9
						}, 400, function () {
							$(element).css('color','#000000'); //red background for invalid data
							$(element).css('background-color','#FBE3E4'); //red background for invalid data
							$(element).css('border-color','#FBC2C4'); //red border for invalid data
						});
					},
					unhighlight: function(element, errorClass) {
						$(element).animate({
							opacity: 1.0
						}, 400, function () {
							$(element).css('color','#000000'); //red background for invalid data
							$(element).css('background-color','#E6EFC2'); //green background for valid data
							$(element).css('border-color','#C6D880'); //green border for valid data
						});
					},
					rules: {
						"data[SiteSearchForm][search]": {  
							required: true,  
							notLabelText: true            
						}
					},
					messages: {
						"data[SiteSearchForm][search]": "Please enter keywords."
					}

				});

			}
			
			if($('#VacanciesSearchForm').length > 0 ){ // check if element is on page

				//custom validation rule - text is not the prefilled content     
				$.validator.addMethod("notLabelText",
					
					function(value, element) {
						// compate elements value with its label 
						// excluding the error label generated by the validation script
						// usin jQuery selector filter element[attribute!=value]
						var result = ($(element).val() == $('label[for=' + $(element).attr('id') + '][generated!=true]').text()) ? false : true;
						return result;
					} 		
				);

				$("#VacanciesSearchForm").validate({
					highlight: function(element, errorClass) {
						$(element).animate({
							opacity: 0.9
						}, 400, function () {
							$(element).css('color','#000000'); //red background for invalid data
							$(element).css('background-color','#FBE3E4'); //red background for invalid data
							$(element).css('border-color','#FBC2C4'); //red border for invalid data
						});
					},
					unhighlight: function(element, errorClass) {
						$(element).animate({
							opacity: 1.0
						}, 400, function () {
							$(element).css('color','#000000'); //red background for invalid data
							$(element).css('background-color','#E6EFC2'); //green background for valid data
							$(element).css('border-color','#C6D880'); //green border for valid data
						});
					},
					rules: {
						"data[VacanciesSearchForm][keywords]": {  
							required: true,  
							notLabelText: true            
						}
					},
					messages: {
						"data[VacanciesSearchForm][keywords]":"Please enter a keyword."
					}

				});
			}
			
			
			if($('#VacanciesApplicationForm').length > 0 ){ // check if element is on page

				//custom validation rule - text is not the prefilled content     
				$.validator.addMethod("notLabelText",
					
					function(value, element) {
						// compate elements value with its label 
						// excluding the error label generated by the validation script
						// usin jQuery selector filter element[attribute!=value]
						var result = ($(element).val() == $('label[for=' + $(element).attr('id') + '][generated!=true]').text()) ? false : true;
						return result;
					} 		
				);

				$("#VacanciesApplicationForm").validate({
					highlight: function(element, errorClass) {
						$(element).animate({
							opacity: 0.9
						}, 400, function () {
							$(element).css('color','#000000'); //red background for invalid data
							$(element).css('background-color','#FBE3E4'); //red background for invalid data
							$(element).css('border-color','#FBC2C4'); //red border for invalid data
						});
					},
					unhighlight: function(element, errorClass) {
						$(element).animate({
							opacity: 1.0
						}, 400, function () {
							$(element).css('color','#000000'); //red background for invalid data
							$(element).css('background-color','#E6EFC2'); //green background for valid data
							$(element).css('border-color','#C6D880'); //green border for valid data
						});
					},
					rules: {
						"data[User][title]": {  
							required: true,  
							notLabelText: true            
						},
						"data[User][firstname]": {  
							required: true,  
							notLabelText: true            
						},
						"data[User][lastname]": {  
							required: true,  
							notLabelText: true            
						},
						"data[User][address_line_1]": {  
							required: true,  
							notLabelText: true            
						},
						"data[User][city]": {  
							required: true,  
							notLabelText: true            
						},
						"data[User][postcode]": {  
							required: true,  
							notLabelText: true            
						},
						"data[VacanciesApplication][content]": {  
							required: true,  
							notLabelText: true            
						},
						"data[User][email]": {
							required: true,
							email: true
						}
					},
					messages: {
						"data[User][title]": "Please enter your title.",
						"data[User][firstname]": "Please enter your first name.",
						"data[User][lastname]": "Please enter your surname.",
						"data[User][address_line_1]": "Please enter your address.",
						"data[User][city]": "Please enter your city.",
						"data[User][postcode]": "Please enter your postcode.",
						"data[VacanciesApplication][content]": "Please enter your covering message.",
						"data[User][email]": {required: "Please enter your email.",
											  email: "Email address is invalid."
											 }
					}

				});

			}
			
			
			if($('#FormGroupRequest').length > 0 ){ // check if element is on page
				
				//custom validation rule - text is not the prefilled content     
				$.validator.addMethod("notLabelText",
					
					function(value, element) {
						// compate elements value with its label 
						// excluding the error label generated by the validation script
						// usin jQuery selector filter element[attribute!=value]
						var result = ($(element).val() == $('label[for=' + $(element).attr('id') + '][generated!=true]').text()) ? false : true;
						return result;
					} 		
				);

				$("#FormGroupRequest").validate({
					highlight: function(element, errorClass) {
						$(element).animate({
							opacity: 0.9
						}, 400, function () {
							$(element).css('color','#000000'); //red background for invalid data
							$(element).css('background-color','#FBE3E4'); //red background for invalid data
							$(element).css('border-color','#FBC2C4'); //red border for invalid data
						});
					},
					unhighlight: function(element, errorClass) {
						$(element).animate({
							opacity: 1.0
						}, 400, function () {
							$(element).css('color','#000000'); //red background for invalid data
							$(element).css('background-color','#E6EFC2'); //green background for valid data
							$(element).css('border-color','#C6D880'); //green border for valid data
						});
					},
					rules: {
						"data[FormGroupRequest][landlord]": {  
							required: true,  
							notLabelText: true            
						},
						"data[User][firstname]": {  
							required: true,  
							notLabelText: true            
						},
						"data[User][lastname]": {  
							required: true,  
							notLabelText: true            
						},
						"data[User][address_line_1]": {  
							required: true,  
							notLabelText: true            
						},
						"data[User][city]": {  
							required: true,  
							notLabelText: true            
						},
						"data[User][postcode]": {  
							required: true,  
							notLabelText: true            
						},
						"data[User][email]": {
							required: true,
							email: true
						}
					},
					messages: {
						"data[FormGroupRequest][landlord]": "Please enter the name of your landlord.",
						"data[User][firstname]": "Please enter your first name.",
						"data[User][lastname]": "Please enter your surname.",
						"data[User][address_line_1]": "Please enter your address.",
						"data[User][city]": "Please enter your city.",
						"data[User][postcode]": "Please enter your postcode.",
						"data[User][email]": {required: "Please enter your email.",
											  email: "Email address is invalid."
											 }
					}

				});

			}
			
			
			if($('#FormCommunicationRequest').length > 0 ){ // check if element is on page
				
				//custom validation rule - text is not the prefilled content     
				$.validator.addMethod("notLabelText",
					
					function(value, element) {
						// compate elements value with its label 
						// excluding the error label generated by the validation script
						// usin jQuery selector filter element[attribute!=value]
						var result = ($(element).val() == $('label[for=' + $(element).attr('id') + '][generated!=true]').text()) ? false : true;
						return result;
					} 		
				);

				$("#FormCommunicationRequest").validate({
					highlight: function(element, errorClass) {
						$(element).animate({
							opacity: 0.9
						}, 400, function () {
							$(element).css('color','#000000'); //red background for invalid data
							$(element).css('background-color','#FBE3E4'); //red background for invalid data
							$(element).css('border-color','#FBC2C4'); //red border for invalid data
						});
					},
					unhighlight: function(element, errorClass) {
						$(element).animate({
							opacity: 1.0
						}, 400, function () {
							$(element).css('color','#000000'); //red background for invalid data
							$(element).css('background-color','#E6EFC2'); //green background for valid data
							$(element).css('border-color','#C6D880'); //green border for valid data
						});
					},
					rules: {
						"data[FormCommunicationRequest][landlord]": {  
							required: true,  
							notLabelText: true            
						},
						"data[User][firstname]": {  
							required: true,  
							notLabelText: true            
						},
						"data[User][lastname]": {  
							required: true,  
							notLabelText: true            
						},
						"data[User][address_line_1]": {  
							required: true,  
							notLabelText: true            
						},
						"data[User][city]": {  
							required: true,  
							notLabelText: true            
						},
						"data[User][postcode]": {  
							required: true,  
							notLabelText: true            
						},
						"data[User][email]": {
							required: true,
							email: true
						}
					},
					messages: {
						"data[FormCommunicationRequest][landlord]": "Please enter the name of your landlord.",
						"data[User][firstname]": "Please enter your first name.",
						"data[User][lastname]": "Please enter your surname.",
						"data[User][address_line_1]": "Please enter your address.",
						"data[User][city]": "Please enter your city.",
						"data[User][postcode]": "Please enter your postcode.",
						"data[User][email]": {required: "Please enter your email.",
											  email: "Email address is invalid."
											 }
					}

				});

			}
			
			
			if($('#FormYourViews').length > 0 ){ // check if element is on page
				
				//custom validation rule - text is not the prefilled content     
				$.validator.addMethod("notLabelText",
					
					function(value, element) {
						// compate elements value with its label 
						// excluding the error label generated by the validation script
						// usin jQuery selector filter element[attribute!=value]
						var result = ($(element).val() == $('label[for=' + $(element).attr('id') + '][generated!=true]').text()) ? false : true;
						return result;
					} 		
				);

				$("#FormYourViews").validate({
					highlight: function(element, errorClass) {
						$(element).animate({
							opacity: 0.9
						}, 400, function () {
							$(element).css('color','#000000'); //red background for invalid data
							$(element).css('background-color','#FBE3E4'); //red background for invalid data
							$(element).css('border-color','#FBC2C4'); //red border for invalid data
						});
					},
					unhighlight: function(element, errorClass) {
						$(element).animate({
							opacity: 1.0
						}, 400, function () {
							$(element).css('color','#000000'); //red background for invalid data
							$(element).css('background-color','#E6EFC2'); //green background for valid data
							$(element).css('border-color','#C6D880'); //green border for valid data
						});
					},
					rules: {
						"data[FormYourViews][enquiry]": {  
							required: true,  
							notLabelText: true            
						},
						"data[FormYourViews][landlord]": {  
							required: true,  
							notLabelText: true            
						},
						"data[User][firstname]": {  
							required: true,  
							notLabelText: true            
						},
						"data[User][lastname]": {  
							required: true,  
							notLabelText: true            
						},
						"data[User][address_line_1]": {  
							required: true,  
							notLabelText: true            
						},
						"data[User][city]": {  
							required: true,  
							notLabelText: true            
						},
						"data[User][postcode]": {  
							required: true,  
							notLabelText: true            
						},
						"data[User][email]": {
							required: true,
							email: true
						}
					},
					messages: {
						"data[FormYourViews][enquiry]": "Please enter your enquiry.",
						"data[FormYourViews][landlord]": "Please enter the name of your landlord.",
						"data[User][firstname]": "Please enter your first name.",
						"data[User][lastname]": "Please enter your surname.",
						"data[User][address_line_1]": "Please enter your address.",
						"data[User][city]": "Please enter your city.",
						"data[User][postcode]": "Please enter your postcode.",
						"data[User][email]": {required: "Please enter your email.",
											  email: "Email address is invalid."
											 }
					}

				});

			}
			
		}
	}

	//fire off validation setup
	jqueryValidate();

	//-------------------------------------------------------------------------------------------------
	//--- HOME BANNER ---
	
	/* jquery cycle banner */

	if ($('#slideshow .gallery, #wallslideshow .gallery').length > 0){ // check if element is on page

		$show_gallery = false;

		if($('#slideshow').length > 0 && $('#slideshow').hasClass('no-effect') == false){
			$show_gallery = true;
		}
		if($('#wallslideshow').length > 0 && $('#wallslideshow').hasClass('no-effect') == false){
			$show_gallery = true;
		}

		if($show_gallery == true){ //check that disabling class isn't present on selector
			
			/* handle additional info panel */
			if($('.gallery .additional-text').length > 0 ){
				/* hide initially */
				$('.gallery .additional-text').each(function(){
					
					var additionalPanel = $(this);

					additionalPanel.hide();					

					/* create link to open panel */
					var link = $('<a class="info-inactive">Read more</a>');

					additionalPanel.prev().append(link);

					/* bind event handler */
					link.bind({
						keydown: function() {								
							return showAdditionalInfoBox(additionalPanel, link);
						},
						click: function() {
							return showAdditionalInfoBox(additionalPanel, link);
						}
					});
				
				});

				function statusClassAdditionalInfoBox(e){
					if($(this).hasClass('shown')){
						$(this).removeClass('shown');
					}else{						
						$(this).addClass('shown');
					}

				}
				
				/* define bound function call */
				function showAdditionalInfoBox(e, link){

					// boolean flag if gallery exists
					var hasGallery = false;

					// toggle the panel
					e.fadeToggle(400, null, statusClassAdditionalInfoBox);

					// Selects all direct child elements specified by "child" of elements specified by "parent". e.g. parent > child
					if($('#slideshow .gallery > li, #wallslideshow .gallery div.panels').length > 1){
						hasGallery = true;
					}
					
					if(hasGallery === true){
						$('#buttons-pause').hide();
						$('#buttons-play').show();
						$('.gallery').cycle('pause');							
					}

					/* change class of link to reflect that toggle is either on/off */
					if(link.hasClass('info-active')){
						link.removeClass('info-active');
						if(hasGallery === true){
							$('#play-controls').show();
						}
					}else{
						link.addClass('info-active');
						if(hasGallery === true){
							$('#play-controls').hide();
						}
					}
					return false;
				}
			}

			function onBefore() {
				/* ie6 only to handle transparent png bugs when toggling */
				if($.browser.msie && $.browser.version=="6.0"){
					/* handle additional info panel */
					if($('.gallery .additional-text').length > 0 ){
						/* hide initially */
						$('.gallery .additional-text').each(function(){
							
							var additionalPanel = $(this);
							if(additionalPanel.hasClass('shown')){
								additionalPanel.hide();
							}
						});
					}
				}
			} 
			function onAfter() { 
				/* ie6 only to handle transparent png bugs when toggling */
				if($.browser.msie && $.browser.version=="6.0"){
					/* handle additional info panel */
					if($('.gallery .additional-text').length > 0 ){
						/* hide initially */
						$('.gallery .additional-text').each(function(){
							
							var additionalPanel = $(this);
							if(additionalPanel.hasClass('shown')){
								additionalPanel.show();
							}
						});
					}
				}
			}

			//count the number of banners if it's greater than 1 then use cycle
			if($('#slideshow .gallery > li, #wallslideshow .gallery div.panels').length > 1){
				
				$('.gallery').cycle({ 
					fx:     'scrollHorz', 
					prev:   '#slideshow-prev', 
					next:   '#slideshow-next',
					before:  onBefore, 
					after:   onAfter,
					//timeout: 0
					speed:  2000,
					timeout: 10000
				});
				
				$('#slideshow, #wallslideshow').mouseover(function(){
					$('#play-controls').show();
				}).mouseout(function(){
					$('#play-controls').hide();
				});

				//organise pause controls
				$('#buttons-pause').show();
				$('#buttons-play').hide();
				
				//add pause control event
				$('#buttons-pause a').bind({
					keydown: function() {
						$('#buttons-pause').hide();
						$('#buttons-play').show();
						$('.gallery').cycle('pause');
						return false;
					},
					click: function() {
						$('#buttons-pause').hide();
						$('#buttons-play').show();
						$('.gallery').cycle('pause');
						return false;
					}
				 }); 
				
				//add play control event
				$('#buttons-play a').bind({
					keydown: function() {
						$('#buttons-play').hide();
						$('#buttons-pause').show();
						$('.gallery').cycle('resume');
						return false;
					},
					click: function() {
						$('#buttons-play').hide();
						$('#buttons-pause').show();
						$('.gallery').cycle('resume');
						return false;
					}
				});				

			}else{
				$('#play-controls').hide();
			}
		}
	}// check if element is on page	
	
	//--- HOME BANNER ---
	//-------------------------------------------------------------------------------------------------
	

	//-------------------------------------------------------------------------------------------------
	//--- TOGGLE SHOW HIDE ---

	if(jQuery.fn.showhide){
		//apply show hide plugin for use in gallery
		if($('a.toggle').length > 0 ){
			$('a.toggle').showhide({
				animate:false,
				event:'toggle',
				selected:false
			});
		}
	}

	//-------------------------------------------------------------------------------------------------
	//--- FAQ LOADER ---
	$('#faq-answers li').hide('fast', function(){
		$('#faq-answers-list').css('visibility', 'visible');
	});

	var qLists=["#faq-questions-list li"];
	for (x in qLists)
	{
		$( qLists[x] + " a" ).click(showAnswer);
		$( qLists[x] + " a" ).hover(handleHover);
		$( qLists[x] ).mouseout(handleMouseOut);
	}

	function showAnswer(){
		var elem = '#' + $(this).attr('title');
		//fades
		//$(elem).parent().children().fadeOut('fast').delay(800);
		//$(elem).fadeIn('slow');
		//alt
		$(elem).parent().children().fadeOut('fast').hide()
		$(elem).show()
		for (x in qLists)
		{
			if(qLists[x] != '#'+$(this).parent().attr('id'))
			{
				$( qLists[x] ).children().removeClass('selected');
			}
		}
		$(this).parent().children().removeClass('selected');
		$(this).addClass('selected');           
	}

	function handleHover()
	{
		$(this).parent().children().removeClass('highlight');
		$(this).addClass('highlight');
	}

	function handleMouseOut()
	{
		$(this).children().removeClass('highlight');
	}

});
