var view = '';
function onError(control) {
	if (view!='' && control.getAttribute('group') && typeof(showPage)=='function') {
		control.offsetHeight==0 ? showPage(control.getAttribute('group')) : '';
	}
}

function isInteger(inputVal,canBeEmpty){
	var bRes=true;
	inputStr=inputVal.toString();
	if (!canBeEmpty && inputStr.length == 0) {
		return false;
	}
	for (var i=0;i<inputStr.length;i++) {
		var oneChar=inputStr.charAt(i);
		if (i==0 && oneChar=="-") {
			continue;
		}
		if (oneChar<"0" || oneChar>"9") {
			bRes=false;
			break;
		}
	}
	return bRes;
}

function isFloat(inputVal) {	
	var bRes=true;
	oneDecimal=false;
	inputStr=inputVal.toString();
	for (var i=0;i<inputStr.length;i++) {
		var oneChar=inputStr.charAt(i);
		if (i==0 && oneChar=="-") {
			continue;
		}
		if (oneChar=="." && !oneDecimal) {
			oneDecimal=true;
			continue;
		}
		if (oneChar<"0" || oneChar>"9") {
			bRes = false;
			break;
		}
	}
	return bRes;
}

function checkInputText(control,format,desc) {

	var bRes=true;
	if (format!="") {
		datatype=format.substr(0,1);
		if (datatype=="i") {
			if (!isInteger(control.value,true)) {
				onError(control);
				showAlert(desc+" must be integer value!");
				control.focus();
				bRes=false;
			} else if (format.indexOf(":")>-1) {
				minRange=extractMinRange(format);
				maxRange=extractMaxRange(format);
				bRes=checkNumberRange(control,minRange,maxRange,desc);
			}
		} else if (datatype == "n") {
			if (!isInteger (control.value, false)) {
				onError(control);
				showAlert (desc + " must be non-empty integer value!");
				control.focus ();
				bRes = false;
			} else if (format.indexOf (":") > -1) {
				 minRange = extractMinRange (format);
				 maxRange = extractMaxRange (format);
				 bRes = checkNumberRange (control, minRange, maxRange, desc);
			}			 
		} else if (datatype == "f") {
			if (!isFloat (control.value)) {
				onError(control);
				showAlert (desc + " must be float value!");
				control.focus ();
				bRes = false;
			} else if (format.indexOf (":") > -1) {
				 minRange = extractMinRange (format);
				 maxRange = extractMaxRange (format);
				 bRes = checkNumberRange (control, minRange, maxRange, desc);
			}
		} else if (datatype == "s") {
			if (format.indexOf (":") > -1) {
				 minRange = extractMinRange (format);
				 maxRange = extractMaxRange (format);
				 bRes = checkStringLengthRange (control, minRange, maxRange, desc);
			}
		}
	}
	return bRes;
}

function checkList(el,f,d) {
var f = f.split(';');
// 0 - legend
if (el.childNodes[1].firstChild.type == 'checkbox') {
	for(var i=1;i<el.childNodes.length;i++) {
		if (f.indexOf(el.childNodes[i].firstChild.value)!=-1 && el.childNodes[i].firstChild.checked!=true) {
			showAlert('Mandratory field "'+el.childNodes[i].lastChild.firstChild.nodeValue+'" in fieldset "'+d+'" not selected!');
			return false;
		}
	}
} else {
	for(var i=1;i<el.childNodes.length;i++) {
		if (el.childNodes[i].firstChild.checked==true) {
			return true
		}
	}
	showAlert('Please select an option in "'+d+'"!');
	return false;
}
return true;
}

function extractMinRange (str) {
return str.replace('[','').replace(']','').split(':').join(';').split(';')[1];
}

function extractMaxRange (str) {
return str.replace('[','').replace(']','').split(':').join(';').split(';')[2];
}						 	

function checkNumberRange (control, minVal, maxVal, desc){
	var bRes = true;
	if (minVal!="") {
		if(Number(minVal)>Number(control.value)) {
			onError(control);
			showAlert(desc+" must be "+minVal+" minimum!");
			control.focus();
			bRes=false;
		}
	}
	if (maxVal!="" && bRes) {
		if(Number (maxVal) < Number (control.value)) {
			onError(control);
			showAlert (desc + " must be " + maxVal + " maximum!");
			control.focus ();
			bRes = false;
		}
	}
	return bRes;
}

function checkStringLengthRange (control, minVal, maxVal, desc)
{
	var bRes = true;
	if (minVal != "") {
		if (Number (minVal) > Number (control.value.length)) {
			onError(control);
			showAlert (desc + " must be " + minVal + " length minimum!");
			control.focus ();
			bRes = false;
		}
	}
	   if (maxVal != "" && bRes) {
		if (Number (maxVal) < Number (control.value.length)) {
			onError(control);
			showAlert (desc + " must be " + maxVal + " length maximum!");
			control.focus ();
			bRes = false;
		}

	}
	return bRes;
}

