/////////////////////////////////////////// BASIC FUNCTIONS, DON'T EDIT ///////////////////////////////////////////

/**
 * Starts executing the initializing functions when either the DOM structure of the page has been loaded ('domready'), or the entire page ('load').
 * 
 * @author CSD (clientsidedevelopers[AT]efocus.nl)
 * @uses Mootools 1.2.4 JavaScript Library
 */
window.addEvents({
	'domready': function() {		
		initMainNavSubtitle();		
		removeMarginLastItemJury();
		removeMarginLastItempartners();				

		initJuryAccordion();
		initScrollTo();
		initFlickrThumbs();
		initFlickrPrevNext();
		alignVideoGallery();
		initForm();
		startPushboxHome();
		submitForm();
		
		initDatePicker();
		
		if (document.getElements('div.mainhome div.col_right_wrapper div.cta_home').length > 0) {
			makeEqualHeight(document.getElements('div.mainhome div.col_right_wrapper div.cta_home'), 3);
		}
	},
	'load': function() {
		initExternalLinks("external");
		initTabSwapper();
	}
});

/**
 * initializes datepicker
 *
 * @author Mirjam <mirjam[AT]efocus.nl>
 * @since jan 2011
 * @return void
 */
 
function initDatePicker() {
	
	if (document.getElement('input.date')) {
		
		var objToday = new Date();
		var strToday = objToday.getFullYear().toString() + '-' + (objToday.getMonth() + 1).toString() + '-' +  objToday.getDate().toString();
		
		var objTomorrow = new Date();
		var strTomorrow = objTomorrow.getFullYear().toString() + '-' + (objTomorrow.getMonth() + 1).toString() + '-' +  (objTomorrow.getDate() + 1).toString();
		
		new efDatePicker('input.date', {
			pickerClass			: 'datepicker_vista',
			inputOutputFormat	: 'd-m-Y',
			allowEmpty			: true,
			positionOffset		: { x: -30, y: 0 },
			days				: ['zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag'],
			months				: ['januari', 'februari', 'maart', 'april', 'mei', 'juni', 'juli', 'augustus', 'september', 'oktober', 'november', 'december']
		});
		
	};
}


/**
 * aligns video gallery
 * 
 * @author Lowen Fan <lowen@efocus.nl>
 * since 23 april 2010
 */
function alignVideoGallery(){
	var arrVideos = $$('ul.bestof2010 li');
	
	if (arrVideos.length == 0) return false;
	
	arrVideos.each(function(elVideo, index) {
		var i = index + 1;
		if (i % 4 == 1) {
			elVideo.addClass('nomargin');
		}
	});	
}


/**
 * initScrollTo
 * initialize scroll function
 * 
 * @author phison.do <phison.do@efocus.nl>
 * @author Ralph Meeuws <ralph.meeuws[AT]efocus.nl>
 * @since 14 april 2011
 */
function initScrollTo() {
	var elScrollDiv = $('scroll');
	if (!elScrollDiv) return false;
	
	var intOffset = 110;
	var objScroll = new Fx.Scroll(window,{
	  offset: {
	        'x': 0,
	        'y': -intOffset
	    }
	});
	
	arrScrollBtns = elScrollDiv.getElements('ul.categories li');	
	arrScrollBtns.each(function(elScrollBtn){
			scrollToElement(elScrollBtn.get("id"), intOffset, objScroll);
	});
	objScroll.set(intOffset);
}

/**
 * scrollToElement
 * fixes scroll function with offset and add active class
 * 
 * @author phison.do <phison.do@efocus.nl>
 * @author Ralph Meeuws <ralph.meeuws[AT]efocus.nl>
 * @since 14 april 2011
 */
function scrollToElement(strElIdName, intOffset, objScroll) {
	var arrNum = strElIdName.split('a');
	var strElPName = "p" + arrNum[1];
	
	$(strElIdName).addEvent('click', function(event) {
		var totalItems = this.getParent().getChildren().length;		
		for(var i=1; i<=totalItems; i++){
			$("a"+[i]).removeClass("active");
		}		
		this.addClass('active');
		event = new Event(event).stop();
		if ($(strElPName).getPosition().y != window.getScroll().y + (2 * intOffset)) objScroll.toElement(strElPName);
	});
}


