/*
	BULLSEYE ANIMATION CREATION LIBRARY
	Combining animator.js and various regularly used functions
*/

/*==========================================================//
	Background Image Cache
//==========================================================*/
try 
{
  document.execCommand("BackgroundImageCache", false, true);
} catch(err) {}

/*==========================================================//
	Listener for the page to fully load
//==========================================================*/
function addLoadListener(fn)
{
	if(typeof window.addEventListener != 'undefined')
	{
		window.addEventListener('load',fn,false);
	}
	else if (typeof document.addEventListener != 'undefined')
	{
		document.addEventListener('load', fn, false);
	}
	else if (typeof window.attachEvent != 'undefined')
	{
		window.attachEvent('onload', fn);
	}
	else
	{
		var oldfn = window.onload;
		if(typeof window.onload != 'function')
		{
			window.onload = fn;
		}
		else
		{
			window.onload = function()
			{
				oldfn();
				fn();
			}
		}
	}
}

/*==========================================================//
	Add listeners on objects (multi-browser) 
//==========================================================*/
function attachEventListener(target, eventType, functionRef, capture){
	if(typeof target.addEventListener != "undefined"){ 
		target.addEventListener(eventType, functionRef, capture);
	}else if (typeof target.attachEvent != "undefined"){
		target.attachEvent("on" + eventType, functionRef);
	}else{
		eventType = "on" + eventType;
		if(typeof target [eventType] == "function"){
			var oldListener = target[eventType];
			target[eventType] = function(){
				oldListener();
				return functionRef;
			}
		}
		else {
			target[eventType] = functionRef;
		}
		
	}
	return true;
}

/*==========================================================//
	Get elements by class name (multi-browser)
//==========================================================*/
function getElementsByClassName(oElm, strTagName, oClassNames){
	var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
	var arrReturnElements = new Array();
	var arrRegExpClassNames = new Array();
	if(typeof oClassNames == "object"){
		for(var i=0; i<oClassNames.length; i++){
			arrRegExpClassNames.push(new RegExp("(^|\s)" + oClassNames[i].replace(/-/g, "\-") + "(\s|$)"));
		}
	}
	else{
		arrRegExpClassNames.push(new RegExp("(^|\s)" + oClassNames.replace(/-/g, "\-") + "(\s|$)"));
	}
	var oElement;
	var bMatchesAll;
	for(var j=0; j<arrElements.length; j++){
		oElement = arrElements[j];
		bMatchesAll = true;
		for(var k=0; k<arrRegExpClassNames.length; k++){
			if(!arrRegExpClassNames[k].test(oElement.className)){
				bMatchesAll = false;
				break;
			}
		}
		if(bMatchesAll){
			arrReturnElements.push(oElement);
		}
	}
	return (arrReturnElements)
}

/*==========================================================//
	Get Integer value of a variable with "px"
//==========================================================*/
function getIntVal(daVar){
	daVar = daVar.substr(0, daVar.length -2);
	if(daVar.length <1){
		return 0;	
	}else{
		return parseInt(daVar);
	}
}

/*==========================================================//
	Create bar graph
//==========================================================*/
function hGraphIni(){
	_hGraphs = [];
	_hBars = [];
	_hBarAnim = [];
	
	_hGraphs = getElementsByClassName(document,'div','barGraphH');
		
	for(q=0; q<_hGraphs.length; q++){
		_hBarAnim[q] = new Animator({duration: 350});
		_hBars = getElementsByClassName(_hGraphs[q],'div','barCont');
		attachEventListener(_hGraphs[q],"click", drawGraph, false);	
		
		for(r=0; r<_hBars.length; r++){
			objRel = _hBars[r].getAttribute('rel');			
			_hBarAnim[q].addSubject(new NumericalStyleSubject(_hBars[r], 'width', 20, objRel));
			attachEventListener(_hBars[r],"click", drawGraph, false);
		}
			
	}
}

function drawGraph(e){
	srcEl = Event.element(e);
	
	for(p=0; p<_hGraphs.length; p++){
		if(_hGraphs[p]==srcEl||_hGraphs[p]==srcEl.parentNode||_hGraphs[p]==srcEl.parentNode.parentNode){
			if(_hBarAnim[p].target==0&&_hBarAnim[p].state!=1){
				//Checking state avoids simultaneous function calls from the bar and container. That would cancel out any movement.
				_hBarAnim[p].seekTo(1);
			}else if(_hBarAnim[p].target==1&&_hBarAnim[p].state!=0){
				//Seek back to original state may want to be disabled
				_hBarAnim[p].seekTo(0);
			}
		}
	}		
}

/*==========================================================//
	Create all rollover animations for images 
//==========================================================*/
var _fadingImages = [];
var _fadingAnimation = [];

function setRolloverAnimations(){
	_fadingImages = getElementsByClassName(document,'img','fadeLink');
	
	for(i=0; i<_fadingImages.length; i++){
		objRel = _fadingImages[i].getAttribute('rel');
		if(objRel=="fadeBack"){
			_fadingAnimation[i] = [];
			
			_fadingAnimation[i][2] = new Animator({duration: 1000, onComplete: function(){nextChain(this.idNum, 3);}});
			_fadingAnimation[i][2].addSubject(new NumericalStyleSubject(_fadingImages[i], 'opacity', 0, 1));
			
			_fadingAnimation[i][1] = new Animator({duration: 1000, onComplete: function(){nextChain(this.idNum, 2);}});
			_fadingAnimation[i][1].addSubject(new NumericalStyleSubject(_fadingImages[i], 'opacity', 0, 0));
			
			_fadingAnimation[i][0] = new Animator({duration: 1000, onComplete: function(){nextChain(this.idNum, 1);}});
			_fadingAnimation[i][0].addSubject(new NumericalStyleSubject(_fadingImages[i], 'opacity', 1, 0));
			
			_fadingAnimation[i][0].idNum= i;
			_fadingAnimation[i][1].idNum= i;
			_fadingAnimation[i][2].idNum= i;
					
			attachEventListener(_fadingImages[i], "mouseover", fadeAnimPlay, false);
		}else{
			_fadingAnimation[i] = new Animator({duration: 350});
			_fadingAnimation[i].addSubject(new NumericalStyleSubject(_fadingImages[i], 'opacity', 1, 0));
			attachEventListener(_fadingImages[i], "mouseover", fadeAnimOn, false); 
			attachEventListener(_fadingImages[i], "mouseout", fadeAnimOff, false);	
		}
		
		
		
	}
}

