var isDOM=document.getElementById?1:0; // DOM1 browser (MSIE 5+, Netscape 6, Opera 5+)
var isOpera5;
var isOpera=isOpera5=(window.opera && isDOM)?1:0; // Opera 5+
var isOpera6=(isOpera && window.print)?1:0; // Opera 6+ 
var isOpera7=(isOpera && document.readyState)?1:0; // Opera 7+
var isMSIE=(document.all && document.all.item && !isOpera)?1:0; // IE 4+
var isMSIE5=(isDOM && isMSIE)?1:0; // IE 5+
var isMozilla=(isDOM && navigator.appName=="Netscape")?1:0;

var colorBackground="#ffffff";
var colorError="#ffcccc";
var colorTemp="";


function controllerCloseWindow()
{
self.window.close();
}


function  controllerAdjustYear(widget)
{
var str;
var cDate=new Date();
var currentYear=cDate.getFullYear();
var currentYearCentury=String(currentYear).substr(0, 2);
var currentYear2=String(currentYear).substr(2, 2);
eval('str=document.getElementById("' + widget + '").value;');
	if(str.length==2)
	{
		if(str>currentYear2)
		{
		str=(currentYearCentury-1)+str;
		}
		else
		{
		str=(currentYearCentury)+str;
		}
	eval('document.getElementById("' + widget + '").value=str;');
	}
}


function controllerCheckDate(day, month, year)
{
var newmonth;
var dt=new Date(year, month, day);
newmonth=dt.getMonth();
if(month!=newmonth) return false;
return true;
}


// checks that startdate occurs before the enddate
function controllerCheckStartEndDates(widgetstartday, widgetstartmonth, widgetstartyear, widgetendday, widgetendmonth, widgetendyear) 
{
var startday=controllerGetValue(widgetstartday);
var startmonth=controllerGetValue(widgetstartmonth)-1;
var startyear=controllerGetValue(widgetstartyear);

var endday=controllerGetValue(widgetendday);
var endmonth=controllerGetValue(widgetendmonth)-1;
var endyear=controllerGetValue(widgetendyear);

var ds=new Date(startyear, startmonth, startday);
var de=new Date(endyear, endmonth, endday);

	if(ds>de)
	{
	controllerSetAlert(widgetendday, alertCheckWidget);
	return false;
	}
return true;
}


function controllerCheckCorrectDate(widgetday, widgetmonth, widgetyear)
{
var newmonth;
var year;
var month;
var day;

day=controllerGetValue(widgetday);
month=controllerGetValue(widgetmonth);
year=controllerGetValue(widgetyear);

	if(!controllerCheckDate(day, (month-1), year))
	{
	controllerSetAlert(widgetday, alertCheckWidget);
	return false;
	}
return true;
}


function controllerCheckLimits(widget, low, high)
{
var val;
val=controllerGetValue(widget);
	if(val<low || val>high)
	{
	controllerSetAlert(widget, alertCheckWidget);
	return false;
	}
return true;
}


function controllerCheckDigitsType(event)
{
return controllerCheckValueType(event, /[0-9]+/);
}


function controllerCheckDigits(widget)
{
return controllerCheckValue(widget, /[0-9]+/);
}


function controllerCheckEmail(widget)
{
return controllerCheckValue(widget, /^\w+(\.\w|\w|\-\w)*@([a-z0-9_\-]+\.)+(arpa|biz|com|gov|inc|info|int|name|nato|net|ad|ae|af|ag|ai|al|am|ao|aq|ar|as|at|au|aw|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cs|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|edu|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|fx|ga|gb|gd|ge|gh|gi|gl|gm|gn|gp|gq|gr|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|in|io|iq|ir|is|it|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|mg|mh|mil|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|ne|ng|ni|nl|no|np|nr|nt|nu|nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|pt|pw|py|qa|re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ud|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yu|za|zm|zr|zw)$/i);
}


function controllerCheckEmailType(event)
{
return controllerCheckValueType(event, /[a-z0-9_\.@\-]+/i);
}