/**
 * initExternalLinks
 * Opens external links valid in a new window without the target attribute.
 * 
 * @author phison.do <phison.do@efocus.nl>
 * @uses <a href="http://www.efocus.nl/" class="external">eFocus</a>
 */
function initExternalLinks(strName) {
	var arrExternalLinks = $$('a.'+strName);
	if (arrExternalLinks.length == 0) return false;
	var newWindowEvent;

	arrExternalLinks.each(function(elExternalLink) {

		elExternalLink.addEvent('click', function(event) {
			event.stop();
			window.open(this.get('href'));
		});
		
	});
}


/**
* initMainNavSubtitle
*
* add/remove class
*
* @author phison <phison.do{AT}efocus.nl>
* since 14 april 2010
* @return void
*/
function initMainNavSubtitle(){
	var mainNavSubstitle = document.getElement('ul.subtitle');
	if(!mainNavSubstitle) return false;
	
	var SubtitleItems = mainNavSubstitle.getElements('li');
	var SubtitleItemActive = mainNavSubstitle.getElements('li.active'); 	
		
	mainNavSubstitle.addEvent('mouseenter', function(){		
		SubtitleItems.removeClass('active');			
	});
	mainNavSubstitle.addEvent('mouseleave', function(){
		SubtitleItemActive.addClass('active');			
	});
}


/**
 * removes marginRight of last child
 * 
 * @author Phi Son Do <phison.do@efocus.nl>
 * @return void
 * since 14 april 2010
 */
function removeMarginLastItemJury() {
	var juryLeden = document.getElement('div.juryledencontainer');
	if(!juryLeden) return false;
	
	var arrJuryleden = juryLeden.getElements('ul');
	var arrJuryledenItems = arrJuryleden.getElements('li:last-child');
	
	arrJuryledenItems.each(function(elJuryledenItem){
		elJuryledenItem.setStyle('margin-right', 0);
	});
}


/**
 * removes marginRight of every fourth element
 * 
 * @author Phi Son Do <phison.do@efocus.nl>
 * since 14 april 2010
 * @return void
 */
function removeMarginLastItempartners() {
	var partnersSmall = document.getElement('div.partners-small');
	if(!partnersSmall) return false;
	
	var arrpartnersSmall = partnersSmall.getElements('ul');
	var arrpartnersSmallItems = arrpartnersSmall.getElements('li:nth-child(3n+3)');
	
	arrpartnersSmallItems.each(function(elpartnersSmallItem){
		elpartnersSmallItem.setStyle('margin-right', 0);
	});
}


/**
 * removes marginRight of every fourth element
 * 
 * @author Phi Son Do <phison.do@efocus.nl>
 * since 14 april 2010
 * @return void
 */
function removeMarginLastItemFlickr() {
	var elFlickr = $('carrousel_viewport');
	if(!elFlickr) return false;
	
	var arrFirstElement = $('photo-container');
	var arrFirstElementimages = arrFirstElement.getElements('a');

	arrFirstElementimages.each(function(elFirstElementimage, i){
		var intNum = i+1;
		if(intNum%4==0){
			elFirstElementimage.addClass('nomargin');
		}
	});
}



/**
 * starts carrousel functionality
 *
 * @author Rocco Janse <rocco{at}efocus.nl>
 * @since 1.0, 27 sept, 2009
 * @return void
 */

function startCarrouselGallery() {	
	var cselcontainer = $('carrousel_viewport');
	if (!cselcontainer) return;
	
	var slidescontainer = cselcontainer.getElement('div.carrousel_slides');
	if (!slidescontainer) return;

	var link_next = $('next');
	var link_prev = $('prev');	
	if (!link_next || !link_prev) return;

	var csel = new Carrousel({
		'viewport': cselcontainer,
		'slidesContainer': slidescontainer,
		'linkNext': link_next,
		'linkPrevious': link_prev,
		'slidesToShift': 1,
		'slidesToShow': 1
	});
}



