// global scripts for RockPort Dev site */

// global init
window.addEvent('domready', function() {
	setSearchField();
	setExtLinks();
	setTagSort(); // portfolio tag fade in/out
	setTeamBoxes(); // make boxes clickable
	setPressFilterDatePickers() // calendars for press filter
});

// function to set/remove contents of search field
function setSearchField(){
	if (!$('searchField')) return;
	var sf = $('searchField');
	sf.setProperty('value', 'Search');
	sf.addEvent('focus', function(){
		if (sf.getProperty('value') == "Search") {
			sf.setProperty('value', '');
		}
	});
}

// function to open external links in new window
function openInNewWin() {
	// suggest all new windows have unique names
	var winName = 'window_'+ Math.round(100000 * Math.random());
	var newWindow = window.open(this.get('href'), winName);
	newWindow.focus();
	return false;
}

// function to set external links opening behavior
function setExtLinks(){
	var anchors = $$("a");
	$each(anchors, function(el) {
		if (el.get("href") && el.get("rel") == "ext"){
			el.onclick = openInNewWin;
		}
	});
}

// set calendar popups for press filters
function setPressFilterDatePickers(){
	if ($('pressFilter')){
		$$('input.DatePicker').each( function(el){
			new DatePicker(el);
		});
	}
}

// setup accordian for portfolio page
function setPortfolioAccordian(dIndex){
	if (!$('page').hasClass('portfolio')) return;

	if ($('portfolio-intro')){
		var portIntro = $('portfolio-intro');
		var portCoords = portIntro.getCoordinates();
		var hDim = portCoords['height'];
	}
		
	// for portfolio page
	var portfolioAccordion = new Accordion($('portfolio-categories'), 'h3.toggler', 'div.element', {
		display: dIndex,
		//start: 'all-closed',
		opacity: false,
		alwaysHide: true,
		duration: 500,
		onActive: function(toggler, element){
			toggler.addClass('open');
		},
		onBackground: function(toggler, element){
			toggler.removeClass('open');
		},
		onComplete: function(){
			var introDisplay = 'open';
			var frameIndex = -1;
    	this.togglers.each(function(el, i){
    		if (el.hasClass('open')){
    			introDisplay = 'close';
    			frameIndex = i;
    		}
    	});
    	setNavStates(frameIndex);
    	showHide(portIntro, introDisplay, hDim);
    }
 	});
	
	// setup showAll & hideAll links
	$$('p.toggleLink').addEvent('click', function(){
		if ($('toggleBtn').get('html') == "See"){
			portfolioAccordion.showAll();
			$('toggleBtn').set('html', 'Hide');
		} else {
			portfolioAccordion.hideAll();
			$('toggleBtn').set('html', 'See');
		}
	  return false;
	});
	
	// setup leftnav link actions
	if ($('portfolio-categories')){
		var navLinks = $$('ul.navList li a.sector','div.portfolio-overview a');
		$each(navLinks, function(el) {
			var ndex = el.get('rel').substring(1);
			el.addEvent('click', function(){
				portfolioAccordion.display(ndex);
				return false;
			});
		});
	}
	
	// setup sector 'Did you know' boxes
	var sectorImgs = $$('div.sectorDYK img');
	var sectorDKYs = $$('div.sectorDYK p');
	$each(sectorImgs, function(el, i){
		var txt = sectorDKYs[i];
		el.addEvent('click', function(){
			el.setStyle('display', 'none');
			txt.setStyle('display', 'block');
		});
	});
	$each(sectorDKYs, function(el, i){
		var img = sectorImgs[i];
		el.addEvent('click', function(){
			el.setStyle('display', 'none');
			img.setStyle('display', 'block');
		});
	});
}

// reset on/off states for portfolio sectors in leftnav
function setNavStates(ndex, state){
	var navItems = $$('ul.navList li');
	$each(navItems, function(el) {
		el.removeClass('on');
	});
	if (ndex != -1){
		navItems[ndex].addClass('on');
	}
}

// setup accordian for home page (including slideshows)
function setHomeAccordian(sectorArr){
	if (!$('page').hasClass('home')) return;
	/* this is no longer hardcoded
	// setup slideshow array of id's
	var sectorArr = new Array(
		38,	// Featured Companies
		4,	// Energy & Power
		5,	// Advanced Materials,
		6,	// Resource Efficiency
		7,	// Transportation
		36	// Green Building
	);
	*/
	var scrollerArray = new Array();
	// for each sector, create scrolling slideshow
	$each(sectorArr, function(sector,i) {
		if (!$('s'+sector)) return;
			opts = {
		    slides: 'qslides'+sector,
		  	duration: 2000,
		  	delay: 4000,
		  	flow: 'right2left',
		  	auto: true,
		    buttons: {next:'s'+sector+'_next',prev:'s'+sector+'_prev'},
		    transition: Fx.Transitions.Quint.easeOut
		  };
		scrollerArray[i] = new QScroller('qscroller'+sector,this.opts);
  	scrollerArray[i].load();
		
	});
	
	// create homepage accordian
	var homeAccordion = new Accordion($('home-portfolio'), 'h4.toggler', 'div.element', {
		display: 0,
		//start: 'all-closed',
		opacity: false,
		alwaysHide: false,
		duration: 500,
		onActive: function(toggler, element){
			toggler.addClass('open');
			if (element.getElement('div.scrollBtns')){
				element.getElement('div.scrollBtns').setStyle('display', 'block');
			}
			if (element.getElement('div.qscrollerFrame')){
				element.getElement('div.qscrollerFrame').setStyle('visibility', 'visible');
			}
			//scrollerArray[this.previous].play();
		},
		onBackground: function(toggler, element){
			toggler.removeClass('open');
			if (element.getElement('div.scrollBtns')){
				element.getElement('div.scrollBtns').setStyle('display', 'none');
			}
			if (element.getElement('div.qscrollerFrame')){
				element.getElement('div.qscrollerFrame').setStyle('visibility', 'hidden');
			}
			//scrollerArray[this.previous].stop();
		},
		onComplete: function(){
			/*
			$each(sectorArr, function(sector) {
				$('qscroller'+sector).setStyle('display', 'none');
			});
			qscroll = 'qscroller'+sectorArr[this.previous];
			//alert(qscroll);
			$(qscroll).setStyle('visibility', 'visible');
			*/
		}
	});
	//alert('open: '+homeAccordion.togglers.length);
	//alert(scrollerArray.length);
	
}

