Melrow.QuoteWizard = function(){

	var contactFormConfig = {
	 	labelAlign:'top',
	 	xtype:'form',
	 	clearOnReset: false,
        autoHeight:true,		 	
	 	border:false,
	 	bodyStyle:'padding:15px',
		name:'Contact information',
		description:'Please enter your contact information (bold fields are required).',
		items:[{
            layout:'column',
            autoHeight:true,
	        border:false,
	        items:[{
    	        columnWidth:.5,
    	        autoHeight:true,
    	        defaults:{anchor:'93%'},
        	    layout: 'form',				            
		        border:false,
        	    items:[{
        	     	xtype:'textfield',
		            fieldLabel: 'First Name',
		            name: 'firstname',
		            value: Ext.state.Manager.getProvider().get('firstname', undefined),
		            itemCls:'required-field',
		            allowBlank:false
		        }]
        	},{
    	        columnWidth:.5,
        	    layout: 'form',
    	        autoHeight:true,
    	        defaults:{anchor:'100%'},
		        border:false,
        	    items:[{
		            fieldLabel: 'Last Name',
        	     	xtype:'textfield',							            
		            name: 'lastname',
		            itemCls:'required-field',
	    	        value: Ext.state.Manager.getProvider().get('lastname', undefined),
		            allowBlank:false						            
		        }]
        	}]
        },{
            fieldLabel: 'Email',
            xtype:'textfield',
			name: 'email',
	        value: Ext.state.Manager.getProvider().get('email', undefined),
	        vtype:'email',
	        anchor:'100%',
            itemCls:'required-field',
            allowBlank:false	            
	    },{
            layout:'column',
    	    border:false,
		    items:[{
    	        columnWidth:.5,
	            defaults:{anchor:'93%'},		     
        	    border:false,
				autoHeight:true,	        	    
        	    layout: 'form',	
        	    items:[{
		            fieldLabel: 'Company Name',
    		        xtype:'textfield',
					value: Ext.state.Manager.getProvider().get('companyname', ''),
		            name: 'companyname'
		        },{
		           	fieldLabel: 'Address',
    	        	xtype:'textfield',
					value: Ext.state.Manager.getProvider().get('address', ''),
	            	name: 'address'
		        },{
	    	        value: Ext.state.Manager.getProvider().get('city', ''),	        
				    xtype:'textfield',
					fieldLabel: 'City',
	    	        name: 'city'
		        },{
		            fieldLabel: 'Telephone',
    		        xtype:'textfield',
					value: Ext.state.Manager.getProvider().get('telephone', ''),	        
				    name: 'telephone'
		        }]
        	},{
    	        columnWidth:.5,
        	    layout: 'form',
				autoHeight:true,	        	    
	            defaults:{anchor:'100%'},		     
				border:false,			            
        	    items:[{
					fieldLabel: 'Company Type',
		            xtype:'combo',
			        store: new Ext.data.SimpleStore({
			        	fields: ['type', 'type_desc'],
				        data : [
							['1', 'Corporate'],
				        	['2', 'Education'],
				        	['3','Government'],
				        	['4','Other'],
				        	['5', 'Private'],
				        	['6', 'Reseller'],
				        	['7', 'VAR']
						]
			    	}),
			        displayField:'type_desc',
			        valueField:'type',
			        typeAhead: true,
			        mode: 'local',
			        triggerAction: 'all',
			        emptyText:'Select a type...',
			        selectOnFocus:true,
    		        value: Ext.state.Manager.getProvider().get('companytype', ''),
	    	        name: 'companytype'
		        },{
	    	        value: Ext.state.Manager.getProvider().get('zipcode', ''),	            
		            xtype:'textfield',
					fieldLabel: 'Zipcode',
	    	        name: 'zipcode'
		        },{
		            fieldLabel: 'Country',
    		        xtype:'textfield',
					value: Ext.state.Manager.getProvider().get('country', ''),	        
				    name: 'country'
		        },{
				    value: Ext.state.Manager.getProvider().get('fax', ''),	        
			    	xtype:'textfield',
					fieldLabel: 'Fax',
		            name: 'fax'
		        }]
        	}]
        },{
         	xtype:'checkbox',
            boxLabel:'Keep me up to date with the Melrow Newsletter. Your email address will be stored by us for that purpose only and will not be given or sold to Third Parties.',
            name:'keepupdated',
	        anchor:'90%',
	        labelSeparator:'',
	        value: Ext.state.Manager.getProvider().get('keepupdated', true),	            
            checked:true,
            itemCls: 'x-form-item-hide-label'
		}]
		
	};
	
	Melrow.QuoteWizard.superclass.constructor.call(this,{
		title: 'Get A Quote',
		width:700,
		height:520,
		cards: [contactFormConfig]
	});
	
	this.render(document.body);

}

