
// Funciones para Validar tipos de Datos
Ext.form.VTypes["porcentaje"] = function(v,f) { if(v>=0 && v<=100) {return true;} else {return false;} return true; }
Ext.form.VTypes["porcentajeText"] = 'El valor debe ser un porcentaje';
Ext.form.VTypes["porcentajeMask"] = /[.0-9]/;

/*
Ext.apply(Ext.form.VTypes, {
	var num : /^(({100})|([1-9][0-9].[0-9])|([1-9].[0.9])|({0}.{1-9})|({0}))$/;
    porcentaje : function(val, field) {
		return (num.test(val));
        return true;
    },



});
*/

/* Selector */
Ext.form.SelectorField = Ext.extend(Ext.form.TriggerField,
{
	// Variables Publicas
    triggerClass : 'x-form-selector-trigger',
    invalidText : "{0} no existe en la BD",
    // privado
    defaultAutoCreate : {tag: "input", type: "text", size: "10", autocomplete: "off"},
    initComponent : function(){
    	Ext.form.DateField.superclass.initComponent.call(this);

        this.addEvents(
            /**
             * @event select
             * Fires when a Value is selected via the Window picker.
             * @param {Ext.form.SeelctorField} this
             * @param {Value} value The value that was selected
             */
            'select'
        );
    },

	validateValue : function(value){
        value = (value);

        if(!Ext.form.SelectorField.superclass.validateValue.call(this, value)){
            return false;
        }
        if(value.length < 1){ // if it's blank and textfield didn't flag it then it's valid
             return true;
        }
/*
 * validacion de codigo a traves de SR
        var svalue = value;
        value = this.parseDate(value);
        if(!value){
            this.markInvalid(String.format(this.invalidText, svalue));
            return false;
        }

*/
		return true;
    },

    // private
    // Provides logic to override the default TriggerField.validateBlur which just returns true
    validateBlur : function(){
//        return !this.menu || !this.menu.isVisible();
		return true;
    },

    /**
     * Returns the current date value of the date field.
     * @return {Date} The date value
     */
    getValue : function(){
        return (Ext.form.SelectorField.superclass.getValue.call(this)) || "";
    },

    /**
     * Sets the value of the date field.  You can pass a date object or any string that can be parsed into a valid
     * date, using DateField.format as the date format, according to the same rules as {@link Date#parseDate}
     *
     * @param {String/Date} date The date or valid date string
     */
    setValue : function(value){
        Ext.form.SelectorField.superclass.setValue.call(this, this.parseValue(value) );
    },

    // privado
    parseValue : function(value){
    	v = value;
 /*
        if(!value || Ext.isDate(value)){
            return value;
        }
        var v = Date.parseDate(value, this.format);
        if(!v && this.altFormats){
            if(!this.altFormatsArray){
                this.altFormatsArray = this.altFormats.split("|");
            }
            for(var i = 0, len = this.altFormatsArray.length; i < len && !v; i++){
                v = Date.parseDate(value, this.altFormatsArray[i]);
            }
        }
 * Validacion completa
 */
        return v;
    },

    // private
    onDestroy : function(){
/*
 * Destruir la ventanita
          if(this.menu) {
            this.menu.destroy();
        }
*/
        if(this.wrap){
            this.wrap.remove();
        }
        Ext.form.SelectorField.superclass.onDestroy.call(this);
    },

    // private -- analizar este proceso de Listeners El menu es un objeto que pinta la ventana
    menuListeners : {
        select: function(m, d){
            this.setValue(d);
            this.fireEvent('select', this, d);
        },
        show : function(){ // retain focus styling
            this.onFocus();
        },
        hide : function(){
            this.focus.defer(10, this);
            var ml = this.menuListeners;
            this.menu.un("select", ml.select,  this);
            this.menu.un("show", ml.show,  this);
            this.menu.un("hide", ml.hide,  this);
        }
    },

    /**
     * @method onTriggerClick
     * @hide
     */
    // private
    // Implements the default empty TriggerField.onTriggerClick function to display the DatePicker
    onTriggerClick : function(){
        if(this.disabled){
            return;
        }
Ext.Msg.alert("Selector", "Futura Ventana de Seleccion");
        /*
        if(this.menu == null){
            this.menu = new Ext.menu.DateMenu();
        }
        Ext.apply(this.menu.picker,  {
            minDate : this.minValue,
            maxDate : this.maxValue,
            disabledDatesRE : this.disabledDatesRE,
            disabledDatesText : this.disabledDatesText,
            disabledDays : this.disabledDays,
            disabledDaysText : this.disabledDaysText,
            format : this.format,
            showToday : this.showToday,
            minText : String.format(this.minText, this.formatDate(this.minValue)),
            maxText : String.format(this.maxText, this.formatDate(this.maxValue))
        });
        this.menu.on(Ext.apply({}, this.menuListeners, {
            scope:this
        }));
        this.menu.picker.setValue(this.getValue() || new Date());
        this.menu.show(this.el, "tl-bl?");
        */
        // Crear la ventana contenedora con los datos requeridos
    },

    // private
    beforeBlur : function(){
        var v = this.parseValue(this.getRawValue());
        if(v){
            this.setValue(v);
        }
    }

});
Ext.reg('selectorfield', Ext.form.SelectorField);