/**
 * starts pushboxs homepage
 *
 * @author Mirjam <mirjam{at}efocus.nl>
 * @since 1.0, jan 2011
 * @return void
 */

function startPushboxHome() {
	
	if (!document.getElement('div.pushbox_home')) { return false; }
	
	var elPushbox = document.getElement('div.pushbox_home');
	
	// pb with nav
	var pb = new Pushbox(elPushbox, {
		viewport: elPushbox.getElement('div.viewport'),
		slides: elPushbox.getElements('ul.pb_slides li'),
		navigation: elPushbox.getElements('ul.pb_navigation li'),
		progressBar: elPushbox.getElement('div.progressbar'),
		showProgress: false,
		interval: 3
	});

}	

/**
 * initialize Tabs overzicht nominees
 * 
 * @author Phi Son Do <phison.do@efocus.nl>
 * @return void
 */
function initTabSwapper() {
	var elTabSwapper = $('nominee');
	if(!elTabSwapper) return false;	
	
	new TabSwapper({
		selectedClass: 'active',
		deselectedClass: 'off',
		tabs: $$('ul.buttons li'),
		clickers: $$('ul.buttons li a'),
		sections: $$('div.pages div.page'),
		smooth: true,
		smoothSize: false
	});
}


/**
* initJuryAccordion
* puts jury infor in an accordion and enables toggling
*
* @author Klaas Dieleman <klaas[AT]efocus.nl>
* @author phison do <phison.do{AT}efocus.nl>
* @return void
*/
function initJuryAccordion() {
	
	var arrJuryListItems = $$('ul.jury li');
	if (arrJuryListItems.length > 1) {
		var faqAccordion = new Accordion(arrJuryListItems.getElements('a.jurylid'), arrJuryListItems.getElements('div.panel'), {
			onActive: function(toggler) {
				getPositionJury(toggler.getParent());
				toggler.getParent().addClass('open');
			},
			onBackground: function(toggler) {
				toggler.getParent().removeClass('open');
			},
			alwaysHide: true,
			show: -1,
			opacity: false
		});
	}			
}

function getPositionJury(el){
	var elBaseJury = $$('ul.jury li')[0];
	var intXPosDifference = el.getPosition().x- elBaseJury.getPosition().x;
	el.getElements('div.panel').setStyle('margin-left',"-" + intXPosDifference + "px");
	el.getElements('div.panel').setStyle('width', "595px");	
}

/**
 * CSS cropping of the thumbnails
 *
 * @author Richard van Yperen <richardvy{at}efocus.nl>
 * @since 1.0, 2 may, 2010
 * @return void
 */
function initFlickrThumbs() {
	if(!$('flickrScroll')) return false;
	
	$$('img.visual').each(function(thumb) {
		
		var height = 'top';
		
		/*var image = thumb.getDimensions();
		
		if (image.width < image.height) {
			var height = '-45px';
		} else {
			var height = 'center';
		}*/
		
		var myEl = new Element('span', {
			'class': 'visual',
			'styles': {				
				'background': 'url('+thumb.src+') center '+height
			}
		});
		
		myEl.replaces(thumb);		

	});
}


/**
 * Initialize next/prev links for the Flickr gallery
 * When the next button is clicked, the page after the next page
 * is preloaded with the function "preloadFlickrPage"
 *
 * @author Gijs Oliemans <gijs.oliemans{at}efocus.nl>
 * @since 1.0, 28 apr, 2010
 * @return void
 */
