// InterDyn - Form
// Copyright 2002-2009 JP7
// http://jp7.com.br
// Versão 0.95 - 2009/03/04 by JP


// Basics

function DFcheckForm(f, onlyObligatory, submitonce, noTargets) {
	if (typeof($) !== 'undefined') {
		if ($(f).find('input.DF-invalid-unique').length) {
			$(f).find('input.DF-invalid-unique').addClass('DF-alert');
			return false;
		}
	}
	
	for (var i = 0; i < f.length; i++) {
		if (!d.layers) {
			if (!f[i].classNameOld) {
				f[i].classNameOld = f[i].className || 'df-null';
			} else {
				f[i].className = f[i].classNameOld;
			} 
		}
	}
	for (var i = 0;i < f.length; i++) {
		if (f[i].type!='checkbox'||f[i].getAttribute('obligatory')=='yes'){
			v = true;
			if (f[i].type == 'text') {
				if (is.ie && is.v < 9 && f[i].getAttribute('placeholder') == f[i].value) {
					f[i].value = '';
				}
				v = f[i].value;
			} else if(f[i].type=='textarea' || f[i].type=='password' || f[i].type=='file') {
				v = f[i].value;
			} else if(f[i].type == 'select-one') {
				v = (f[i].selectedIndex != -1 && f[i][f[i].selectedIndex].value != '0') ? f[i][f[i].selectedIndex].value : '';
			} else if(f[i].type=='radio'){
				v = false;
				for(var j = 0;j < f[f[i].name].length; j++) {
					if (f[f[i].name][j].checked) {
						v = f[f[i].name][j].value;
					}
				}
			} else if(f[i].type=='checkbox' && f[i].getAttribute('obligatory') == 'yes') {
				if (f[f[i].name].length) {
					v = false;
					for (var j = 0; j < f[f[i].name].length; j++) {
						if (f[f[i].name][j].checked) {
							v = true;
							break;
						}
					}
				} else {
					v = f[i].checked;
				}
			} else if ((f[i].type=='hidden'||f[i].style.display=='none'||f[i].style.visibility=='hidden')&&!noTargets) {
				v = true;
				for (var j = 0; j < f.length; j++) {
					if (f[i].name == f[j].getAttribute('target')) {
						if(!f[j].value) {
							v = false;
						}
					}
				}
			}
			if (!v) {
				obligatory=(d.layers)?null:f[i].getAttribute('obligatory')
				if(f[i].type!='hidden'&&f[i].style.display!='none'&&f[i].style.visibility!='hidden'&&!f[i].disabled&&(((!onlyObligatory&&obligatory!='no')||(onlyObligatory&&obligatory=='yes'))||d.layers)){DFcheckFormAlert(f[i]);return false}
			}else{
				if((f[i].type=='text'||f[i].type=='textarea'||f[i].type=='password')&&f[i].style.display!='none'){
					if(!DFcheckMinLength(f[i]))return false
					if(!DFcheckFormPlus(f[i]))return false
					if(!DFcheckWords(f[i]))return false
				}else if(f[i].type=='hidden'&&!d.layers&&!noTargets){
					for(var j=0;j<f.length;j++){if(f[i].name==f[j].getAttribute('target')){f[i].value='';break}}
					for(var j=0;j<f.length;j++){if(f[i].name==f[j].getAttribute('target'))f[i].value+=f[j].value+((f[j].getAttribute('separator'))?f[j].getAttribute('separator'):'')}
					for(var j=0;j<f.length;j++){if(f[i].name==f[j].getAttribute('target')){if(!DFcheckFormPlus(f[i]))return false}}
				}
			}
		}
	}
	if (submitonce) {
		DFsubmitonce(f);
	} 
	return true;
}

function DFscrollTopPosition(){return (is.ie)?d.body.scrollTop:pageYOffset}