function controllerCheckWebsite(widget)
{
return controllerCheckValue(widget, /^([a-z0-9_\-:\/]+\.)+(arpa|biz|com|gov|inc|info|int|name|nato|net|ad|ae|af|ag|ai|al|am|ao|aq|ar|as|at|au|aw|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cs|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|edu|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|fx|ga|gb|gd|ge|gh|gi|gl|gm|gn|gp|gq|gr|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|in|io|iq|ir|is|it|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|mg|mh|mil|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|ne|ng|ni|nl|no|np|nr|nt|nu|nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|pt|pw|py|qa|re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ud|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yu|za|zm|zr|zw)(\/)?$/i);
}


function controllerCheckWebsiteType(event)
{
return controllerCheckValueType(event, /[a-z0-9_\.\-\:\/]+/i);
}


function controllerCheckEnterType(event)
{
var charCode;
	if(isMSIE)
	{
	charCode=window.event.keyCode;
	}
	else
	{
	charCode=event.which;
	}
var frm;
	if(charCode==13)
	{
	var widget;
	if(isMSIE)
	{
	widget=window.event.srcElement;
	}
	else
	{
	widget=event.target;
	}
	frm=widget.form;
		for(i=0; i<frm.elements.length; i++)
		{
			if(frm.elements[i].type=="submit")
			{
			frm.elements[i].click();
			}
		}
	}
}


function controllerCheckFill(widget)
{
var result;
result=controllerCheckValue(widget, /.{1,}/);
return result;
}


function controllerCheckFillType(event)
{
return controllerCheckValueType(event, /.+/);
}


function controllerCheckSelected(widget)
{
var result;
var sel;
	if(isDOM)
	{
	eval('sel=document.getElementById("' + widget + '");');
	}
	if(sel.selectedIndex==-1)
	{
	controllerSetAlert(widget, alertCheckWidget);
	return false;
	}
	if(sel.options[sel.selectedIndex].text=="")
	{
	controllerSetAlert(widget, alertCheckWidget);
	return false;
	}
return true;
}


function controllerCheckIPType(event)
{
return controllerCheckValueType(event, /[0-9\.]+/);
}