function initFlickrPrevNext(){
	if(!$('flickrScroll')) return false;

	if(currentFlickrPage <=1 ){
		$('prev').addClass('inactive');	
	}
	if(totalFlickrPages <=1){
		$('next').addClass('inactive');	
	}
	initExternalLinks('external2');
	
	var pageWidth = $('fpage_1').getSize();
	var pageWrapWidth = totalFlickrPages * pageWidth.x;
	$('flickrPageWrap').setStyle('width', pageWrapWidth + 'px');

	
	$('next').addEvent('click', function(event) {
		event.stop();
		if(currentFlickrPage < 1) return false;
		if(currentFlickrPage == totalFlickrPages){
			$('next').addClass('inactive');	
			return false;
		}
		
		var nextPage = currentFlickrPage + 1;

		var elScrollTo = 'fpage_' + nextPage;		
		var scrolling = new Fx.Scroll($('flickrScroll'), {
			duration: 800, 
			tween: Fx.Transitions.Linear
			});		
		scrolling.toElement(elScrollTo);
		
		if(loadedFlickrPages <= nextPage && nextPage < totalFlickrPages){
			preloadFlickrPage(nextPage + 1); // preload next page
		}
		currentFlickrPage = nextPage;
		if(currentFlickrPage == totalFlickrPages){
			$('next').addClass('inactive');	
		}
		$('prev').removeClass('inactive');
	});
	
	
	$('prev').addEvent('click', function(event) {
		event.stop();
		if(currentFlickrPage <= 1) return false;
		
		var prevPage = currentFlickrPage - 1;	
		
		var elScrollTo = 'fpage_' + prevPage;	
		var scrolling = new Fx.Scroll($('flickrScroll'), {
			duration: 800, 
			tween: Fx.Transitions.Linear
			});		
		scrolling.toElement(elScrollTo);
		
		currentFlickrPage = prevPage;
		if(currentFlickrPage == 1){
			$('prev').addClass('inactive');
		}
		$('next').removeClass('inactive');
	});
	
}



/**
 * Preload a page (set) of Flickr thumbnails by making an AJAX-call
 *
 * @author Gijs Oliemans <gijs.oliemans{at}efocus.nl>
 * @since 1.0, 27 apr, 2010
 * @return void
 */

function preloadFlickrPage(pageNr){
	
	pageNr = parseInt(pageNr);
	if(pageNr < 1) return false;
	if(pageNr <= loadedFlickrPages) return false;
	
	var curId = 'fpage_' + pageNr;
	var pageDiv  = new Element('div', {'id': curId, 'class': 'thumbPage'});
	
	
	var req = new Request({
		method: 'get',
		url: '/best-of-2010/?ajax=1&thumbPage=' + pageNr + '&type=103',
		data: { 'do' : '1' },
		onRequest: function() {
			$('next').addClass('inactive');
		},
		onComplete: function(response) { 
			pageDiv.set('html', response); 
			pageDiv.inject($('flickrPageWrap'), 'bottom');
			$('next').removeClass('inactive');

			var extLinks = $('fpage_' + pageNr).getElements('a');
			extLinks.each(function(elExternalLink) {
				elExternalLink.addEvent('click', function(event) {
					event.stop();
					window.open(this.get('href'));
				});	
			});
			
			// thumbnails goedzetten
			initFlickrThumbs();			
			
			loadedFlickrPages++;
		}
	}).send();

}

/**
 * Copies form data from hoofdaannemerschap to current fieldset
 *
 * @author Richard van Yperen <richardvy{at}efocus.nl>
 * @since 1.0, 20 jan, 2011
 * @return void
 */

