submitInProgress = false;
function getNewsLines() {
		
	if (document.controller != null) {
		controlReady = false;
		i = 1;
		do {
			try {
			   controlReady = document.controller.isReady();
			}
			catch (e) {
				setTimeout("",100);
				i+=1;
			}
		} while (i<100 && !controlReady ); 
		
		if (!controlReady )
			return;

		document.controller.createRequest("ContentServlet");
		//document.controller.setCookie(document.cookie);
		document.controller.setParameter("targetAction", "getNewsLines");
	
		result = document.controller.submit();	//submit request
		if (result ==  document.controller.getSUCCESS()) {
			newsid1 = document.controller.getResponseValue("newsid1");
			newsid2 = document.controller.getResponseValue("newsid2");
			newsid3 = document.controller.getResponseValue("newsid3");
			newsline1 = document.controller.getResponseValue("newsline1");
			newsline2 = document.controller.getResponseValue("newsline2");
			newsline3 = document.controller.getResponseValue("newsline3");
			baseurl = document.controller.getBaseURL();
			
			newsElm = document.getElementById("news");
			if (newsid1 != null && newsline1 != null && newsline1.length > 0) {
				newsElm.innerHTML += '\<span class="bodyheadline"\>What\'s New\<\/span\>\<br\>'+
		              		'\<img src="cube.gif" width="5" height="5" align="absmiddle"\>'+ 
					' \<a href="javascript:openNews(\''+baseurl+'ContentServlet?targetAction=displayPopupNews&amp;newsid='+
					newsid1+
					'\');"\>'+
					newsline1+
					'\<\/a\>\<br\>';
				if (newsid2 != null && newsline2 != null && newsline2.length > 0) 
					newsElm.innerHTML += '\<img src="cube.gif" width="5" height="5" align="absmiddle"\>'+ 
						' \<a href="javascript:openNews(\''+baseurl+'ContentServlet?targetAction=displayPopupNews&amp;newsid='+
						newsid2+
						'\');"\>'+
						newsline2+
						'\<\/a\>\<br\>';
		
				if (newsid3 != null && newsline3 != null && newsline3.length > 0) 
					newsElm.innerHTML += '\<img src="cube.gif" width="5" height="5" align="absmiddle"\>'+ 
						' \<a href="javascript:openNews(\''+baseurl+'ContentServlet?targetAction=displayPopupNews&amp;newsid='+
						newsid3+
						'\');"\>'+
						newsline3+
						'\<\/a\>\<br\>';
		
		               //news.innerHTML += '\<\/p\>';
				
				//alert(newsElm.innerHTML);
		
			}

		}  else {
			//alert("Error getting news lines: "+document.controller.getResponseValue("error"));
		}
	}
}

function openNews(url) {
alert('hi');
	window.open(url,"_blank","toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes,left=50,top=50,width=600,height=600",true);
}

function doRTrim(control){
    
    while(''+control.value.charAt(control.value.length-1)==' '){
        control.value = control.value.substring(0,control.value.length-1);
    }
    return control; 
}				
function validateForm(activeForm) {
	//alert("testing");
	var firstBadElement = null
	var isValid = true
	var collectAll = true
	var errorMessage = ""
	    for (i=0;i < activeForm.elements.length  && (isValid || collectAll);i++) {
	        elm = activeForm.elements[i]
	        if (elm.type == "text") doRTrim(elm);
			//if (elm["required"] == "true")
			//	alert(elm["required"] );
	        if ((elm.required == "true" || elm.required == true) && elm.value.length < 1){
	                    isValid = false;
	                    if (elm.label != null && elm.label != "")
		                    errorMessage += "You must enter " + elm.label + ".\n"
						else
		                    errorMessage += "You must enter " + elm.name + ".\n"
	                    if (firstBadElement == null) 
	                    	firstBadElement = elm
	        }
	        if (!validateField(elm)) {
	        	isValid = false;
	        	if (elm.fieldType == 'DateField') {
	                    if (elm.label != null && elm.label != "")
		                    errorMessage += "You must enter date " + elm.label + ".\n"
						else
		                    errorMessage += "You must enter date " + elm.name + ".\n"
	                    if (firstBadElement == null) 
	                    	firstBadElement = elm
	            }
	        };
	    }
	    if (firstBadElement != null && firstBadElement.type != "hidden") {
	        firstBadElement.focus();
	    }
	if (!isValid)
		alert(errorMessage);
	return isValid;
}

				function validateAndSubmitForm(activeForm) {
	    
					if (validateForm(activeForm))
//						alert("good");
						activeForm.submit();
						
				}
