

// Our namespace
YAHOO.namespace('mio');

YAHOO.namespace('mio.earninator');

YAHOO.mio.earninator = function(){
	var perHourValue = 0;
	var perSecondValue = 0;
	var updateFrequency = 1; // Seconds
	var accumulatedAmount = 0;
	var currencySymbol = '£';
	var currencyName = 'pound';
	var targetElId = 'earninator';
	
	var getAmountFromResultsTable = function(){
		var resultsTableId = 'mio-breakdown-table';
		var tbody = document.getElementById(resultsTableId).getElementsByTagName('tfoot')[0];
		trs = tbody.getElementsByTagName('tr');
		tds = trs[trs.length -1].getElementsByTagName('td');
		perHourValue = tds[tds.length - 2].innerHTML;
		return calcPerSecondValue(perHourValue);
	}
	
	var calcPerSecondValue = function(perHourValue){
		perSecondValue = perHourValue / 60 / 60;
		return perSecondValue;
	}
	
	var earntStatus = function(){
		amountTime = Math.round((accumulatedAmount * 100)) / 100;
		amountValue = 'Since loading this page, you have earned ' + currencySymbol + '<strong>' + accumulatedAmount.toString().replace(/([0-9]*\.[0-9]{2}).*/,'$1') + '</strong>';
		return amountValue;
	}
	
	var earntAmount = function(seconds){
		minutes = Math.round(seconds / 60);
		amount = per * seconds;
		amountTime = Math.round((amount * 100)) / 100;
		return amountTime;
	}
	
	var setMessage = function(val){
		targetEl = YAHOO.util.Dom.get(targetElId);
		targetEl.innerHTML = val;
	}
	
	var updateAmount = function(){
		var statusText = earntStatus();
		setMessage(statusText);
	}

	return {
		currencySymbol:function(val){
			currencySymbol = val;
		},
		currencyName:function(val){
			if(val == 'dollar'){
				currencySymbol = '&#36;';
			} else if(val == 'euro'){
				currencySymbol = '&euro;';
			} else if(val == 'yen'){
				currencySymbol = '&yen;';
			} else {
				currencySymbol = '&pound;';
			}
		},
		init : function(){
			getAmountFromResultsTable();
		},
		updateTimer: function(){
			var seconds = 0;
			var baseAmount = perSecondValue;

			accumulatedAmount += baseAmount;
			seconds++;
			updateAmount();
			var timer = setTimeout("YAHOO.mio.earninator.updateTimer()",1000);
		}
	}
}();

YAHOO.mio.autocomplete = function(){
    YAHOO.namespace('deductions');
    YAHOO.deductions.presetArray = [
    	"Credit Card",
    	"Mortgage",
    	"Rent",
    	"Car Insurance",
    	"Car Finance",
    	"Car Tax",
    	"Oystercard",
    	"Travelcard",
    	"Gym Membership",
    	"Magazine Subscription -",
    	"Work Lunch",
    	"Shopping",
    	"TV Licence",
    	"Health Insurance",
    	"Pension",
    	"Travel Insurance",
    	"Petrol",
    	"Diesel",
    	"Fuel",
    	"Gas",
    	"Electricity",
    	"Savings",
    	"Water",
    	"Eating Out",
    	"Council Tax",
    	"Meals",
    	"Entertainment",
    	"Cigarettes"
    ];

    YAHOO.deductions.ACJSArray = new function() {
        this.oACDS = new YAHOO.widget.DS_JSArray(YAHOO.deductions.presetArray);
        this.oAutoComp = new YAHOO.widget.AutoComplete('deduction-name','deduction-name-container', this.oACDS);
        this.oAutoComp.prehighlightClassName = "yui-ac-prehighlight";
        this.oAutoComp.typeAhead = true;
        this.oAutoComp.minQueryLength = 2;
        this.oAutoComp.textboxFocusEvent.subscribe(function(){
            var sInputValue = YAHOO.util.Dom.get('deduction-name').value;
            if(sInputValue.length === 0) {
                var oSelf = this;
                setTimeout(function(){oSelf.sendQuery(sInputValue);},0);
            }
        });
    };
}

/*
	This class allows you to specify a source button and a target element allowing you to show and hide the target
	
	Example usage:
	
	t = new YAHOO.togglePanel;
	t.newToggle('save-button', 'report-send');
	
*/