function controllerCheckIP(widget)
{
return controllerCheckValue(widget, /^(([0-9]{1,2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]{1,2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/);
}


function controllerCheckLatinOnly(widget)
{
var result;
result=controllerCheckValue(widget, /[a-z]+/i);
return result;
}


function controllerCheckLatinOnlyType(event)
{
return controllerCheckValueType(event, /[a-z]+/i);
}


function controllerCheckLatin(widget)
{
var result;
result=controllerCheckValue(widget, /[\x20-\x7F]+/i);
return result;
}


function controllerCheckLatinSpecial(widget)
{
var result;
result=controllerCheckValue(widget, /[\x00-\x7F]+/i);
return result;
}


function controllerCheckLatinType(event)
{
return controllerCheckValueType(event, /[\x20-\x7F]+/i);
}


function controllerCheckLatinSpecialType(event)
{
return controllerCheckValueType(event, /[\x00-\x7F]+/i);
}


function controllerCheckPassword(widget)
{
var result;
result=controllerCheckValue(widget, /[a-z0-9_]+/i);
return result;
}


function controllerCheckPasswordType(event)
{
return controllerCheckValueType(event, /[a-z0-9_]+/i);
}


function controllerCheckValue(widget, re)
{
var val;
val=controllerGetValue(widget);
	if(val.search(re)==-1)
	{
	controllerSetAlert(widget, alertCheckWidget);
	return false;
	}
return true;
}


function controllerGetValue(widget)
{
var val;
	if(isDOM)
	{
	eval('val=document.getElementById("' + widget + '").value;');
	}
	else if(isMSIE)
	{
	eval('val=document.all.' + widget + '.value;');
	}
return val;
}


function controllerCheckValueType(event, re)
{
var charCode;
	if(isMSIE)
	{
	charCode=window.event.keyCode;
	}
	else
	{
	charCode=event.which;
	}
if(charCode==0 || charCode==8 || charCode==9) return true;
var str=String.fromCharCode(charCode);
if(str.search(re)==-1) return false;
controllerSetColorNormalBackground(event);
return true;
}


function controllerCheckIdentity(widget1, widget2)
{
var str1;
var str2;
	if(isDOM)
	{
	eval('str1=document.getElementById("' + widget1 + '").value;');
	eval('str2=document.getElementById("' + widget2 + '").value;');
	}
	else if(isMSIE)
	{
	eval('str1=document.all.' + widget1+ '.value;');
	eval('str2=document.all.' + widget2+ '.value;');
	}
	if(str1!=str2)
	{
	controllerSetAlert(widget2, alertCheckWidget);
	return false;
	}
return true;
}


function controllerGetWidgetType(widget)
{
var type="";
	if(isDOM)
	{
	eval('type=document.getElementById("' + widget + '").type;');
	}
	else if(isMSIE)
	{
	eval('type=document.all.' + widget + '.type;');
	}
return type;
}


function controllerAddOption(wnd, widget, widgetID, widgetName)
{
newElem=wnd.document.createElement("OPTION");
newElem.text=widgetName;
newElem.value=widgetID;
	for(i=0; i<widget.options.length; i++)
	{
		if(widget.options[i].text>widgetName)
		{
		widget.options.add(newElem, i);
		widget.options.selectedIndex=i;
		break;
		}
	}
	if(i==widget.options.length)
	{
	widget.options.add(newElem, i);
	widget.options.selectedIndex=i;
	}
}


function controllerRemoveOption(widget, widgetID)
{
	for(i=0; i<widget.options.length; i++)
	{
		if(widget.options[i].value==widgetID)
		{
		widget.remove(i);
		widget.selectedIndex=i;
		break;
		}
	}
}


function controllerSetAlert(obj, alertMessage)
{
alert(alertMessage);
controllerSetColorBackground(obj, colorError);
controllerSetFocus(obj);
}


function controllerSetColorNormalBackground(event)
{
var widget;
	if(isMSIE)
	{
	widget=window.event.srcElement;
	}
	else
	{
	widget=event.target;
	}
controllerSetColorBackground(widget.id, colorBackground);
}


function controllerShowHideSelects(vis)
{
var type;
var widget;
	if(isMSIE)
	{
		for(i=0; i<document.forms.length; i++)
		{
			for(j=0; j<document.forms[i].elements.length; j++)
			{
				if(document.forms[i].elements[j].id>"")
				{
				widget=document.forms[i].elements[j].id;
				type=controllerGetWidgetType(widget);
					if(type=="select-one" || type=="select-multiple")
					{
					eval('document.all.' + widget + '.style.visibility="' + vis + '";');
					}
				}
			}
		}
	}
}


function controllerSetColorBackground(widget, color)
{
var type;
type=controllerGetWidgetType(widget);
	if(isDOM)
	{
	if(type=="text" || type=="password") eval('document.getElementById("' + widget + '").style.background="' + color + '";');
	if(type=="select-one") eval('document.getElementById("' + widget + '").options[0].style.background="' + color + '";');
	}
	else if(isMSIE)
	{
	if(type=="text" || type=="password") eval('document.all.' + widget + '.style.background="' + color + '";');
	if(type=="select-one") eval('document.all.' + widget + '.options[0].style.background="' + color + '";');
	}
}


function controllerSetEmail(login, srv, subject, cls)
{
var eMail=login +  '@' + srv;
document.write('<a href="mailto:' + eMail);
if(subject) document.write('?subject=' + subject);
document.write('"');
if(cls) document.write(' class="' + cls + '"');
document.write('>' + eMail + '</a>');
}


function controllerSetFocus(widget)
{
var type;
var range;
type=controllerGetWidgetType(widget);
	switch(type)
	{
	case "text":
		if(isMSIE)
		{
		eval('range=document.getElementById("' + widget + '").createTextRange();');
		range.moveEnd("textedit");
		range.collapse(false);
		range.select();
		}
	}
eval('document.getElementById("' + widget + '").focus();');
}


function controllerCopy2Clipboard(widget)
{
var text;
	if(isMSIE)
	{
	eval('text=document.getElementById("' + widget + '").value;');
	window.clipboardData.setData("text", text);
	}
}


function controllerWindow(winID, winName, winURL, winWidth, winHeight, winParams)
{
var winLeft=(screen.width-winWidth)*.5;
var winTop=(screen.height-winHeight)*.5;
var winStr='width=' + winWidth + ', height=' + winHeight + ', left=' + winLeft + ', top=' + winTop;
winStr+=winParams;
	if(!winID || winID.closed)
	{
	winID=window.open(winURL, winName, winStr);
	}
	else
	{
	winID.focus();
	}
return winID;
}