
sb.forms = {
	
		
	getInputsByName : function(name){
		return $('input').filter(function(v){return v.name==name;});
	},

	getRadioValue : function(name){
		var  val = '',inputs = sb.forms.getInputsByName(name);
		inputs.forEach(function(v,k,a){
			if(v.checked ==true){
				val = v.value;
			}
		});
		return val;
	},

	toggleChecked : function(name, status){
	
		sb.forms.getInputsByName(name).forEach(function(v){
			if(status !== undefined){v.checked=status;} else if(v.checked==1){v.checked=0;} else {v.checked=1;}
		});
	},
	
	serialize : function(form) { 
		var dat=[],s,e=sb.dom.nodeListToArray(sb.$(form).elements);
		e.forEach(function(v){
			var n=v.name,t=v.type;
			if(n && v.value){
				if(t=='select-one'){
					dat.push(n + "=" + encodeURIComponent(v.options[v.selectedIndex].value));
				} else if(t =="select-multiple"){
					for(s=0;s<v.options.length;s++){
						if(v.options[s].selected===true){
							dat.push(n + "=" + encodeURIComponent(v.options[s].value));	
						}
					}
				} else if(t == "checkbox" || t=="radio"){
					if(v.checked==1){dat.push(n + "=" + escape(v.value));}
				} else {
					dat.push(n + "=" + escape(v.value));
				}
			}
		});
		
		return dat.join('&');
	},
	
	send : function(form, url, interval){
		if(sb.$(form)){
			var sendVal = new sb.ajax({url:url,format:'send',method:'post',data:sb.forms.serialize(form)});
			if(interval !=='undefined'){
				var intTimer = new sb.timer(interval, function(){sendVal.fetch();});
				intTimer.begin();
				return intTimer;
			} else {
				sendVal.fetch();
			}
		}
	},
	
	getSelection : function(field){
		field = sb.$(field);
		var range,sel={},selectionEnd,selectionStart,stored_range;
		field.focus(); 
		
		if (document.selection) {
			range = document.selection.createRange();
			stored_range = range.duplicate();
			stored_range.moveToElementText( field );
			stored_range.setEndPoint( 'EndToEnd', range );
			selectionStart = stored_range.text.length - range.text.length;
			
			selectionEnd = selectionStart + range.text.length;
			sel.begin = selectionStart;
			sel.end = selectionEnd;
	
		} else if(typeof field.selectionStart !='undefined'){
	
			sel.begin = field.selectionStart;
			sel.end = field.selectionEnd;
		} 
	
		sel.caret = sel.begin;
		sel.before = field.value.substr(0, sel.begin);
		sel.selected = field.value.substr(sel.begin, (sel.end - sel.begin));
		sel.after = field.value.substr(sel.end, (field.value.length - sel.end));
		return sel;
	},
	
	addTags : function(field, beginTag, endTag){
		field = sb.$(field);
		var sel = sb.forms.getSelection(field); 
		var tagLength = beginTag.length +endTag.length;
		field.value = sel.before + beginTag + sel.selected + endTag + sel.after;
		sb.timer.wait(0, function(){
			field.focus();
			sb.forms.moveCaret(field, sel.caret);
		});
	},
	
	setSelection : function(field, start, end) {
		field = sb.$(field);
		if (field.setSelectionRange) {
			field.setSelectionRange(start, end);
		} else {
			var r = field.createTextRange();
			r.collapse(true);
			r.moveStart("character", start);
			r.moveEnd("character", end - start);
			r.select();
		}
	},
	
	replaceSelection : function(field, txt){
		field = sb.$(field);
		var sel = sb.forms.getSelection(field);
		
		field.value = sel.before + txt + sel.after;	
		sb.timer.wait(0, function(){
			try{sb.forms.moveCaret(field, sel.caret+1);field.focus();}catch(e){}
		});
	},
	
	insertAtCaret : function(field, txt){
		field = sb.$(field);
		sb.forms.replaceSelection(field, txt);
		sb.timer.wait(0, function(){
			//field.focus();
		});
					
	},
	
	moveCaret : function(field, pos){
		field = sb.$(field);
		if (field.setSelectionRange) {
			field.setSelectionRange(pos, pos);
		} else {
			var r = field.createTextRange();
			r.collapse(true);
			r.moveStart("character", pos);
			r.moveEnd("character", pos - pos);
			r.select();
		}
		field.focus();
	},
	
		radioGroup : function(params){
	
		var rg = sb.dom.ce('radioGroup');
		var x=0;
		params.values.forEach(function(v){
			
			var l = sb.dom.ce('label',{
				innerHTML : v.label
			});
			l.setAttribute('for', 'radio_'+params.name+x);
			var inp = new sb.forms.input({
					type : 'radio',
					name : params.name,
					value : v.value,
					id : 'radio_'+params.name+x
				});
				
			rg.appendChild(inp);
			rg.appendChild(l);
			l=inp=null;
			x++;
		});
		x =null;
		return rg;
	},
	
	allowTabs : function(textarea){
		textarea = sb.$(textarea);
		sb.events.add(textarea, 'keydown', function(e){
			
			var key = sb.events.keys(e), tab=String.fromCharCode(9);
			
			if(key.tab==1){
				try{
					var scrollTo = textarea.scrollTop||0;
					sb.forms.insertAtCaret(textarea,tab);
					textarea.scrollTop=scrollTo;
				}catch(e){}
				return false;
			}
		});
	},
	
	
	extend : sb.objects.extend
};

events.add(window, 'load', function(){
	
	//check textareas for allowtabs=1 attribute
	sb.$('textarea').forEach(function(v){
		if(v.getAttribute('allowtabs')==1 || v.getAttribute('allowtabs')=="yes"){
			sb.forms.allowTabs(v);
		}
	});
	
});