function DFcheckFormAlert(f,plus){
	var scrTop=DFscrollTopPosition()
	if(!getElm('form_lang')){
		var form_lang=d.createElement('DIV')
		form_lang.id='form_lang'
		form_lang.style.display='none'
		d.body.appendChild(form_lang)
	}
	if(f.type=='select-one'||f.type=='radio'){
		getElm('form_lang').innerHTML=DF.lang.voce_deve_escolher
		S=getElm('form_lang').innerHTML+' '
	}else if(f.type=='checkbox'){
		S=DF.lang.voce_deve_escolher+' '
	}else if(plus)S=DF.lang.valor_invalido_do_campo+' '
	//else S='Você deve preencher o campo '
	else{
		getElm('form_lang').innerHTML=DF.lang.voce_deve_preencher_o_campo
		S=getElm('form_lang').innerHTML+' '
	}
	label=(d.layers)?f.name:f.getAttribute('label')
	label=(label)?label:f.name
	S+=label
	if(plus=='password')S=label+' e sua confirmação não possuem os mesmos valores'
	if(plus=='minlength')S='O campo '+label+' deve ter no mínimo '+f.getAttribute('minlength')+' caracteres'
	if(plus=='checkWords')S='O campo '+label+' contém palavras não permitidas'
	if(f.type!='hidden'&&f.style.display!='none'&&f.style.visibility!='hidden'){
		if(!d.layers){
			if(plus=='password'){for(var i=0;i<f.form.length;i++){if(f.form[i].getAttribute('xtype')=='password')f.form[i].className='DF-alert'}}
			else if(f.type=="radio"){for(var i=0;i<f.form[f.name].length;i++){f.form[f.name][i].className='DF-alert-radio'}}
			else if(f.type=="checkbox"&&f.form[f.name].length){for(var i=0;i<f.form[f.name].length;i++){f.form[f.name][i].className='DF-alert'}}
			else f.className=f.className+' DF-alert'
		}
		f.focus()
	}else if(!d.layers){
		for(var i=0;i<f.form.length;i++){if(f.form[i].getAttribute('target')==f.name)f.form[i].className='DF-alert'}
		for(var i=0;i<f.form.length;i++){if(f.form[i].getAttribute('target')==f.name){f.form[i].focus();break}}
	}
	if(scrTop!=DFscrollTopPosition())scrollBy(null,scrTop>DFscrollTopPosition()?-20:80)
	alert(S)
}

function DFcheckMinLength(f){
	minLength=(d.layers)?null:f.getAttribute('minlength')
	if(minLength){if(f.value.length<minLength){DFcheckFormAlert(f,'minlength');return false}}
	return true
}

function DFcheckFormPlus(f){
	xtype=(d.layers)?null:f.getAttribute('xtype')
	if(xtype){
		S='DFcheck'+xtype.charAt(0).toUpperCase()+xtype.substring(1).toLowerCase()
		if(isDef(S)){if(!eval(S)((xtype=='password')?f:f.value)){DFcheckFormAlert(f,xtype);return false}}
	}
	return true
}

function DFcheckWords(f){
	var forbideen=new Array(
		'bosta',
		'buceta',
		'caralho',
		'merda',
		'tomar no cu'
	)
	for(key in forbideen){
		if(f.value.toLowerCase().indexOf(forbideen[key])!=-1){
			DFcheckFormAlert(f,'checkWords')
			return false
		}
	}
	return true
}


// Plus Checks

function DFcheckNumber(v){if(!isNaN(v))return true}

function DFcheckDate(v){
	if(v.length!=10)return false
	var date=v.split('/')
	var d=parseInt(date[0],10)
	var m=parseInt(date[1],10)
	var y=parseInt(date[2],10)
	if(!DFcheckDateDay(d))return false
	else if(!DFcheckDateMonth(m))return false
	else if(m==2&&d>29)return false
	else if(!(m%2)&&m<9&&d==31)return false
	else if((m%2)&&m>=9&&d==31)return false
	return true
}

function DFcheckDateDay(v){if(v>=1&&v<=31)return true}
function DFcheckDateMonth(v){if(v>=1&&v<=12)return true}

function DFcheckBirthday(v){
	if(!DFcheckDate(v))return false
	var date=v.split('/')
	var d=date[0]
	var m=date[1]
	var y=date[2]
	date=parseInt(date[2]+date[1]+date[0],10)
	if(date<19000101||date>((isDef('DFdate'))?DFdate:20020101))return false
	return true
}

function DFcheckEmail(v) {
	return /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9.-]+$/.test(v);
}

function DFcheckCpf(v){
	var s=null
	var r=null
	v = v.replace(/[.-]/g,'')
	if(v.length!=11||
		v=='00000000000'||v=='11111111111'||v=='22222222222'||v=='33333333333'||v=='44444444444'||
		v=='55555555555'||v=='66666666666'||v=='77777777777'||v=='88888888888'||v=='99999999999')return false
	s=0
	for(var i=0;i<9;i++)s+=parseInt(v.charAt(i))*(10-i)
	r=11-(s%11)
	if(r==10||r==11)r=0
	if(r!=parseInt(v.charAt(9)))return false
	s=0
	for(var i=0;i<10;i++)s+=parseInt(v.charAt(i))*(11-i)
	r=11-(s%11)
	if(r==10||r==11)r=0
	if(r!=parseInt(v.charAt(10)))return false
	return true
}

