function initXbloks(tip,disable){
	_filter(tip,".xblok").each(function(e){ initXblok(this,disable); });
	if(appMode=="VIEW"){
		_filter(tip,".xblok[class*='href']").hover(
			function(){ $(this).addClass("hover"); },
			function(){	$(this).removeClass("hover"); }
		).click(function(e){ document.location = _val($(this),"href"); });
	}
}

function initXblok(xblok,disable){
	$(xblok).unbind('.xblok').find(".rg").unbind(".xblok");

	if(disable) {
		$(xblok).addClass('ui-state-disabled');
		return false;
	} else {
		$(xblok).removeClass('ui-state-disabled');
	}
	var am= appMode;
	if($(xblok).metadata().appMode!=undefined) am=$(xblok).metadata().appMode;
	
	var edtlvl = _val(xblok,"edtlvl");
	if(!edtlvl) edtlvl=$(xblok).metadata().edtlvl;
	var use_edtgrps = $(xblok).metadata().use_edtgrps;
	if(!edtlvl && use_edtgrps) edtlvl="rg";
	
	if(!edtlvl) edtlvl="xb";
			
	if(edtlvl=="xb_handle"){
		var $lnk = $(xblok).find("a.edit");
		if(!$lnk.size()){
			$(xblok).prepend("<a href='#' class='edit hidden'>edit</a>");
			var $lnk = $(xblok).find("a.edit");
		}
		if(appMode=="EDIT") {
			$lnk.removeClass("hidden").show();
		} else {
			$lnk.hide();
		}
	}
	switch(am){
		case "EDIT":
			
			//if(edtlvl) alert(edtlvl);
			switch(edtlvl){
				case "xb":
					$(xblok).filter(".md"+delim+"PASSIVEEDIT").bind('hover.xblok',
						function(e){ $(this).addClass("hover"); },
						function(e){ $(this).removeClass("hover"); }
					).bind('click.xblok',function(e){ xblokClick(e,this); });
				break;
				case "xb_handle":
					$(xblok).filter(".md"+delim+"PASSIVEEDIT").find("a.edit")
						.bind('click.xblok',function(e){ xblokClick(e,$(e.target).closest(".xblok")[0]); });
				break;
				case "mx":
					$(xblok).filter(".md"+delim+"PASSIVEEDIT").hover(
						function(e){ $(this).addClass("hover"); },
						function(e){ $(this).removeClass("hover"); }
					).click(function(e){ xbukketClick(e,this); });
				break;
				case "rg":
					$(xblok).filter(".md"+delim+"PASSIVEEDIT")
						.find(".rok.md"+delim+"PASSIVEEDIT").bind('hover.xblok',
						function(e){ $(this).addClass("hover"); },
						function(e){ $(this).removeClass("hover"); }
					).bind("click.xblok",function(e){ xblokClick(e,this); });
				break;
			}
		break;
	}
}


