var $D = YAHOO.util.Dom;
var $C = YAHOO.util.Connect;
var $E = YAHOO.util.Event;
var $W = YAHOO.widget;

var utils = window.utils || {};
var gui = window.gui || {};
var tabs = window.tabs || {};
var searches = window.searches || {};

utils = {
	getTimeStamp: function() {
		var now = new Date();
		return now.getHours()+''+now.getMinutes()+''+now.getSeconds()+''+now.getMilliseconds();
	},

	getParam: function(name) {
   	params = window.location.search.substr(1).split('&');

   	for (i in params) {
	      if (params[i].indexOf(name)>=0)
   	      return params[i].substr(params[i].indexOf('=')+1);
   	}

   	return false;
	}
}

gui = {
	// clickable table row is hovered
	hoverRow: function(obj) {
		if (obj.className.search(/(^|\s)hovered($|\s)/)==-1)
			obj.className += ' hovered';
	},

	// clickable table row is unhovered
	unhoverRow: function(obj) {
		obj.className = obj.className.replace(/(^|\s)hovered($|\s)/,'');
	},

	// select clickable table row
	selectRow: function(obj) {
		var tableObj, trs, isSelected;

		isSelected = (obj.className.search(/(^|\s)selected($|\s)/)!=-1) ? true : false;

		// get table
		tableObj = obj;
		while (tableObj && tableObj.nodeName.toLowerCase() != 'table')
			tableObj = tableObj.parentNode;

		// reset selected row
		trs = tableObj.getElementsByTagName('tr');
		for (i=0; i<trs.length; i++)
			trs[i].className = trs[i].className.replace(/(^|\s)selected($|\s)/,'');

		if (!isSelected)
			obj.className += ' selected';

		// enable buttons if present (ignore "always on" buttons)
		if (document.getElementById(tableObj.id+'-buttons')) {
			var buttons = document.getElementById(tableObj.id+'-buttons').getElementsByTagName('input');

			if (!isSelected) {
				for (j=0; j<buttons.length; j++) {
					if (buttons[j].className.search(/(^|\s)alwaysOn($|\s)/)==-1) {
						buttons[j].className = buttons[j].className.replace(/(^|\s)disabled($|\s)/,'');
						buttons[j].disabled = false;
					}
				}
			}
			else {
				for (j=0; j<buttons.length; j++) {
					if (buttons[j].className.search(/(^|\s)alwaysOn($|\s)/)==-1) {
						buttons[j].className += ' disabled';
						buttons[j].disabled = true;
					}
				}
			}
		}
	},

	// get selected row
	getSelectedRow: function(table) {
		if (!table) return false;

		trs = table.getElementsByTagName('tr');
		for (i=0; i<trs.length; i++) {
			if (trs[i].className.search(/(^|\s)selected($|\s)/)!=-1)
				return trs[i];
		}
		return false;
	},

	// select tab
	selectTab: function(obj) {
		var tabsObj, tabs;

		// get tabs ul
		tabsObj = obj;
		while (tabsObj && tabsObj.nodeName.toLowerCase() != 'ul')
			tabsObj = tabsObj.parentNode;

		// reset selected tab
		tabs = tabsObj.getElementsByTagName('li');
		for (i=0; i<tabs.length; i++)
			tabs[i].className = tabs[i].className.replace(/(^|\s)active($|\s)/,'');

		while (obj && obj.nodeName.toLowerCase() != 'li')
			obj = obj.parentNode;
		obj.className += ' active';
	},

	// create wait anim
	showLoader: function() {
		var loader = document.createElement('div');
		var container = document.getElementById('container');

		// position loader
		var x = document.body.scrollLeft+16;
		var y = document.body.scrollTop+16;
		loader.style.left = x+"px";
		loader.style.top = y+"px";

		loader.id = 'loader';
		loader.innerHTML = (translations.loaderTxt) ? translations.loaderTxt : '...';
		document.body.insertBefore(loader,container);
	},

	// destroy wait anim
	hideLoader: function() {
		var loader = document.getElementById('loader');
		if (!loader) return;

		document.body.removeChild(loader);
	}
}

tabs = {
	urii: null,
	container: null,

	change: function(el) {
		var id = el.id.replace(/[A-Za-z]+(\d)/,'$1');
		var uri = this.urii[id-1];

		if (this.container==null) {
			var root = el.parentNode;
			while (root!=null && !root.id)
				root = root.parentNode;

			if (root.id)
				this.container = document.getElementById(root.id+'-container');
			else
				return false;
		}

		this.setActive(el);

		var requestCallback = {
			success: tabs.show,
			failure: tabs.failed,
			scope: tabs
		};

		// XMLHttpRequest obj
		var fetch = $C.asyncRequest('GET', uri+'?'+utils.getTimeStamp(), requestCallback);

	},

	show: function(o) {
		//alert (o.responseText);
		this.container.innerHTML = o.responseText;
	},

	failed: function(o) {
		return false;
	},

	setActive: function(obj) {
		var trEl = obj.parentNode;

		while(trEl && trEl.nodeName.toLowerCase()!='tr')
			trEl = trEl.parentNode;

		tds = trEl.getElementsByTagName('td');

		for (i=0; i<tds.length; i++) {
			tds[i].className = tds[i].className.replace(/(^|\s)active($|\s)/,'');
		}

		var tdEl = obj.parentNode;
		while(tdEl && tdEl.nodeName.toLowerCase()!='td')
			trdl = tdEl.parentNode;

		if (tdEl) tdEl.className += ' active';
	}
}

searches = {
	setServiceType: function(obj) {
		var sType = obj.name.replace(/type_/,'');
		document.getElementById('service_type').value = sType;

		var container = obj;
		while (container && container.nodeName.toLowerCase()!='div')
			container = container.parentNode;

		links = container.getElementsByTagName('a');
		for (i=0; i<links.length; i++) {
			$D.removeClass(links[i],'active');
		}

		$D.addClass(obj,'active');
	},

	toggleDetailedSearch: function() {
		var ctrl = document.getElementById('detailed');
		var container = document.getElementById('myvar');

		if (ctrl.value==0) {
			ctrl.value = 1;
			$D.removeClass(container, 'hidden');
		}
		else {
			ctrl.value = 0;
			$D.addClass(container, 'hidden');
		}
	}
}