/*function removeFromString(text, chars) {
	
	pos = text.indexOf(chars,0);
	while (pos > -1) {
		text = text.substring(0,pos) + text.substring(pos+chars.length, text.length);
		pos = text.indexOf(chars, pos);
	}
	return text

}*/

function wrap(text, lineSize, newlinechar) 
{
	var output = "";
	if (newlinechar == "\n" && text.indexOf("\r\n", 0) > -1)
		newlinechar = "\r\n";

	//base case when single short line
	if (text == undefined || lineSize <= 0) 
	{
		return "";
	}
	else 
	{
		var lines = text.split(newlinechar);
		for (var i = 0; i < lines.length ; i++) 
		{
//			alert("'"+lines[i]+"'");
			// Insert line feed after first line: 
			// Note: extra space is needed to fake out JavaScript/<pre> tag issue 
			// in which multiple adjacent new lines are collapsed into a single new line
			if (i > 0) output += " " + newlinechar;

			output += wrapLine(lines[i], lineSize, newlinechar);
		}
	}
	return output;
}


// Convert given line of 'text' into multiple lines separated by 'newlinechar' with each line no greater than 
// 'lineSize' in length.
function wrapLine(text, lineSize, newlinechar) 
{
	if (text.length <= lineSize)
	{
		return text;
	}

	var output = "";

	// Locate last space before boundary
	var pos = -1;
	for (i = lineSize; i >= 0 && pos == -1; i--) 
	{
		if (text.charAt(i) == ' ') 
		{
			pos = i;	
		}
	}
	
	// If space not found, chop at the boundary
	if (pos == -1) pos = lineSize;
	
	output = text.substring(0,pos+1) + newlinechar;
	output += wrapLine(text.substring(pos+1, text.length), lineSize, newlinechar);			
	return output;	
}		

function validateField(field) {
	if (field.fieldType == 'DateField') {
		return true; //temporarily disable date checking


		//alert('testing date');
		
		var dtStr = field.value;
		if (dtStr == "")
			return true;


		var dtCh= "/";
		var minYear=1900;
		var maxYear=2100;
		
		
		var daysInMonth = DaysArray(12)
		var pos1=dtStr.indexOf(dtCh)
		var pos2=dtStr.indexOf(dtCh,pos1+1)
		var strMonth=dtStr.substring(0,pos1)
		var strDay=dtStr.substring(pos1+1,pos2)
		var strYear=dtStr.substring(pos2+1, pos2+1+4)
		strYr=strYear
		if (strDay.charAt(0)=="0" && strDay.length>1) strDay=strDay.substring(1)
		if (strMonth.charAt(0)=="0" && strMonth.length>1) strMonth=strMonth.substring(1)
		for (var i = 1; i <= 3; i++) {
			if (strYr.charAt(0)=="0" && strYr.length>1) strYr=strYr.substring(1)
		}
		month=parseInt(strMonth)
		day=parseInt(strDay)
		year=parseInt(strYr)
		if (pos1==-1 || pos2==-1){
			return false;
		}
		if (strMonth.length<1 || month<1 || month>12){
			return false;
		}
		if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month]){
			return false;
		}
		if (strYear.length != 4 || year==0 || year<minYear || year>maxYear){
			return false;
		}
		if (dtStr.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(dtStr, dtCh))==false){
			return false;
		}
	}
	
	return true
}

function isInteger(s){
	var i;
    for (i = 0; i < s.length; i++){   
        // Check that current character is number.
        var c = s.charAt(i);
        if (((c < "0") || (c > "9"))) return false;
    }
    // All characters are numbers.
    return true;
}

