Ext.enableListenerCollection=true;
Ext.namespace("Netopia");
Ext.form.Action.Submit.prototype.run = Ext.form.Action.Submit.prototype.run.createInterceptor(function() {
	  this.form.items.each(function(item) {
	    if (item.el.getValue() == item.emptyText) {
	      item.el.dom.value = '';
	    }
	    });
	 });
Ext.form.Action.Submit.prototype.run = Ext.form.Action.Submit.prototype.run.createSequence(function() {
  this.form.items.each(function(item) {
    if (item.el.getValue() == '' && item.emptyText) {
      item.el.dom.value = item.emptyText;
    }
    });
 });
Ext.override(Ext.form.CheckboxGroup, {
	  
    afterRender: function() {
        var that = this;
        this.items.each(function(i) {
            that.relayEvents(i, ['check']);
        });
        
        Ext.form.CheckboxGroup.superclass.afterRender.call(this)
    }

});

Ext.override(Ext.layout.FormLayout, {
	renderItem : function(c, position, target){
		if(c && !c.rendered && c.isFormField && c.inputType != 'hidden'){
			var args = [
				   c.id, c.fieldLabel,
				   c.labelStyle||this.labelStyle||'',
				   this.elementStyle||'',
				   typeof c.labelSeparator == 'undefined' ? this.labelSeparator : c.labelSeparator,
				   (c.itemCls||this.container.itemCls||'') + (c.hideLabel ? ' x-hide-label' : ''),
				   c.clearCls || 'x-form-clear-left' 
			];
			if(typeof position == 'number'){
				position = target.dom.childNodes[position] || null;
			}
			if(position){
				c.formItem = this.fieldTpl.insertBefore(position, args, true);
			}else{
				c.formItem = this.fieldTpl.append(target, args, true);
			}

//          Remove the form layout wrapper on Field destroy.
			c.on('destroy', c.formItem.remove, c.formItem, {single: true});
			c.on('hide', c.formItem.hide, c.formItem, {single: false});
			c.on('show', c.formItem.show, c.formItem, {single: false});
			c.render('x-form-el-'+c.id);
		}else {
			Ext.layout.FormLayout.superclass.renderItem.apply(this, arguments);
		}
	}
});






Netopia.forceAjax = function() {
	var selection=Ext.select('a[class="ajax"]');
	selection.toggleClass('ajax');
	selection.on("click",function(ev,el){
		ev.preventDefault(); 
		ev.stopPropagation();
		ev.stopEvent();
		Netopia.getUrl(el.href,el.rel,1);
		return false;
	});		
}

