Ext.BLANK_IMAGE_URL = './ext-3.1.0/resources/images/default/s.gif';
Ext.QuickTips.init();  // enable tooltips
Ext.Updater.defaults={ disableCaching: true};
/*Ext.state.Manager.setProvider(new Ext.state.CookieProvider());*/

Ext.namespace("Globals");
//Ext.namespace("Globals.Stores");
Ext.namespace('Ext.ux');
Ext.namespace('Ext.stores');
Ext.namespace('Objects');


Globals.PAGESIZE = 20;
Globals.UNDEFINED_LABEL = '-- non definito --';
Globals.SUCCESS = '{success:true}';
Globals.RESTFUL_PREFIX = '/restfulauth';


//Globals.HOST = '127.0.0.1';
Globals.HOST = window.location.host;


var HANDLER_AJAX_FAILED = function(response){
         var result=response.responseText;
         Ext.MessageBox.alert('Error','Remote exception.');
 };
 
 
var HANDLER_ACTION_FAILED = function(message){
	var _w = new Ext.Window({
            title: 'Attenzione',
            closable:true,
            width:400,
            height:150,
            border:false,
            //plain:true,
           	//manager: MyDesktop.getDesktop().getManager(),
            modal: true,
            layout: 'fit',
            items: new Ext.Panel(
            {
            	style: 'font-size: 10pt; color: red;',
            	html: '<br/><span style="padding: 5px 5px 5px 5px;">'+message+'</span>'
            }
            ),
            bbar: [
            	{
            		text: 'Chiudi',
            		handler: function(){ _w.close(); }
            	}
            ]
        });
	_w.show();
}

var INFO_BOX = function(message){
	var _w = new Ext.Window({
            title: 'Info',
            closable:true,
            width: 400,
            height: 150,
            border:false,
            modal: true,
            layout: 'fit',
            items: new Ext.Panel(
            {
            	style: 'font-size: 10pt; color: green; text-align:center;',
            	html: '<br/>'+message
            }
            ),
            bbar: [
            	{
            		text: 'Chiudi',
            		handler: function(){ _w.close(); }
            	}
            ]
        });
	_w.show();
}

var CONFIRM_BOX = function(message, callback){
	var _w = new Ext.Window({
            title: 'Conferma',
            closable:true,
            width:400,
            height:150,
            border:false,
            //plain:true,
           	//manager: MyDesktop.getDesktop().getManager(),
            modal: true,
            layout: 'fit',
            items: new Ext.Panel(
            {
            	style: 'font-size: 10pt; color: black; text-align:center;',
            	html: '<img style="margin: 30px 2px 2px 20px; float:left;" src="./ext-2.1/resources/images/default/window/icon-question.gif"></img>'+
            		'<div style="margin: 10px 2px 2px 30px; float:left; width: 300px;">'+message+'</div>'
            }
            ),
            bbar: [
            	{
            		text: 'Si',
            		handler: function(){ callback(); _w.close(); },
            		minWidth: 80
            	},
            	{
            		text: 'No',
            		handler: function(){ _w.close(); },
            		minWidth: 80
            	}
            ]
        });
	_w.show();
}

var WARNING_BOX = function(message){
	var _w = new Ext.Window({
            title: 'Warning',
            closable:true,
            width:400,
            height:150,
            border:false,
            //plain:true,
           	//manager: MyDesktop.getDesktop().getManager(),
            modal: true,
            layout: 'fit',
            items: new Ext.Panel(
            {
            	style: 'font-size: 10pt; color: orange; text-align:center;',
            	html: '<br/>'+message
            }
            ),
            bbar: [
            	{
            		text: 'Close',
            		handler: function(){ _w.close(); }
            	}
            ]
        });
	_w.show();
}


var BOX_INFO = function(message){
 Ext.Msg.show({
   title: 'Info',
   msg: message,
   buttons: Ext.MessageBox.OK,
   icon: Ext.MessageBox.INFO
	});
}
var BOX_WARNING = function(message){
 Ext.Msg.show({
   title: 'Warning',
   msg: message,
   buttons: Ext.MessageBox.OK,
   icon: Ext.MessageBox.WARNING
	});
}
var BOX_ERROR = function(message){
 Ext.Msg.show({
   title: 'Warning',
   msg: message,
   buttons: Ext.MessageBox.OK,
   icon: Ext.MessageBox.ERROR
 });
}