function xblokFormLoaded(response){
	//dump(response,'xblokFormLoaded');
	for(i in response){
		if(i!='frm') dump(response[i],'xblokFormLoaded:'+i);
	}
	//$("#app").append("<div>"+response.frm+"</div>");
	$("#app").append(response.frm);
	$frm= $("#app").children(":last");
	//alert($frm.attr("id")+"\n"+$frm.attr("tagName"));
	initModalForm($frm);
	$('#'+response.tar).trigger('click');
}
function xblokClick(e,xblok){
	//console.dir({e_xblokClick:e});
	//console.dir({xblok:xblok});
	var $rok=false;
	if($(xblok).is(".rok")){
		var $rok= $(xblok);
		var xbname= _tag($rok[0],"xblok");
		xblok= $("#"+xbname)[0];
		//xblok= $rok.closest(".xblok")[0];
		/*
		alert("clicked rok="+$rok.attr("id")+"\n"+$rok.attr("class"));
		$rok.parents(".xbukket").each(function(e){
					$(this).css({border:'1px solid green'});
					alert("parent xbukket="+this.id+"\n"+$(this).attr("class"));						 
				});
		$rok.parents(".xblok").each(function(e){
					alert("parent xblok="+this.id+"\n"+$(this).attr("class"));						 
				});
		*/
	}
	//alert("clicked");
	var am= appMode;
	if($(xblok).metadata().appMode!=undefined) am=$(xblok).metadata().appMode;
	if(am == "EDIT"){   // as a precaution
		//alert("xblok="+xblok.id+"\n"+$(xblok).attr("class"));
		if($(e.target).hasClass("mb_toggle")) return false;
		
		e.stopPropagation();
		e.preventDefault();
		//stopDef(e);

		var use_edtgrps = $(xblok).metadata().use_edtgrps;
		//var use_edtgrps= true;
		if(use_edtgrps){
			//alert($(e.target).attr("class")+"\n"+$(e.target).attr("name"));
			if(!$rok){
				if($(e.target).is(":input") || $(e.target).is("div.div_input") || $(e.target).is("label")){
					$rok= $(e.target).parents(".rok:first");
				} else if($(e.target).is(".rok")){
					$rok= $(e.target);
				} else if($(e.target).is(".rg")){
					$rok= $(e.target).find(".rok:first");
				} else {
					$rok= $(e.target).closest(".rok");
				}
			}
			//$rok.css({'border':'2px solid blue'});
			//alert($rok.attr("class")+"\n"+$rok.metadata().edtgrp);
			var edtgrp= $rok.metadata().edtgrp;
			var edtgrpname= $rok.metadata().edtgrpname;
			
			
			//$mb= $rok.parents(".moxblok:first");
			var xbname= _tag($rok[0],"xblok");
			xblok= $("#"+xbname)[0];
			//xblok=$rok.closest(".xblok");
			//xblok.css({border:"2px solid blue"});
			//xblok= xblok[0];
			
			//var $rg= $rok.closest(".rg[name="+$rok.metadata().edtgrp+"]");
			//$rg.css({'background':'#0cc'});
			//alert("rg="+$rg.attr("name"));
		}
		
		var thisloc = _val(xblok,'loc');
		var grploc = $(xblok).metadata().grploc;
		if(grploc==undefined) grploc=thisloc;
		var cn = $(xblok).metadata().cn;
		if(!cn) cn='';
		var clss = $(xblok).metadata().clss;
		
		var frm = 'frm_xblokEDIT__'+thisloc+'-'+cn;
		dump($(xblok).metadata());
		
		if(!$("#"+frm).size()) frm= 'frm_xblokEDIT__'+grploc+'-'+cn;
		if(!$("#"+frm).size()){
			//alert('frmname doesnt exist= '+frm);
			var tar=xblok.id;
			if($rok) tar= $rok.attr("id");
			var params= {locid:grploc,clss:clss,cn:cn,tar:tar};
			$.post("ajax.php?pls=xblokForm",params,xblokFormLoaded,'json');
			return false;
		}
		
		var $frm= $("#"+frm);
		//console.dir($frm[0]);
		dump($(xblok).metadata(),"metadata");
		dump($(xblok).attr("class"),"classes");
		
		var xbTag = _tag(xblok,'xblok');
		var val='';
		var name='';
		xblok = $(xblok)//.css({border:'2px solid red'});
		var str='';
		var idata;
		xblok.find(":input.include").removeClass("include");
		if(use_edtgrps && edtgrp){
			//alert('use_edtgrps='+use_edtgrps+"\n"+edtgrp);
			xblok.find(".rok.edtgrp"+delim+edtgrp).find(":input").addClass("include");
		} else {
			xblok.find(".rg").find(":input").addClass("include");
		}
		
		if(xblok.metadata().savereplace!=undefined) {
			$replace= $(":input[name=replace]",$frm);
			if(!$replace.size()){
				$frm.append("<input type='hidden' name='replace' value=''>");
				$replace= $(":input[name=replace]",$frm);
			}
			$replace.val(xblok.metadata().savereplace);
			
			//return false;
		}
		var iloc = $('#'+frm+' [name=loc]');
		iloc.val(thisloc);
		//alert('iloc val='+iloc.val());
		xblok.find(".rg").find(":input").each(function(e){
			var name = $(this).attr("name");
			var input = $('#'+frm+' [name='+name+']');
			var $frm= $("#"+frm);
			var val = getVal($(this));
			str += "\n"+input.size()+' '+name+'= '+val;
			
			if(input.size()==1){
				//str += "\n"+name+'= '+val;
				input.data("holding", $(this).attr("id"));
				//dump(input.metadata(),"loading md for "+input.attr("id"));
				if(input.is("input[type=text]")|| input.is("textarea")){
					var defval=false;
					if($(this).metadata().defval){
						defval=$(this).metadata().defval;
					}
					input.data("defval",defval);
					var prmpt= parsePrompt(input);
					if(prmpt==val) val='';
					if(defval==val) val='';
				}
				var rok = _input(this,"rok");
				var frmrok = _input(input,"rok");
				if(rok && frmrok) {
					var bid = _val(rok,"bid");
					if(!bid) bid=0;
					updateClass(frmrok,"bid",bid);
					str+='\n\nrok '+rok.attr("id")+' \n'+rok.attr("class")+' \nbid:'+bid+'\n';
				}
				
				if(input.is(":hidden[name$=imageid]")){
					idata = getVal($(this),true);
					idata.imageid=val;
					setVal(input,idata);
					//dump(idata,"idata");
				} else {
					setVal(input,val);
				}
				if($(this).hasClass("include")){
					input.parents(".rok:first").show();
				} else {
					input.parents(".rok:first").hide();
				}
			} else {
				
				str+="\ncant find:"+name+'='+val+' '+$(this).attr("id");
				//$(this).after("<span style='color:#f00;'>Missing "+this.tagName+ '' + $(this).attr("name") +"</span>");
			}
				
			
		});
		
		//alert('str='+str);
		
		//dump(xblok.metadata(),"metadata saving xblok");
		
		//alert(xbTag);
		//alert(str);
		$('#'+frm+' [name=tar]').val(xbTag);
		//alert($('#'+frm+' [name=tar]').val());
		var dia = $('#dia_'+frm);
		//alert("size of dia="+dia.size());
		if(use_edtgrps){
			mfButtons_(dia,"SC");
			if(edtgrpname) dia.dialog('option', 'title', edtgrpname);
		
		} else {
			mfButtons_(dia,"SCD");
		}
		dia.dialog('open');
	}
}


