Agent=window.navigator.userAgent;
isOpera=Agent.indexOf("Opera")==-1?false:true;
isIE=(document.all&&!isOpera)?true:false;
isW3CDOM=document.getElementById?true:false;
isNN4x=(Agent.indexOf("/4.")!=-1&&!isIE&&!isOpera&&!isW3CDOM)?true:false;
isWindows=Agent.indexOf("Windows")!=-1?true:false;
isSafari=Agent.indexOf("Safari")==-1?false:true;
isNetscape=Agent.indexOf("Netscape")==-1?false:true;

function Defined(vrbl)
{
	var str_Undefined="undefined"
	var str_Empty="";
	var str_Null="null";
	
	if(typeof(vrbl)==str_Undefined||(str_Empty+vrbl)==str_Undefined||vrbl==null||(str_Empty+vrbl)==str_Null||(str_Empty+vrbl)==str_Empty)return false;
	else return true;
}
function checkMail(value) {
	re =/^[A-Za-z0-9_\-]+(\.[A-Za-z0-9_\-]+)*@([A-Za-z0-9_\-]+\.)+[A-Za-z0-9_\-]{2,3}$/;
	if(!re.test(value))
		return false;
	return true;
}
function isNumber(str)
{
	for (i=0; i<str.length; i++)
	{
		c=str.substring(i,i+1)
		if (c==',') c='.';
		if	(isNaN(c) && c!='.' && c!=',')
			return false;
	}
	return true;
}
function CheckFieldInDate(value) {
	re =/\d{2}.\d{2}.\d{4}/;
	if(!re.test(value))
		return false;
	return true;
}
function CheckFieldInSpace(value) {
	count = value.length;
	count_space = 0;
	for (i = 0; i < count; i++)	{
		if (value.charAt(i) == " " || value.charAt(i) == "\t")
			count_space++;
	}
	if (count_space == count || count == 0) return true;
	else return false;
}

var Treads=new Array(), CheckDelay=50;
function AddCommandsToStack(tread_id, commands)
{
	CheckTread(tread_id);
	var Command=new Object(), Parameters=new Object(), ParametersNames=new Array();
	for(var i=2; i<arguments.length; i+=2)
	{
		ParametersNames[ParametersNames.length]=arguments[i];
		eval("Parameters."+arguments[i]+"=arguments[i+1];");
	}
	Command.execute=commands;
	Command.executed=false;
	Command.childrenExecuted=false;
	Command.arguments=Parameters;
	Command.argumentsNames=ParametersNames;
	Treads[tread_id][Treads[tread_id].length]=Command;
	return Treads[tread_id].length-1;
}
function CheckTread(tread_id)
{
	if(!Defined(Treads[tread_id]))Treads[tread_id]=new Array();
}
function GetStackLength(tread_id)
{
	CheckTread(tread_id);
	return Treads[tread_id].length;
}
function ExecuteCommand(tread_id, command_id)
{
	CheckTread(tread_id);
	if(Treads[tread_id].length>command_id)
	{
		if(Treads[tread_id][command_id].executed)return;
		if(command_id&&!Treads[tread_id][command_id-1].executed)setTimeout("ExecuteCommand("+tread_id+", "+command_id+")", CheckDelay);
		else
		{
			for(var attribute_index=0; attribute_index<Treads[tread_id][command_id].argumentsNames.length; attribute_index++)eval("var "+Treads[tread_id][command_id].argumentsNames[attribute_index]+"=Treads[tread_id][command_id].arguments."+Treads[tread_id][command_id].argumentsNames[attribute_index]+";");
			eval(Treads[tread_id][command_id].execute);
			Treads[tread_id][command_id].executed=true;
		}
	}
}