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 inputStr=inputVal.toString();
	return (canBeEmpty && inputStr.length == 0) ? true : /^-?(\d)+$/.test(inputStr);
}

function isFloat(inputVal) {
	var str = inputVal.toString();
	return /^-?\d+(\.(\d)+)?$/.test(str);
}

function checkInputText(control,format,desc) {

	var bRes=true;
	var errMsg = '';
	var v = control.value;
	if (format!='') {

		datatype=format.substr(0,1);
		var bRange = false;
		if (format.match(/\S:\[(\S{0,});(\S{0,})\]/)) {
			bRange = true;
			var range = format.replace(/\S:\[(\S{0,});(\S{0,})\]/,'$1:$2').split(':');
		}

		switch(datatype) {

			case 'i' :
				if (!(bRes = isInteger(v,true))) {
					errMsg = 'must be integer value!';
				} else if (bRange && (errMsg = checkNumberRange (control,range[0],range[1],desc))!=false) {
					bRes = false;
				}
			break;
			case 'n' :
				if (!(bRes = isInteger(v,false))) {
					errMsg = 'must be non-empty integer value!';
				} else if (bRange && (errMsg = checkNumberRange(control,range[0],range[1],desc))!=false) {
					bRes = false;
				}
			break;
			case 'f' :
				if(!(bRes = isFloat(v))) {
					errMsg = 'must be float value!';
				} else if (bRange && (errMsg = checkNumberRange(control,range[0],range[1],desc))!=false) {
					bRes = false;
				}
			break;
			case 's' :
				if (bRange && (errMsg = checkStringLengthRange(control,range[0],range[1],desc))!=false) {
					bRes = false;
				}
			break;
		}
	}

	if (!bRes) {
		onError(control);
		showAlert(desc+' '+errMsg);
		control.focus();
	}
	return bRes;
}

function checkList(el,f,d) {
var f = f.split(';');
var nodeStart = el.childNodes[0].firstChild.nodeName == 'LEGEND' ? 1 : 0;
if (el.childNodes[nodeStart].firstChild.type == 'checkbox' && el.getAttribute('format')!=null) {
	for(var i=nodeStart;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=nodeStart;i<el.childNodes.length;i++) {
		if (el.childNodes[i].firstChild.checked==true) {
			return true
		}
	}
	showAlert('Select one option from the '+d+' list');
	return false;
}
return true;
}

function checkNumberRange (control, minVal, maxVal, desc) {

	var errMsg = false;

	if (minVal!='' && Number(minVal)>Number(control.value)) {
		errMsg = 'must be '+minVal+' minimum!';
	}
	if (maxVal!='' && !errMsg && Number(maxVal)<Number(control.value)) {
		errMsg = 'must be '+maxVal+' maximum!';
	}
	return errMsg;
}

function checkStringLengthRange (control, minVal, maxVal, desc) {

	var errMsg = false;
	if (minVal != '' && Number(minVal)>Number(control.value.length)) {
		errMsg = 'must be '+minVal+' length minimum!';
	}
	if (maxVal != "" && !errMsg && Number(maxVal)<Number(control.value.length)) {
		errMsg = 'must be '+maxVal+' length maximum!';
	}
	return errMsg;
}

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) return '';
if (el.getAttribute('desc')) return el.getAttribute('desc');
else if (el.getAttribute('title')) return el.getAttribute('title');
else return (el.getAttribute('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$)/i;
	if (str.search (re) == -1) {
		theControl.value = "";
		showAlert ("Only *.jpg files are allowed! ");
	}
	}
}

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)) {

		if (el.getAttribute('match')) {
			var pattern = el.getAttribute('match');
			if (!(new RegExp(pattern)).test(el.value)) {
				showAlert(desc);
				el.focus();
				return false;
			}
		}

		switch (el.nodeName.toLowerCase()) {
		case 'input' : {
			switch (type) {

				case 'password' :
				case 'text' :
					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 (doRadio) {
		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;
}