function stripCharsInBag(s, bag){
	var i;
    var returnString = "";
    // Search through string's characters one by one.
    // If character is not in bag, append to returnString.
    for (i = 0; i < s.length; i++){   
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}

function daysInFebruary (year){
	// February has 29 days in any year evenly divisible by four,
    // EXCEPT for centurial years which are not also divisible by 400.
    return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
}
function DaysArray(n) {
	for (var i = 1; i <= n; i++) {
		this[i] = 31
		if (i==4 || i==6 || i==9 || i==11) {this[i] = 30}
		if (i==2) {this[i] = 29}
   } 
   return this
}





function isRequired(eltname) {
	var required = false;
	var link = getElt('link'+eltname);
	if (link == null) {
		var field = eval('document.mainForm.'+eltname);
		if (field != null) {
			required = field.required;
		}
	} else { //it's a link
		required = link.required;
	}
	return required; // will be false if element does not exist
}

function setRequired(eltname, flag) {
		//alert(eltname+"   It's a field");
		var field = eval('document.mainForm.'+eltname);
		//alert(field);
		if (field != null ) {
			if (flag == false || flag == 'false' || flag == '') {
				field.required = false;
				//reqElt = getElt('req'+eltname);
				//if ( reqElt != null)
				//	hideElt(reqElt);	
			} else if (flag == true || flag == 'true') {
				field.required = true;
				//reqElt = getElt('req'+eltname);
				//if ( reqElt != null)
				//	showElt(reqElt);
				setProtected(eltname, false);	
			}
		} else {
			alert('setRequired(): Specified element '+eltname+' does not exist');
		}
}

function setProtected(eltname, flag) {

	var radioFlag = false;

	// Get label for element
	var labelElt = getElt('label'+eltname);

	// Check if element is a check box or radio button prior to checking as a conventional field
	var field = eval('document.mainForm.checkbox'+eltname);
	if (field == null) 
	{
		field = eval('document.mainForm.radio'+eltname);
		if (field != null) radioFlag = true;
	}
	if (field == null) field = eval('document.mainForm.'+eltname);

	if (field != null) 
	{
		if (flag == false || flag == 'false' || flag == '') 
		{
				if (!radioFlag)
				{
					field.disabled = false;
				}
				else if (field.length != undefined)
				{
					for (i=0; i<field.length; i++)
					{
						// Enable radio buttons and emblacken the captions
						field[i].disabled = false;
						labelItemElt = getElt('label'+eltname+(i+1));
						if (labelItemElt != null) labelItemElt.style.color = '#000';	
					}
				}
				if (labelElt != null) labelElt.style.color = '#000';	
		} 
		else if (flag == true || flag == 'true') 
		{
				if (!radioFlag)
				{
					field.disabled = true;
				}
				else if (field.length != undefined)
				{
					for (i=0; i<field.length; i++)
					{
						// Disable radio buttons and gray out the captions
						field[i].disabled = true;
						labelItemElt = getElt('label'+eltname+(i+1));
						if (labelItemElt != null) labelItemElt.style.color = '#999';	
					}
				}

				if (labelElt != null) labelElt.style.color = '#999';
				setRequired(eltname, false);	
		}

	} 

	else
	{
		var foundit = false;
		for (i=0;i < document.links.length;i++)
		{
			if (document.links[i].name == ("link" + eltname)) {
				 document.links[i].disabled = flag
				
				 if (flag) {
				 	setRequired(eltname,false)
					document.links[i].oldHref = document.links[i].href
					document.links[i].href = "javascript: XBdoNull()"
				} else {
					if (document.links[i].oldHref)
						document.links[i].href = document.links[i].oldHref
				}
				 foundit = true;
			}
		}
		if (!foundit)
		{
			//alert('setProtected(): Specified element '+eltname+' does not exist');
		}
	}

}
function XBdoNull() {}
//for these next functions to work, link must be generated using CaseData.xsl link template

function setInnerText(eltname, theText) {
	link = getElt('label'+eltname);
	if (link != null ) {
		link.innerText = theText;
	} else {
		//alert('setInnerText(): Specified link '+eltname+' does not exist');
	}

}

function setLinkEnabled(eltname, flag) {
	link = getElt('link'+eltname);
	if (link != null ) {
		if ( flag == 'true' || flag == '') {
			if ( link.enabledLink != null)
				link.innerHTML = link.enabledLink;	
		} else 	if (flag == 'false' ) {
			if ( link.disabledLink != null)
				link.innerHTML = link.disabledLink;
			setRequired(eltname, false);	
		}
	} else {
		//alert('setLinkEnabled(): Specified link '+eltname+' does not exist');
	}

}
function isLinkEnabled(eltname) {
	link = getElt('href'+eltname);
	if (link != null ) {
		return 'true'
	} else {
		return 'false'
	}
}
function setLinkFocus(eltname) {
	link = getElt('href'+eltname);
	if (link != null ) {
		link.focus()
	} else {
		//alert('setLinkFocus(): Specified link '+eltname+' does not exist');
	}
}
function setLinkURL(eltname, newurl) {
	link = getElt('href'+eltname);
	if (link != null ) {
		link.href = newurl;
	} else {
		//alert('setLinkURL(): Specified link '+eltname+' does not exist or is not enabled');
	}

}

function setRadioButtonValue(eltName, value)
{
	var found = false;
	field = eval('document.mainForm.radio'+eltName);
	if (field != null)
	{
		if (field.length != undefined)
		{
			for (i=0; i<field.length; i++)
			{
				if (field[i].value == value)
				{
					field[i].checked = true;
					found = true;
					break;
				}
			}
		}
	}

	if (found)
	{
		field = eval('document.mainForm.'+eltName);
		field.value = value;
	}
	

}

function setCheckboxValue(eltName, value)
{
	checkboxfield = eval('document.mainForm.checkbox'+eltName);
	field = eval('document.mainForm.'+eltName);
	if (field != null && checkboxfield != null)
	{
		checkboxfield.checked = value;
		field.value = value;
		
	}
	else {
		alert("Checkbox field "+eltName+" not found.")
	}	

}

function getElt (name) { 
	if(document.getElementById && document.getElementsByName)
  { 
    if(document.getElementById(name))
       return document.getElementById(name);
    else if (document.getElementsByName(name))
	   return document.getElementsByName(name)[0];
  }
  else {
    var elt = eval('document.all.' + name);
    return(elt);
  }
}

function disableDocumentActions(aForm, aDocument) 
{
	//alert("disabling actions");
	if (aForm != null) 
	  	for (i=0;i < aForm.elements.length ;i++) 
		{
			if(aForm.elements[i].onclick != null && aForm.elements[i].onclick != displayInProgressAlert) 
			{
			  aForm.elements[i].onClickOriginal = aForm.elements[i].onclick;
			  aForm.elements[i].onclick = displayInProgressAlert;
		    	}
			else if(aForm.elements[i].onchange != null && aForm.elements[i].onchange != displayInProgressAlert) 
			{
			  aForm.elements[i].onChangeOriginal = aForm.elements[i].onchange;
			  aForm.elements[i].onchange = displayInProgressAlert;
			} 
			else if(aForm.elements[i].onblur != null && aForm.elements[i].onblur != displayInProgressAlert) 
			{
			  aForm.elements[i].onBlurOriginal = aForm.elements[i].onblur;
			  aForm.elements[i].onblur = displayInProgressAlert;
		    }
		}

	for (i=0; i < aDocument.links.length; i++ ) 
	{
		if (aDocument.links[i].onclick != displayInProgressAlert) 
		{
			aDocument.links[i].onClickOriginal = aDocument.links[i].onclick;
			aDocument.links[i].onclick = displayInProgressAlert;
		}
	}	

}

function enableDocumentActions(aForm, aDocument) 
{
	if (aForm != null) 
	  	for (i=0;i < aForm.elements.length ;i++) {
		    if(aForm.elements[i].onclick != null && aForm.elements[i].onClickOriginal != null) {
			    aForm.elements[i].onclick = aForm.elements[i].onClickOriginal;
		    } else
		    if(aForm.elements[i].onchange != null && aForm.elements[i].onChangeOriginal != null) {
			    aForm.elements[i].onchange = aForm.elements[i].onChangeOriginal;
		    } else
		    if(aForm.elements[i].onblur != null && aForm.elements[i].onBlurOriginal != null) {
			    aForm.elements[i].onblur = aForm.elements[i].onBlurOriginal;
		    }
		}
	for (i=0; i < aDocument.links.length; i++ ) 
		aDocument.links[i].onclick = aDocument.links[i].onClickOriginal;
}

function displayInProgressAlert() {
	alert('Transaction posting is in progress. Please wait until complete.');
	return false;
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

function random(range) {
	var index = Math.floor(Math.random() * (range+1));
	if (index == 0) index = 1;
	if (index > range) index = range;
	return index;
}

function collapse(wnd, idBody, colInfo, expInfo) {
	var oB = document.getElementById(idBody);
	if (oB == null) return;
	if (oB.className == 'visible') {
		oB.className = 'hidden';
		wnd.innerText = colInfo;
	} else {
		oB.className = 'visible';
		wnd.innerText = expInfo;
	}
}
//            <p><@a href="addMessage" arguments="topic_id="+topicsPath?last.id+"&message_id="+mch.id>Ответить</@a> <#if user.id == mch.author.id>| <@a href="editMessage" arguments="topic_id="+topicsPath?last.id+"&message_id="+mch.id>Изменть</@a></#if> <#if mch.children?size \gt 0>| <a href="javascript: void(0)" onclick="javascript: collapse(this, '${mch.id}', '(+) Развернуть ветку', '(–) Свернуть ветку')">(+) Развернуть ветку</a></#if></p>