function DFcheckPassword(f){
	for(var i=0;i<f.form.length;i++){
		if(f.form[i].getAttribute('xtype')=='password'&&f.form[i]!=f){
			if(f.form[i].value&&f.value!=f.form[i].value)return false
		}
	}
	return true
}


// Tools

function DFselectRadio(radio,i){eval(radio)[parseInt(i)].checked='true'}

function DFtextareaMaxLength(f,length,e){
	if(e.type=="paste"){
		if(f.value.length+clipboardData.getData('Text').length>=length){
			clipboardData.setData('Text',clipboardData.getData('Text').substring(0,length-f.value.length))
			alert('O número máximo de caracteres para este campo foi excedido.')
		}
		return true
	}else{
		if(is.ns){if(e.which==0||e.which==8)return true}
		if(f.value.length>=length)return false
	}
}

function DFtextareaCounter(f,counter){eval('f.form.'+counter).value=f.value.length}

// 2008/09/10 by JP
function DFchangeField(f,e){
	var key=null
	if(window.event)key=window.event.keyCode
	else if(e)key=e.which
	if(f.value.length==f.getAttribute('maxLength')&&key!=9&&key!=16&&key!=13&&key!=27){
  		for(var i=0;i<f.form.length;i++){
    		if(f.form[i]==f&&f.form[i+1]){
				f.form[i+1].focus();
				break;
			}
		}
	}
}

function DFonlyThisChars(numbers,letters,others,e){
	if(window.event)key=window.event.keyCode
	else if(e)key=e.which
	else return true
	S=(others)?others:''
	if(numbers)S+='0123456789'
	if(letters)S+='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
	if(key==null||key==0||key==8||key==9||key==13||key==27)return true
	else if(S.indexOf(String.fromCharCode(key))!=-1)return true
	else return false
}

function DFnotOnlyThisChars(S,e){
	if(window.event)key=window.event.keyCode
	else if(e)key=e.which
	else return true
	if(!S)return false
	else if(key==null||key==0||key==8||key==9||key==13||key==27)return true
	else if(S.indexOf(String.fromCharCode(key))!=-1)return false
	else return true
}

function DFsubmitonce(f){
	if(!d.layers){
		for(var i=0;i<f.length;i++){
			if(f[i].type=='submit'||f[i].type=='reset'||f[i].type=='image'||f[i].type=='button')f[i].disabled=true
		}
	}
}

function DFchangeLocationOnSelect(f,prefix){
	var v=f[f.selectedIndex].value
	if(v){
		if(prefix)v=prefix+v
		if(v.indexOf('#_blank')!=-1)window.open(v.substring(0,v.indexOf('#_blank')))
		else if(v.indexOf('#_parent')!=-1)parent.location=v.substring(0,v.indexOf('#_parent'))
		else location=v
	}
	else f.selectedIndex=0
	return false
}

function DFreset(f){
	if(confirm('Tem certeza?'))f.reset()
	return false
}

function DFselectAll(f){
	f.checked=(f.checked)?false:true
	if(confirm(((!f.checked)?DF.lang.tem_certeza_que_deseja_SELECIONAR_todos_os_itens:DF.lang.tem_certeza_que_deseja_NAO_SELECIONAR_todos_os_itens)+'?')){
		f.checked=(f.checked)?false:true
		formname=f.id.substring(0,f.id.indexOf('_all'))
		for(var i=0;i<f.form[formname].length;i++){
			f.form[formname][i].checked=f.checked
		}
	}else{
		f.checked=(f.checked)?true:false
	}
}

function DFselectAllCheck(f){
	var i_checked=0
	for(var i=0;i<f.form[f.name].length;i++){
		if(f.form[f.name][i].checked)i_checked++
	}
	getElm([f.name]+'_all').checked=(i_checked==f.form[f.name].length)
}


// Auto Complete