/////////////////////////////////////////////////////////////////////////////////////////////////////////////

Ext.ButtonG=Ext.extend(Ext.Component,
{ iconCls_press:"x-btn-pressed"
  ,iconCls_over:"x-btn-over"
  ,hidden:false
  ,disabled:false
  ,pressed:false
  ,enableToggle:false
  ,menuAlign:"tl-bl?"
  ,type:"image"
  ,menuClassTarget:"tr"
  ,clickEvent:"click"
  ,handleMouseEvents:true
  ,tooltipType:"qtip"
  ,buttonSelector:"button:first"
  ,initComponent:function()
  {
  	Ext.Button.superclass.initComponent.call(this);
  	this.addEvents("click","toggle","mouseover","mouseout","menushow","menuhide","menutriggerover","menutriggerout");
  	if(this.menu){this.menu=Ext.menu.MenuMgr.get(this.menu)}
  	if(typeof this.toggleGroup==="string"){this.enableToggle=true}
  }
  ,onRender:function(C,A)
  {
  	if(!this.template)
  	{
  		if(!Ext.Button.buttonTemplate)
  		{
  			Ext.Button.buttonTemplate=new Ext.Template("<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"x-btn-wrap\"><tbody><tr>","<td class=\"x-btn-left\"><i>&#160;</i></td><td class=\"x-btn-center\"><em unselectable=\"on\"><button class=\"x-btn-text\" type=\"{1}\">{0}</button></em></td><td class=\"x-btn-right\"><i>&#160;</i></td>","</tr></tbody></table>")
  		}
  		this.template=Ext.Button.buttonTemplate
  	}
  	var B,E=[this.text||"&#160;",this.type];
  	if(A)
  	{B=this.template.insertBefore(A,E,true)}
  	else
  	{B=this.template.append(C,E,true)}
  	var D=B.child(this.buttonSelector);
  	D.on("focus",this.onFocus,this);
  	D.on("blur",this.onBlur,this);
  	this.initButtonEl(B,D);
  	if(this.menu)
  	{this.el.child(this.menuClassTarget).addClass("x-btn-with-menu")}
  	Ext.ButtonToggleMgr.register(this)
  }
  ,initButtonEl:function(B,C)
  {
  	this.el=B;B.addClass("x-btn");
  	if(this.icon)
  	{C.setStyle("background-image","url("+this.icon+")")}
  	if(this.iconCls)
  	{
  		C.addClass(this.iconCls);
  		if(!this.cls)
  		{B.addClass(this.text?"x-btn-text-icon":"x-btn-icon")}
  	}
  	if(this.tabIndex!==undefined)
  	{C.dom.tabIndex=this.tabIndex}
  	if(this.tooltip)
  	{
  		if(typeof this.tooltip=="object")
  		{Ext.QuickTips.register(Ext.apply({target:C.id},this.tooltip))}
  		else
  		{C.dom[this.tooltipType]=this.tooltip}
  	}
  	if(this.pressed)
  	{this.el.addClass(this.iconCls_press)}
  	if(this.handleMouseEvents)
  	{
  		B.on("mouseover",this.onMouseOver,this);
  		B.on("mousedown",this.onMouseDown,this)
  	}
  	if(this.menu){this.menu.on("show",this.onMenuShow,this);this.menu.on("hide",this.onMenuHide,this)}if(this.id){this.el.dom.id=this.el.id=this.id}if(this.repeat){var A=new Ext.util.ClickRepeater(B,typeof this.repeat=="object"?this.repeat:{});A.on("click",this.onClick,this)}B.on(this.clickEvent,this.onClick,this)},afterRender:function(){Ext.Button.superclass.afterRender.call(this);if(Ext.isIE6){this.autoWidth.defer(1,this)}else{this.autoWidth()}},setIconClass:function(A){if(this.el){this.el.child(this.buttonSelector).replaceClass(this.iconCls,A)}this.iconCls=A},beforeDestroy:function(){if(this.rendered){var A=this.el.child(this.buttonSelector);if(A){A.removeAllListeners()}}if(this.menu){Ext.destroy(this.menu)}},onDestroy:function(){if(this.rendered){Ext.ButtonToggleMgr.unregister(this)}},autoWidth:function(){if(this.el){this.el.setWidth("auto");if(Ext.isIE7&&Ext.isStrict){var A=this.el.child(this.buttonSelector);if(A&&A.getWidth()>20){A.clip();A.setWidth(Ext.util.TextMetrics.measure(A,this.text).width+A.getFrameWidth("lr"))}}if(this.minWidth){if(this.el.getWidth()<this.minWidth){this.el.setWidth(this.minWidth)}}}},setHandler:function(B,A){this.handler=B;this.scope=A},setText:function(A){this.text=A;if(this.el){this.el.child("td.x-btn-center "+this.buttonSelector).update(A)}this.autoWidth()},getText:function(){return this.text},toggle:function(A){A=A===undefined?!this.pressed:A;if(A!=this.pressed){if(A){this.el.addClass(this.iconCls_press);this.pressed=true;this.fireEvent("toggle",this,true)}else{this.el.removeClass(this.iconCls_press);this.pressed=false;this.fireEvent("toggle",this,false)}if(this.toggleHandler){this.toggleHandler.call(this.scope||this,this,A)}}},focus:function(){this.el.child(this.buttonSelector).focus()},onDisable:function(){if(this.el){if(!Ext.isIE6||!this.text){this.el.addClass(this.disabledClass)}this.el.dom.disabled=true}this.disabled=true},onEnable:function(){if(this.el){if(!Ext.isIE6||!this.text){this.el.removeClass(this.disabledClass)}this.el.dom.disabled=false}this.disabled=false},showMenu:function(){if(this.menu){this.menu.show(this.el,this.menuAlign)}return this},hideMenu:function(){if(this.menu){this.menu.hide()}return this},hasVisibleMenu:function(){return this.menu&&this.menu.isVisible()},onClick:function(A){if(A){A.preventDefault()}if(A.button!=0){return }if(!this.disabled){if(this.enableToggle&&(this.allowDepress!==false||!this.pressed)){this.toggle()}if(this.menu&&!this.menu.isVisible()&&!this.ignoreNextClick){this.showMenu()}this.fireEvent("click",this,A);if(this.handler){this.handler.call(this.scope||this,this,A)}}},isMenuTriggerOver:function(B,A){return this.menu&&!A},isMenuTriggerOut:function(B,A){return this.menu&&!A},onMouseOver:function(B){if(!this.disabled){var A=B.within(this.el,true);if(!A){this.el.addClass(this.iconCls_over);if(!this.monitoringMouseOver){Ext.getDoc().on("mouseover",this.monitorMouseOver,this);this.monitoringMouseOver=true}this.fireEvent("mouseover",this,B)}if(this.isMenuTriggerOver(B,A)){this.fireEvent("menutriggerover",this,this.menu,B)}}},monitorMouseOver:function(A){if(A.target!=this.el.dom&&!A.within(this.el)){if(this.monitoringMouseOver){Ext.getDoc().un("mouseover",this.monitorMouseOver,this);this.monitoringMouseOver=false}this.onMouseOut(A)}},onMouseOut:function(B){var A=B.within(this.el)&&B.target!=this.el.dom;this.el.removeClass(this.iconCls_over);this.fireEvent("mouseout",this,B);if(this.isMenuTriggerOut(B,A)){this.fireEvent("menutriggerout",this,this.menu,B)}},onFocus:function(A){if(!this.disabled){this.el.addClass("x-btn-focus")}},onBlur:function(A){this.el.removeClass("x-btn-focus")},getClickEl:function(B,A){return this.el},onMouseDown:function(A){if(!this.disabled&&A.button==0){this.getClickEl(A).addClass("x-btn-click");Ext.getDoc().on("mouseup",this.onMouseUp,this)}},onMouseUp:function(A){if(A.button==0){this.getClickEl(A,true).removeClass("x-btn-click");Ext.getDoc().un("mouseup",this.onMouseUp,this)}},onMenuShow:function(A){this.ignoreNextClick=0;this.el.addClass("x-btn-menu-active");this.fireEvent("menushow",this,this.menu)},onMenuHide:function(A){this.el.removeClass("x-btn-menu-active");this.ignoreNextClick=this.restoreClick.defer(250,this);this.fireEvent("menuhide",this,this.menu)},restoreClick:function(){this.ignoreNextClick=0}});
  	Ext.reg("buttong",Ext.ButtonG);
  	Ext.ButtonToggleMgr=function()
  	{
  		var A={};function B(E,G){if(G){var F=A[E.toggleGroup];for(var D=0,C=F.length;D<C;D++){if(F[D]!=E){F[D].toggle(false)}}}}return{register:function(C){if(!C.toggleGroup){return }var D=A[C.toggleGroup];if(!D){D=A[C.toggleGroup]=[]}D.push(C);C.on("toggle",B)}
  		,unregister:function(C){if(!C.toggleGroup){return }var D=A[C.toggleGroup];if(D){D.remove(C);C.un("toggle",B)}}}
  	}();


