You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by mg...@apache.org on 2017/01/16 10:27:14 UTC

ambari git commit: AMBARI-19521 Log Search Add 'last 24 hours' to the time picker buttons (mgergely)

Repository: ambari
Updated Branches:
  refs/heads/branch-2.5 f5dca1afc -> 930d5bf31


AMBARI-19521 Log Search Add 'last 24 hours' to the time picker buttons (mgergely)

Change-Id: I5fb34a45f0fd73f4b60c614776ffa146417db594


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/930d5bf3
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/930d5bf3
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/930d5bf3

Branch: refs/heads/branch-2.5
Commit: 930d5bf312fe42e4088398e4f5ae5d614216ed36
Parents: f5dca1a
Author: Miklos Gergely <mg...@hortonworks.com>
Authored: Mon Jan 16 11:27:00 2017 +0100
Committer: Miklos Gergely <mg...@hortonworks.com>
Committed: Mon Jan 16 11:27:00 2017 +0100

----------------------------------------------------------------------
 .../src/main/webapp/scripts/utils/Utils.js      | 2256 +++++++++---------
 1 file changed, 1130 insertions(+), 1126 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/930d5bf3/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/utils/Utils.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/utils/Utils.js b/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/utils/Utils.js
index 924f92f..85c8245 100644
--- a/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/utils/Utils.js
+++ b/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/utils/Utils.js
@@ -17,858 +17,862 @@
 */
 
 define(['require',
-	'utils/Enums',
-	'utils/LangSupport',
-	'moment',
-	'utils/Globals',
-	'bootbox'
+    'utils/Enums',
+    'utils/LangSupport',
+    'moment',
+    'utils/Globals',
+    'bootbox'
 ],function(require,XAEnums,localization,moment,Globals,bootbox) {
-	'use strict';
+    'use strict';
 
 
-	var prevNetworkErrorTime = 0;
-	var Utils = {};
+    var prevNetworkErrorTime = 0;
+    var Utils = {};
 
-	require(['noty'],function(){
-		$.extend($.noty.defaults,{
-    		timeout : 5000,
-    		layout : "topRight",
-    		theme : "relax",
-    		closeWith: ['click','button'],
-    		 animation   : {
+    require(['noty'],function(){
+        $.extend($.noty.defaults,{
+            timeout : 5000,
+            layout : "topRight",
+            theme : "relax",
+            closeWith: ['click','button'],
+             animation   : {
                  open  : 'animated flipInX',
                  close : 'animated flipOutX',
                  easing: 'swing',
                  speed : 500
              }
-    		
-    	});
-	});
-
-	// ///////////////////////////////////////////////////////
-	// Enum utility methods
-	// //////////////////////////////////////////////////////
-	/**Utils
-	 * Get enum for the enumId
-	 * 
-	 * @param {integer}
-	 *            enumId - The enumId
-	 */
-	Utils.getEnum = function(enumId) {
-		if (!enumId || enumId.length < 1) {
-			return "";
-		}
-		// check if the enums are loaded
-		if (!XAEnums[enumId]) {
-			return "";
-		}
-		return XAEnums[enumId];
-	};
-
-	/**
-	 * Get enum by Enum and value
-	 * 
-	 * @param {Object}
-	 *            myEnum - The enum
-	 * @param {integer}
-	 *            value - The value
-	 */
-	Utils.enumElementByValue = function(myEnum, value) {
-		var element = _.detect(myEnum, function(element) {
-			return element.value == value;
-		});
-		return element;
-	};
-
-	/**
-	 * Get enum by Enum and name, value
-	 * 
-	 * @param {Object}
-	 *            myEnum - The enum
-	 * @param {string}
-	 *            propertyName - The name of key
-	 * @param {integer}
-	 *            propertyValue - The value
-	 */
-	Utils.enumElementByPropertyNameValue = function(myEnum, propertyName,
-			propertyValue) {
-		for ( var element in myEnum) {
-			if (myEnum[element][propertyName] == propertyValue) {
-				return myEnum[element];
-			}
-		}
-		return null;
-	};
-
-	/**
-	 * Get enum value for given enum label
-	 * 
-	 * @param {Object}
-	 *            myEnum - The enum
-	 * @param {string}
-	 *            label - The label to search for in the Enum
-	 */
-	Utils.enumLabelToValue = function(myEnum, label) {
-		var element = _.detect(myEnum, function(element) {
-			return element.label == label;
-		});
-		return (typeof element === "undefined") ? "--" : element.value;
-	};
-
-	/**
-	 * Get enum label for given enum value
-	 * 
-	 * @param {Object}
-	 *            myEnum - The enum
-	 * @param {integer}
-	 *            value - The value
-	 */
-	Utils.enumValueToLabel = function(myEnum, value) {
-		var element = _.detect(myEnum, function(element) {
-			return element.value == value;
-		});
-		return (typeof element === "undefined") ? "--" : element.label;
-	};
-
-	/**
-	 * Get enum label tt string for given Enum value
-	 * 
-	 * @param {Object}
-	 *            myEnum - The enum
-	 * @param {integer}
-	 *            value - The value
-	 */
-	Utils.enumValueToLabeltt = function(myEnum, value) {
-		var element = _.detect(myEnum, function(element) {
-			return element.value == value;
-		});
-		return (typeof element === "undefined") ? "--" : element.tt;
-	};
-
-	/**
-	 * Get NVpairs for given Enum to be used in Select
-	 * 
-	 * @param {Object}
-	 *            myEnum - The enum
-	 */
-	Utils.enumToSelectPairs = function(myEnum) {
-		return _.map(myEnum, function(o) {
-			return {
-				val : o.value,
-				label : o.label
-			};
-		});
-	};
-
-	/**
-	 * Get NVpairs for given Enum
-	 * 
-	 * @param {Object}
-	 *            myEnum - The enum
-	 */
-	Utils.enumNVPairs = function(myEnum) {
-		var nvPairs = {
-			' ' : '--Select--'
-		};
-
-		for ( var name in myEnum) {
-			nvPairs[myEnum[name].value] = myEnum[name].label;
-		}
-
-		return nvPairs;
-	};
-
-	/**
-	 * Get array NV pairs for given Array
-	 * 
-	 * @param {Array}
-	 *            myArray - The eArraynum
-	 */
-	Utils.arrayNVPairs = function(myArray) {
-		var nvPairs = {
-			' ' : '--Select--'
-		};
-		_.each(myArray, function(val) {
-			nvPairs[val] = val;
-		});
-		return nvPairs;
-	};
-
-	Utils.notifyInfo = function(options) {
-		noty({
-			type:"information",
-			text : "<i class='fa fa-exclamation-circle'></i> "+(options.content || "Info message.")
-		});
-	};
-	Utils.notifyWarn = function(options) {
-		noty({
-			type:"warning",
-			text : "<i class='fa fa-times-circle'></i> "+(options.content || "Info message.")
-		});
-	};
-
-	Utils.notifyError = function(options) {
-		noty({
-			type:"error",
-			text : "<i class='fa fa-times-circle'></i> "+(options.content || "Error occurred.")
-		});
-	};
-
-	Utils.notifySuccess = function(options) {
-		noty({
-			type:"success",
-			text : "<i class='fa fa-check-circle-o'></i> "+(options.content || "Error occurred.")
-		});
-	};
-
-	/**
-	 * Convert new line to <br />
-	 * 
-	 * @param {string}
-	 *            str - the string to convert
-	 */
-	Utils.nl2br = function(str) {
-		if (!str)
-			return '';
-		return str.replace(/\n/g, '<br/>').replace(/[\r\t]/g, " ");
-	};
-
-	/**
-	 * Convert <br />
-	 * to new line
-	 * 
-	 * @param {string}
-	 *            str - the string to convert
-	 */
-	Utils.br2nl = function(str) {
-		if (!str)
-			return '';
-		return str.replace(/\<br(\s*\/|)\>/gi, '\n');
-	};
-
-	/**
-	 * Escape html chars
-	 * 
-	 * @param {string}
-	 *            str - the html string to escape
-	 */
-	Utils.escapeHtmlChar = function(str) {
-		if (!str)
-			return '';
-		str = str.replace(/&/g, "&amp;");
-		str = str.replace(/>/g, "&gt;");
-		str = str.replace(/</g, "&lt;");
-		str = str.replace(/\"/g, "&quot;");
-		str = str.replace(/'/g, "&#039;");
-		return str;
-	};
-
-	/**
-	 * nl2br and Escape html chars
-	 * 
-	 * @param {string}
-	 *            str - the html string
-	 */
-	Utils.nl2brAndEscapeHtmlChar = function(str) {
-
-		if (!str)
-			return '';
-		var escapedStr = escapeHtmlChar(str);
-		var finalStr = nl2br(str);
-		return finalStr;
-	};
-
-	/**
-	 * prevent navigation with msg and call callback
-	 * 
-	 * @param {String}
-	 *            msg - The msg to show
-	 * @param {function}
-	 *            callback - The callback to call
-	 */
-	Utils.preventNavigation = function(msg, $form) {
-		window._preventNavigation = true;
-		window._preventNavigationMsg = msg;
-		$("body a, i[class^='icon-']").on("click.blockNavigation", function(e) {
-			Utils.preventNavigationHandler.call(this, e, msg, $form);
-		});
-	};
-
-	/**
-	 * remove the block of preventNavigation
-	 */
-	Utils.allowNavigation = function() {
-		window._preventNavigation = false;
-		window._preventNavigationMsg = undefined;
-		$("body a, i[class^='icon-']").off('click.blockNavigation');
-	};
-
-	Utils.preventNavigationHandler = function(e, msg, $form) {
-		var formChanged = false;
-		var target = this;
-		if (!_.isUndefined($form))
-			formChanged = $form.find('.dirtyField').length > 0 ? true : false;
-		if (!$(e.currentTarget).hasClass("_allowNav") && formChanged) {
-
-			e.preventDefault();
-			e.stopImmediatePropagation();
-			bootbox.dialog(msg, [ {
-				"label" : localization.tt('btn.stayOnPage'),
-				"class" : "btn-success btn-small",
-				"callback" : function() {
-				}
-			}, {
-				"label" : localization.tt('btn.leavePage'),
-				"class" : "btn-danger btn-small",
-				"callback" : function() {
-					Utils.allowNavigation();
-					target.click();
-				}
-			} ]);
-			return false;
-		}
-	};
-
-	/**
-	 * Bootbox wrapper for alert
-	 * 
-	 * @param {Object}
-	 *            params - The params
-	 */
-	Utils.alertPopup = function(params) {
-		var obj = _.extend({
-				message : params.msg	
-		},params);
-		bootbox.alert(obj);
-	};
-
-	/**
-	 * Bootbox wrapper for confirm
-	 * 
-	 * @param {Object}
-	 *            params - The params
-	 */
-	Utils.confirmPopup = function(params) {
-		bootbox.confirm(params.msg, function(result) {
-			if (result) {
-				params.callback();
-			}
-		});
-	};
-
-	Utils.bootboxCustomDialogs = function(params) {
-	    bootbox.dialog({
-	    	title: params.title,
-	        message: params.msg,
-	        buttons: {
-	            cancel: {
-	                label: "Cancel",
-	                className: "btn-secondary"
-	            },
-	            Ok: {
-	                className: "btn-primary",
-	                callback: params.callback
-	            }
-	        }
-	    });
-	};
-
-	Utils.filterResultByIds = function(results, selectedVals) {
-		return _.filter(results, function(obj) {
-			if ($.inArray(obj.id, selectedVals) < 0)
-				return obj;
-
-		});
-	};
-	Utils.filterResultByText = function(results, selectedVals) {
-		return _.filter(results, function(obj) {
-			if ($.inArray(obj.text, selectedVals) < 0)
-				return obj;
-
-		});
-	};
-	Utils.scrollToField = function(field) {
-		$("html, body").animate({
-			scrollTop : field.position().top - 80
-		}, 1100, function() {
-			field.focus();
-		});
-	};
-	Utils.blockUI = function(options) {
-		var Opt = {
-			autoUnblock : false,
-			clickUnblock : false,
-			bgPath : 'images/',
-			content : '<img src="images/blockLoading.gif" > Please wait..',
-			css : {}
-		};
-		options = _.isUndefined(options) ? Opt : options;
-		$.msg(options);
-	};
-	var errorShown = false;
-	Utils.defaultErrorHandler = function(model, error) {
-		if (error.status == 500) {
-			try {
-		        if (!errorShown) {
-		            errorShown = true;
-		            Utils.notifyError({
-		                content: "Some issue on server, Please try again later."
-		            });
-		            setTimeout(function() {
-		                errorShown = false;
-		            }, 3000);
-		        }
-		    } catch (e) {}
-		}
-		else if (error.status == 400) {
-		    try {
-		        if (!errorShown) {
-		            errorShown = true;
-		            Utils.notifyError({
-		                content: JSON.parse(error.responseText).msgDesc
-		            });
-		            setTimeout(function() {
-		                errorShown = false;
-		            }, 3000);
-		        }
-		    } catch (e) {}
-		} else if (error.status == 401) {
-		    window.location = 'login.html' + window.location.search;
-		    // App.rContent.show(new vError({
-		    // 	status : error.status
-		    // }));
-
-		} else if (error.status == 419) {
-		    window.location = 'login.html' + window.location.search;
-
-		} else if (error.status == "0") {
-		    var diffTime = (new Date().getTime() - prevNetworkErrorTime);
-		    if (diffTime > 3000) {
-		        prevNetworkErrorTime = new Date().getTime();
-		        if(error.statusText === "abort"){
-		        	Utils.notifyInfo({ content: "You have canceled the request"});
-		        }else{
-		        	 Utils.notifyError({
-			            content: "Network Connection Failure : " +
-			                "It seems you are not connected to the internet. Please check your internet connection and try again"
-			        });
-		        }
-		    }
-		}
-		// require(['views/common/ErrorView','App'],function(vError,App){
-
-		// });
-	};
-	Utils.select2Focus = function(event) {
-		if (/^select2-focus/.test(event.type)) {
-			$(this).select2('open');
-		}
-	};
-
-	Utils.checkDirtyField = function(arg1, arg2, $elem) {
-		if (_.isEqual(arg1, arg2)) {
-			$elem.removeClass('dirtyField');
-		} else {
-			$elem.addClass('dirtyField');
-		}
-	};
-	Utils.checkDirtyFieldForToggle = function($el) {
-		if ($el.hasClass('dirtyField')) {
-			$el.removeClass('dirtyField');
-		} else {
-			$el.addClass('dirtyField');
-		}
-	};
-	Utils.checkDirtyFieldForSelect2 = function($el, dirtyFieldValue, that) {
-		if ($el.hasClass('dirtyField')
-				&& _.isEqual($el.val(), dirtyFieldValue.toString())) {
-			$el.removeClass('dirtyField');
-		} else if (!$el.hasClass('dirtyField')) {
-			$el.addClass('dirtyField');
-			dirtyFieldValue = !_.isUndefined(that.value.values) ? that.value.values
-					: '';
-		}
-		return dirtyFieldValue;
-	};
-	Utils.enumToSelectLabelValuePairs = function(myEnum) {
-		return _.map(myEnum, function(o) {
-			return {
-				label : o.label,
-				value : o.value + ''
-			// category :'DHSS',
-			};
-		});
-	};
-	Utils.hackForVSLabelValuePairs = function(myEnum) {
-		return _.map(myEnum, function(o) {
-			return {
-				label : o.label,
-				value : o.label + ''
-			// category :'DHSS',
-			};
-		});
-	};
-	Utils.addVisualSearch = function(searchOpt, serverAttrName, collection,
-			pluginAttr) {
-		var visualSearch;
-		var search = function(searchCollection, serverAttrName, searchOpt,
-				collection) {
-			var params = {};
-			searchCollection.each(function(m) {
-				var serverParamName = _.findWhere(serverAttrName, {
-					text : m.attributes.category
-				});
-				var extraParam = {};
-				if (_.has(serverParamName, 'multiple')
-						&& serverParamName.multiple) {
-					extraParam[serverParamName.label] = Utils
-							.enumLabelToValue(serverParamName.optionsArr, m
-									.get('value'));
-					;
-					$.extend(params, extraParam);
-				} else {
-					if (!_.isUndefined(serverParamName)) {
-						extraParam[serverParamName.label] = m.get('value');
-						$.extend(params, extraParam);
-					}
-				}
-			});
-			collection.queryParams = $.extend(collection.queryParams, params);
-			collection.state.currentPage = collection.state.firstPage;
-			collection.fetch({
-				reset : true,
-				cache : false
-			// data : params,
-			});
-		};
-		// var searchOpt = ['Event Time','User','Resource Name','Resource
-		// ID','Resource Type','Repository Name','Repository
-		// Type','Result','Client IP','Client Type','Access Type','Access
-		// Enforcer','Audit Type','Session ID'];
-
-		var callbackCommon = {
-			search : function(query, searchCollection) {
-				collection.VSQuery = query;
-				search(searchCollection, serverAttrName, searchOpt, collection);
-			},
-			clearSearch : function(callback) {
-				_.each(serverAttrName, function(attr) {
-					delete collection.queryParams[attr.label];
-				});
-				callback();
-			},
-			facetMatches : function(callback) {
-				// console.log(visualSearch);
-				var searchOptTemp = $.extend(true, [], searchOpt);
-				visualSearch.searchQuery.each(function(m) {
-					if ($.inArray(m.get('category'), searchOptTemp) >= 0) {
-						searchOptTemp.splice($.inArray(m.get('category'),
-								searchOptTemp), 1);
-					}
-				});
-				// visualSearch.options.readOnly = searchOptTemp.length <= 0 ?
-				// true : false;
-				callback(searchOptTemp, {
-					preserveOrder : false
-				});
-			},
-			removedFacet : function(removedFacet, searchCollection, indexObj) {
-				// console.log(removedFacet);
-
-				var removedFacetSeverName = _.findWhere(serverAttrName, {
-					text : removedFacet.get('category')
-				});
-				if (!_.isUndefined(removedFacetSeverName)) {
-					delete collection.queryParams[removedFacetSeverName.label];
-					collection.state.currentPage = collection.state.firstPage;
-					collection.fetch({
-						reset : true,
-						cache : false
-					});
-				}
-				// TODO Added for Demo to remove datapicker popups
-				if (!_.isUndefined(visualSearch.searchBox.$el))
-					visualSearch.searchBox.$el.parents('body').find(
-							'.datepicker').remove();
-			}
-		// we can also add focus, blur events callback here..
-		};
-		pluginAttr.callbacks = $.extend(callbackCommon, pluginAttr.callbacks);
-		// Initializing VisualSearch Plugin....
-		visualSearch = VS.init($.extend(pluginAttr, {
-			remainder : false
-		}));
-
-		if (visualSearch.searchQuery.length > 0) // For On Load Visual Search
-			search(visualSearch.searchQuery, serverAttrName, searchOpt,
-					collection);
-
-		return visualSearch;
-	};
-
-	Utils.displayDatepicker = function($el, facet, $date, callback) {
-		var input = $el
-				.find('.search_facet.is_editing input.search_facet_input');
-		$el.parents('body').find('.datepicker').hide();
-		input.datepicker({
-			autoclose : true,
-			dateFormat : 'yy-mm-dd'
-		}).on('changeDate', function(ev) {
-			callback(ev.date);
-			input.datepicker("hide");
-			var e = jQuery.Event("keydown");
-			e.which = 13; // Enter
-			$(this).trigger(e);
-		});
-		if (!_.isUndefined($date)) {
-			if (facet == 'Start Date') {
-				input.datepicker('setEndDate', $date);
-			} else {
-				input.datepicker('setStartDate', $date);
-			}
-		}
-		input.datepicker('show');
-		input.on('blur', function(e) {
-			input.datepicker("hide");
-			// $('.datepicker').remove();
-
-		});
-		// input.attr("readonly", "readonly");
-		input.on('keydown', function(e) {
-			if (e.which == 9 && e.shiftKey) {
-				input.datepicker('setValue', new Date());
-				input.trigger('change');
-				input.datepicker("hide");
-			}
-			if (e.which == 13) {
-				var e1 = jQuery.Event("keypress");
-				e1.which = 13; // Enter
-				$(this).trigger(e1);
-
-			}
-		});
-		return input;
-	};
-	
-	Utils.capitaliseFirstLetter = function(string) {
-		return string.charAt(0).toUpperCase() + string.slice(1);
-	};
-	Utils.lowerCaseFirstLetter = function(string) {
-		return string.charAt(0).toLowerCase() + string.slice(1);
-	};
-	Utils.toUpperCase = function(string) {
-		return (""+string).toUpperCase();
-	};
-	
-	Utils.bindDraggableEvent = function($el){
-		//
-		//  Function maked all .box selector is draggable, to disable for concrete element add class .no-drop
-		//
-		$el
-		.draggable({
-			revert: true,
-			zIndex: 2000,
-			cursor: "crosshair",
-			handle: '.box-name',
-			opacity: 0.8
-		})
-		.droppable({
-			tolerance: 'pointer',
-			drop: function( event, ui ) {
-				var draggable = ui.draggable;
-				var droppable = $(this);
-				var dragPos = draggable.position();
-				var dropPos = droppable.position();
-				draggable.swap(droppable);
-				setTimeout(function() {
-					var dropmap = droppable.find('[id^=map-]');
-					var dragmap = draggable.find('[id^=map-]');
-					if (dragmap.length > 0 || dropmap.length > 0){
-						dragmap.resize();
-						dropmap.resize();
-					}
-					else {
-						draggable.resize();
-						droppable.resize();
-					}
-				}, 50);
-				setTimeout(function() {
-					draggable.find('[id^=map-]').resize();
-					droppable.find('[id^=map-]').resize();
-				}, 250);
-			}
-		});
-	};
-	
-	Utils.scrollToSearchString = function(results, type, counter, adjPx,$el){
-		if(results.length > 0){
-			if(type === 'next'){
-				if(counter > 0 && results.length == counter){
-					counter = 0;
-				}
-			} else if (type === 'prev') {
-				if(counter < 0){
-					counter = results.length - 1;
-				} else if(counter === results.length){
-					counter = counter - 2;
-				}
-			}
-			results.removeClass("active");
-			$(results[counter]).addClass("active");
-			if(_.isUndefined($el)){
-				$('html,body').animate({
-			        scrollTop: $(results[counter]).offset().top  - adjPx
-			    }, 100);
-			}else{
-				$el.animate({
-			        scrollTop: $(results[counter]).offset().top  - adjPx
-			    }, 100);
-			}
-			
-		    counter = (type === 'prev') ? counter - 1 : counter + 1;
-		}
-		return counter;
-	};
-	//date should be javascript date
-	Utils.convertDateToUTC  = function (date) { 
-        return new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds()); 
+            
+        });
+    });
+
+    // ///////////////////////////////////////////////////////
+    // Enum utility methods
+    // //////////////////////////////////////////////////////
+    /**Utils
+     * Get enum for the enumId
+     * 
+     * @param {integer}
+     *            enumId - The enumId
+     */
+    Utils.getEnum = function(enumId) {
+        if (!enumId || enumId.length < 1) {
+            return "";
+        }
+        // check if the enums are loaded
+        if (!XAEnums[enumId]) {
+            return "";
+        }
+        return XAEnums[enumId];
+    };
+
+    /**
+     * Get enum by Enum and value
+     * 
+     * @param {Object}
+     *            myEnum - The enum
+     * @param {integer}
+     *            value - The value
+     */
+    Utils.enumElementByValue = function(myEnum, value) {
+        var element = _.detect(myEnum, function(element) {
+            return element.value == value;
+        });
+        return element;
+    };
+
+    /**
+     * Get enum by Enum and name, value
+     * 
+     * @param {Object}
+     *            myEnum - The enum
+     * @param {string}
+     *            propertyName - The name of key
+     * @param {integer}
+     *            propertyValue - The value
+     */
+    Utils.enumElementByPropertyNameValue = function(myEnum, propertyName,
+            propertyValue) {
+        for ( var element in myEnum) {
+            if (myEnum[element][propertyName] == propertyValue) {
+                return myEnum[element];
+            }
+        }
+        return null;
+    };
+
+    /**
+     * Get enum value for given enum label
+     * 
+     * @param {Object}
+     *            myEnum - The enum
+     * @param {string}
+     *            label - The label to search for in the Enum
+     */
+    Utils.enumLabelToValue = function(myEnum, label) {
+        var element = _.detect(myEnum, function(element) {
+            return element.label == label;
+        });
+        return (typeof element === "undefined") ? "--" : element.value;
+    };
+
+    /**
+     * Get enum label for given enum value
+     * 
+     * @param {Object}
+     *            myEnum - The enum
+     * @param {integer}
+     *            value - The value
+     */
+    Utils.enumValueToLabel = function(myEnum, value) {
+        var element = _.detect(myEnum, function(element) {
+            return element.value == value;
+        });
+        return (typeof element === "undefined") ? "--" : element.label;
+    };
+
+    /**
+     * Get enum label tt string for given Enum value
+     * 
+     * @param {Object}
+     *            myEnum - The enum
+     * @param {integer}
+     *            value - The value
+     */
+    Utils.enumValueToLabeltt = function(myEnum, value) {
+        var element = _.detect(myEnum, function(element) {
+            return element.value == value;
+        });
+        return (typeof element === "undefined") ? "--" : element.tt;
+    };
+
+    /**
+     * Get NVpairs for given Enum to be used in Select
+     * 
+     * @param {Object}
+     *            myEnum - The enum
+     */
+    Utils.enumToSelectPairs = function(myEnum) {
+        return _.map(myEnum, function(o) {
+            return {
+                val : o.value,
+                label : o.label
+            };
+        });
+    };
+
+    /**
+     * Get NVpairs for given Enum
+     * 
+     * @param {Object}
+     *            myEnum - The enum
+     */
+    Utils.enumNVPairs = function(myEnum) {
+        var nvPairs = {
+            ' ' : '--Select--'
+        };
+
+        for ( var name in myEnum) {
+            nvPairs[myEnum[name].value] = myEnum[name].label;
+        }
+
+        return nvPairs;
+    };
+
+    /**
+     * Get array NV pairs for given Array
+     * 
+     * @param {Array}
+     *            myArray - The eArraynum
+     */
+    Utils.arrayNVPairs = function(myArray) {
+        var nvPairs = {
+            ' ' : '--Select--'
+        };
+        _.each(myArray, function(val) {
+            nvPairs[val] = val;
+        });
+        return nvPairs;
+    };
+
+    Utils.notifyInfo = function(options) {
+        noty({
+            type:"information",
+            text : "<i class='fa fa-exclamation-circle'></i> "+(options.content || "Info message.")
+        });
+    };
+    Utils.notifyWarn = function(options) {
+        noty({
+            type:"warning",
+            text : "<i class='fa fa-times-circle'></i> "+(options.content || "Info message.")
+        });
+    };
+
+    Utils.notifyError = function(options) {
+        noty({
+            type:"error",
+            text : "<i class='fa fa-times-circle'></i> "+(options.content || "Error occurred.")
+        });
+    };
+
+    Utils.notifySuccess = function(options) {
+        noty({
+            type:"success",
+            text : "<i class='fa fa-check-circle-o'></i> "+(options.content || "Error occurred.")
+        });
+    };
+
+    /**
+     * Convert new line to <br />
+     * 
+     * @param {string}
+     *            str - the string to convert
+     */
+    Utils.nl2br = function(str) {
+        if (!str)
+            return '';
+        return str.replace(/\n/g, '<br/>').replace(/[\r\t]/g, " ");
+    };
+
+    /**
+     * Convert <br />
+     * to new line
+     * 
+     * @param {string}
+     *            str - the string to convert
+     */
+    Utils.br2nl = function(str) {
+        if (!str)
+            return '';
+        return str.replace(/\<br(\s*\/|)\>/gi, '\n');
+    };
+
+    /**
+     * Escape html chars
+     * 
+     * @param {string}
+     *            str - the html string to escape
+     */
+    Utils.escapeHtmlChar = function(str) {
+        if (!str)
+            return '';
+        str = str.replace(/&/g, "&amp;");
+        str = str.replace(/>/g, "&gt;");
+        str = str.replace(/</g, "&lt;");
+        str = str.replace(/\"/g, "&quot;");
+        str = str.replace(/'/g, "&#039;");
+        return str;
+    };
+
+    /**
+     * nl2br and Escape html chars
+     * 
+     * @param {string}
+     *            str - the html string
+     */
+    Utils.nl2brAndEscapeHtmlChar = function(str) {
+
+        if (!str)
+            return '';
+        var escapedStr = escapeHtmlChar(str);
+        var finalStr = nl2br(str);
+        return finalStr;
+    };
+
+    /**
+     * prevent navigation with msg and call callback
+     * 
+     * @param {String}
+     *            msg - The msg to show
+     * @param {function}
+     *            callback - The callback to call
+     */
+    Utils.preventNavigation = function(msg, $form) {
+        window._preventNavigation = true;
+        window._preventNavigationMsg = msg;
+        $("body a, i[class^='icon-']").on("click.blockNavigation", function(e) {
+            Utils.preventNavigationHandler.call(this, e, msg, $form);
+        });
+    };
+
+    /**
+     * remove the block of preventNavigation
+     */
+    Utils.allowNavigation = function() {
+        window._preventNavigation = false;
+        window._preventNavigationMsg = undefined;
+        $("body a, i[class^='icon-']").off('click.blockNavigation');
+    };
+
+    Utils.preventNavigationHandler = function(e, msg, $form) {
+        var formChanged = false;
+        var target = this;
+        if (!_.isUndefined($form))
+            formChanged = $form.find('.dirtyField').length > 0 ? true : false;
+        if (!$(e.currentTarget).hasClass("_allowNav") && formChanged) {
+
+            e.preventDefault();
+            e.stopImmediatePropagation();
+            bootbox.dialog(msg, [ {
+                "label" : localization.tt('btn.stayOnPage'),
+                "class" : "btn-success btn-small",
+                "callback" : function() {
+                }
+            }, {
+                "label" : localization.tt('btn.leavePage'),
+                "class" : "btn-danger btn-small",
+                "callback" : function() {
+                    Utils.allowNavigation();
+                    target.click();
+                }
+            } ]);
+            return false;
+        }
+    };
+
+    /**
+     * Bootbox wrapper for alert
+     * 
+     * @param {Object}
+     *            params - The params
+     */
+    Utils.alertPopup = function(params) {
+        var obj = _.extend({
+                message : params.msg
+        },params);
+        bootbox.alert(obj);
+    };
+
+    /**
+     * Bootbox wrapper for confirm
+     * 
+     * @param {Object}
+     *            params - The params
+     */
+    Utils.confirmPopup = function(params) {
+        bootbox.confirm(params.msg, function(result) {
+            if (result) {
+                params.callback();
+            }
+        });
+    };
+
+    Utils.bootboxCustomDialogs = function(params) {
+        bootbox.dialog({
+            title: params.title,
+            message: params.msg,
+            buttons: {
+                cancel: {
+                    label: "Cancel",
+                    className: "btn-secondary"
+                },
+                Ok: {
+                    className: "btn-primary",
+                    callback: params.callback
+                }
+            }
+        });
+    };
+
+    Utils.filterResultByIds = function(results, selectedVals) {
+        return _.filter(results, function(obj) {
+            if ($.inArray(obj.id, selectedVals) < 0)
+                return obj;
+
+        });
+    };
+    Utils.filterResultByText = function(results, selectedVals) {
+        return _.filter(results, function(obj) {
+            if ($.inArray(obj.text, selectedVals) < 0)
+                return obj;
+
+        });
+    };
+    Utils.scrollToField = function(field) {
+        $("html, body").animate({
+            scrollTop : field.position().top - 80
+        }, 1100, function() {
+            field.focus();
+        });
+    };
+    Utils.blockUI = function(options) {
+        var Opt = {
+            autoUnblock : false,
+            clickUnblock : false,
+            bgPath : 'images/',
+            content : '<img src="images/blockLoading.gif" > Please wait..',
+            css : {}
+        };
+        options = _.isUndefined(options) ? Opt : options;
+        $.msg(options);
+    };
+    var errorShown = false;
+    Utils.defaultErrorHandler = function(model, error) {
+        if (error.status == 500) {
+            try {
+                if (!errorShown) {
+                    errorShown = true;
+                    Utils.notifyError({
+                        content: "Some issue on server, Please try again later."
+                    });
+                    setTimeout(function() {
+                        errorShown = false;
+                    }, 3000);
+                }
+            } catch (e) {}
+        }
+        else if (error.status == 400) {
+            try {
+                if (!errorShown) {
+                    errorShown = true;
+                    Utils.notifyError({
+                        content: JSON.parse(error.responseText).msgDesc
+                    });
+                    setTimeout(function() {
+                        errorShown = false;
+                    }, 3000);
+                }
+            } catch (e) {}
+        } else if (error.status == 401) {
+            window.location = 'login.html' + window.location.search;
+            // App.rContent.show(new vError({
+            //     status : error.status
+            // }));
+
+        } else if (error.status == 419) {
+            window.location = 'login.html' + window.location.search;
+
+        } else if (error.status == "0") {
+            var diffTime = (new Date().getTime() - prevNetworkErrorTime);
+            if (diffTime > 3000) {
+                prevNetworkErrorTime = new Date().getTime();
+                if(error.statusText === "abort"){
+                    Utils.notifyInfo({ content: "You have canceled the request"});
+                }else{
+                     Utils.notifyError({
+                        content: "Network Connection Failure : " +
+                            "It seems you are not connected to the internet. Please check your internet connection and try again"
+                    });
+                }
+            }
+        }
+        // require(['views/common/ErrorView','App'],function(vError,App){
+
+        // });
+    };
+    Utils.select2Focus = function(event) {
+        if (/^select2-focus/.test(event.type)) {
+            $(this).select2('open');
+        }
+    };
+
+    Utils.checkDirtyField = function(arg1, arg2, $elem) {
+        if (_.isEqual(arg1, arg2)) {
+            $elem.removeClass('dirtyField');
+        } else {
+            $elem.addClass('dirtyField');
+        }
+    };
+    Utils.checkDirtyFieldForToggle = function($el) {
+        if ($el.hasClass('dirtyField')) {
+            $el.removeClass('dirtyField');
+        } else {
+            $el.addClass('dirtyField');
+        }
+    };
+    Utils.checkDirtyFieldForSelect2 = function($el, dirtyFieldValue, that) {
+        if ($el.hasClass('dirtyField')
+                && _.isEqual($el.val(), dirtyFieldValue.toString())) {
+            $el.removeClass('dirtyField');
+        } else if (!$el.hasClass('dirtyField')) {
+            $el.addClass('dirtyField');
+            dirtyFieldValue = !_.isUndefined(that.value.values) ? that.value.values
+                    : '';
+        }
+        return dirtyFieldValue;
+    };
+    Utils.enumToSelectLabelValuePairs = function(myEnum) {
+        return _.map(myEnum, function(o) {
+            return {
+                label : o.label,
+                value : o.value + ''
+            // category :'DHSS',
+            };
+        });
+    };
+    Utils.hackForVSLabelValuePairs = function(myEnum) {
+        return _.map(myEnum, function(o) {
+            return {
+                label : o.label,
+                value : o.label + ''
+            // category :'DHSS',
+            };
+        });
+    };
+    Utils.addVisualSearch = function(searchOpt, serverAttrName, collection,
+            pluginAttr) {
+        var visualSearch;
+        var search = function(searchCollection, serverAttrName, searchOpt,
+                collection) {
+            var params = {};
+            searchCollection.each(function(m) {
+                var serverParamName = _.findWhere(serverAttrName, {
+                    text : m.attributes.category
+                });
+                var extraParam = {};
+                if (_.has(serverParamName, 'multiple')
+                        && serverParamName.multiple) {
+                    extraParam[serverParamName.label] = Utils
+                            .enumLabelToValue(serverParamName.optionsArr, m
+                                    .get('value'));
+                    ;
+                    $.extend(params, extraParam);
+                } else {
+                    if (!_.isUndefined(serverParamName)) {
+                        extraParam[serverParamName.label] = m.get('value');
+                        $.extend(params, extraParam);
+                    }
+                }
+            });
+            collection.queryParams = $.extend(collection.queryParams, params);
+            collection.state.currentPage = collection.state.firstPage;
+            collection.fetch({
+                reset : true,
+                cache : false
+            // data : params,
+            });
+        };
+        // var searchOpt = ['Event Time','User','Resource Name','Resource
+        // ID','Resource Type','Repository Name','Repository
+        // Type','Result','Client IP','Client Type','Access Type','Access
+        // Enforcer','Audit Type','Session ID'];
+
+        var callbackCommon = {
+            search : function(query, searchCollection) {
+                collection.VSQuery = query;
+                search(searchCollection, serverAttrName, searchOpt, collection);
+            },
+            clearSearch : function(callback) {
+                _.each(serverAttrName, function(attr) {
+                    delete collection.queryParams[attr.label];
+                });
+                callback();
+            },
+            facetMatches : function(callback) {
+                // console.log(visualSearch);
+                var searchOptTemp = $.extend(true, [], searchOpt);
+                visualSearch.searchQuery.each(function(m) {
+                    if ($.inArray(m.get('category'), searchOptTemp) >= 0) {
+                        searchOptTemp.splice($.inArray(m.get('category'),
+                                searchOptTemp), 1);
+                    }
+                });
+                // visualSearch.options.readOnly = searchOptTemp.length <= 0 ?
+                // true : false;
+                callback(searchOptTemp, {
+                    preserveOrder : false
+                });
+            },
+            removedFacet : function(removedFacet, searchCollection, indexObj) {
+                // console.log(removedFacet);
+
+                var removedFacetSeverName = _.findWhere(serverAttrName, {
+                    text : removedFacet.get('category')
+                });
+                if (!_.isUndefined(removedFacetSeverName)) {
+                    delete collection.queryParams[removedFacetSeverName.label];
+                    collection.state.currentPage = collection.state.firstPage;
+                    collection.fetch({
+                        reset : true,
+                        cache : false
+                    });
+                }
+                // TODO Added for Demo to remove datapicker popups
+                if (!_.isUndefined(visualSearch.searchBox.$el))
+                    visualSearch.searchBox.$el.parents('body').find(
+                            '.datepicker').remove();
+            }
+        // we can also add focus, blur events callback here..
+        };
+        pluginAttr.callbacks = $.extend(callbackCommon, pluginAttr.callbacks);
+        // Initializing VisualSearch Plugin....
+        visualSearch = VS.init($.extend(pluginAttr, {
+            remainder : false
+        }));
+
+        if (visualSearch.searchQuery.length > 0) // For On Load Visual Search
+            search(visualSearch.searchQuery, serverAttrName, searchOpt,
+                    collection);
+
+        return visualSearch;
+    };
+
+    Utils.displayDatepicker = function($el, facet, $date, callback) {
+        var input = $el
+                .find('.search_facet.is_editing input.search_facet_input');
+        $el.parents('body').find('.datepicker').hide();
+        input.datepicker({
+            autoclose : true,
+            dateFormat : 'yy-mm-dd'
+        }).on('changeDate', function(ev) {
+            callback(ev.date);
+            input.datepicker("hide");
+            var e = jQuery.Event("keydown");
+            e.which = 13; // Enter
+            $(this).trigger(e);
+        });
+        if (!_.isUndefined($date)) {
+            if (facet == 'Start Date') {
+                input.datepicker('setEndDate', $date);
+            } else {
+                input.datepicker('setStartDate', $date);
+            }
+        }
+        input.datepicker('show');
+        input.on('blur', function(e) {
+            input.datepicker("hide");
+            // $('.datepicker').remove();
+
+        });
+        // input.attr("readonly", "readonly");
+        input.on('keydown', function(e) {
+            if (e.which == 9 && e.shiftKey) {
+                input.datepicker('setValue', new Date());
+                input.trigger('change');
+                input.datepicker("hide");
+            }
+            if (e.which == 13) {
+                var e1 = jQuery.Event("keypress");
+                e1.which = 13; // Enter
+                $(this).trigger(e1);
+
+            }
+        });
+        return input;
+    };
+    
+    Utils.capitaliseFirstLetter = function(string) {
+        return string.charAt(0).toUpperCase() + string.slice(1);
+    };
+    Utils.lowerCaseFirstLetter = function(string) {
+        return string.charAt(0).toLowerCase() + string.slice(1);
+    };
+    Utils.toUpperCase = function(string) {
+        return (""+string).toUpperCase();
+    };
+    
+    Utils.bindDraggableEvent = function($el){
+        //
+        //  Function maked all .box selector is draggable, to disable for concrete element add class .no-drop
+        //
+        $el
+        .draggable({
+            revert: true,
+            zIndex: 2000,
+            cursor: "crosshair",
+            handle: '.box-name',
+            opacity: 0.8
+        })
+        .droppable({
+            tolerance: 'pointer',
+            drop: function( event, ui ) {
+                var draggable = ui.draggable;
+                var droppable = $(this);
+                var dragPos = draggable.position();
+                var dropPos = droppable.position();
+                draggable.swap(droppable);
+                setTimeout(function() {
+                    var dropmap = droppable.find('[id^=map-]');
+                    var dragmap = draggable.find('[id^=map-]');
+                    if (dragmap.length > 0 || dropmap.length > 0){
+                        dragmap.resize();
+                        dropmap.resize();
+                    }
+                    else {
+                        draggable.resize();
+                        droppable.resize();
+                    }
+                }, 50);
+                setTimeout(function() {
+                    draggable.find('[id^=map-]').resize();
+                    droppable.find('[id^=map-]').resize();
+                }, 250);
+            }
+        });
+    };
+    
+    Utils.scrollToSearchString = function(results, type, counter, adjPx,$el){
+        if(results.length > 0){
+            if(type === 'next'){
+                if(counter > 0 && results.length == counter){
+                    counter = 0;
+                }
+            } else if (type === 'prev') {
+                if(counter < 0){
+                    counter = results.length - 1;
+                } else if(counter === results.length){
+                    counter = counter - 2;
+                }
+            }
+            results.removeClass("active");
+            $(results[counter]).addClass("active");
+            if(_.isUndefined($el)){
+                $('html,body').animate({
+                    scrollTop: $(results[counter]).offset().top  - adjPx
+                }, 100);
+            }else{
+                $el.animate({
+                    scrollTop: $(results[counter]).offset().top  - adjPx
+                }, 100);
+            }
+            
+            counter = (type === 'prev') ? counter - 1 : counter + 1;
+        }
+        return counter;
+    };
+    //date should be javascript date
+    Utils.convertDateToUTC  = function (date) {
+        return new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds());
     }
     Utils.randomNumber = function(){
-    	var date = new Date();
-    	var id = new Number();
-		return ((Math.random()*date.getTime())/2).toFixed(0)
-	}
-	/**
-	 * GET data from form
-	 * @param {object} title -serializeArray
-	 */
-	Utils.getFormData = function(serializeArray) {
-		var formJson = {};
-		_.each(serializeArray, function(fValues) {
-			formJson[fValues.name] = fValues.value;
-
-		});
-		return formJson;
-	};
-	Utils.getQueryParams = function(qs) {
-		qs = qs.split('+').join(' ');
-
-		var params = {},
-		    tokens,
-		    re = /[?&]?([^=]+)=([^&]*)/g;
-		try {
-		    while (tokens = re.exec(qs)) {
-		        params[decodeURIComponent(tokens[1])] = decodeURIComponent(tokens[2]);
-		    }
-		} catch (exception) {
-			console.error(exception);
-		    Utils.notifyError({
-		        content: exception
-		    });
-		}
-		return params;
-	};
-	/**
-	 * [converDate description]
-	 * @param  {[type]} option [pass String or momnet object]
-	 * @return {[type]}        [it is string]
-	 */
-	Utils.dateUtil = new function() {
-		var that = this;
-
-	    this.getTimeZone = function(string, format) {
-	        return moment(string).format((format || Globals.dateFormat));
-	    };
-	    this.getJSON = function(string) {
-	        return moment(string).toJSON();
-	    };
-	    this.getMomentUTC = function(string) {
-	        return moment.utc(string)
-	    };
-	    this.getMomentObject = function(string) {
-	        return moment(string)
-	    }
-	    this.getLocalTimeZoneDateObject = function(date,offset) {
-	        return new Date(date.setMinutes(-(date.getTimezoneOffset() + (offset))))
-	    }
-	    this.getTimeZoneDateObject = function(string) {
-	        return new Date(string)
-	    }
-	    /**
-	     * [getTimeZoneMomentDateObject it will return ]
-	     * @param  {[type]} option [require moment tz object]
-	     * @return {[type]}        [description]
-	     */
-	    this.getTimeZoneFromMomentObject = function(momentO) {
-	        if(momentO.isValid()){
-	        	var date = momentO.format('MM/DD/YYYY,HH:mm:ss.SSS').split(',');
-	        	var dateObjectWithMilisecond ="";
-	        	if(date[0] && date[1]){
-	        		var milliseconds = date[1].split('.');
-	        		if(milliseconds[0] && milliseconds[1] ){
-	        			dateObjectWithMilisecond =  new Date( date[0] +" " +milliseconds[0]);
-	        			dateObjectWithMilisecond.setMilliseconds(milliseconds[1]);
-	        		}else{
-	        			dateObjectWithMilisecond =  new Date(date[0]);
-	        		}
-	        		return dateObjectWithMilisecond;
-	        	}
-	        }else{
-	        	this.getLocalTimeZoneDateObject( ((momentO.toDate())?(momentO.toDate()):(new Date(momentO))));
-	        }
-	    }
-	    this.getTimeDiff = function(option) {
-	    	// If You have time more then 24 hours so moment returns 0 for HH:MM:SS so using this 3 line we get perfect time gap
-	    	var self = this;
-	        var ms = moment(option[1], "DD/MM/YYYY HH:mm:ss").diff(moment(option[0], "DD/MM/YYYY HH:mm:ss"));
-	        var d = moment.duration(ms);
-	        var s = Math.floor(d.asHours()) + that.getMomentUTC(ms).format(":mm:ss");
-	        this.splitedValue = s.split(':');
-
-	        this.getHourDiff = function() {
-	            return parseInt(self.splitedValue[0]);
-	        };
-	        this.getMinuteDiff = function() {
-	            return parseInt(self.splitedValue[1]);
-	        };
-	        this.getSecondDiff = function() {
-	            return parseInt(self.splitedValue[2]);
-	        };
-	    }
-	    this.setTimeZone =function(zone){
-	    	moment.tz.setDefault(zone)
-	    }
-	    this.getRelativeDateString =function(){}
-	    this.getLast1HourRange = function() {
-	        var m = moment()
-	        return [moment().hour(m.hours() - 1).minute(m.minutes()).seconds(m.seconds()).milliseconds(m.milliseconds() + 1), moment().hour(m.hours()).minute(m.minutes()).seconds(m.seconds()).milliseconds(m.milliseconds())];
-	    }
-      this.getTodayRange = function() {
-	        return [moment().hour('0').minute('0').seconds('0').milliseconds("000"), moment().hour('23').minute('59').seconds('59').milliseconds("999")];
-	    }
-	    this.getYesterdayRange = function() {
-	        return [moment().subtract(1, 'days').hour('0').minute('0').seconds('0').milliseconds("000"), moment().subtract(1, 'days').hour('23').minute('59').seconds('59').milliseconds("999")];
-	    }
-	    this.getLast7DaysRange = function() {
-	        return [moment().subtract(6, 'days').hour('0').minute('0').seconds('0').milliseconds("000"), moment().hour('23').minute('59').seconds('59').milliseconds("999")];
-	    }
-	    this.getLast30DaysRange = function() {
-	        return [moment().subtract(29, 'days').hour('0').minute('0').seconds('0').milliseconds("000"), moment().hour('23').minute('59').seconds('59').milliseconds("999")];
-	    }
-	    this.getThisMonthRange = function() {
-	        return [moment().startOf('month').hour('0').minute('0').seconds('0').milliseconds("000"), moment().endOf('month').hour('23').minute('59').seconds('59').milliseconds("999")];
-	    }
-	    this.getLastMonthRange = function() {
-	        return [moment().subtract(1, 'month').startOf('month').hour('0').minute('0').seconds('0').milliseconds("000"), moment().subtract(1, 'month').endOf('month').hour('23').minute('59').seconds('59').milliseconds("999")];
-	    }
-	    this.getOneDayTimeDiff = function(checkTime) {
-	    	var hourDiff = checkTime.getHourDiff();
+        var date = new Date();
+        var id = new Number();
+        return ((Math.random()*date.getTime())/2).toFixed(0)
+    }
+    /**
+     * GET data from form
+     * @param {object} title -serializeArray
+     */
+    Utils.getFormData = function(serializeArray) {
+        var formJson = {};
+        _.each(serializeArray, function(fValues) {
+            formJson[fValues.name] = fValues.value;
+
+        });
+        return formJson;
+    };
+    Utils.getQueryParams = function(qs) {
+        qs = qs.split('+').join(' ');
+
+        var params = {},
+            tokens,
+            re = /[?&]?([^=]+)=([^&]*)/g;
+        try {
+            while (tokens = re.exec(qs)) {
+                params[decodeURIComponent(tokens[1])] = decodeURIComponent(tokens[2]);
+            }
+        } catch (exception) {
+            console.error(exception);
+            Utils.notifyError({
+                content: exception
+            });
+        }
+        return params;
+    };
+    /**
+     * [converDate description]
+     * @param  {[type]} option [pass String or momnet object]
+     * @return {[type]}        [it is string]
+     */
+    Utils.dateUtil = new function() {
+        var that = this;
+
+        this.getTimeZone = function(string, format) {
+            return moment(string).format((format || Globals.dateFormat));
+        };
+        this.getJSON = function(string) {
+            return moment(string).toJSON();
+        };
+        this.getMomentUTC = function(string) {
+            return moment.utc(string)
+        };
+        this.getMomentObject = function(string) {
+            return moment(string)
+        }
+        this.getLocalTimeZoneDateObject = function(date,offset) {
+            return new Date(date.setMinutes(-(date.getTimezoneOffset() + (offset))))
+        }
+        this.getTimeZoneDateObject = function(string) {
+            return new Date(string)
+        }
+        /**
+         * [getTimeZoneMomentDateObject it will return ]
+         * @param  {[type]} option [require moment tz object]
+         * @return {[type]}        [description]
+         */
+        this.getTimeZoneFromMomentObject = function(momentO) {
+            if(momentO.isValid()){
+                var date = momentO.format('MM/DD/YYYY,HH:mm:ss.SSS').split(',');
+                var dateObjectWithMilisecond ="";
+                if(date[0] && date[1]){
+                    var milliseconds = date[1].split('.');
+                    if(milliseconds[0] && milliseconds[1] ){
+                        dateObjectWithMilisecond =  new Date( date[0] +" " +milliseconds[0]);
+                        dateObjectWithMilisecond.setMilliseconds(milliseconds[1]);
+                    }else{
+                        dateObjectWithMilisecond =  new Date(date[0]);
+                    }
+                    return dateObjectWithMilisecond;
+                }
+            }else{
+                this.getLocalTimeZoneDateObject( ((momentO.toDate())?(momentO.toDate()):(new Date(momentO))));
+            }
+        }
+        this.getTimeDiff = function(option) {
+            // If You have time more then 24 hours so moment returns 0 for HH:MM:SS so using this 3 line we get perfect time gap
+            var self = this;
+            var ms = moment(option[1], "DD/MM/YYYY HH:mm:ss").diff(moment(option[0], "DD/MM/YYYY HH:mm:ss"));
+            var d = moment.duration(ms);
+            var s = Math.floor(d.asHours()) + that.getMomentUTC(ms).format(":mm:ss");
+            this.splitedValue = s.split(':');
+
+            this.getHourDiff = function() {
+                return parseInt(self.splitedValue[0]);
+            };
+            this.getMinuteDiff = function() {
+                return parseInt(self.splitedValue[1]);
+            };
+            this.getSecondDiff = function() {
+                return parseInt(self.splitedValue[2]);
+            };
+        }
+        this.setTimeZone =function(zone){
+            moment.tz.setDefault(zone)
+        }
+        this.getRelativeDateString =function(){}
+        this.getLast1HourRange = function() {
+            var m = moment()
+            return [moment().hour(m.hours() - 1).minute(m.minutes()).seconds(m.seconds()).milliseconds(m.milliseconds() + 1), moment().hour(m.hours()).minute(m.minutes()).seconds(m.seconds()).milliseconds(m.milliseconds())];
+        }
+        this.getLast24HourRange = function() {
+          var m = moment()
+          return [moment().hour(m.hours() - 24).minute(m.minutes()).seconds(m.seconds()).milliseconds(m.milliseconds() + 1), moment().hour(m.hours()).minute(m.minutes()).seconds(m.seconds()).milliseconds(m.milliseconds())];
+      }
+        this.getTodayRange = function() {
+            return [moment().hour('0').minute('0').seconds('0').milliseconds("000"), moment().hour('23').minute('59').seconds('59').milliseconds("999")];
+        }
+        this.getYesterdayRange = function() {
+            return [moment().subtract(1, 'days').hour('0').minute('0').seconds('0').milliseconds("000"), moment().subtract(1, 'days').hour('23').minute('59').seconds('59').milliseconds("999")];
+        }
+        this.getLast7DaysRange = function() {
+            return [moment().subtract(6, 'days').hour('0').minute('0').seconds('0').milliseconds("000"), moment().hour('23').minute('59').seconds('59').milliseconds("999")];
+        }
+        this.getLast30DaysRange = function() {
+            return [moment().subtract(29, 'days').hour('0').minute('0').seconds('0').milliseconds("000"), moment().hour('23').minute('59').seconds('59').milliseconds("999")];
+        }
+        this.getThisMonthRange = function() {
+            return [moment().startOf('month').hour('0').minute('0').seconds('0').milliseconds("000"), moment().endOf('month').hour('23').minute('59').seconds('59').milliseconds("999")];
+        }
+        this.getLastMonthRange = function() {
+            return [moment().subtract(1, 'month').startOf('month').hour('0').minute('0').seconds('0').milliseconds("000"), moment().subtract(1, 'month').endOf('month').hour('23').minute('59').seconds('59').milliseconds("999")];
+        }
+        this.getOneDayTimeDiff = function(checkTime) {
+            var hourDiff = checkTime.getHourDiff();
             var seconDiff = checkTime.getSecondDiff();
             var minuteDiff = checkTime.getMinuteDiff();
             if (hourDiff <= 2) {
 
                 if (hourDiff == 0) {
-					if (minuteDiff == 0) {
+                    if (minuteDiff == 0) {
                         if (seconDiff == 0) {
                             return "+100MILLISECOND";
                         } else {
@@ -904,257 +908,257 @@ define(['require',
                 return "+1HOUR";
             }
         }
-	    this.getMonthDiff = function(startDate, endDate, dayGap, checkTime) {
-	    	var dayDiff = (moment(endDate).diff(startDate, 'days'));
-			if (dayDiff <= dayGap) {
-			    if (dayDiff == 0) {
-			        return this.getOneDayTimeDiff(checkTime)
-			    } else {
-			        return "+" + (moment(endDate).diff(startDate, 'days')) + "HOUR"
-			    }
-			} else {
-			    return "+1DAY"
-			}
-		}
-		this.calculateUnit =function(picker){
-				var dayGap = 10,
-	            startDate = new Date(picker.startDate.format('MM/DD/YYYY')),
-	            endDate = new Date(picker.endDate.format('MM/DD/YYYY')),
-	            now = new Date(moment().format('MM/DD/YYYY'));
-
-	        var checkTime = new that.getTimeDiff([picker.startDate.format('MM/DD/YYYY HH:mm:ss'), picker.endDate.format('MM/DD/YYYY HH:mm:ss')]);
-
-	        if ((moment(startDate).isSame(endDate)) && (moment(startDate).isSame(now))) {
-	            //console.log("today")
-	            return that.getOneDayTimeDiff(checkTime);
-	        } else if ((moment(startDate).isSame(endDate)) && (moment(startDate).isBefore(now))) {
-	            //console.log("yesterday")
-	            return that.getOneDayTimeDiff(checkTime);
-
-	        } else if ((moment(startDate).isBefore(now)) || (moment(now).diff(startDate, 'days'))) {
-	            if ((moment(now).diff(startDate, 'days')) === 6) {
-	                //console.log("last 7 days");
-	                return "+8HOUR";
-	            } else if ((moment(now).diff(startDate, 'days') === 29) || (moment(now).diff(startDate, 'days') === 28) || (moment(now).diff(startDate, 'days') === 30)) {
-	                //console.log("Last 30 days");
-	                return that.getMonthDiff(startDate, endDate, dayGap, checkTime);
-	            } else if ((moment(now).diff(startDate, 'month') === 1) && (moment(now).diff(startDate, 'days') > 30) && (moment(startDate).isSame(endDate, 'month'))) {
-	                //console.log("Last Month");
-	                return that.getMonthDiff(startDate, endDate, dayGap, checkTime);
-	            } else if ((moment(startDate).isSame(endDate, 'month')) && ((moment(now).diff(startDate, 'days') === 29) || (moment(now).diff(startDate, 'days') === 30) || (moment(now).diff(startDate, 'days') === 28))) {
-	                //console.log("this Month");
-	                return that.getMonthDiff(startDate, endDate, dayGap, checkTime);
-	            } else if ((moment(endDate).diff(startDate, 'days') >= 28) && (moment(endDate).diff(startDate, 'days') <= 30)) {
-	                //console.log("Last 30 days");
-	                return that.getMonthDiff(startDate, endDate, dayGap, checkTime);
-	            } else if ((moment(endDate).diff(startDate, 'month') > 3)) {
-	                return "+1MONTH";
-	            } else if ((moment(endDate).diff(startDate, 'month') < 3)) {
-	                if ((moment(endDate).diff(startDate, 'month')) === 0) {
-	                    return that.getMonthDiff(startDate, endDate, dayGap, checkTime);
-	                } else {
-	                    return "+1MONTH"
-	                }
-
-	            } else {
-	                return "+1MONTH";
-	            }
-	        } else {
-	            if ((moment(endDate).diff(startDate, 'days') < 10)) {
-	                return "+2HOUR";
-	            } else if ((moment(endDate).diff(startDate, 'days') >15)) {
-	                return "+8HOUR";
-	            } else if ((moment(endDate).diff(startDate, 'days') <= 30)) {
-	                return "+1DAY";
-	            } else {
-	                return "+1MONTH";
-	            }
-	        }
+        this.getMonthDiff = function(startDate, endDate, dayGap, checkTime) {
+            var dayDiff = (moment(endDate).diff(startDate, 'days'));
+            if (dayDiff <= dayGap) {
+                if (dayDiff == 0) {
+                    return this.getOneDayTimeDiff(checkTime)
+                } else {
+                    return "+" + (moment(endDate).diff(startDate, 'days')) + "HOUR"
+                }
+            } else {
+                return "+1DAY"
+            }
+        }
+        this.calculateUnit =function(picker){
+                var dayGap = 10,
+                startDate = new Date(picker.startDate.format('MM/DD/YYYY')),
+                endDate = new Date(picker.endDate.format('MM/DD/YYYY')),
+                now = new Date(moment().format('MM/DD/YYYY'));
+
+            var checkTime = new that.getTimeDiff([picker.startDate.format('MM/DD/YYYY HH:mm:ss'), picker.endDate.format('MM/DD/YYYY HH:mm:ss')]);
+
+            if ((moment(startDate).isSame(endDate)) && (moment(startDate).isSame(now))) {
+                //console.log("today")
+                return that.getOneDayTimeDiff(checkTime);
+            } else if ((moment(startDate).isSame(endDate)) && (moment(startDate).isBefore(now))) {
+                //console.log("yesterday")
+                return that.getOneDayTimeDiff(checkTime);
+
+            } else if ((moment(startDate).isBefore(now)) || (moment(now).diff(startDate, 'days'))) {
+                if ((moment(now).diff(startDate, 'days')) === 6) {
+                    //console.log("last 7 days");
+                    return "+8HOUR";
+                } else if ((moment(now).diff(startDate, 'days') === 29) || (moment(now).diff(startDate, 'days') === 28) || (moment(now).diff(startDate, 'days') === 30)) {
+                    //console.log("Last 30 days");
+                    return that.getMonthDiff(startDate, endDate, dayGap, checkTime);
+                } else if ((moment(now).diff(startDate, 'month') === 1) && (moment(now).diff(startDate, 'days') > 30) && (moment(startDate).isSame(endDate, 'month'))) {
+                    //console.log("Last Month");
+                    return that.getMonthDiff(startDate, endDate, dayGap, checkTime);
+                } else if ((moment(startDate).isSame(endDate, 'month')) && ((moment(now).diff(startDate, 'days') === 29) || (moment(now).diff(startDate, 'days') === 30) || (moment(now).diff(startDate, 'days') === 28))) {
+                    //console.log("this Month");
+                    return that.getMonthDiff(startDate, endDate, dayGap, checkTime);
+                } else if ((moment(endDate).diff(startDate, 'days') >= 28) && (moment(endDate).diff(startDate, 'days') <= 30)) {
+                    //console.log("Last 30 days");
+                    return that.getMonthDiff(startDate, endDate, dayGap, checkTime);
+                } else if ((moment(endDate).diff(startDate, 'month') > 3)) {
+                    return "+1MONTH";
+                } else if ((moment(endDate).diff(startDate, 'month') < 3)) {
+                    if ((moment(endDate).diff(startDate, 'month')) === 0) {
+                        return that.getMonthDiff(startDate, endDate, dayGap, checkTime);
+                    } else {
+                        return "+1MONTH"
+                    }
+
+                } else {
+                    return "+1MONTH";
+                }
+            } else {
+                if ((moment(endDate).diff(startDate, 'days') < 10)) {
+                    return "+2HOUR";
+                } else if ((moment(endDate).diff(startDate, 'days') >15)) {
+                    return "+8HOUR";
+                } else if ((moment(endDate).diff(startDate, 'days') <= 30)) {
+                    return "+1DAY";
+                } else {
+                    return "+1MONTH";
+                }
+            }
             
-		}
-		this.getRelativeDateFromString = function(string){
-			var obj =  _.findWhere(Utils.relativeDates, { text : string})
-			if(obj)
-				return obj.fn && obj.fn();
-		}
-
-	};
-	Utils.relativeDates = {
-			last1Hour : {text : "Last 1 Hour",fn:Utils.dateUtil.getLast1HourRange},
-			today     : {text : "Today",fn:Utils.dateUtil.getTodayRange},
-			yesterday : {text : "Yesterday",fn:Utils.dateUtil.getYesterdayRange},
+        }
+        this.getRelativeDateFromString = function(string){
+            var obj =  _.findWhere(Utils.relativeDates, { text : string})
+            if(obj)
+                return obj.fn && obj.fn();
+        }
+
+    };
+    Utils.relativeDates = {
+            last1Hour : {text : "Last 1 Hour",fn:Utils.dateUtil.getLast1HourRange},
+            last24Hour: {text : "Last 24 Hour",fn:Utils.dateUtil.getLast24HourRange},
+            today     : {text : "Today",fn:Utils.dateUtil.getTodayRange},
+            yesterday : {text : "Yesterday",fn:Utils.dateUtil.getYesterdayRange},
             last7Days : {text : "Last 7 Days",fn:Utils.dateUtil.getLast7DaysRange},
             last30Days: {text : "Last 30 Days",fn:Utils.dateUtil.getLast30DaysRange},
             thisMonth : {text : "This Month",fn:Utils.dateUtil.getThisMonthRange},
             lastMonth : {text : "Last Month",fn:Utils.dateUtil.getLastMonthRange}
-	};
-   	
-
-	/*
-	 * Converting Include Exclude string
-	 */
-	Utils.encodeIncludeExcludeStr = function(arrOrStr,doEncode,token){
-		var token = token  || Globals.splitToken;
-		if(doEncode && _.isArray(arrOrStr)){
-			return arrOrStr.join(token);
-		}else if(_.isString(arrOrStr)){
-			return arrOrStr.split(token);
-		}
-	};
-
-	Utils.localStorage = {
-		checkLocalStorage:function(key,value){
-			if (typeof(Storage) !== "undefined") {
-	            return this.getLocalStorage(key,value);
-	        } else {
-	            console.log('Sorry! No Web Storage support');
-	            Utils.cookie.checkCookie(key,value);
-	        }
-		},
-		setLocalStorage:function(key,value){
-			localStorage.setItem(key,value);
-			return {found:false,'value':value};
-		},
-		getLocalStorage:function(key,value){
-			var keyValue = localStorage.getItem(key)
-			if(!keyValue || keyValue == "undefined"){
-				return this.setLocalStorage(key,value);
-			}else{
-				return {found:true,'value':keyValue};
-			}
-		}
-		
-	}
-	Utils.cookie ={
-		setCookie:function(cname,cvalue) {
-		    //var d = new Date();
-		    //d.setTime(d.getTime() + (exdays*24*60*60*1000));
-		    //var expires = "expires=" + d.toGMTString();
-		    document.cookie = cname+"="+cvalue+"; "
-		    return {found:false,'value':cvalue};
-		},
-		getCookie:function(findString) {
-		    var search = findString + "=";
-		    var ca = document.cookie.split(';');
-		    for(var i=0; i<ca.length; i++) {
-		        var c = ca[i];
-		        while (c.charAt(0)==' ') c = c.substring(1);
-		        if (c.indexOf(name) == 0) {
-		            return c.substring(name.length, c.length);
-		        }
-		    }
-		    return "";
-		},
-		checkCookie:function(key,value) {
-		    var findString = getCookie(key);
-		    if (findString != "" || keyValue != "undefined") {
-		    	return {found:true,'value':((findString == "undefined")?(undefined):(findString))};
-		    } else {
-		    	return setCookie(key,value);
-		    }
-		}
-	}
-	
-	Utils.getRandomColor = function getRandomColor(str) {
-		if(!str)
-			return "#000";
-		var hashCode = function(str) {
-		    var hash = 0;
-		    for (var i = 0; i < str.length; i++) {
-		       hash = str.charCodeAt(i) + ((hash << 5) - hash);
-		    }
-		    return hash;
-		};
-
-		var intToRGB = function(i){
-		    var c = (i & 0x00FFFFFF)
-		        .toString(16)
-		        .toUpperCase();
-
-		    return "00000".substring(0, 6 - c.length) + c;
-		};
-		return "#" +intToRGB(hashCode(str));
-	};
-	/**
-	 * [genrateSelect2 description]
-	 * @param  {[array of object]}  listOfselect2  []
-	 * listOfselect2 = [
-				{
-				    id: "select2 id",
-				    placeholder: "placeholder",
-				    collection: "collection",
-				    dataText: 'display text', //in binding for appling name 
-				    collectionHasCode: 'collection dosnt have id then pass what you want to show', // if collection dont have id ,
-				    modelAttr: 'collection attribute name',
-				    mandatory: false,
-				    nonCrud: getAuditSchemaFieldsName // pass function Name with params (suucess,error,etc)
-				    fetch: true,
-				    data:[] // it will not fetch from collection
-				}, 
-				{...}
-				]
-				collectionFetchLov // listenTo in your view 
-	 * @param  {[type]} that          [scope of function or view]
-	 * @return {[type]}               [description]
-	 */
-	Utils.genrateSelect2 =function(listOfselect2,that){
-
-		for (var i = 0; i < listOfselect2.length; i++) {
-
-		    if (listOfselect2[i]['data'] || listOfselect2[i]['attachSelect']) {
-		    	if(listOfselect2[i]['attachSelect']){
-		    		that.ui[listOfselect2[i]['id']].select2({
-		            	placeholder: listOfselect2[i]['placeholder'],
-		            	width: '100%'
-		        	});	
-		    		continue;
-		    	}
-
-		    	if(that.ui[listOfselect2[i]['id']]){
-		    		that.ui[listOfselect2[i]['id']].select2({
-		            	placeholder: listOfselect2[i]['placeholder'],
-		            	width: '100%',
-		            	data: listOfselect2[i]['data']
-		        	});	
-		    	}
-		       
-		        continue;
-		    } else {
-		    	if(that.ui[listOfselect2[i]['id']]){
-		    		that.ui[listOfselect2[i]['id']].select2({
-		            	placeholder: listOfselect2[i]['placeholder'],
-		            	width: '100%',
-		            	data: []
-		        	});
-		        	that.ui[listOfselect2[i]['id']].select2("disable");	
-		    	}else{
-		    		continue;
-		    	}
-		      
-		    }
-
-
-		    if (listOfselect2[i]['fetch']) {
-		        if (listOfselect2[i].collection && typeof that.listOfselect2[i].collection === "object") {
-		            that.listOfselect2[i]['collectionFetchLov'] = that.listOfselect2[i].collection
-		        } else if (listOfselect2[i].collection && typeof that.listOfselect2[i].collection === "string") {
-		            that.listOfselect2[i]['collectionFetchLov'] = that[listOfselect2[i]['collection']]
-		        }
-
-		    }
-		    
-		 }
-
-	    _.each(that.listOfselect2, function(obj, i) {
-	    	if(obj['collectionFetchLov']){
-    	   		that.listenTo(obj['collectionFetchLov'], "reset", function(collection, response, options) {
-	                if (obj['collectionHasCode']) {
-	                    for (var i = 0; i < collection.models.length; i++) {
-	                        $.extend(collection.models[i].attributes, {
-	                            id: collection.models[i].get(obj['collectionHasCode'])
-	                        })
-	                    }
-					}
+    };
+
+    /*
+     * Converting Include Exclude string
+     */
+    Utils.encodeIncludeExcludeStr = function(arrOrStr,doEncode,token){
+        var token = token  || Globals.splitToken;
+        if(doEncode && _.isArray(arrOrStr)){
+            return arrOrStr.join(token);
+        }else if(_.isString(arrOrStr)){
+            return arrOrStr.split(token);
+        }
+    };
+
+    Utils.localStorage = {
+        checkLocalStorage:function(key,value){
+            if (typeof(Storage) !== "undefined") {
+                return this.getLocalStorage(key,value);
+            } else {
+                console.log('Sorry! No Web Storage support');
+                Utils.cookie.checkCookie(key,value);
+            }
+        },
+        setLocalStorage:function(key,value){
+            localStorage.setItem(key,value);
+            return {found:false,'value':value};
+        },
+        getLocalStorage:function(key,value){
+            var keyValue = localStorage.getItem(key)
+            if(!keyValue || keyValue == "undefined"){
+                return this.setLocalStorage(key,value);
+            }else{
+                return {found:true,'value':keyValue};
+            }
+        }
+        
+    }
+    Utils.cookie ={
+        setCookie:function(cname,cvalue) {
+            //var d = new Date();
+            //d.setTime(d.getTime() + (exdays*24*60*60*1000));
+            //var expires = "expires=" + d.toGMTString();
+            document.cookie = cname+"="+cvalue+"; "
+            return {found:false,'value':cvalue};
+        },
+        getCookie:function(findString) {
+            var search = findString + "=";
+            var ca = document.cookie.split(';');
+            for(var i=0; i<ca.length; i++) {
+                var c = ca[i];
+                while (c.charAt(0)==' ') c = c.substring(1);
+                if (c.indexOf(name) == 0) {
+                    return c.substring(name.length, c.length);
+                }
+            }
+            return "";
+        },
+        checkCookie:function(key,value) {
+            var findString = getCookie(key);
+            if (findString != "" || keyValue != "undefined") {
+                return {found:true,'value':((findString == "undefined")?(undefined):(findString))};
+            } else {
+                return setCookie(key,value);
+            }
+        }
+    }
+    
+    Utils.getRandomColor = function getRandomColor(str) {
+        if(!str)
+            return "#000";
+        var hashCode = function(str) {
+            var hash = 0;
+            for (var i = 0; i < str.length; i++) {
+               hash = str.charCodeAt(i) + ((hash << 5) - hash);
+            }
+            return hash;
+        };
+
+        var intToRGB = function(i){
+            var c = (i & 0x00FFFFFF)
+                .toString(16)
+                .toUpperCase();
+
+            return "00000".substring(0, 6 - c.length) + c;
+        };
+        return "#" +intToRGB(hashCode(str));
+    };
+    /**
+     * [genrateSelect2 description]
+     * @param  {[array of object]}  listOfselect2  []
+     * listOfselect2 = [
+                {
+                    id: "select2 id",
+                    placeholder: "placeholder",
+                    collection: "collection",
+                    dataText: 'display text', //in binding for appling name
+                    collectionHasCode: 'collection dosnt have id then pass what you want to show', // if collection dont have id ,
+                    modelAttr: 'collection attribute name',
+                    mandatory: false,
+                    nonCrud: getAuditSchemaFieldsName // pass function Name with params (suucess,error,etc)
+                    fetch: true,
+                    data:[] // it will not fetch from collection
+                },
+                {...}
+                ]
+                collectionFetchLov // listenTo in your view
+     * @param  {[type]} that          [scope of function or view]
+     * @return {[type]}               [description]
+     */
+    Utils.genrateSelect2 =function(listOfselect2,that){
+
+        for (var i = 0; i < listOfselect2.length; i++) {
+
+            if (listOfselect2[i]['data'] || listOfselect2[i]['attachSelect']) {
+                if(listOfselect2[i]['attachSelect']){
+                    that.ui[listOfselect2[i]['id']].select2({
+                        placeholder: listOfselect2[i]['placeholder'],
+                        width: '100%'
+                    });
+                    continue;
+                }
+
+                if(that.ui[listOfselect2[i]['id']]){
+                    that.ui[listOfselect2[i]['id']].select2({
+                        placeholder: listOfselect2[i]['placeholder'],
+                        width: '100%',
+                        data: listOfselect2[i]['data']
+                    });
+                }
+               
+                continue;
+            } else {
+                if(that.ui[listOfselect2[i]['id']]){
+                    that.ui[listOfselect2[i]['id']].select2({
+                        placeholder: listOfselect2[i]['placeholder'],
+                        width: '100%',
+                        data: []
+                    });
+                    that.ui[listOfselect2[i]['id']].select2("disable");
+                }else{
+                    continue;
+                }
+              
+            }
+
+
+            if (listOfselect2[i]['fetch']) {
+                if (listOfselect2[i].collection && typeof that.listOfselect2[i].collection === "object") {
+                    that.listOfselect2[i]['collectionFetchLov'] = that.listOfselect2[i].collection
+                } else if (listOfselect2[i].collection && typeof that.listOfselect2[i].collection === "string") {
+                    that.listOfselect2[i]['collectionFetchLov'] = that[listOfselect2[i]['collection']]
+                }
+
+            }
+            
+         }
+
+        _.each(that.listOfselect2, function(obj, i) {
+            if(obj['collectionFetchLov']){
+                   that.listenTo(obj['collectionFetchLov'], "reset", function(collection, response, options) {
+                    if (obj['collectionHasCode']) {
+                        for (var i = 0; i < collection.models.length; i++) {
+                            $.extend(collection.models[i].attributes, {
+                                id: collection.models[i].get(obj['collectionHasCode'])
+                            })
+                        }
+                    }
                 var allowClearFlag = false;
                 if(!obj['mandatory'])allowClearFlag = true
                 var data = _.pluck(collection.models, 'attributes');
@@ -1174,57 +1178,57 @@ define(['require',
                     }
                 });
                 if(!obj['disabled']){
-					that.ui[obj['id']].select2("enable");
+                    that.ui[obj['id']].select2("enable");
                 }
                 
                 if (that.model && !that.model.isNew()) {
-					that.ui[obj['id']].select2('val', that.model.get(obj['modelAttr'])).trigger('change');
+                    that.ui[obj['id']].select2('val', that.model.get(obj['modelAttr'])).trigger('change');
                 }
             }, that);
-				 if(obj['nonCrud']){
-        			obj['nonCrud'](that.ui[obj['id']]);
-        		}else{
-        			obj['collectionFetchLov'].fetch({reset:true});
-        		} 
-				
-	    	}
-        });	   
-	},
-
-	/* This Method for handling graph unit.
-		which seperate number from the string and again append to 
-		the string by formatting it
-	
-	*/
-	Utils.graphUnitParse = function(unitVal){
-		if(! unitVal){
-			return "";
-		}
-		var pattern = /(\d)\s+(?=\d)/g;
-		var number = unitVal.match(/\d+/g).map(Number);
-		var numString = number.toString().replace(pattern , '$1');
+                 if(obj['nonCrud']){
+                    obj['nonCrud'](that.ui[obj['id']]);
+                }else{
+                    obj['collectionFetchLov'].fetch({reset:true});
+                }
+                
+            }
+        });
+    },
+
+    /* This Method for handling graph unit.
+        which seperate number from the string and again append to
+        the string by formatting it
+    
+    */
+    Utils.graphUnitParse = function(unitVal){
+        if(! unitVal){
+            return "";
+        }
+        var pattern = /(\d)\s+(?=\d)/g;
+        var number = unitVal.match(/\d+/g).map(Number);
+        var numString = number.toString().replace(pattern , '$1');
         var str = unitVal.replace(/\d+/g, '').replace(/\+/g,'');
         return numString +" " + Utils.getCamelCase(str) + "(s) gap";
-	},
-
-	Utils.getCamelCase = function(str){
-		if(!str){
-			return "";
-		}
-		var str = str.toLowerCase();
-		return str.replace(/(?:^|\s)\w/g, function(match) {
-        	return match.toUpperCase()
+    },
+
+    Utils.getCamelCase = function(str){
+        if(!str){
+            return "";
+        }
+        var str = str.toLowerCase();
+        return str.replace(/(?:^|\s)\w/g, function(match) {
+            return match.toUpperCase()
         });
-	},
-	Utils.manipulateValueForAddingAstrik = function(str){
-		if(!str){
-			return "";
-		}
-		var string = ((str.lastIndexOf('*',0) === 0)) ? str : '*'+str;
-		string = ((str.lastIndexOf('*', str.length - 1) === str.length - 1)) ?  string : string+'*';
-		
-		return string;
-	};
+    },
+    Utils.manipulateValueForAddingAstrik = function(str){
+        if(!str){
+            return "";
+        }
+        var string = ((str.lastIndexOf('*',0) === 0)) ? str : '*'+str;
+        string = ((str.lastIndexOf('*', str.length - 1) === str.length - 1)) ?  string : string+'*';
+        
+        return string;
+    };
     
-	return Utils;
+    return Utils;
 });