YAHOO.namespace('togglePanel');
YAHOO.togglePanel = function() {
	
	// The element click source
	var sourceId = null;
	
	// The element we want to toggle the visibility of
	var targetId = null;
	
	// Change source element status text to 'Hide...'?
	var hideStatusMessage = false;
	var preStatusMessage = 'Hide ';
	
	var useClass = false;
	
	var inverse = false;
	
	// Private vars
	var _defaultButtonText = '';
	var _activeState = 0;


	function init(){
	    var sourceEl = YAHOO.util.Dom.get(sourceId);
		var targetEl = YAHOO.util.Dom.get(targetId);
		
		if(this.inverse === true){
			_activeState = 1;
			inverse = this.inverse;
			preStatusMessage = 'Show ';
		}
		
		hideStatusMessage = this.hideStatusMessage;
		useClass = this.useClass;
	
		if(sourceEl){
			_defaultButtonText = sourceEl.innerHTML;
			YAHOO.util.Event.addListener(sourceEl, "click", onChange, this);
		}
		if(targetEl){
			var closeEl = YAHOO.util.Dom.getElementsByClassName('close', null, targetEl)[0];
			if(closeEl){
				YAHOO.util.Event.addListener(closeEl, "click", onChange, this);
			}
		}
	}
	
	
	function newToggle(srcId, tgtId){
		if(srcId){
			sourceId = srcId;	
		}
		if(tgtId){
			targetId = tgtId;
		}
		this.init();
	}


	function changeSourceStatusText(){
		if(!hideStatusMessage){
			sourceEl = YAHOO.util.Dom.get(sourceId);
			if(sourceEl){
				// We need to do a special toggle if we are inversing the action
				toggleVal = _activeState;
				if(inverse){
					toggleVal = toggleValue(_activeState);
				}
				
				if(toggleVal === 0){
					buttonText = _defaultButtonText.replace('Hide ', '');
					sourceEl.innerHTML = preStatusMessage + buttonText;
				} else {
					sourceEl.innerHTML = _defaultButtonText;
				}
			}
		}
	}
	

	function toggleStatusText(sourceText){
		statusText = sourceText.replace('Hide ', '');
		statusText = sourceText.replace('Show ', '');
		return statusText;
	}

	function toggle(){
		var el = YAHOO.util.Dom.get(targetId);
		
		if(_activeState === 0){
			showTarget(el);
		} else {
			hideTarget(el);
		}
		
		changeSourceStatusText();
		toggleActiveState();
	}
	
	
	function toggleActiveState(){
		_activeState = toggleValue(_activeState);
	}
	
	function toggleValue(val){
		if(val === 1){
			return 0;
		} else {
			return 1;
		}
	}
	
	
	function onChange(e, action){
		e.cancelBubble = true;
		YAHOO.util.Event.preventDefault(e); // Prevent following link
		if(action){
			action.toggle();
		}
	}
	
	
	function showTarget(el){
		if(el){
			if(useClass){
				el.className = el.className.replace(' hidden', '');
			} else {
				YAHOO.util.Dom.setStyle(el, 'display', 'block');
			}
		}
	}
	
	
	function hideTarget(el){
		if(el){
			if(useClass){
				el.className += ' hidden';
			} else {
				YAHOO.util.Dom.setStyle(el, 'display', 'none');
			}
		}
	}

	return {
		sourceId: sourceId,
		targetId: targetId,
		hideStatusMessage:hideStatusMessage,
		toggle: toggle,
		init : init,
		newToggle : newToggle,
		inverse: false,
		useClass: false
	}
}

// This class will progressivley enhance the tabs for the salary calculation frequency to hide the default radio buttons

YAHOO.namespace('salarytabs');

YAHOO.salarytabs = new function(){
	this.tabsId = 'salary-frequency';
	this.tabsChildren = null;
	this.activeTab = 'year';
	
	this.init = function(){
	    var tabs = YAHOO.util.Dom.get(this.tabsId);
		if(tabs){
			this.tabsChildren = tabs.getElementsByTagName('li');
			YAHOO.util.Event.addListener(this.tabsChildren, "click", this.onChange, this);
		}
	}
	
	this.highlightTab = function(e){
		var target = (e.srcElement) ? e.srcElement : e.target;
		tabEl = this.findSelectTabEl(target);
		if(tabEl){
			if(tabEl.nodeName == 'LI'){
				this.selectTab(tabEl);
			}
		}
	}
	
	/* We need to work out what element has been clicked; input, label or li. */
	this.findSelectTabEl = function(el){
		if(el.nodeName == 'LABEL'){
			el = el.parentNode;
		}
		
		if(el.nodeName == 'INPUT'){
			el = el.parentNode;
		}
		
		return el;
	}
	
	this.selectTab = function(el){
		if(el){
			this.resetHighlights();
			el.className = "selected";
			el.getElementsByTagName('input')[0].setAttribute('checked', 'checked');
		}
	}
	
	this.resetHighlights = function(){
		for(i = 0; i < this.tabsChildren.length; i++){
			var tab = this.tabsChildren[i];
			tab.className = tab.className.replace('selected', '');
			tabInput = tab.getElementsByTagName('input');
			tabInput[0].removeAttribute('checked');
		}
	}
	
	this.onChange = function(e, action){
		action.highlightTab(e);
	}
}

YAHOO.mio.autocomplete();

hidePanel = new YAHOO.togglePanel;
hidePanel.inverse = true;
hidePanel.useClass = true;
hidePanel.newToggle('hide-button', 'banner');

advancedPanel = new YAHOO.togglePanel;
advancedPanel.newToggle('advanced-options', 'report-options');

securePanel = new YAHOO.togglePanel;
securePanel.newToggle('secure-login', 'password-set');

YAHOO.salarytabs.init();


function hideMessages(){
	statusMessages = 'status-messages';
	statusMessagesEl = YAHOO.util.Dom.get(statusMessages);
	
	var removeElement = function() {
		el = this.getEl();
		el.parentNode.removeChild(el);
	}

	var attributes = {
	    opacity: { to: '0' }
	};
	
	var anim = new YAHOO.util.ColorAnim(statusMessagesEl, attributes);
	anim.duration = 3;
	anim.onComplete.subscribe(removeElement);
	anim.animate();
}
setTimeout('hideMessages()', 10000);
//YAHOO.mio.deductions.init();
//YAHOO.salarycontrol.init();

// How to add dynamic rows of information
// YAHOO.tablecontrol.row.newRow({'name':'Some Test Value', 'per_year':'10','per_month':'9','per_week':'8', 'per_day':'7', 'per_hour':'6'});

// Enable JS interaction (animation) of the remove buttons selection
//YAHOO.tablecontrol.row.activateRemoveButtons();
//YAHOO.mio.deductions.activateDeductionButtons();