function checkSelect (control, format, desc)
{
	var bRes = true;
	if (format != "") {
		if (format.indexOf ("!") > -1) {
			restrVal = format.substr (format.indexOf ("!") + 1);
			if ((control.selectedIndex == -1) || (control.options[control.selectedIndex].value == restrVal)) {
				onError(control);
				showAlert("Choose other option for " + desc + "!");
				control.focus();
				bRes = false;
			}
		}
	}
	return bRes;
}

function checkInputCheckbox (control, format, desc)
{
	var bRes = true;
	if (format != "") {
		if (format == "true") {
			if (!control.checked) {
				onError(control);
				showAlert ("You must check " + desc + "!");
				control.focus ();
				bRes = false;
			}
		} else if (format == "false") {
			 if (control.checked) {
				onError(control);
				showAlert ("You must uncheck " + desc + "!");
				control.focus ();
				bRes = false;
			}
		}
	}
	return bRes;
}

function getDesc(el)
{
if (el.getAttribute('desc'))
	return el.getAttribute('desc');
else if (el.getAttribute('title'))
	return el.getAttribute('title');
else
	return el.name.replace('PST_CTRL_','').replace('GET_CTRL_','');
}

function checkInputRadioByName(form,name,desc) {
	var i = 0;
	var noempty = false;
	for(i=0;i<form.elements.length;i++) {
		if(form.elements[i].getAttribute('name')==name && form.elements[i].getAttribute('type')=='radio') {
			noempty=noempty||form.elements[i].checked;
		}
	}
	if (!noempty) {
		showAlert("Choose any option for "+desc+"!");
	}
	return noempty;
}

function bulkUsersTabKeyDown (){
	if(event.keyCode==9) {
		with(document.selection.createRange()) {
			text='\t';
			select();
		}
		event.returnValue=false;
	}
}

function checkCalendar(form,calName)
{
var year=0,mon=0,day=0;

for(var i=0;i<form.elements.length;i++) {
	var el = form.elements[i];
	var desc = getDesc(el);
	var type;
	if (el.selectedIndex)
		var value = el.options[el.selectedIndex].value;
	if (el.getAttribute('part_of')==calName && el.nodeName=='SELECT') {

		switch(el.getAttribute('name').replace(calName,'')) {
		case '_mon'  : {type = 'month'; mon = value;break;}
		case '_year' : {type = 'year'; year = value;break;}
		case '_day'  : {type = 'day'; day = value;break;}
		}

		if (!el.selectedIndex) {
			showAlert("Choose any option for "+type+" in "+desc+"!");
			return false;
		}
	}
}

if (form.elements[calName+'_format'])
if (form.elements[calName+'_format'].value){
	var timestamp = year+mon+day;
	var format = form.elements[calName+'_format'].value;
	var max = extractMaxRange(format);
	var min = extractMinRange(format);

	if ((timestamp<max) && (timestamp>min)){
	} else {
		showAlert("Selected date ("+timestamp+") in "+desc+" must be between "+min+" and "+max+" values!");
		return false;
	}
}

return true;
}

function calendarSetValue(frm,prefix,control,format,delimiter){
	doc=document;
	y=doc.forms[frm.name].elements[prefix+'_year'];
	m=doc.forms[frm.name].elements[prefix+'_mon'];
	d=doc.forms[frm.name].elements[prefix+'_day'];
	ret=doc.forms[frm.name].elements[control];

	if(m.value<10){mvalue='0'+m.value;}else{mvalue=m.value;}
	if(format=='YYYYMMDD'){
		ret.value=y.value+delimiter+(mvalue)+delimiter+d.value;
	}else if(format=='YYYYDDMM'){
		ret.value=y.value+delimiter+(d.value)+delimiter+mvalue;
	} else if (format=="DDMMYYYY"){
		ret.value=d.value+delimiter+(mvalue)+delimiter+y.value;
	} else if (format=="MMDDYYYY"){
		ret.value=(mvalue)+delimiter+d.value+delimiter+y.value;
	}else if(format=='DDYYYYMM'){  
		ret.value=d.value+delimiter+y.value+delimiter+mvalue;
	}else if(format=='MMYYYYDD'){
		ret.value=mvalue+delimiter+y.value+delimiter+d.value;
	}
}

function calendarChangeYM(frm,prefix,control,format,delimiter){
	daysInMonth=new Array(0,31,29,31,30,31,30,31,31,30,31,30,31);
	doc=document;
	y=doc.forms[frm.name].elements[prefix+'_year'];
	m=doc.forms[frm.name].elements[prefix+'_mon'];
	d=doc.forms[frm.name].elements[prefix+'_day'];
	days=daysInMonth[m.value];	
	if (m.value=='all'){
		days=31;		
	}else{
		if (y.value!='all' && ((y.value-2004)%4)!=0 && m.value==2 ){
			days=28;								
		}
	}
	dvalue=d.value;
	d.length=0;
	d.options[0] = new Option('','all');
	for(i=1;i<days+1;i++){
		if(i<10) {val='0'+(i);} else {val=(i);}
		d.options[i] = new Option(val,val);
	}
	if(dvalue>(d.length-1))
		d.selectedIndex=d.length-1;
	else	
		d.selectedIndex=dvalue;	
	ret=doc.forms[frm.name].elements[control];
	if ((doc.activeElement==m && m.value=='all') ||
		(doc.activeElement==y && y.value=='all') ){
		y.selectedIndex=0;
		m.selectedIndex=0;
		d.selectedIndex=0;
		ret.value=0;
	} else {
		if (m.value=='all' || y.value=='all' || d.value=='all'){
			if (doc.activeElement!=y) y.selectedIndex=1;
			if (doc.activeElement!=m) m.selectedIndex=1;
			if (doc.activeElement!=d) d.selectedIndex=1;
		} 
		calendarSetValue(frm,prefix,control,format,delimiter);
	}
}