function DFautocomplete(search,target,result){
	DFautocompleteStart=true
	find=false
	if(DFautocompleteOK){
		if(search.value){
			src=toId(search.value)
			result.length=0
			for(var i=0;i<target.length;i++){
				if(toId(target[i].text).indexOf(src)!=-1&&target[i].value){
					result.length++
					result[result.length-1].value=target[i].value
					result[result.length-1].text=target[i].text
					result.size=(result.length>25)?25:result.length
					result.style.display=''
					find=true
				}
			}
		}
		if(!find){
			result.length=0
			result.size=result.length
			result.style.display='none'
		}
	}
}

var DFautocompleteStart=false
var DFautocompleteOK=true
var DFautocompleteResultOnchange=false

function DFautocompleteArrows(search,target,e){
	if(window.event)key=window.event.keyCode
	else if(e)key=e.which
	if(key==40){
		DFautocompleteOK=false
		if(target.length==1){
			target.selectedIndex=0
			DFautocompleteFin(target.target,target.value)
		}else{
			target.selectedIndex++
		}
	}else if(key==38){
		DFautocompleteOK=false
		target.selectedIndex--
	}else if(key==13){
		DFautocompleteOK=false
		DFautocompleteFin(target.target,target.value)
		return false
	}else if(key==27){
		DFautocompleteOK=false
		search.result.style.display='none'
	}else{
		DFautocompleteOK=true
	}
}

function DFautocompleteFin(target,value){
	if(DFautocompleteInit){
		for(var i=0;i<target.length;i++){
			if(target[i].value==value){
				target.selectedIndex=i
				break
			}
		}
		target.search.value=target[target.selectedIndex].text
		target.result.style.display='none'
		DFautocompleteStart=false
	}
}

function DFautocompleteCleanup(id) {
	var search = getElm(id);
	if (search.result.style.display == 'none') {
		var searchText = $.trim(search.value).replace(/ /g, '');
		var targetText = $.trim($(search.target).find('option:selected').text().replace(/ /g, '').replace(/\n/g, ''));
		if (searchText != targetText) {
			var selectedoption = null;
			if (search.value) {
				$(search.target).find('option').each(function() {
					if (search.value == $(this).text()) {
						selectedoption = $(this);
						return false;
					}
				});
			}
			if (selectedoption != null) {
				selectedoption.attr('selected', true);
			} else {
				var selectedoption = $(search.target).find('option[value="0"]:first');
				selectedoption.attr('selected', true);
				search.value = selectedoption.text();
			}
			
			search.result.style.display = 'none';
			search.result.resultOnchange = false;
		}
	}
}

function DFautocompleteInit(){
	selects=document.body.getElementsByTagName('select')
	for(i=0;i<selects.length;i++){
		if(selects[i].getAttribute('xtype')=='autocomplete'&&selects[i].offsetWidth){
			DFautocompleteInit2(selects[i])
		}
		if(selects[i].getAttribute('xtype')=='ajax'&&selects[i].offsetWidth){
			DFajaxInit2(selects[i])
		}
	}
}

