/**
 * @author SimonDevil
 */
var cc = codexd;

function newForm(p){
	this.cont = (p.cont)?cc.$cc(p.cont):document.body;
	this.form = formCreate;
	this.add = add2form;
	this.fld = newField;
	this.btn = newButton;
	this.rf = requireField;
	this.fill = fillDictionary;
	this.sel = selDef;
	this.form(p);
}

function submitDisable(form,d){
	var childs = form.elements;
	for (var i=0; i<childs.length;i++){
		if(childs[i].type == 'submit'){			
			childs[i].disabled = d;
			return;
		}else{
			continue;
		}
	}	
}

function formCreate(p){
	if(cc.defined(p) && !cc.empty(p)){
			this.f = new Form(p);
			if(cc.defined(p.msg) && !cc.empty(p.msg)){
				this.bf = document.createElement('fieldset');
				this.bf.id = this.f.id+"_fieldset";
				this.fl = document.createElement('legend');
				this.fl.innerHTML = p.msg;
					this.bf.appendChild(this.fl);
					this.bf.appendChild(this.f);
				this.cont.appendChild(this.bf);
			}else{
				this.cont.appendChild(this.f);
			}
	}else{
		return;
	}
}

function Form(p){
	if (cc.defined(p)) {				
		var f = document.createElement('form');
		cc.defined(p.id)?f.id = p.id:'';
		cc.defined(p.name)?f.name = p.name:'';
		cc.defined(p.action)?f.action = p.action:'';
		cc.defined(p.method)?f.method = p.method:'';
		cc.defined(p.enctype)?f.enctype = p.enctype:'';
		cc.defined(p.target)?f.target = p.target:'';
		cc.defined(p.acceptCharset)?f.acceptCharset = p.acceptCharset:'';
		
		cc.defined(p.onclick)?f.onclick = function(){eval(p.onclick)}:'';
		cc.defined(p.ondblclick)?f.ondblclick = function(){eval(p.ondblclick)}:'';
		cc.defined(p.onmousedown)?f.onmousedown = function(){eval(p.onmousedown)}:'';
		cc.defined(p.onmousemove)?f.onmousemove = function(){eval(p.onmousemove)}:'';
		cc.defined(p.onmouseout)?f.onmouseout = function(){eval(p.onmouseout)}:'';
		cc.defined(p.onmouseover)?f.onmouseover = function(){eval(p.onmouseover)}:'';
		cc.defined(p.onmouseup)?f.onmouseup = function(){eval(p.onmouseup)}:'';
		cc.defined(p.onkeydown)?f.onkeydown = function(){eval(p.onkeydown)}:'';
		cc.defined(p.onkeypress)?f.onkeypress = function(){eval(p.onkeypress)}:'';
		cc.defined(p.onkeyup)?f.onkeyup = function(){eval(p.onkeyup)}:'';
		cc.defined(p.onreset)?f.onreset = function(){eval(p.onreset)}:''; 	 
		cc.defined(p.onsubmit)?f.onsubmit = function(){eval(p.onsubmit)}:'';
		return f;	 
	}
}

function add2form(add,i,p){
	if(this.f){
		this.f.appendChild(add);
		codexd.addEvent(this.f, 'submit', function(e){
			if (codexd.defined(p.r)) {
				if(!validField(i)){
					if (e.preventDefault)
                    	e.preventDefault();
                	else e.returnValue = false;
				}
			}
			if (codexd.defined(p.im)) {
				if(!validEmail(i)){
					if (e.preventDefault)
                    	e.preventDefault();
                	else e.returnValue = false;
				}
			}
		});	
	}
}