Ext.extend(Melrow.QuoteWizard, Ext.ux.wizard.Window,{

	productId : null,
	loaded : false,

	init : function(id, name, quotes){
	
		if (this.loaded) this.removeCard(0);
	 	
	 	this.insertCard(0, {
		    border:false,
			autoScroll:true,
			xtype:'form',
	        labelAlign:'top',
	        bodyStyle:'position:relative;padding:15px',
	        name:'Quote specification',
	        description:'Please specify your quote request.',
	        items: this.getConfigFormColumns(id, name, quotes)			
		});
		this.setActiveCard(0);		
	
		this.on('finish', function(values){
			this.hide();
		 	var keys = ['firstname', 'lastname', 'email', 'companyname','companytype', 'address', 'zipcode', 'city', 'country', 'keepupdated', 'telephone', 'fax'];
			for (var i=0;i<keys.length;i++){
				Ext.state.Manager.getProvider().set(keys[i], values[keys[i]]);				
			}
			Ext.Ajax.request({url:'/quotes/' + this.artCode, params: values, callback:function(){
			}, scope:this});
			this.reset();
			Ext.MessageBox.alert('Get A Quote', 'Linvision HPC thanks you for filling out this form. Your quote request will be evaluated by one of our Sales Engineers and an offer will be sent to you by e-mail as soon as possible.');			
		}, this);
	},

	getConfigFormColumns: function(id, name, quotes){
		this.artCode = id;

		var a = [];
		for (var y = 1; y<100; y++){
			a[y-1] = [y.toString(), y.toString()];
		};
		
		var columns = [{	
            layout:'column',
            border:false,
            defaults:{autoHeight:true},            
            items: [{ 
				columnWidth:.85,
                layout: 'form',
                border:false,
				hideLabels:true,
                items: [{
					labelSeparator:'',                	                 	
					xtype: 'miscfield',
                    fieldLabel: '',
	                anchor:'95%',
					cls: 'hdr-field',
					name: 'product',
					value: name
            	}]
            },{
				columnWidth:.15, 
                border:false,					
				hideLabels:true,  
                layout: 'form',
                items: [{
				    store: new Ext.data.SimpleStore({
				    	fields: ['value', 'disp'],
					    data : a
					}),
				    displayField:'disp',
				    mode: 'local',
				    name: 'qty',
				    xtype:'combo',
				    value: 1,
				    forceSelection: true,					    
				    allowBlank: false,
				    readOnly: true,
				    anchor:'100%',
				    fieldLabel: '',
				    triggerAction: 'all',
				    selectOnFocus:true
                }]
            }]
	    }];

	    for (var x=0;x<quotes.length;x++){
			var q = quotes[x];

			var a = [];
			for(var i=0;i<q['values'].length;i++){
				a[i] = [q['values'][i], q['values'][i]];
			}

			columns[columns.length] = {
				layout:'column',
				defaults:{autoHeight:true},
	            border:false,
				items : [{
					columnWidth:.85,
	                layout: 'form',
	                border:false,
				 	items : [{
						xtype:'combo',
					    store: new Ext.data.SimpleStore({
					    	fields: ['value', 'name'],
						    data : (q['min'] == 0 ? q['products'].concat([[-1, 'None']]) : q['products'])
						}),
					    displayField:'name',
					    hiddenName: q['name'],
					    forceSelection:true,
					    mode: 'local',
					    name: q['name'] + '_combo',
					    value: (q['default'] > 0 ? q['products'][0][0] : '-1'),
					    valueField: 'value',
					    allowBlank:false,
					    fieldLabel: q['desc'],
					    readOnly: true,
					    triggerAction: 'all',				    
					    selectOnFocus:true,
						listeners:{
				            select: function(field, record, index){
				             	var form = this.getActiveCard().getForm();
								var f = form.findField(field.hiddenName + '_qty');
								if (record.get('value') == -1) f.setValue(f.store.getAt(0).get('value'));
								else if (f.getValue() == 0) f.setValue(f.store.getAt(1).get('value'));		
							},
				            scope: this
				        },
					    anchor:'95%'
					}]
				}, {
					columnWidth:.15, 
	                border:false,					
	                layout: 'form',			 
					items: [{
						xtype:'combo',
					    store: new Ext.data.SimpleStore({
					    	fields: ['value', 'disp'],
						    data : a
						}),
					    displayField:'disp',
					    mode: 'local',
					    name: q['name'] + '_qty',
					    value: q['default'],
					    forceSelection:true,					    
					    allowBlank:false,
					    valueField: 'value',			    
					    readOnly:true,
					    fieldLabel: '&nbsp;',
					    anchor:'100%',
					    triggerAction: 'all',
						labelSeparator:'',					    
					    selectOnFocus:true,
						listeners:{
				            select: function(field, record, index){
								if (field.getValue() == 0){
					             	var form = this.getLayout().center.panel.layout.center.panel.layout.activeItem.getForm();
									var f = form.findField(field.name.substring(0,field.name.length - 4));
									f.setValue(-1);
								}
							},
				            scope: this
				        }
					}]
				}]
			}
		}
		
		columns[columns.length] = {
            layout:'column',
            autoHeight:true,
            border:false,
            items: [{ 
				columnWidth:.85,
				autoheight:true,
                layout: 'form',
                border:false,
                items: [{
					xtype:'textarea',
		            fieldLabel: 'Additional requests',
        		    name: 'comments',
				    anchor:'95%',
		            height:75
            	}]
            },{
				columnWidth:.15, 
                border:false,	
				hideLabels:true,  
                layout: 'form'
            }]
        };
	
		return columns;
	},

	show : function(id){
		if (this.productId != id){	
		 	this.productId = id;		 
			Ext.Ajax.request({disableCaching:false, method: 'GET', url:'/quotes/' + id, success:function(r,o){
				var r = Ext.util.JSON.decode(r.responseText);
				this.init(id, r.name, r.quotes);
				this.setTitle('Get A Quote: ' + r.name);
				this.loaded = true;
				Melrow.QuoteWizard.superclass.show.call(this);
				this.fireEvent('show');
			}, scope:this});
		} else {
			Melrow.QuoteWizard.superclass.show.call(this);			
		}
	}

});
