function startTime()
{
	document.getElementById('clock').innerHTML=new Date().toLocaleString()
	setTimeout(startTime, 500)
}

function toggleVisibility(elem, displayVal)
{
	if(elem.constructor == Array)
	{
		for(var i=0; i<elem.length; ++i) toggleVisibility(elem[i], displayVal)
		return
	}
	setVisibility(elem, !getVisibility(elem), displayVal)
}

function getVisibility(elem)
{
	var e = typeof elem == 'string' ? document.getElementById(elem) : elem
	return getCurrentStyle(e).display != 'none'
}

function setVisibility(elem, isVisible, displayVal)
{
	if(elem.constructor == Array)
	{
		for(var i=0; i<elem.length; ++i) setVisibility(elem[i], isVisible, displayVal)
		return
	}
	var e = typeof elem == 'string' ? document.getElementById(elem) : elem
	if(displayVal == 'hidden')
	{
		e.style.visibility = isVisible ? 'visible' : 'hidden'
	}
	else
	{
		e.style.display = isVisible ?
			(displayVal != null && (displayVal == 'inline' || !document.all)) ? displayVal : 'block'
			: 'none'
	}
}

function getCurrentStyle(el)
{
	return el.currentStyle?el.currentStyle:document.defaultView.getComputedStyle(el, null)
}

if(typeof(HTMLElement) != 'undefined')
{
	HTMLElement.prototype.__defineGetter__("currentStyle", function()
	{
		return document.defaultView.getComputedStyle(this, null)
	})
	HTMLElement.prototype.__defineGetter__("innerText", function()
	{
		return this.textContent
	})
	HTMLElement.prototype.__defineSetter__("innerText", function(val)
	{
		this.textContent = val
	})
}

function hasClass(el,cl)
{
	return (el.className&&el.className.search(new RegExp('\\b'+cl+'\\b'))>-1)
}

function addClass(el,cl)
{
	var c=el.className
	if(!c)c=''
	if(!hasClass(el,cl))
		c+=((c.length>0)?' ':'')+cl
	el.className=c
}

function removeClass(el,cl)
{
	if(el.className)
		el.className=el.className.
			replace(new RegExp('\\s*\\b'+cl+'\\b\\s*'),' ').
			replace(/^\s*/,'').
			replace(/\s*$/,'')
}

var tabsIds
function showTab(showId, display)
{
	if(!tabsIds) return true
	for(var i=0; i<tabsIds.length; ++i)
	{
		var id = tabsIds[i]
		var current = id==showId
		setVisibility(id+'_', current, display)
		var link = document.getElementById(id+'-link')
		if(link)
		{
			if(current) addClass(link, "selected")
			else removeClass(link, "selected")
		}
	}
	return true
}

function initTabs(ids, def)
{
	tabsIds = ids
	for(var i=0; i<tabsIds.length; ++i)
	{
		var id = tabsIds[i]
		document.getElementById(id).id+='_'
		if(window.location.hash.substr(1) == id) def = i
	}
	showTab(ids[def])
}

function setUriParam(uri, name, value)
{
	var param = "&"+name+"="
	var existing = uri.indexOf(param)
	if(existing == -1)
		return uri+param+value
	else
	{
		var b = existing+param.length
		var e = uri.indexOf('&', b)
		if(e == -1) e = uri.length
		var val = uri.substring(b, e)
		return uri.substr(0, b)+value+(val?',':'')+uri.substr(b)
	}
}

function formatDate(_d)
{
	if(_d == null) return ''
	var d = new Date(_d)
	var res = ''
	if(d.getDate() < 10) res += '0'
	res += d.getDate()
	res += '/'
	if(d.getMonth() < 9) res += '0'
	res += d.getMonth()+1
	res += '/'
	res += d.getFullYear()
	return res
}

function parseDate(str)
{
	if(!str) return null
	var str = new String(str)
	var parts = str.split(/[\/.]/, 3)
	var sd
	var sm
	var sy
	if(parts.length == 3)
	{
		sd = parseInt(parts[0], 10)
		sm = parseInt(parts[1], 10)-1
		sy = parseInt(parts[2], 10)
	}
	else if(str.match(/^(\d\d)(\d\d)(\d\d(\d\d)?)$/))
	{
		sd = parseInt(RegExp.$1, 10)
		sm = parseInt(RegExp.$2, 10)-1
		sy = parseInt(RegExp.$3, 10)
	}
	else if(str.match(/^(\d\d\d\d)-(\d\d)-(\d\d)$/))
	{
		sd = parseInt(RegExp.$3, 10)
		sm = parseInt(RegExp.$2, 10)-1
		sy = parseInt(RegExp.$1, 10)
	}
	else return null
	if(sy<9) sy += 100
	if(sy<200) sy += 1900
	var d = new Date(sy, sm, sd)
	if(isNaN(d.getMilliseconds())) return null
	return d
}

function checkDate(ctl)
{
	var d = parseDate(ctl.value)
	if(d == null)
	{
		alert("This is not a valid date.\nPlease use ddmmyyyy")
		ctl.focus()
		return false
	}
	ctl.value = formatDate(d)
	return true

}

function showCalendar(id, params, dtForm)
{
	var el = document.getElementById(id)
	var c = showCalendar.calendar
	if (c != null)
	{
		c.hide()
	}
	else
	{
		c = new Calendar(true, null, calSelected, calClosed)
		showCalendar.calendar = c
		if(params && params.dateFormat) {
			c.dateFormat = params.dateFormat;
		}
		if(params && params.showTime)
		{
			c.showsTime = true
			c.dateFormat += " %H:%M"
		}
		c.weekNumbers = false
		if(params && params.range)
			c.setRange(params.range[0], params.range[1])
		else
			c.setRange(1995, 2010)
		c.create()
	}
	c.sel = el
	c.parseDate(el.value)
	c.showAtElement(el, "Br")
	return
	function calSelected(cal, date)
	{
		if(cal.dateClicked)
		{
			cal.sel.value = date
			cal.callCloseHandler()
		}
	}

	function calClosed(cal)
	{
		cal.hide()
		showCalendar.calendar = null
	}
}

function runCountDown(elemId, timeout, jumpUrl)
{
	var sec = timeout
	countDown()
	function countDown()
	{
		document.getElementById(elemId).innerHTML=sec
		if(sec <= 0)
		{
			window.location = jumpUrl
		}
		else
		{
			sec--
			setTimeout(countDown, 1000)
		}
	}
}

function specifySelectValue(ctl, kw)
{
	ctl.onchange = function()
	{
		var o = ctl.options[ctl.selectedIndex]
		var value = o.value
		if(value != kw)
			return true
		var newValue = prompt("Please specify other value", "")
		if(newValue == null || newValue.length == 0)
		{
			ctl.selectedIndex = 0
			return false
		}
		var newO = document.createElement("OPTION")
		ctl.options.add(newO)
		newO.text = o.text
		newO.value = o.value
		o.value = o.text = newValue
		return true
	}
}