function newField(p){
	if(cc.defined(p)){
		var dl = document.createElement('dl');
		var dt = document.createElement('dt');
		var dd = document.createElement('dd');
		var lb = document.createElement('label');
			lb.htmlFor = p.id;
			dl.appendChild(dt);												
				dt.appendChild(lb);
			dl.appendChild(dd);
				
		var i = (p.type == 'desc')?document.createElement('textarea'):(p.type == 'select')?document.createElement('select'):document.createElement('input');
		cc.defined(p.msg)?i.msg = p.msg:'';
		 
		cc.defined(p.id)?i.id = p.id:'';
		cc.defined(p.name)?i.name = p.name:'';
			
		(cc.defined(p.type) && p.type != 'desc' && p.type != 'select')?i.type = p.type:'';
		
		switch(p.type){
			case('desc'): 
				cc.defined(p.rows)?i.rows = p.rows:'';
				cc.defined(p.cols)?i.cols = p.cols:'';
				cc.defined(p.value)?i.value = p.value:'';
			break;
			case('text'):
			case('file'):
				cc.defined(p.readonly)?i.readonly = p.readonly:'';
				cc.defined(p.size)?i.size = p.size:'';
				cc.defined(p.value)?i.value = p.value:'';
				cc.defined(p.maxlength)?i.maxlength = p.maxlength:'';
			break;
			case('select'):
			break;
			case('image'):
				cc.defined(p.src)?i.src = p.src:'';
				cc.defined(p.alt)?i.alt = p.alt:'';
			break;
			case('radio'):
			case('checkbox'):
				cc.defined(p.checked)?i.checked = p.checked:'';
				cc.defined(p.value)?i.value = p.value:'';
			break;
		}
		
		cc.defined(p.c)?i.className = p.c:'';
		cc.defined(p.style)?i.style = p.style:'';
		cc.defined(p.onvalid)?i.onvalid = p.onvalid:function(){};			
			
		cc.defined(p.onblur)?i.onblur = function(){eval(p.onblur)}:'';
		cc.defined(p.onchange)?i.onchange = function(){eval(p.onchange)}:'';
		cc.defined(p.onclick)?i.onclick = function(){eval(p.onclick)}:'';
		cc.defined(p.ondblclick)?i.ondblclick = function(){eval(p.ondblclick)}:'';
		cc.defined(p.onfocus)?i.onfocus = function(){eval(p.onfocus)}:'';
		cc.defined(p.onmousedown)?i.onmousedown = function(){eval(p.onmousedown)}:'';
		cc.defined(p.onmousemove)?i.onmousemove = function(){eval(p.onmousemove)}:'';
		cc.defined(p.onmouseout)?i.onmouseout = function(){eval(p.onmouseout)}:'';
		cc.defined(p.onmouseover)?i.onmouseover = function(){eval(p.onmouseover)}:'';
		cc.defined(p.onmouseup)?i.onmouseup = function(){eval(p.onmouseup)}:'';
		cc.defined(p.onkeydown)?i.onkeydown = function(){eval(p.onkeydown)}:'';
		cc.defined(p.onkeypress)?i.onkeypress = function(){eval(p.onkeypress)}:'';
		cc.defined(p.onkeyup)?i.onkeyup = function(){eval(p.onkeyup)}:'';
		cc.defined(p.onselect)?i.onselect = function(){eval(p.onselect)}:'';
		
		cc.defined(p.r)?i.r = p.r:'';
		
		if (p.type != 'submit' && p.type != 'button') {
			lb.innerHTML = cc.defined(p.msg) ? p.msg : '&nbsp;';
			if (cc.defined(p.r) && p.r) {
				if(lb.innerHTML != '') lb.innerHTML = '<font color="red">'+lb.innerHTML+'*</font>';			
				codexd.addEvent(i, 'blur', requireField);
			}
			(cc.defined(p.im) && p.im)?codexd.addEvent(i,'blur',isEmail):'';
			(cc.defined(p.onvalid) && p.onvalid)?codexd.addEvent(i,'blur',eval(''+p.onvalid+'')):'';
			(cc.defined(p.nl) && p.nl)?codexd.addEvent(i,'keyup',numbersLeters):'';
			(cc.defined(p.num) && p.num)?codexd.addEvent(i,'keyup',numbers):'';
			(cc.defined(p.let) && p.let)?codexd.addEvent(i,'keyup',leters):'';
		}else{
			lb.innerHTML =  '&nbsp;';
			i.value = i.msg;
		}
		if(p.type == 'select'){
				cc.defined(p.dict)?i.dict = p.dict:i.dict = [];
				cc.defined(p.def)?i.def = p.def:i.def = '';
			this.fill(i);
		}
		
		dd.appendChild(i);
		this.add(dl,i,p);	
	}
}