function DFautocompleteInit2(obj,contentDiv,ajax){
	pos=getElmPos(obj)
	if(contentDiv){
		pos.l-=contentDiv.scrollLeft
		pos.t-=contentDiv.scrollTop
	}
	
	// Result
	var result=d.createElement('select')
	result.target=obj
	result.onclick=function(){
		DFautocompleteFin(this.target,this.value)
	}
	result.resultOnchange=false
	result.onchange=function(){
		this.resultOnchange=true
		DFautocompleteFin(this.target,this.value)
	}
	result.style.width=obj.offsetWidth+'px'
	result.style.position='absolute'
	result.style.left=pos.l+'px'
	result.style.top=(pos.t+obj.offsetHeight)+'px'
	result.style.zIndex='1'
	result.style.display='none'
	result.id=toId(obj.name)+'_myselect'
	//result.name=result.id
	d.body.appendChild(result)
	
	// Search
	var search=d.createElement('input')
	search.autocomplete='off'
	search.type='text'
	search.target=obj
	search.result=result
	search.onclick=function(){
		this.select()
	}
	search.onkeydown=function(e){
		return DFautocompleteArrows(this,this.result,e);
	}
	search.onkeyup=function(e){
		if (window.event) key = window.event.keyCode;
		else if (e) key = e.which;
		if (key == 38 || key == 40 || key == 13 || key == 27) {
			return;
		}
		if (ajax) {
			$(search.target).val(0); // Impede que seja salvo valor, quando busca é inválida
			if (search.value.length < 3) {
				result.length=1;
				result[0].text='Mínimo 3 caracteres para começar a busca...';
				result.style.display='';
			} else {
				clearTimeout(search.timeout);
				func = obj.getAttribute('ajax_function');
				func = func.replace('search', search.value);
				func = func.replace('callback', 'DFajax("'+result.id+'",result)');
				result.length=1;
				result[0].text='Procurando...';
				result.style.display='';
				search.timeout = setTimeout(func, 100);
			}
		} else {
			DFautocomplete(this,this.target,this.result);
		}
	}
	search.onfocus=function(){
		this.result.style.zIndex += 10;
	}
	search.onblur = function() {
		if (this.result.length <= 25) {
			setTimeout('if(!getElm(\''+this.result.id+'\').resultOnchange)getElm(\''+this.result.id+'\').style.display=\'none\';getElm(\''+this.result.id+'\').resultOnchange=false',200);
		}
		setTimeout('DFautocompleteCleanup(\'' + this.id + '\')', 250);
	}
	search.style.width=(obj.autocomplete_width)?obj.autocomplete_width:(obj.offsetWidth-22)+'px'
	search.style.position='absolute'
	if (is.ie && is.v < 7) {
		search.style.left=pos.l+'px'
		search.style.top=pos.t+'px'
	} else {
		search.style.left=(pos.l + 1)+'px'
		search.style.top=(pos.t + 1)+'px'
		search.style.border='none'
	}
	search.style.zIndex='2'
	search.id=toId(obj.name)+'_varchar'
	search.disabled=obj.disabled
	//search.name=search.id
	search.value=obj[obj.selectedIndex].text
	d.body.appendChild(search)

	// Target
	obj.search=search
	obj.result=result
	obj.onchange=function(){
		this.search.value=this[this.selectedIndex].text
		if(is.ie&&is.v<7)this.search.select()
	}
	if(is.ie&&is.v<7){
		selects[i].originalWidth=selects[i].offsetWidth
		selects[i].style.marginLeft=(selects[i].originalWidth-20)+'px'
		selects[i].style.width='20px'
		selects[i].onfocus=function(){
			this.style.marginLeft='0px'
			this.style.width=this.originalWidth+'px'
		}
		selects[i].onblur=function(){
			this.style.marginLeft=(this.originalWidth-20)+'px'
			this.style.width='20px'
		}
	}
}

function DFautocompleteRepos(source){
	selects=document.body.getElementsByTagName('select')
	for(i=0;i<selects.length;i++){
		if((selects[i].getAttribute('xtype')=='autocomplete'||selects[i].getAttribute('xtype')=='ajax')&&selects[i].offsetWidth){
			DFautocompleteRepos2(selects[i],source)
		}
	}
}

function DFautocompleteRepos2(obj,source){
	pos=$(obj).offset()
	if(obj.result){
		obj.result.style.left=pos.left+'px'
		obj.result.style.top=(pos.top+obj.offsetHeight)+'px'
		obj.search.style.left=(pos.left+1)+'px'
		obj.search.style.top=(pos.top+1)+'px'
	}
}


// Ajax

function DFajax(obj,result_arr){
	obj = getElm(obj);
	result = obj
	target = result.target
	if(result_arr){
		result.length = 0
		target.length = 2
		if(result_arr.length>100){
			result.length++
			result[result.length-1].text='Resultado muito grande. Mostrando os primeiros 100 registros.'
		}
		for(x in result_arr){
			if (result.length <= 100) {
				target.length++
				target[target.length-1].value=result_arr[x].value
				target[target.length-1].text=result_arr[x].text
				result.length++
				result[result.length-1].value=result_arr[x].value
				result[result.length-1].text=result_arr[x].text
				result.size=(result.length>25)?25:result.length
				result.style.display=''
			}
		}
	}else{
		result.style.display='none'
	}
}

function DFajaxInit2(obj,contentDiv){
	DFautocompleteInit2(obj,contentDiv,true)
}


// Dicionário Português

DF=new Object()

DF.lang={
		lang:'pt-br',
		valor_invalido_do_campo:'Valor inválido do campo',
		voce_deve_preencher_o_campo:'Você deve preencher o campo',
		voce_deve_escolher:'Você deve escolher',
		redo:           'Refazer',
		selecionar:'Selecionar',
		nao_selecionar:'Não Selecionar',
		tem_certeza_que_deseja_SELECIONAR_todos_os_itens:'Tem certeza que deseja SELECIONAR todos os itens',
		tem_certeza_que_deseja_NAO_SELECIONAR_todos_os_itens:'Tem certeza que deseja NÃO SELECIONAR todos os itens'
};

