function msec()
{
	var d = new Date();
	return  d.valueOf();
}
/*********************************************************
Set/unset check status for group of checkbox elements
*********************************************************/

function checkall(name, ob)
{
	var arCheckbox = document.getElementsByName(name);
	if(!arCheckbox) return;
	
	if(arCheckbox.length>0)
		for(i=0; i<arCheckbox.length; i++)
			arCheckbox[i].checked = ob.checked;
	else
		arCheckbox.checked = ob.checked;
}

/*********************************************************
Return absolute position of the element
*********************************************************/

function getElementPos(obj)
{
	if (!obj || !obj.offsetParent)
	return false;

	var res=Array()
	res["left"] = obj.offsetLeft;
	res["top"] = obj.offsetTop;
	var objParent = obj.offsetParent;
	while (objParent)
	{
		res["left"] += objParent.offsetLeft;
		res["top"] += objParent.offsetTop;
		objParent = objParent.offsetParent;
	}
	res["right"]=res["left"]+obj.offsetWidth;
	res["bottom"]=res["top"]+obj.offsetHeight;

	return res;
}

/*********************************************************
Return element object
*********************************************************/

function E(id)
{
	var o = (document.all) ? document.all[id] : document.getElementById(id);
	if( 'object' != typeof o )
	return null;//debug("Cannot find element#"+id);
	return o;
}

/*********************************************************
Deletes an element object and and its all children if 
	deleteChildren is "true", by default "false"
*********************************************************/
function deleteElement( obj, deleteChildren )
{
	if ( deleteChildren )
		for ( var i = 0; i < obj.childNodes.length; i++ )
			deleteElement( document.all ? obj.childNodes( i ) : obj.childNodes[i], deleteChildren );
	
	return obj.parentNode.removeChild( obj );
}

/*********************************************************
Show object
*********************************************************/

function showElement(ob)
{
	if( 'object' != typeof ob )
	ob = E(ob);
	ob.style.visibility = 'visible';
}

/*********************************************************
Hide object
*********************************************************/

function hideElement(ob)
{
	if( 'object' != typeof ob )
	ob = E(ob);
	ob.style.visibility = 'hidden';
}

/*********************************************************
Redirect
*********************************************************/

function redirect(url)
{
	window.location = url;
}

/*********************************************************
Sets to all elements value
*********************************************************/

function setAll( elements, value )
{
	for( i=0; i < elements.length; i++ )
	elements[i].value = value;
}
/*********************************************************
Create element, append child, set properties
*********************************************************/
function AC (node, newParrent){
	return (newParrent || document.body).appendChild(node);
}
function IB(node, newParrent, beforeNode){
	if (beforeNode) return newParrent.insertBefore(node,beforeNode);
	else return newParrent.insertBefore(node,beforeNode);
}
function CE (nodeName, properties){
	var el = document.createElement(nodeName);
	for (var k in properties) {
		if (k == 'style') {
			for (var j in properties[k]) {
				el.style[j] = properties[k][j];
			}
		}
		else {
			el[k] = properties[k];
		}
	}
	return el;
}
function CEAC ( nodeName, parrentNode, properties){
	return AC (CE (nodeName, properties),parrentNode);
}
function CEIB ( nodeName, parrentNode, properties, beforeNode){
	return IB (CE (nodeName, properties),parrentNode,beforeNode);
}
/*********************************************************
Shortcut to create DIV
*********************************************************/

function CDiv(parrentNode, properties) {
	return CEAC('div',parrentNode,properties);
}
/*********************************************************
Shortcut to create DIV
*********************************************************/

includeArray = [];// move to better location but before any ather script
function include(name){
	includeArray.push(name);
}
/*********************************************************
calculate element cordinates relative to document.
*********************************************************/
// getAtributeFromNode x-brouser
function GA(node,atrName){
	if (isMozilla || isOpera) return node.getAttribute(atrName);
	else return node[atrName];
}
// set mouse over mouse out class changing.
// carefull, droping handlers
function MOCC(node,baseClass,overClass){
	node.className = baseClass;
	node.baseClass = baseClass;
	node.overClass = overClass;
	node.onmouseover = function (){this.className = this.overClass;}
	node.onmouseout = function (){this.className = this.baseClass;}
}
function errFocus(text, it)
{
	alert(text);
	it.focus();
	return false;
}


