<!--almcustomizeudatestcasedlg.vm-->
 <!-- This file is resource bundle enabled -->

 #set ($TESTCASE_ID= $CommonFunctions.displayTermFromResourceBundle($currentUserId, "ALMTerms", "almterms.almconnections.testcaseid"))
 #set ($UDA_MAPPING_WARNING = $CommonFunctions.displayTermFromResourceBundle($currentUserId, "ALMTerms", "almterms.almconnections.udamappingwarning"))


var LOADTESTCASEUDAS = "LOAD_TESTCASE_UDAS";
var SAVE_TESTCASE_UDAS = "SAVE_TESTCASE_UDAS";
var LOAD_TESTCASE_ATTR_MAPPING = "LOAD_TESTCASE_ATTR_MAPPING";
	
    var almtestcaseudadlg = {
		isWizardMode:false,
			udaFormDialog : null,
			udaProgressMsgBox : null,
			udaFormCtrl : null,
			storeTestcaseUda : null,	
			isEnumerationFieldMapped : false,	
			udaNamesArray: null,
			init : function() {
			   	Ext.QuickTips.init();
//add all uda strings

				
			   	almtestcaseudadlg.udaNamesArray=new Array("udatestcasename","udatestcasedesc","udatestcasestatus",
										"udatestcaseid");
				//Data store for testcase UDAs
				almtestcaseudadlg.storeTestcaseUda = new Ext.data.Store({
					reader: new Ext.data.JsonReader(
					{ root: 'rows',
					  data: 'data',
					  success: 'success'
					},
					[
				       {name: 'udaId'},
				       {name: 'udaName'},
					   {name: 'udatt'},
					   {name: 'type'},
					   {name: 'isEnum'}
					]),
					  sortInfo:{field: 'udaName', direction: "ASC"}
				});

				almtestcaseudadlg.storeTestcaseUda.addListener(
					'beforeload',
					function(storeRef, options) {
						var currentALMLinkName = null;
						if( linksTable.selectedItem == null ) {
							currentALMLinkName = linksTable.formCtrl.findById('linkname').getValue();
						} else {
							currentALMLinkName = linksTable.selectedItem['linkname'];
						}
						almtestcaseudadlg.udaProgressMsgBox = Ext.MessageBox.wait(
							'$LOADING_UDAS_PROGRESS_MSG'
								+ currentALMLinkName); 
					}
				);
				almtestcaseudadlg.storeTestcaseUda.addListener(
					'loadexception',
					function(proxy, data, arg, e) {
						almtestcaseudadlg.udaProgressMsgBox.hide();
						Ext.MessageBox.show({
				           title: '$ERROR_TEXT',
				           msg: arg.responseText,
				           buttons: Ext.MessageBox.OK});
		        	}
		        );


				var text = "<input type='image' src='../themes/default/images/warning16x16.gif'/>&nbsp;&nbsp;&nbsp;" +
								"<span>$UDA_MAPPING_WARNING</span>";

				almtestcaseudadlg.udaFormCtrl = new Ext.FormPanel({
					buttonAlign: 'right',
                	labelAlign: 'right',
					id: 'TESTCASEUDA',
					isDirty: false,
	                layout:'form',
					frame: true,
					height: 220,
					margins:{ right: 5, left: 5},
					items:[{
						layout:'form',
		                items: [
							
							new Ext.Panel({
						        autowidth:true,
								height:50,
						        html:text
						    }),
							{
								layout: 'column',
								items: [									
								{
									columnWidth: .55,
									margins: {
										right: 5,
										left: 5
									},
									layout: 'form',
									anchor: 'left',
									border: false,
									items: [almtestcaseudadlg.createComboBox('$NAME_TEXT', 'udatestcasename', false ),
											 almtestcaseudadlg.createComboBox('$DESCRIPTION_TEXT', 'udatestcasedesc', true) 
										]
								},
								{
									name: 'uda_xLinkId',
									xtype: 'hidden',
									id: 'uda_xLinkId'
								}, {
                                    name: 'agile',
                                    xtype: 'hidden',
                                    id: 'agile'
                              },{
									columnWidth: .45,
									margins: {
										right: 5,
										left: 5
									},
									layout: 'form',
									anchor: 'right',
									border: false,
									items: [
									        almtestcaseudadlg.createComboBox('$STATUS_TEXT', 'udatestcasestatus', false),
									        almtestcaseudadlg.createComboBox('$TESTCASE_ID', 'udatestcaseid', true) 
									
								]
								}]
							}
						]
					}],
					buttons:
						[{ text: '$saveudabutton',
			        		handler: function(){
									almtestcaseudadlg.saveUDAs();
			       	 		}
		        		},
				        {
				            text: '$canceludabutton',
				            handler: function() {
								if (almtestcaseudadlg.udaFormCtrl.isDirty) {
									Ext.MessageBox.show({
										title:'$CHANGES_DETECTED',
										msg: '$CHANGES_DETECTED_MSG',
										buttons: Ext.MessageBox.YESNO,
										icon: Ext.MessageBox.QUESTION,
										fn: function(btn){
											if (btn == "yes") {
												almtestcaseudadlg.udaFormCtrl.isDirty = false;
												almtestcaseudadlg.isEnumerationFieldMapped = false;
												almtestcaseudadlg.udaFormDialog.hide();
											}
										}
									});
								} else {
									almtestcaseudadlg.udaFormDialog.hide();
								}
		                    }
				        }
	        		]
				});

				if(!almtestcaseudadlg.udaFormDialog){
		            almtestcaseudadlg.udaFormDialog = new Ext.Window({
		                el:'udaTestcaseFormDialogHTML',
		                layout:'fit',
		                width:690,
		                height:220,
		                closeAction:'hide',
		                plain: true,
		                items: almtestcaseudadlg.udaFormCtrl,
		                modal: true,
		                resizable : false
		            });
		        };

		    },  
		    validateUDAs:function()
		    {
		    	
		    	var values = new Array(almtestcaseudadlg.udaNamesArray.length);
		    
		    	for (var i=0; i<almtestcaseudadlg.udaNamesArray.length; i++) {
		    		var name = almtestcaseudadlg.udaNamesArray[i];
		    		var value = almtestcaseudadlg.udaFormCtrl.findById(name).getValue();		    		
		    		values[i] = value;
		    		if(value.length >0)
		    		{	
			    		for (var j=0; j<=i; j++)
			    		{
			    			if(i != j)
			    			{	
				    			if(values[j] == value)
				    			{	
				    				var msg = '$DUPLICATE_MAPPING_TEXT' + "<br>" + value;
				    				Ext.MessageBox.show({
										title: '$ERROR_TEXT',
										msg: msg,
										buttons: Ext.MessageBox.OK,
										icon: Ext.MessageBox.ERROR
									});				    				
				    				return false;
				    			}
			    			}
			    		}
		    		}	
		    	}
		    	return true;
		    	
		    },
			saveUDAs : function() {
		    	if(!almtestcaseudadlg.validateUDAs())
		    		return;
				var xid = almtestcaseudadlg.udaFormCtrl.findById('uda_xLinkId').getValue();
				almtestcaseudadlg.udaFormCtrl.form.submit({
					url:'ajax/AsyncHandler',
            		waitMsg:'$SAVING_DATA',
            		params:{action: SAVE_TESTCASE_UDAS, uda_xLinkId : xid, projectid:'$projectId' , elementtype:TESTCASE},
            		success:function(form, action) {
						if(almtestcaseudadlg.isWizardMode || almtestcaseudadlg.isEnumerationFieldMapped) {
							var name = linksTable.ds.getById(xid).get('linkname');							
							var type = linksTable.ds.getById(xid).get('type');
							linksTable.showMapEnumerations(xid,name,type);
						}
            			almtestcaseudadlg.udaFormCtrl.isDirty = false;
						almtestcaseudadlg.isEnumerationFieldMapped = false;
						almtestcaseudadlg.udaFormDialog.hide();
						almtestcaseudadlg.udaFormCtrl.form.reset();
						linksTable.ds.load({waitMsg:'$LOADING_TEXT',params:{start:0, limit:25}});
					},
					failure:function(form, action) {
						if (action.result) {
							Ext.MessageBox.show({
								title: '$ERROR_TEXT',
								msg: action.result.data[0].msg,
								buttons: Ext.MessageBox.OK,
								icon: Ext.MessageBox.ERROR
							});
						}
					}
				});
			},


			showUDACustomization: function(xLinkId,wizardMode) {
				
				almtestcaseudadlg.isWizardMode = wizardMode;
				almtestcaseudadlg.isEnumerationFieldMapped = false;
				almtestcaseudadlg.storeTestcaseUda.proxy = new Ext.data.HttpProxy({
					url: 'ajax/AsyncHandler?action=' + LOADTESTCASEUDAS + '&id=' + xLinkId + '&elementtype=' + TESTCASE  +  "&projectid=$projectId"
				});
				
				almtestcaseudadlg.storeTestcaseUda.load({
					callback: function(record, options, success){
						
						if ( success ) {
							almtestcaseudadlg.initUDAComboBoxes();	
							almtestcaseudadlg.disableComboBoxes(true);
							almtestcaseudadlg.udaFormCtrl.form.load({
								url:'ajax/AsyncHandler?action=' + LOAD_TESTCASE_ATTR_MAPPING + '&id=' + xLinkId +  "&projectid=$projectId",
								waitMsg:'$LOADING_MAPPING', 
								params: {
									action: LOAD_TESTCASE_ATTR_MAPPING,
									id: xLinkId,
									elementtype:TESTCASE
								},
								failure:function(form, action) {
									almtestcaseudadlg.udaProgressMsgBox.hide();
									almtestcaseudadlg.disableComboBoxes(false);
									//ErrorHandlerLib.onFormFailure(form, action);
									alert('$UDA_MAPPING_LOAD_ERROR'+" : "+action.failureType);
								},
								success:function(form, action) {
																		
									almtestcaseudadlg.udaProgressMsgBox.hide();
									almtestcaseudadlg.disableComboBoxes(false);
								},
                    			settings: {show:true, title:'$UDA_MAPPING_LOAD_ERROR'} 
							});
							almtestcaseudadlg.udaFormDialog.show();
						} else {
							almtestcaseudadlg.udaProgressMsgBox.hide();
							var options = {settings:{show:"true", title:'$UDA_LOAD_ERROR'}};
							var libDataStr = almtestcaseudadlg.storeTestcaseUda.reader.jsonData;
							ErrorHandlerLib.showErrorWithJSONObject( libDataStr, options );
						}
					}
				});
			},

			isEnumFieldMapped: function () {
				if( (almtestcaseudadlg.udaFormCtrl.findById('udatestcasestatus').getValue() != DEFAULT_VALUE) ) {
						return true;
				}
				return false;
			},
			
			initUDAComboBoxes: function () {
				
				
				//almtestcaseudadlg.udaFormCtrl.findById('udatestcasename').setValue(DEFAULT_VALUE);
				almtestcaseudadlg.udaFormCtrl.findById('udatestcasedesc').setValue(DEFAULT_VALUE);
				//almtestcaseudadlg.udaFormCtrl.findById('udatestcasestatus').setValue(DEFAULT_VALUE);
				//almtestcaseudadlg.udaFormCtrl.findById('udatestcaseid').setValue(DEFAULT_VALUE);				
				
			},
			disableComboBoxes: function(value){
				almtestcaseudadlg.udaFormCtrl.findById('udatestcasestatus').setDisabled(value);
				
			},

			createComboBox: function(displayName, id, allowblank, filterFn) {
				var cbox = new Ext.form.ComboBox({
					fieldLabel: displayName,
					id: id,
					store: almtestcaseudadlg.storeTestcaseUda,
					displayField: 'udaName',
					valueField:'udaId',
					tpl: '<tpl for="."><div ext:qtip="{udatt}" class="x-combo-list-item">{udaName}</div></tpl>',				
					width: 175,
					editable: false,
					allowBlank: allowblank,
					emptyText: 'Select an attribute...',
					mode: 'local',
					triggerAction: 'all',
					typeAhead: false,
					listeners: {  select: function() {
									 almtestcaseudadlg.udaFormCtrl.isDirty = true;
									 if( this.id == 'udatestcasestatus' ) {
									 	almtestcaseudadlg.isEnumerationFieldMapped = true;
									 	
									 }
								  },
								  expand: function() {
								  	 almtestcaseudadlg.storeTestcaseUda.currentComboName = this.id;
								  	 almtestcaseudadlg.storeTestcaseUda.filterBy(almtestcaseudadlg.filterComboByUDAType);
								  }
							   }
				});
				
				
				return cbox;
			},

			filterComboByUDAType: function(record, id) {
				var cn = almtestcaseudadlg.storeTestcaseUda.currentComboName;
				if( record.get("udaName") == DEFAULT_VALUE ) {
					return true;
				}
				
			
				if( ((cn == 'udatestcasename') || (cn == 'udatestcasedesc') || (cn == 'udatestcaseid') )&& (record.get("type").indexOf("TEXT") <= -1) )	{
					return false;
				}
				if( ((cn == 'udatestcasename') || (cn == 'udatestcasedesc') || (cn == 'udatestcaseid') )&& (record.get("type").indexOf("TEXT") >= 0) )	{
					return true;
				}
							
				if( ((cn=='udatestcasestatus') ) && (record.get("isEnum") == "true") ) {
					return true;
				}
				if( ((cn!='udatestcasestatus') ) && (record.get("isEnum") == "false") ) {
					return true;
				}
				return false;
			}
			
}