/**
 * 
 * @param params
 * - grid			grid object
 * - pkey			name of the pkey field in the grid store
 * - displayField	name of the store field to display in the question 
 * - url
 * - callback (grid.store is reloaded internally)
 * @return
 */

function deleteRecordFromGrid(params){
	var _grid = params.grid;
	var record  = _grid.getSelectionModel().getSelected();
	if (record){
		
	   if (!record.get(params.pkey)){
		   record.reject();
		   _grid.getStore().remove(record);
		   return;
	   }
		
		Ext.Msg.show({
	   title:'Remove',
	   msg: 'Are you sure to remove record <b>'+record.get(params.displayField)+'</b>?',
	   buttons: Ext.Msg.YESNOCANCEL,
	   icon: Ext.MessageBox.WARNING,
	   fn: function(res){
	   		if (res!='yes')
	   			return;
	   		 Ext.Ajax.request({
			   url: params.url,
			   params: params.pkey+'='+record.get(params.pkey),
			   success: function(response){
			      	 var jsonresult = Ext.decode(response.responseText);		      	 
			      	 
			      	 if (jsonresult.success){
			      		params.grid.getStore().reload();
			      		if (params.callback){
			      			params.callback();
			      		}
					}else{
						HANDLER_ACTION_FAILED(jsonresult.data);
					}
				},
			   failure: HANDLER_AJAX_FAILED
			});
	   }
	});

	}else{
		Ext.Msg.show({
		   title:'Warning',
		   msg: 'No selection',
		   buttons: Ext.Msg.OK,
		   icon: Ext.MessageBox.WARNING
		});
	}
}

/**
 * 
 * @param params
 * - grid			grid object
 * - storepkey		name of the pkey field in the grid store
 * - displayField	name of the store field to display in the question 
 * - pkey			name of the param containing the id list to delete (ex. orderids)
 * - extra			extra param to add to url, a string in the form key=value (& is added built in)
 * - url
 * - callback
 * @return
 */

function deleteMultipleRecordFromGrid(params){
	var _grid = params.grid;
	var sel  = _grid.getSelectionModel().getSelections();
	if (_grid.getSelectionModel().getCount()>0){
		var i=0, ids = '', d_ids='';
		if (params.displayField){
   			//
   		}else{
   			params.displayField = params.storepkey;
   		}
   		
   		for (i=0; i<sel.length; i++){
   		   if (!sel[i].get(params.storepkey)){
   			   sel[i].reject();
   			   _grid.getStore().remove(sel[i]);
   		   }else{
	   			if (ids != ''){
	   				ids += ","+sel[i].get(params.storepkey);
	   				d_ids += ","+sel[i].get(params.displayField);
	   			}else{
	   				ids = sel[i].get(params.storepkey);
	   				d_ids += sel[i].get(params.displayField);
	   			}
   		   }
   		}
   		var extra='';
   		if (params.extra){
   			extra = '&'+params.extra;
   		}
   		
   		if (ids!=''){
			Ext.Msg.show({
			   title: 'Remove',
			   msg: 'Are you sure to remove records <b>'+d_ids+'</b>?',
			   buttons: Ext.Msg.YESNOCANCEL,
			   icon: Ext.MessageBox.QUESTION,
			   fn: function(res){
			   		if (res=='yes'){
			   		 Ext.Ajax.request({
					   url: params.url,
					   params: params.pkey+'='+ids+extra,
					   success: function(response){
					      	 var jsonresult = Ext.decode(response.responseText);		      	 
					      	 
					      	 if (jsonresult.success){
					      		params.grid.getStore().reload();
					      		if (params.callback){
					      			params.callback();
					      		}
							}else{
								HANDLER_ACTION_FAILED(jsonresult.data);
							}
						},
					   failure: HANDLER_AJAX_FAILED
					});
			   		}
			   }
			});
   		}

	}else{
		Ext.Msg.show({
		   title:'Warning',
		   msg: 'No selection',
		   buttons: Ext.Msg.OK,
		   icon: Ext.MessageBox.WARNING
		});
	}
}