function isUrl(s)
{
	var regexp = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;
	return regexp.test(s);
}

/** 
*	Set opacity level
*
*	@param		obj		object		HTML object
*	@param		level	int			opacity level [0-100]
*
*	@return		void
*/
function setOpacity(obj, level)
{
	if (isMozilla)
		obj.style.MozOpacity = level/100;
	else if (isOpera)
		obj.style.opacity = level/100;
	else
		obj.filters.alpha.opacity = level;
}

/** 
*	Returns opacity level
*
*	@param		obj		object		HTML object
*
*	@return		int		opacity [0-100]
*/
function getOpacity(obj)
{
	if (isMozilla)
		return obj.style.MozOpacity * 100;
	else if (isOpera)
		return obj.style.opacity * 100;
	else
		return obj.filters.alpha.opacity;
}

/** 
*	Execute JS code in the given html content.
*
*	@param		content		string			HTML content
*
*	@return		void
*/
function evalJS(content)
{
	obj = document.createElement("div");
	obj.innerHTML = content;
	var scriptTags = obj.getElementsByTagName('SCRIPT');
	var head = document.getElementsByTagName('HEAD')[0];
	for(var i=0; i<scriptTags.length; i++)
	{
		if (scriptTags[i].src)
		{
			var head = document.getElementsByTagName("head")[0];
			var scriptObj = document.createElement("script");
			scriptObj.setAttribute("type", "text/javascript");
			scriptObj.setAttribute("src", scriptTags[i].src);             
			head.appendChild(scriptObj);
		}
		else
		{
			var code = scriptTags[i].innerHTML;                        
			code = code.replace(/(<!--|\/\/-->)/g, ""); 
			eval(code);
		}            
	}      
}

/**
*	Slide Up & hide block element (div)
*	@param		id		string			DOM element id
*
*	@return		void
*/
function shrinkDiv(id)
{
	if ('none'!=E(id).style.display)
	{
		var height = E(id).offsetHeight;
		var step = height/10; 
		var stepStamp = setTimeout("_shrinkDiv('"+id+"','"+step+"')",50);
	}
}

/**
*	Recurcive executor for Slide Up hide block element (div)
*	@param		id		string			DOM element id
*	@param		step	float			step of slide
*	@param		height	integer			current element height
*
*	@return		void
*/
function _shrinkDiv(id,step,height)
{
	if (!height)
		var height = E(id).offsetHeight-step;
	else
		height = height-step;

	if ('none'!=E(id).style.display)
	{
		if (E(id).style.height)
			E(id).style.height = height+'px';
		else
			E(id).style.height = height+'px';

		if (height<step) E(id).style.display = 'none';
		stepStamp = setTimeout("_shrinkDiv('"+id+"','"+step+"','"+height+"')",50);
	}
}

/**
*	Actions dropdown menu
*/
function showActionMenu ( name ) {
	var objMenu = document.getElementById(name + '-actions');
	var objBtn = document.getElementById(name + '-action-btn');
	//
	if ( !objMenu || !objBtn )
		return;
	//
	cmnSet_class( objBtn, 'b-user-panel-item-menu' );
	cmnSet_class( objBtn, 'b-user-panel-item-hover' );
	objMenu.style.display = 'block';
}

function hideActionMenu ( name ) {
	var objMenu = document.getElementById(name + '-actions');
	var objBtn = document.getElementById(name + '-action-btn');
	//
	if ( !objMenu || !objBtn )
		return;
	//
	cmnRemove_class( objBtn, 'b-user-panel-item-menu' );
	cmnRemove_class( objBtn, 'b-user-panel-item-hover' );
	objMenu.style.display = 'none';
}

function toggleActionMenu ( name ) {
	var objBtn = document.getElementById(name + '-action-btn');
	//
	if ( objBtn ) {
		if ( /b-user-panel-item-menu/.test( objBtn.className ) )
			hideActionMenu ( name );
		else
			showActionMenu ( name );
	}
}