function fadeAnimOn(e){
	srcEl = Event.element(e);
	
	for(p=0; p<_fadingImages.length; p++){
        if(_fadingImages[p]==srcEl){
			_fadingAnimation[p].seekTo(1);
		}
	}
}

function fadeAnimOff(e){
	srcEl = Event.element(e);
	
	for(p=0; p<_fadingImages.length; p++){
        if(_fadingImages[p]==srcEl){
			_fadingAnimation[p].seekTo(0);
		}
	}
}


function fadeAnimPlay(e){
	srcEl = Event.element(e);
	
	for(p=0; p<_fadingImages.length; p++){
        if(_fadingImages[p]==srcEl){
			_fadingAnimation[p][0].seekTo(1);
		}
	}
}

function nextChain(imgNum, chainPos){
	if(chainPos==3){
		_fadingAnimation[imgNum][2].jumpTo(0);
		_fadingAnimation[imgNum][1].jumpTo(0);
		_fadingAnimation[imgNum][0].jumpTo(0);
	}else{
		_fadingAnimation[imgNum][chainPos].seekTo(1);
	}
}

/*==========================================================//
	Create Accordion Menu/ Content System 
//==========================================================*/
var _accordionTitle;
function accordionIni(bypasEventAssignment){
    _accordion = new Array();
    if(getElementsByClassName(document,'div','accordionTitleBar')[0]!=null){
        _accordionTitle=getElementsByClassName(document,'div','accordionTitleBar');
        _accordionContentCont=getElementsByClassName(document,'div','accordionContentCont');
        _accordionContent=getElementsByClassName(document,'div','accordionContent');
        for(var i=0; i<_accordionTitle.length ;i++){
            _accordionContentHeight=_accordionContent[i].offsetHeight;
            
            _accordion[i]='_accordion'+i;
            _accordion[i]=new Animator({duration: 400});
            _accordion[i].addSubject(new NumericalStyleSubject(_accordionContentCont[i], 'height', 0, _accordionContentHeight));
			if(_accordionTitle[i].parentNode.className == "accordion_on"){
				_accordion[i].jumpTo(1);
				
			}
			if (bypasEventAssignment == false)
            {
                attachEventListener(_accordionTitle[i],"mousedown", expand, false);
            }
            
            if(_accordionContent[i].id == 'acContTop')
			{
			    
			    var isOn = ((_accordionTitle[i]).parentNode.className == "accordion_on");
			    
			    $('divCompletedEmailWrapper').style.visibility = isOn ? "visible" : "hidden";
				$('divIncludeSalaryReportWrapper').style.visibility = isOn ? "visible" : "hidden";
				$('divYourEmailMessage').style.display = isOn ? "block" : "none";
            }
            
        }
    }
    
}
function expand(eventType){
    if(typeof eventType.srcElement!="undefined"){
		srcEl=eventType.srcElement.parentNode;
	} else {
		srcEl=this;
	}
	var accordionSet=srcEl.parentNode.parentNode;
	
	for(var i=0; i<_accordionTitle.length ;i++){
	    if(_accordionTitle[i]==srcEl){
			
			if(_accordion[i].target==1){
				_accordion[i].seekTo(0);
				srcEl.parentNode.className = "accordion_off";
			}else{
				_accordion[i].seekTo(1);
				srcEl.parentNode.className = "accordion_on";
			}
			
	        /*for(var p=0; p<_accordionTitle.length ;p++){
				
				if(p!=i&&_accordion[i].target==0){
					_accordion[p].seekTo(1);
					_accordionTitle[p].parentNode.className = "accordion_on";
					
				}else if(p!=i&&_accordion[i].target==1){
					_accordion[p].seekTo(0);
					_accordionTitle[p].parentNode.className = "accordion_off";
				}
				
			}*/
			
			
		}
	}
}


function expandByElement(element){
    
    srcEl=element;

	var accordionSet=srcEl.parentNode.parentNode;
	
	for(var i=0; i<_accordionTitle.length ;i++){
	    if(_accordionTitle[i]==srcEl){
			
			if(_accordion[i].target==1){
				_accordion[i].seekTo(0);
				srcEl.parentNode.className = "accordion_off";
			}else{
				_accordion[i].seekTo(1);
				srcEl.parentNode.className = "accordion_on";
			}
			
	        /*for(var p=0; p<_accordionTitle.length ;p++){
				
				if(p!=i&&_accordion[i].target==0){
					_accordion[p].seekTo(1);
					_accordionTitle[p].parentNode.className = "accordion_on";
					
				}else if(p!=i&&_accordion[i].target==1){
					_accordion[p].seekTo(0);
					_accordionTitle[p].parentNode.className = "accordion_off";
				}
				
			}*/
			
			
		}
	}
}

/*==========================================================//
	Functions to be completed on page load
//==========================================================*/
function pageIni(){
	accordionIni(false);
}
addLoadListener(pageIni);