var undoChanges = function(gridname, warn){
	var store = Ext.getCmp(gridname).getStore();
	var modified_records = store.getModifiedRecords();
   	var index, added=false;
	while ( store.getCount()>0 && (index=store.find('added', 'true')) >=0){
		store.remove(store.getAt(index))
		added=true
	}
   	if (modified_records && modified_records.length > 0){
   		store.rejectChanges();
	}else{
		if (warn && added==false)	{
			BOX_WARNING('No change to undo');
		}
	}
   	return;
}





Ext.override(Ext.form.Field, {
	afterRender : function() {  
        if(this.helpText){
            var label = findLabel(this);
            if(label)    {                 	  
             	var helpImage = label.createChild({
             			tag: 'img', 
             			src: 'img/help_11x11.png',
             			style: 'margin-bottom: 0px; margin-left: 5px; padding: 0px;'
             			,width: 11,
             			height: 11
             		});            	
             		                   	
                Ext.QuickTips.register({
                	title: this.helpTitle?this.helpTitle:'',
                    target:  helpImage,                   
                    text: this.helpText,
                    enabled: true
                });
           }
        }
        Ext.form.Field.superclass.afterRender.call(this);    
        this.initEvents();  
        this.initValue();
	}
});

var findLabel = function(field) {
    
    var wrapDiv = null;
    var label = null

    //find form-item and label
    wrapDiv = field.getEl().up('div.x-form-item');//wrapDiv = field.getEl().up('div.x-form-element');
    if(wrapDiv)     {
        label = wrapDiv.child('label');        
    }
    if(label) {
        return label;
    } 
  
}


var toggleBatchOrder = function(){
	var elmts = Ext.DomQuery.select('.box_trace_large, .box_trace_large_sep');
	for (var x = 0 ; x < elmts.length; x ++){
        var el = elmts[x];
        if (el.style.display=='' || el.style.display=='none'){
        	var prod_id = Ext.Element.fly(elmts[x]).getAttributeNS('','rel');
        	if (prod_id!=null && prod_id>0){
        		reloadModelsPerProd(prod_id);
        	}
        	el.style.display='block';
        }else{
        	el.style.display='none';
        }    
	}
}

//grid, table, pkey, filter, priority, delta, url
var movepriority = function(param){
	var record = param.grid.getSelectionModel().getSelected();
	
	if (param.pkey){
		Ext.Ajax.request({
			url: param.url,
			params: {
					table: 			param.table,
					pkeyvalue: 		param.pkey,
					filtervalue: 	param.filter,
					priority: 		param.priority,
					prioritydelta: 	param.delta},
			success: function(response){
		      	 var jsonresult = Ext.decode(response.responseText);		      	 
		      	 
		      	 if (jsonresult.success){
		      		param.grid.getStore().reload();
		      		param.grid.getSelectionModel().selectRecords([record]);
				}else{
					HANDLER_ACTION_FAILED(jsonresult.data);
				}
			},
			failure: HANDLER_AJAX_FAILED
		});
	}
}

function booleanRenderer(disabled, onclick){
	var disabledStr = '';
	var onClick = '';
	if (disabled) disabledStr = ' disabled="true" ';
	else {
		if (onclick) onClick = ' onclick="'+onclick+'()"';
	}
	return function(val){
	    if(val == "false" || val == false || val==0){
	        return '<input type="checkbox" '+disabledStr+onClick+'/>';
	    }else if(val == "true" || val==true || val==1){
	        return '<input type="checkbox" '+disabledStr+onClick+' checked="true" />';
	    }
	    return val;
	}
}

comboBoxRenderer = function(combo) {
	return function(value) {
		var idx = combo.store.find(combo.valueField, value);
		if (idx>=0){
			var rec = combo.store.getAt(idx);
			return rec.get(combo.displayField);
		}else{
			return value
		}
	};
}