// extend accordian to add ShowAll & HideAll functions
Accordion.implement({
  showAll: function() {
    var obj = {};
    this.previous = -1;
    this.elements.each(function(el, i){
        obj[i] = {};
        this.fireEvent('onActive', [this.togglers[i], el]);
        for (var fx in this.effects) obj[i][fx] = el[this.effects[fx]];
    }, this);
    return this.start(obj);
  },
  hideAll: function() {
    var obj = {};
    this.previous = -1;
    this.elements.each(function(el, i){
        obj[i] = {};
        this.fireEvent('onBackground', [this.togglers[i], el]);
        for (var fx in this.effects) obj[i][fx] = 0;
    }, this);
    return this.start(obj);
  }
});


// sort client companies by tag
function setTagSort(){
	if (!$('page').hasClass('portfolio')) return;
	// prep tag links
	var tagLinks = $$('a.tagSort');
	var resets = $$('a.reSort');
	$each(tagLinks, function(el) {
		el.addEvent('click', function(){
			var linkTag = this.get('rel');
			var parentEl = el.parentNode.parentNode.parentNode;
			var listID = parentEl.getElement('table.thumbList').get('id');
			//var listID = el.parentNode.getNext('ul.thumbList').get('id');
			$each(tagLinks, function(els){
				els.removeClass('on');
			});
			$each(resets, function(rs){
				rs.removeClass('on');
			});
			this.addClass('on');
			showTags(linkTag, listID);
			return false;
		});
	}); // end taglinks loop
	// prep reset link
	$each(resets, function(el) {
		el.addEvent('click', function(){
			var parentEl = el.parentNode.parentNode.parentNode;
			var listID = parentEl.getElement('table.thumbList').get('id');
			//var listID = el.parentNode.getNext('ul.thumbList').get('id');
			$each(tagLinks, function(els){
				els.removeClass('on');
			});
			this.addClass('on');
			resetThumbs(listID);
			return false;
		});
	}); // end resets loop
}

// show/hide tag related links in specified list
function showTags(tag, listID){
	//var tLinks = $$('ul#'+listID+'.thumbList a');
	var tLinks = $$('table#'+listID+'.thumbList a');
	//alert(tLinks.length);
	$each(tLinks, function(el, i){
		var tags = el.get('rel');
		if (tags && tags != "") {
			if (tags.indexOf(tag) != -1){
				//el.removeClass('screenIn');
				screen(el, 'in');
			} else {
				//el.addClass('screenOut');	
				screen(el, 'out');
			}
		}
		//alert(i);
	});
}

// reset all links back to 'in' state
function resetThumbs(listID){
	var tLinks = $$('table#'+listID+'.thumbList a');
	$each(tLinks, function(el){
		screen(el, 'in');
	});
}

// screen in/out links
function screen(el, dir){
	var myEffect = new Fx.Morph(el, {duration: 1000, transition: Fx.Transitions.Sine.easeOut});
	if (dir == "out"){
		myEffect.start('.screenOut');
	} else {
		myEffect.start('.screenIn');
	}
}
    	
// open/close element
function showHide(el, dir, hDim){
	// banish IE6
	if (Browser.Engine.trident4) return;
	var myEffect = new Fx.Morph(el, {duration: 1000, transition: Fx.Transitions.Sine.easeOut});
	if (dir == "close"){
		myEffect.start({
			'height': 0,
			'opacity': 0
		});
	} else {
		myEffect.start({
			'height': hDim,
			'opacity': 1
		});
	}
}

// function setup team box links
function setTeamBoxes(){
	if (!$('page').hasClass('team')) return;
	//var teamBoxes = $$('div.teamExec','div.teamBox');
	var teamBoxes = $$('div.teamExec');
	$each(teamBoxes, function(box){
		box.addEvent('mouseover', function(){
			box.toggleClass('teamOver');
		});
		box.addEvent('mouseout', function(){
			box.toggleClass('teamOver');
		});
		// add div link for exec team
		if (box.hasClass('teamExec')){
			var teamLink = box.getElement('p a');
			var teamURL = teamLink.get('href');
			box.addEvent('click', function(){
				location.href = teamURL;
			});
		}
	});
}

// form validation for press filter
function checkPressFilter(theForm){
	if (!$('startDate') || !$('endDate')) return false;
	var errCount = 0;
	var errMsg = "";
	var errField = "";
	// convert start date to UTC
	var startVal = $('startDate').value;
	var startArr = startVal.split('/');
	var startDate = Date.UTC(startArr['2'],startArr['0']-1,startArr['1']);
	// convert end date to UTC
	var endVal = $('endDate').value;
	var endArr = endVal.split('/');
	var endDate = Date.UTC(endArr['2'],endArr['0']-1,endArr['1']);
	// compare dates
	if (startDate > endDate){
		errCount++;
		errMsg += "Please choose an end date past the start date.";
		errField = $('endDate');
	}
	
	// check for errors
	if (errCount == 0){
		return true;
	} else {
		errField.setStyle('border','1px solid #f00');
		alert(errMsg);
		return false;
	}
}