function calendarChangeDay(frm,prefix,control,format,delimiter){
	doc=document;
	y=doc.forms[frm.name].elements[prefix+'_year'];
	m=doc.forms[frm.name].elements[prefix+'_mon'];
	d=doc.forms[frm.name].elements[prefix+'_day'];
	ret=doc.forms[frm.name].elements[control];
	if(d.value=='all' && ret.value!=0){
		y.selectedIndex=0;
		m.selectedIndex=0;
		ret.value=0;
	} else {
		if (d.value=='all' || m.value=='all' || y.value=='all'){
			if (doc.activeElement!=y) y.selectedIndex=1;
			if (doc.activeElement!=m) m.selectedIndex=1;
			if (doc.activeElement!=d) d.selectedIndex=1;
		} 		
		calendarSetValue(frm,prefix,control,format,delimiter);
	}
}

function onCheckUploads (theControl)
{
	if (theControl.value != "") {
	var str = theControl.value;
	//re = /(.jpg$)|(.jpeg$)|(.png$)|(.gif$)/i;
	re = /(.jpg$)/i;
	if (str.search (re) == -1) {
		theControl.value = "";
		showAlert ("Only *.jpg files are allowed! ");
	}
	}
}

function extractFormat(el){
var str = el.getAttribute('format').replace('[','').replace(']','')
return (str.split(':').join(';').split(';'))
}

function test(form) {
alert(form.nodeName);
alert('test');
return false;
}

function checkFields(form,postfunction) {

var radioNames = new Array();
var calendarNames = new Array();

if (typeof(updateRTEs) == 'function') {
	updateRTEs();
}

for(var i=0;i<form.elements.length;i++) {
	var el = form.elements[i];

	var type = el.type;
	var name = el.name;

	var format = el.getAttribute('format') || '';
	var desc = getDesc(el);

	if (el.getAttribute('validated')=='true' && (!el.disabled || !el.readonly)) {

		switch (el.nodeName) {
		case 'INPUT' : {switch (type) {
					case 'text' : {	if (el.getAttribute('match')) {
								var pattern = el.getAttribute('match');
								if (!el.value.match(pattern)) {
									showAlert(desc);
									el.focus();
									return false;
								}
							} else {
								if (!checkInputText(el, format, desc)) return false;
							}

							break; }
					case 'password' : { if (!checkInputText(el, format, desc)) return false; break; }
					case 'checkbox' : { if (!checkInputCheckbox(el, format, desc)) return false; break; }
					case 'radio' : {
							if (radioNames.indexOf(name)==-1) {
								radioNames.push(name);
								if (!checkInputRadioByName(form,name,desc)) return false;
							}
							}
					case 'hidden' : {
							if (el.parentNode.className == 'AWLTimeControl') {
								if (!el.value>0) {
									showAlert('Please select '+desc+'!');
									return false;
								}
							}
							}
					default : { }
				}
				break; }
		case 'FIELDSET' : { if (!checkList(el,format,desc)) return false; break; }
		case 'TEXTAREA' : { if (!checkInputText(el, format, desc)) return false; break; }
		case 'SELECT'   : { if (el.getAttribute('part_of')) {
					if (calendarNames.indexOf(el.getAttribute('part_of'))==-1) {
						calendarNames.push(el.getAttribute('part_of'));
						if (!checkCalendar(form,el.getAttribute('part_of')))
							return false;
					}
				} else {

					if (!checkSelect(el, format, desc)) 
						return false; 
				}

				break; }
		}

	} else if(type=='radio' && (!el.disabled || !el.readonly)) {

		if (radioNames.indexOf(name)==-1) {
			radioNames.push(name);
			if (!checkInputRadioByName(form,name,desc)) return false;
		}

	} else if (type=='text' && el.parentNode.className=='suggest') {

		if (el.nextSibling) {
			if (typeof(clearSuggest) == 'function') {
				clearSuggest();
			}
			return false;
		} else {
			if (!el.previousSibling.getAttribute('column')) {
				el.previousSibling.value = el.value;
			}
		}
	}
}
return eval(postfunction+"(form)");
}
//-----------------------------------------------------------------------------
Array.prototype.indexOf = function (s) {
var l = this.length;
var i = 0;
	for (i=0;i<l;i++) if (this[i]==s) return i;
return -1;
}