String.format = function( text )
{
    //check if there are two arguments in the arguments list
    if ( arguments.length <= 1 )
    {
        //if there are not 2 or more arguments there’s nothing to replace

        //just return the original text

        return text;
    }

    //decrement to move to the second argument in the array
    var tokenCount = arguments.length - 2;
    for( var token = 0; token <= tokenCount; token++ )
    {
        //iterate through the tokens and replace their placeholders from the original text in order
        text = text.replace( new RegExp( "\\{" + token + "\\}", "gi" ),
                                                arguments[ token + 1 ] );
    }
    return text;

};

/*Ext.override(Ext.form.NumberField, {
    setValue : function(v){
            v = typeof v == 'number' ? v : String(v).replace(this.decimalSeparator, ".");
        v = isNaN(v) ? '' : String(v).replace(".", this.decimalSeparator);
        return Ext.form.NumberField.superclass.setValue.call(this, v);
    },
    fixPrecision : function(value){
        var nan = isNaN(value);
        if(!this.allowDecimals || this.decimalPrecision == -1 || nan || !value){
           return nan ? '' : value;
        }
        return parseFloat(value).toFixed(this.decimalPrecision);
    }
})*/

Ext.override(Ext.form.NumberField,{
    setValue : function(v){
        Ext.form.NumberField.superclass.setValue.call(this, String(v).replace(this.decimalSeparator, "."));
    }
}); 

var i18nOrderStatus = new Array();
i18nOrderStatus[0]='Pending';
i18nOrderStatus[1]='In Payment';
i18nOrderStatus[2]='Confirmed';
i18nOrderStatus[3]='Dispatched';
i18nOrderStatus[4]='Delivered';
i18nOrderStatus[5]='Booked';
i18nOrderStatus[6]='Dropshipping';
i18nOrderStatus[2000]='Cancelled';
i18nOrderStatus[2001]='Error';
i18nOrderStatus[3001]='Working on';
i18nOrderStatus[3002]='Ready';

i18nOrderStatus[1000]='Payment Cancelled';
i18nOrderStatus[2002]='Payment Verification Failed';
i18nOrderStatus[2003]='Refunded';
i18nOrderStatus[2005]='Rejected';
i18nOrderStatus[3003]='Not dispatchable';
i18nOrderStatus[5001]='Not authorized';
i18nOrderStatus[5002]='Authorized';
i18nOrderStatus[5003]='Dropshipping - Growing';

var i18nOrderStatusColor = new Array();
i18nOrderStatusColor[0]= 'gray';  //'Pending';
i18nOrderStatusColor[1]= 'yellow';  //'Waiting Payment';
i18nOrderStatusColor[2]='orange';  //'Confirmed';
i18nOrderStatusColor[3]='green';  //'Dispatched';
i18nOrderStatusColor[4]='green';  //'Delivered';
i18nOrderStatusColor[5]='green';  //'Booked';
i18nOrderStatusColor[6]='green';  //'Dropshipping';
i18nOrderStatusColor[2000]='red';  //'Cancelled';
i18nOrderStatusColor[2001]='red';  //'Error';
i18nOrderStatusColor[3001]='#B82446';  //'Working on';
i18nOrderStatusColor[3002]='#60BF94';  //'Ready';

var orderStatusRenderer = function(status,p,r){
	var color = i18nOrderStatusColor[status];
	if (!color){
		color = 'gray';
	}
	
	var statusi18n = i18nOrderStatus[status];
	
	if (!statusi18n){
		statusi18n = status;
	}
	
	var substatusi18n='';
	if (status==5||status==6||status==2000){
		var substatus = r.data.substatus;
		if (substatus>0){
			substatusi18n = i18nOrderStatus[substatus];
			
			if (!substatusi18n){
				substatusi18n = substatus;
			}
			substatusi18n = ' ['+substatusi18n+']';
		}
	}
	
	return '<span style=\"color:'+color+';\">'+statusi18n+substatusi18n+'</span>';
	
};