Netopia.postUrl = function (config,msgTitle,msgBody){
	params=config.params;
	if(!params){
		params={};
	}
	params.disableLayout=1;
	params.__target=config.target;
	if(msgBody && msgTitle){
		var box = Ext.MessageBox.wait(msgBody, msgTitle);
	}
	Ext.Ajax.request( {
		url :config.url,
		__forceAjax:config.forceAjax,
		method :"POST",
		params : params,
		waitMsg:box,
		success : function(response, options) {
			if(msgBody && msgTitle){
				box.hide();
			}
			var el = Ext.get(options.params.__target);
			if(el){
				el.update(response.responseText, true);
			}
			if(options.__forceAjax){
				Netopia.forceAjax();
			}
		},
	failure : function(response,options){
			if(msgBody && msgTitle){	
				box.hide();
			}
		}
	});
	return false;


}
Netopia.getUrl = function(myHref, myTarget, forceAjax,params) {
	if(!params){
		params={};
	}
	params.disableLayout=1;
	params.__target=myTarget;
	Ext.Ajax.request( {
		url :myHref,
		__forceAjax:forceAjax,
		method :"GET",
		params : params,
		success : function(response, options) {
			var el = Ext.get(options.params.__target);
			if(el){
				el.update(response.responseText, true);
			}
			if(options.__forceAjax){
				Netopia.forceAjax();
			}
		}
	});
	return false;
}
Netopia.formAlertMessage = function(myForm, myAction) {
	var myXml = myForm.errorReader.xmlData;
	records = myForm.errorReader.readRecords(myXml);
	var mesageText = '';
	for ( var i = 0; i < records.totalRecords; i++) {
		var record = records.records[i].data;
		if (record.form_error_msg) {
			mesageText = mesageText + "<li>" + record.form_error_msg + "</li>";
		}else if(record.element_name){
			var myField=myForm.findField(record.element_name);	
			if(myField) {
			    if(record.element_value) {
				myField.setRawValue(record.element_value)
			    }
			    myField.markInvalid(record.msg);
			}
		}
	}

	if (mesageText) {
		Ext.MessageBox.show( {
			title :'Error',
			msg :"<ul>" + mesageText + "</ul>",
			width :300,
			buttons :Ext.MessageBox.OK
		});
	}

}
Netopia.formActionComplete = function(myForm, myAction) {

	try {
	   
		var actionResponse = Ext.data.Record.create( [ 'script', 'update',
		{
            name:'success',
            mapping:'@success'
		},
		{
			name :'src',
			mapping :'script@src'
		}, {
			name :'target_id',
			mapping :'update@target'
		}, {
			name :'href',
			mapping :"action@href"
		}, {
			name :'target',
			mapping :"action@target"
		}, {
			name :'location',
			mapping :"location@href"
		} ]);
		var myReader = new Ext.data.XmlReader( {
			record :"response",
			success :'@success'
		}, actionResponse);
		var records = myReader.read(myAction.response);
		
		if(!records) {
		    
		    return;
		}
		if(!records.success){
			myForm.errorReader.xmlData=myAction.response.responseXML;	    
			return Netopia.formAlertMessage(myForm,myAction);
		}
		for ( var i = 0; i < records.totalRecords; i++) {

			var record = records.records[i].data;
			if(!record) {
			    return;
			}
			if (record.update) {
				var el = Ext.get(record.target_id);
				if(el){
					el.update(record.update, true);
				}
			} else if (record.href) {
				Ext.Ajax.request( {
					url :record.href,
					method :record.method ? record.method : "GET",
					params : {
						disableLayout :1,
						target :record.target
					},
					success : function(response, options) {
						var el = Ext.get(options.params.target);
						if(el){
							el.update(response.responseText, true);
						}
					}
				});
			} else if (record.location) {
				document.location.href = record.location;
			} else if (record.script || record.src) {
				var done = false;
				if (record.src) {
					Ext.Ajax.request( {
								url :record.src,
								method :"GET",
								success : function(response, options) {
									var head = document.getElementsByTagName("head")[0]|| document.documentElement;
									var myScript = document.createElement('script');
									myScript.setAttribute("type","text/javascript");
									if (Ext.isIE)
										myScript.text = response.responseText;
									else {
										myScript.appendChild(document.createTextNode(response.responseText));
									}
									head.insertBefore(myScript,head.firstChild);
								}
							});
				} else {
				  
				    jQuery.globalEval(record.script);
//				    	data=record.script;		                   
//					// Inspired by code by Andrea Giammarchi
//					// http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html
//					var head = document.getElementsByTagName("head")[0] || document.documentElement,
//						script = document.createElement("script");
//
//					script.type = "text/javascript";
//					if ( jQuery.support.scriptEval )
//						script.appendChild( document.createTextNode( data ) );
//					else
//						script.text = data;
//
//					// Use insertBefore instead of appendChild  to circumvent an IE6 bug.
//					// This arises when a base node is used (#2709).
//					head.insertBefore( script, head.firstChild );
//					head.removeChild( script );
		                    
				}

			}

		}
	} catch (e) {
	}
}

// A reusable error reader class for XML forms
Ext.form.XmlErrorReader = function() {
	Ext.form.XmlErrorReader.superclass.constructor.call(this, {
		record :'field',
		success :'@success'
	}, [ 'id', 'msg', 'form_error_msg','element_name','element_value' ]);
};
Ext.extend(Ext.form.XmlErrorReader, Ext.data.XmlReader);
/*
Ext.override(Ext.menu.Menu, {
    autoWidth : function(){
        var el = this.el, ul = this.ul;
        if(!el){
            return;
        }
        var w = this.width;
        if(w){
            el.setWidth(w);
        }else if(Ext.isIE && !Ext.isIE8){
            el.setWidth(this.minWidth);
            var t = el.dom.offsetWidth; // force recalc
            el.setWidth(ul.getWidth()+el.getFrameWidth("lr"));
        }
    }
});
*/
