/* / / / / / ENGINE  ROOM / / / / / / /
|	            XHTTP                 |
| (aka javascript response handlers)  |
|                                     |
| version:     0.1.0                  |
| last edit:   20081026               |
| package:     beta.0.0.2             |
/ / / / / / / / / / / / / / / / / / /*/


var xhttp	= {
	errtarget	: false,

	redirect	: function(uri, int, mess) {
		if(mess) $(mess.target).update(mess.text);
		setTimeout("window.location='"+uri+"'",(int)? int:0);
	},
	
	error		: function(err, target){
		if(target) $(target).update(err);
		else if(typeof errtarget == "function") this.errtarget(err);
		else if(errtarget) $(errtarget).update(err);
	},
	
	send		: function(uri, vars) {
		new Ajax.Request(uri, { parameters:{set:Object.toJSON(vars)} });
	},
	
	gfx			: function(input, target, effect){
		effect = (effect)? effect : { name:'Highlight', options:{startcolor:'#fedb4e', endcolor:'#f9f7f7', restorecolor:'#f9f7f7', duration:1} };
		if(typeof input == "string") $(target).update(input);
		else {
			if(!input.attr.id) input.attr.id = target+"."+effect.name;
			el = elBirth(input.tpe, input.attr, input.cont);
			//el.addClassName('message');
			
			if(input.update) $(target).update(el); else $(target).appendChild(el);
			target = input.attr.id;
		}
		if(effect.name == "Highlight")			new Effect.Highlight(target, effect.options);
		else if (effect.name == "Opacity")		new Effect.Opacity(target, effect.options);
	}
	
}



////// FLOW SOFTENERS (not really pretty, but hey...)
br = "<br />";
tag = function(type, param, content) {
	obj = new Element(type, param);
	if(typeof content == "object") content.each( function(child){ obj.insert(child) }); else obj.update(content);
	return obj;
}



////// FORM HANDLERS

gridform	= {

parse		: function(line) {
	tr = new Element('tr');
	if(!line.length) line[0] = [0];
	line.each(function(cell){
		td = new Element('td',{colspan:(cell[2])?cell[2]:grid.am});
		if(cell[0]) {
			attr = {'class':(typeof cell[3] == 'string')?cell[3]:((cell[3])?'req':'')};
			if(['input','button','submit','radio','checkbox','select','multiple'].include(cell[0])) {
				if(['button','submit','radio','checkbox'].include(cell[0]) ) { attr.type = cell[0]; cell[0]='input';
				} else if(cell[0]=='input') attr.type = 'text';
				attr.style='width:'+(cell[2]*grid.w+((cell[2]-1)*14))+'px;';
				attr.id = attr.name = cell[1];
				if(attr.type == "radio") attr.name = cell[4];
				if(attr.type == "radio" || attr.type == "checkbox") attr.style='width:12px;';
				else if(cell[4] == "multiple" && cell[0]=='select') attr.multiple = "multiple";
				else if(cell[4]) attr.value = cell[4];
			}
			
			el = new Element(cell[0],attr);
			if(cell[0]=='select') grid.select[cell[1]].each(function(opt){ el.appendChild(new Element('option',{value:opt[0]}).update(opt[1]?opt[1]:opt[0])) });

			if(['b','i','h2'].include(cell[0])) el.update(cell[1]);
		
			td.appendChild(el);
		} else td.update((cell[1])?cell[1]:'&nbsp;');
		tr.appendChild(td);
	});
	$(grid.form+".tbody").appendChild(tr);
},

confirm		: function(e) {
	error = false;
	$$('input.req').each(function(el) {
		if($(el).hasClassName('err')) $(el).removeClassName('err');
		if($(el).value ===''){
			error = el.id;
			$(el).addClassName('err');
		}
	});
					
	if(error){
		alert('please complete. (in red)');
	} else Query('mod',{trg:grid.query.trg ,mod:'form', wtype:'ajax', lod:grid.query.lod, setid:((grid.query.setid)?grid.query.setid:0) ,form:$(grid.form).serialize(true)});
}

}