function initForm() {
	
	var elForm = document.getElement('div.subscribe form');
	if (!elForm) { return false }
	
	var elDefaultBox = elForm.getElement('fieldset.bureauhoofdaannemerschap');
	if (!elDefaultBox) { return false }
	
	var arrFieldsDefault = elDefaultBox.getElements('input[type!=hidden]');
	var arrCopyCheckBoxes = elForm.getElements('input[type=checkbox]');
	
	$('url_website').addEvent('change', function() {
		if (this.value.substr(0, 7) != 'http://' && this.value.substr(0, 8) != 'https://') {
			this.value = 'http://'+this.value;
		}
	});	
	
	arrFieldsDefault.each(function(elThisField) {
		
		elThisField.addEvent('change', function(el) {	 
			
			arrCopyCheckBoxes.each(function(elCopyCheckbox) {
				
				if (elCopyCheckbox.checked == true) {
				
					var arrThisFields = elCopyCheckbox.getParent('fieldset').getElements('input[type!=hidden]');
					arrThisFields.each(function(elField, index) {
						
						if (elField.get('type') != 'checkbox') {
							
							if (arrFieldsDefault[index - 1]) {
								elField.value = arrFieldsDefault[index - 1].value;
								
								if (arrFieldsDefault[index - 1].get('type') == 'radio') {
									if (arrFieldsDefault[index - 1].checked == true) {
										elField.checked = true;
									}
								}
								
							}
							
						}
						
					});
					
				}
					
			});
			
		});
		
	});
	
	
	
	
	arrCopyCheckBoxes.each(function(elCopyCheckbox) {
		
		var arrThisFields = elCopyCheckbox.getParent('fieldset').getElements('input[type!=hidden]');
		if (elCopyCheckbox.checked) {
			arrThisFields.each(function(elField, index) {
				if (elField.get('type') != 'checkbox') {
					elField.setProperty('readonly', 'readonly');
					elField.addClass('readonly');
				}
			});
		}
		
		elCopyCheckbox.addEvent('click', function(el) {	 
			
			if (this.checked) {
				
				arrThisFields.each(function(elField, index) {
					
					if (elField.get('type') != 'checkbox') {
						
						elField.setProperty('readonly', 'readonly');
						elField.addClass('readonly');
						
						if (arrFieldsDefault[index - 1]) {
							elField.value = arrFieldsDefault[index - 1].value;
							
							if (arrFieldsDefault[index - 1].get('type') == 'radio') {
								if (arrFieldsDefault[index - 1].checked == true) {
									elField.checked = true;
								}
							}
							
						}
						
					}						
				});
			
					
			} else {
				
				arrThisFields.each(function(elField, index) {
					
					elField.setProperty('disabled', false);
					elField.removeClass('readonly');
					
				});
					
			}
		});
	});
	
}

/**
* equals the height of the elements in an array
*
* @author Mirjam
* @since 1.0, dec 2010
* @param array - elements to equalize
* @param integer - optional amount of columns per row
*/

function makeEqualHeight(arrElements, intColumns) {
	
	var intMaxheight = 0;
	var arrCurrentRow = new Array();
	
	arrElements.each(function(item, index) {
		
		item.setStyle('height', 'auto');
		var intHeight = item.getSize().y;
		
		if (intHeight > intMaxheight) {
			intMaxheight = intHeight;
		}
		arrCurrentRow.push(item);
		
		
		if((index+1)%intColumns == 0) {
			arrCurrentRow.each(function(el) {
				el.setStyle('height', intMaxheight);
				el.setStyle('line-height', intMaxheight-40);
			});
			intMaxheight = 0;
			arrCurrentRow = [];
		}
		
		if((index+1)%intColumns == 1) {
			item.addClass('first');
		}
		
	});
	
	arrCurrentRow.each(function(el) {
		el.setStyle('height', intMaxheight);
	});
	
}

/**
* removes image holder for image uploader en adds upload field
*
* @author Richard van Yperen <richardvy[at]efocus.nl
* @since 1.0, jan 2011
* @param string - id of form field
*/

function deleteImgage(id) {
	$('uploaded_'+id).dispose();
	$(id).removeClass('hidden');
	$(id).disabled = false;
}

/**
* submits form for redirection to next step
*
* @author Richard van Yperen <richardvy[at]efocus.nl
* @since 1.0, jan 2011
* @param int - id of step
*/

function submitForm() {
	if ($('form_tabs_box')) {
		$('form_tabs_box').getElements('a.submit_form').each(function(el) {
			el.addEvent('click', function() {
				var elId = el.id.replace(/tab/, '');	
				$('nextstep').value = elId;
				$('form_1').submit();
			});
		});
	}
	
	
}