function xblokSave(frm){
	//alert($(frm).attr("tagName")+' '+$(frm).attr("id"));
	if($(frm).attr("tagName").toLowerCase()=="form"){
		//alert($.param(frm));
		//var data = $(frm).serializeArray();
		//alert($(frm).parent().html());
		//alert($(frm).parent().attr("class"));
		//alert($(frm).closest(".ui-dialog").attr("class"));
		//alert($(frm).closest(".dia_open").html());
		$(frm).announce("Saving...").closest(".ui-dialog").find("button").attr("disabled","disabled").addClass("ui-state-disabled");
		//alert("num of buttons="+$(frm).closest(".ui-dialog").find("button").size());
		var data = mySerializeArray(frm);
		var done = removeMCEs(frm);
		if(frm.data("del")) data.push({name:'del', value:frm.data("del") });
		
		
	} else {
		var data = mySerializeArray(frm);
		//var data = $(frm).find(":input").serializeArray();
		var loc =  _val(frm,"loc");
		var clss = _val(frm,"clss");
		var tar = frm.attr("id");
		if(frm.data("del")) data.push({name:'del', value:frm.data("del") });
		if(frm.metadata().savereplace!=undefined) data['savereplace']= frm.metadata().savereplace;
		dump(frm.metadata(),"metadata saving xblok");
		
		data.push({name:'clss', value:clss});
		data.push({name:'loc', value:loc});
		data.push({name:'tar', value:tar});
		data.push({name:'handler', value:'xblok'});		
	}
	//dump(data,"formdata saving xblok");
	$.post("ajax.php", data, xblokSaved,'json');
	//$.post("ajax.php?debug=1", data, xblokSaved,null);
}



function xblokSaved(response){
	dump(response,"xblokSaved");
	//alert(response.html);
	if(response.dia != undefined){
		var dia = $('#'+response.dia);
		var frm = _dia(dia,"frm");
		frm.removeClass("saving").announce("");
	}
	if(response.success){
		var msg,cls,xbkt;
		cls = "success";
		//alert("success");
		if(response.tar!=0){
			var tar = $('#'+response.tar);
			//alert(response.html);
			//alert(unescape(response.html));
			switch(response.type){
				case "insert":
					if(response['replace'] && response.html){
						var trow= $("#"+response.tar+' .titlerow');
						if($(trow).size()==1) {
							$(trow).after(response.html);
							var newone= $(trow).next();
							//alert(response.html);
							//alert(newone.html());
							//alert(newone.parent().attr("tagName"));
						} else {
							var tarobj= $("#"+response.tar);
							$(tarobj).prepend(response.html);
							var newone= $(tarobj).find('.xblok:first');
							//alert('newone='+ $(tarobj).attr('id'));
						}
						//var newone = =$("#" +tarobj +' '+trow.tagName+':eq(1)');
						//alert($(newone).attr("id"));
						$(newone).addClass('edited');
						//init($(newone));
						//console.dir(newone);
						init($(newone));
						
						//msg = "Successfully added record.";
						xbktNumber(tar,"new");
						
						var frmid = response.dia.replace("dia_","");
						document.getElementById(frmid).reset();
					} else {
						if(tar.is(".xblok:not(form)")){
							$(":input[name$=blokid]",frm).val(response.bid);
							$(":input[name$="+response.xkeyname+"]",frm).val(response.xkeyval);
							frm.formunload();
						}
					}
				break;
				case "update":
					//alert(response.html);
					//alert($(tar).attr("class"));
					if(response['replace'] && response.html){
						tar.empty();
						tar.html(unescape(response.html));
						tar.addClass('edited');
						init(tar);
						//msg = "Successfully updated record.";
						xbktNumber(tar);
					} else {
						if(tar.is(".xblok:not(form)")){
							frm.formunload();
						}
					}
				break;
				case "delete":
					//msg = "Successfully deleted record.";
					xbkt = tar.closest(".xbukket");
					tar.remove();
					tar = xbkt;
				break;
			}	
		}
				
		//alert(response.tar);
		customresponse= custom_frmSubmitted(frm,response);
		if(customresponse){
			msg= customresponse.msg;
			cls= customresponse.cls;
		}
		xbktStatus(tar,msg,cls);
		$(dia).dialog('close');
		
	} else {
		//alert("ERROR!");
		var dia = $("div.modalForm.dia_open");
		var msg = response.msg;
		var valid = response.valid;
		if(valid==undefined){
			var tar = _dia(dia,"tar");
			if(tar){
				var msg,cls;
				cls = "failure";
				msg = "ERROR saving data.  Please try again.";
				xbktStatus(tar,msg,cls);
			}
			dia.dialog('close');
		} else {
			alert(msg);
		}
	}
	
}

