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 ins=el.getElementsByTagName('input');
	if(ins[0].type=='checkbox'){
		for(var i=0;i<ins.length;i++){
			var inp=ins[i];
			if(inp.type=='checkbox'&& f.indexOf(inp.value)!=-1&&!inp.checked){
				showAlert('Mandratory field "'+inp.nextSibling.firstChild.nodeValue+'" in fieldset "'+d+'" not selected!');
				return false;
			}
		}
	}else{
		for(var i=0,check=false;i<ins.length;i++){
			if(ins[i].checked){
				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){return el.getAttribute('desc')||el.getAttribute('title')||(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=calendarNames=[];

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(radioNames.indexOf(name)==-1){
			radioNames.push(name);
			if(!checkInputRadioByName(form,name,desc)) return false;
		}
	}
}
return eval(postfunction+"(form)");
}

function Validator(config){
	var ss = document.getElementsByTagName('script');
	var form = ss[ss.length-1].previousSibling,check=null;

	for(var field in config){
		check=config[field];
		if(form.elements[field]){
			var el = form.elements[field];
			el.setAttribute('validated','true');
			for(var att in check){
				el.setAttribute(att,check[att]);
			}
		}
	}
	if(!form.onsubmit){
		form.onsubmit=_chk;
	}
	function _chk(){
		return checkFields(this,'');
	}
}

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;
}