function selDef(i){
	var f = i;
	var opt = f.options;
	for(var i=0;i<opt.length;i++){
	}	
}

function fillDictionary(){
	var field = arguments[0];
	var dict = field.dict;
	if(cc.defined(field.r)){
			var empty = document.createElement('option');
			empty.value = '';
			empty.text = '';
			field.appendChild(empty);							
		}
	for(var i=0;i<dict.length;i++){
		var opt = document.createElement('option');
			opt.value = dict[i].value;
			opt.text = dict[i].text;
			if(dict[i].value == field.def){
				opt.selected=true;
		    }
			field.appendChild(opt);
	}
}

function newButton(p){
	if (cc.defined(p)){
		p.type = cc.defined(p.submit)?'submit':'button';
		p.value = cc.defined(p.msg)?p.msg:'Submit';
		this.fld(p);	
	}
}

function newDesc(p){
	if (cc.defined(p)){
		p.type = cc.defined(p.submit)?'submit':'button';
		p.value = cc.defined(p.msg)?p.msg:'Submit';
		this.fld(p);	
	}			
}

function isEmail(e){
	var f = this;
	validEmail(f);
}

function numbersLeters(e){
	this.value=this.value.replace(/[^a-ząężśźćńłóA-ZĄĘŻŚŹĆŃŁÓ0-9]/g, '');
}

function numbers(e){
	this.value=this.value.replace(/[^0-9]/g, '');
}

function leters(e){
	this.value=this.value.replace(/[^a-ząężśźćńłóA-ZĄĘŻŚŹĆŃŁÓ]/g, '');
}

function requireField(e){
	var f = this;
	validField(f);
}


function validEmail(i){
	var f = i;
	if(!i.value.match(/^[0-9a-zA-Z_.-]+@([0-9a-zA-Z-]+\.)+[a-zA-Z]{2,6}$/)){
		alert("Podany adres email jest nieprawidlowy");
		window.mtid = window.setTimeout(function(){f.focus(); window.clearTimeout(window.mtid) },100);
		i.style.border = '1px solid red';
		return false;
	}else{
		i.style.border = '';
		return true;
	}
}

function validField(i){
	switch(i.type){
		case('text'):
		case('desc'):
		case('textarea'): 
		case('select-one'):
			return emptyField(i);
		case('checkbox'):
		case('radio'):
			return checkedField(i);
		default: return;		
	}
}

function selectOne(i){
	var f = i;
	if(f.value ==''){
		alert(f.msg+' jest wymagane!');
		window.ftid = window.setTimeout(function(){f.focus(); window.clearTimeout(window.ftid) },100);
		f.style.border = '1px solid red';
		return false;		
	}else{
		f.style.border = '';
		return true;
	}
}

function emptyField(i){
	var f = i;
	if(f.value ==''){
		alert(f.msg+' jest wymagane!');
		window.ftid = window.setTimeout(function(){f.focus(); window.clearTimeout(window.ftid) },100);
		f.style.border = '1px solid red';
		return false;		
	}else{
		f.style.border = '';
		return true;
	}	
}

function checkedField(i){
	var f = i;
	if(!f.checked){
		alert(f.msg+' jest wymagane!');
		f.style.background = '1px solid red';
		return false;
	}else{
		f.style.background = '';
		return true;
	}		
}
