var Utils = new Object();
MEMORY_LIMIT = 50;
var ALLOWED_USERS = ['hlputyan@sourcio.com', 'mvardany@sourcio.com', 'ops@sourcio.com', 'lkhachat@sourcio.com', 'amanukya@sourcio.com', 'lilit.karapetyan@gmail.com', 'aburnazy@sourcio.com','demo@monitis.com', 'lilit.karapetyan@monitis.com', 'sdallaky@sourcio.com'];
var mysql_groups = ['Com_xxx', 'TMP tables', 'Handler', 'InnoDB', 'Query Cache', 'SSL', 'Thread', 'Other'];
BARCHART_VIEW = 2;
LINECHART_VIEW = 1;
TABLE_VIEW = 0;
var DEFAULT=Framework.Lang.DefaultTag;
DEFAULT_VIEW = LINECHART_VIEW;
DEFAULT_PING_ADD_CHECK_TIMEOUT = 1000;
DEFAULT_ADD_CHECK_TIMEOUT = 10;
DEFAULT_ADD_CHECK_TAG = DEFAULT;
DEFAULT_ADD_CHECK_INTERVAL = 5;
DEFAULT_ADD_CHECK_LOCATIONS = [1,9,10];
DEFAULT_TRANSACTION_TIMEOUT = 30000;
DEFAULT_TRANSACTION_INTERVAL = 20;
DEFAULT_TRANSACTION_LOCATIONS = [27];
STATUS_OK="ok";
STATUS_UPGRADE = "upgrade";
STATUS_FREEZE = "freeze";
STATUS_DISABLED = "disabled";
STATUS_EXISTS="exists";
TEST_STATUS_OK_STRING="OK";
TEST_STATUS_NOK_STRING="NOK";
TEST_STATUS_NA_STRING="NA";
TEST_STATUS_WARNING_STRING="ERROR";
TEST_FAIL_POINT=10000;
TYPE_CURRENT=0;
TYPE_FIXED=1;
TYPE_PREVIOUS=2;
INTERVAL_MONTHLY=0;
INTERVAL_DAILY=1;
INTERVAL_HOURLY=2;
intervals=eval("("+"{'"+INTERVAL_MONTHLY+"':'monthly','"+INTERVAL_DAILY+"':'daily','"+INTERVAL_HOURLY+"':'hourly'}"+")");
AGENT_TYPE_PROCESS="1";
AGENT_TYPE_DRIVE="2";
AGENT_TYPE_MEMORY="3";
AGENT_TYPE_HTTP="4";
AGENT_TYPE_PING="5";
AGENT_TYPE_LOAD_AVERAGE="6";
AGENT_TYPE_CPU="7";
AGENT_TYPE_EVENT_LOG="12";
AGENT_TYPE_PROGRAMM="13";
AGENT_TYPE_SNMP_TRAP="15";
AGENT_TYPE_SNMP_OBJECT="11";
AGENT_TYPE_SNMP_TABLE="10";
AGENT_TYPE_DISCOVERY="17";
AGENT_TYPE_WALK="16";
AGENT_TYPE_MYSQL="18";
CUSTOM_LOCATION = 111;

EXPORT_PDF_FORMAT = 0;
EXPORT_CSV_FORMAT = 1;
TRANSACTION_SLA_REPORT = 0;
FULL_PAGE_SLA_REPORT = 1;
EXTERNAL_SLA_REPORT = 2;


TRANSACTION_TYPE_TRANSACTION = 0;
TRANSACTION_TYPE_FULLPAGE = 1;
NETWORK_TEST_TYPES = [AGENT_TYPE_SNMP_TRAP, AGENT_TYPE_SNMP_OBJECT, AGENT_TYPE_SNMP_TABLE, AGENT_TYPE_DISCOVERY];

REPORT_TYPE_EXTERNAL=1;
REPORT_TYPE_PROCESS=2;
REPORT_TYPE_MEMORY=3;
REPORT_TYPE_DRIVE=4;
REPORT_TYPE_CPU=5;
REPORT_TYPE_LOAD_AVERAGE=6;
REPORT_TYPE_ICMP=7;
REPORT_TYPE_HTTP=8;

var REPORT_TYPES = ["External", "Process", "Memory", "Drive", "CPU", "Load Avg", "PING", "HTTP"];

AGENT_TYPE_NAMES={};
AGENT_TYPE_NAMES[AGENT_TYPE_PROCESS]="process"
AGENT_TYPE_NAMES[AGENT_TYPE_DRIVE]="drive";
AGENT_TYPE_NAMES[AGENT_TYPE_MEMORY]="memory";
AGENT_TYPE_NAMES[AGENT_TYPE_HTTP]="test";
AGENT_TYPE_NAMES[AGENT_TYPE_PING]="test";
AGENT_TYPE_NAMES[AGENT_TYPE_EVENT_LOG]="event log";
AGENT_TYPE_NAMES[AGENT_TYPE_PROGRAMM]="programm";
AGENT_TYPE_NAMES[AGENT_TYPE_MYSQL]="mysql";
AGENT_MODULES={};
AGENT_MODULES[AGENT_TYPE_EVENT_LOG]={name:"EventLog"};
AGENT_MODULES[AGENT_TYPE_PROGRAMM]={name:"AgentProgram"};
AGENT_MODULES[AGENT_TYPE_SNMP_OBJECT]={name:"SnmpObject"};
AGENT_MODULES[AGENT_TYPE_SNMP_TABLE]={name:"SnmpTable"};
AGENT_MODULES[AGENT_TYPE_SNMP_TRAP]={name:"SnmpTrap"};
AGENT_MODULES[AGENT_TYPE_MYSQL]={name:"Mysql"};
SORT_TYPE_ASC="asc";
SORT_TYPE_DESC="desc";
OS_WINDOWS=1;
OS_LINUX=2;
PLATFORM_32="32";
PLATFORM_64="64";

//colors
var notAvailableColor = "999999";
var okColor = "529100";
var nokColor = "FF4800";
var warningColor = "f9c20e";
var noColor = "626262";

//agent policies types 
var AGENT_POLICY_SERVER_INFORMATION = 1;
var AGENT_POLICY_RESOURCE_MONITORS  = 2;
var AGENT_POLICY_BASIC_CONFIGURATION = 3;


//policy types
var POLICY_TYPE_AGENT = "agent";
var POLICY_TYPE_EC2 = "ec2";

//policy Types for EC2
//var EC2_POLICY_NEW_RESOURCE_MONITORS = 4;
var EC2_POLICY_OLD_RESOURCE_MONITORS = 5;
//var EC2_POLICY_NEW_EXTERNAL_MONITORS = 6;
var EC2_POLICY_OLD_EXTERNAL_MONITORS = 7;
//var EC2_POLICY_NEW_INSTALL_AGENT = 8;
var EC2_POLICY_OLD_INSTALL_AGENT = 9;
//policy monitor types with configs
var POLICY_EC2_MONITOR_TYPE_EXTERNAL_MONITORS_NEW_EC2_HTTP = 31;
var POLICY_EC2_MONITOR_TYPE_EXTERNAL_MONITORS_OLD_EC2_HTTP = 28;
var POLICY_EC2_MONITOR_TYPE_INTERNAL_MONITORS_OLD_EC2_PROCESS = 33;
//policy Types for Cloud
var CLOUD_POLICY_EXTERNAL_MONITORS = {"Rackspace":{"TYPE_ID":10,"HTTP":35}, "AmazonEC2":{"TYPE_ID":7,"HTTP":28},"GoGrid":{"TYPE_ID":11,"HTTP":37}};
var CLOUD_POLICY_RESOURCE_MONITORS = {"AmazonEC2":{"TYPE_ID":5,"PROCESS":33},"Rackspace":{},"GoGrid":{}};
var CLOUD_POLICY_INSTALL_AGENT = {"AmazonEC2":{"TYPE_ID":9},"Rackspace":{},"GoGrid":{}};

// notification data types
var NOTIFICATION_DATA_TYPE_TEST = 0;
var NOTIFICATION_DATA_TYPE_AGENT_PROCESS = 1;
var NOTIFICATION_DATA_TYPE_AGENT_DRIVE = 2;
var NOTIFICATION_DATA_TYPE_AGENT_MEMORY = 3;
var NOTIFICATION_DATA_TYPE_AGENT_HTTP = 4;
var NOTIFICATION_DATA_TYPE_AGENT_PING = 5;
var NOTIFICATION_DATA_TYPE_AGENT_LOAD = 6;
var NOTIFICATION_DATA_TYPE_AGENT_CPU = 7;
var NOTIFICATION_DATA_TYPE_AGENT_SNMP_TABLE = 10;
var NOTIFICATION_DATA_TYPE_AGENT_SNMP_OBJECT = 11;
var NOTIFICATION_DATA_TYPE_TRANSACTION = 8;
var NOTIFICATION_DATA_TYPE_AGENT_EVENT_LOG = 12;
var NOTIFICATION_DATA_TYPE_AGENT_PROGRAM = 13;
var NOTIFICATION_DATA_TYPE_EC2 = 14;
var NOTIFICATION_DATA_TYPE_AGENT_SNMP_TRAP = 15;
var NOTIFICATION_DATA_TYPE_AGENT_MYSQL = 18;
var NOTIFICATION_DATA_TYPE_CUSTOM = 19;
var NOTIFICATION_DATA_TYPE_FULL_PAGE_LOAD = 20;
var NOTIFICATION_RULE_MAX_LOAD_DEFAULT = 20;

var TEST_TYPES = {};
TEST_TYPES[NOTIFICATION_DATA_TYPE_TEST] = {dataId: ":dataId", moduleName: "Test"};
TEST_TYPES[NOTIFICATION_DATA_TYPE_AGENT_PROCESS] = {dataId: NOTIFICATION_DATA_TYPE_AGENT_PROCESS+":dataId", moduleName: "Agent"};
TEST_TYPES[NOTIFICATION_DATA_TYPE_AGENT_DRIVE] = {dataId: NOTIFICATION_DATA_TYPE_AGENT_DRIVE+":dataId", moduleName: "Agent"};
TEST_TYPES[NOTIFICATION_DATA_TYPE_AGENT_MEMORY] = {dataId: NOTIFICATION_DATA_TYPE_AGENT_MEMORY+":dataId", moduleName: "Agent"};
TEST_TYPES[NOTIFICATION_DATA_TYPE_AGENT_HTTP] = {dataId: NOTIFICATION_DATA_TYPE_AGENT_HTTP+":dataId", moduleName: "Agent"};
TEST_TYPES[NOTIFICATION_DATA_TYPE_AGENT_PING] = {dataId: NOTIFICATION_DATA_TYPE_AGENT_PING+":dataId", moduleName: "Agent"};
TEST_TYPES[NOTIFICATION_DATA_TYPE_AGENT_LOAD] = {dataId: NOTIFICATION_DATA_TYPE_AGENT_LOAD+":dataId", moduleName: "Agent"};
TEST_TYPES[NOTIFICATION_DATA_TYPE_AGENT_CPU] = {dataId: NOTIFICATION_DATA_TYPE_AGENT_CPU+":dataId", moduleName: "Agent"};
TEST_TYPES[NOTIFICATION_DATA_TYPE_TRANSACTION] = {dataId: ":dataId", moduleName: "Transaction"};
TEST_TYPES[NOTIFICATION_DATA_TYPE_AGENT_EVENT_LOG] = {dataId: ":dataId", moduleName: "EventLog"};
TEST_TYPES[NOTIFICATION_DATA_TYPE_AGENT_PROGRAM] = {dataId: ":dataId", moduleName: "AgentProgram"};
TEST_TYPES[NOTIFICATION_DATA_TYPE_FULL_PAGE_LOAD] = {dataId: ":dataId", moduleName: "Transaction"};

var sharedPageInd=false;

var WIDGET_BOX_TYPES = [
	{"key":"snapshot",  "name":Framework.Lang.widgetBox.snapshot},
	{"key":"perfometer","name":Framework.Lang.widgetBox.perfometer},
	/*{"key":"rank", 		"name":Framework.Lang.widgetBox.rank},*/
	{"key":"test", 		"name":Framework.Lang.widgetBox.test},
	{"key":"vt", 		"name":Framework.Lang.widgetBox.vt}

];
var WIDGET_BOX = {
	"snapshot":[
		{"name": Framework.Lang.widgetBox.iGoogleGadget, "iconURL":"igoogle_icon.png","homeURL":"http://www.google.com/ig", "homePageURL":"http://www.google.com/ig/directory?type=gadgets&url=desktop.google.com/gow/gadgets/uptimesnapshot.xml##", "downloadURL":"" },
		{"name": Framework.Lang.widgetBox.googleDesktopGadget, "iconURL":"google_desktop_icon.png","homeURL":"http://desktop.google.com", "homePageURL":"http://desktop.google.com/plugins/i/uptimesnapshot.html?hl=en", "downloadURL":"/widgets/snapshot/googleDesktopGadget/UptimeSnapshot.gg" },
		{"name": Framework.Lang.widgetBox.windowsLiveWebGadget, "iconURL":"windowslive_icon.png","homeURL":"http://gallery.live.com/home.aspx", "homePageURL":"http://gallery.live.com/liveItemDetail.aspx?li=ba19855f-4bfe-48ac-9670-12ce83f257b2&bt=7", "downloadURL":"" },
		{"name": Framework.Lang.widgetBox.windowsVistaGadget, "iconURL":"windows_vista_icon.png","homeURL":"http://gallery.live.com/home.aspx", "homePageURL":"http://gallery.live.com/liveItemDetail.aspx?li=7f1916db-2ede-4aff-9aa3-54c68ed85ac6&bt=1", "downloadURL":"/widgets/snapshot/VistaGadget/UptimeSnapshot.gadget" },
		{"name": Framework.Lang.widgetBox.netvibesWidget, "iconURL":"netvibes_icon.png","homeURL":"http://eco.netvibes.com/", "homePageURL":"http://eco.netvibes.com/widgets/203518/monitis-uptime-snapshot", "downloadURL":"" },
		{"name": Framework.Lang.widgetBox.yahooWidget, "iconURL":"yahoo_icon.jpg","homeURL":"http://widgets.yahoo.com", "homePageURL":"http://widgets.yahoo.com/widgets/uptime-snapshot", "downloadURL":"/widgets/snapshot/Yahoo/UptimeSnapshot.widget" }
	],
	"perfometer":[
		{"name": Framework.Lang.widgetBox.iGoogleGadget, "iconURL":"igoogle_icon.png","homeURL":"http://www.google.com/ig", "homePageURL":"http://www.google.com/ig/directory?type=gadgets&url=monitis.com/widgets/perfometer/google_home/perfometer.xml", "downloadURL":"" }
	],
	/*"rank":[
		{"name": Framework.Lang.widgetBox.iGoogleGadget, "iconURL":"igoogle_icon.png","homeURL":"http://www.google.com/ig", "homePageURL":"http://www.google.com/ig/directory?type=gadgets&url=desktop.google.com/gow/gadgets/uptimesnapshot.xml", "downloadURL":"" }
	],*/
	"test":[
		{"name": Framework.Lang.widgetBox.iGoogleGadget, "iconURL":"igoogle_icon.png","homeURL":"http://www.google.com/ig", "homePageURL":"http://www.google.com/ig/directory?type=gadgets&url=monitis.com/widgets/test/google_home/test_widget.xml", "downloadURL":"" }
	],
	"vt":[
		{"name": Framework.Lang.widgetBox.iGoogleGadget, "iconURL":"igoogle_icon.png","homeURL":"http://www.google.com/ig", "homePageURL":"http://www.google.com/ig/directory?type=gadgets&url=monitis.com/widgets/vt/google_home/google_home.xml", "downloadURL":"" }
	]
	
};
var getDateFormatForCalendar=function(){
	var dateObj={};
	var date_format="mm-dd-yyyy";
	var date_format_short="mmm dd";
	 if(OPTIONS.dateFormat==1){
		 date_format="dd-mm-yyyy";
		 date_format_short="dd mmm";
	 }
	 dateObj['long']=date_format;
	 dateObj['short']=date_format_short;
	 return dateObj;
}
var getViewIdByView = function(viewDescr){
	var viewId = TABLE_VIEW;
	switch(viewDescr){
		case 'loadTable': viewId = TABLE_VIEW; break;
		case 'loadBarChart': 
		case 'loadBar': viewId = BAR_VIEW; break;
		case 'loadLineChart':
		case 'loadLine': viewId = LINE_VIEW; break;
		case 'loadAngleChart':
		case 'loadScatter':  viewId = ANGLE_VIEW; break;
		case 'loadMap': viewId = MAP_VIEW; break;
		case 'loadCalendar': viewId = CALENDAR_VIEW; break;
		case 'loadPie': viewId = PIE_VIEW; break;
	}
	return viewId;
}


var getDataTypeId = function(agType){
	var agTypeId = 1;

	if(agType == AGENT_TYPE_PROCESS) agTypeId = parseInt(NOTIFICATION_DATA_TYPE_AGENT_PROCESS);
	else if(agType == AGENT_TYPE_DRIVE) agTypeId = parseInt(NOTIFICATION_DATA_TYPE_AGENT_DRIVE);
	else if(agType == AGENT_TYPE_MEMORY) agTypeId = parseInt(NOTIFICATION_DATA_TYPE_AGENT_MEMORY);
	else if(agType == AGENT_TYPE_HTTP) agTypeId = parseInt(NOTIFICATION_DATA_TYPE_AGENT_HTTP);
	else if(agType == AGENT_TYPE_PING) agTypeId = parseInt(NOTIFICATION_DATA_TYPE_AGENT_PING);
	else if(agType == AGENT_TYPE_CPU) agTypeId = parseInt(NOTIFICATION_DATA_TYPE_AGENT_CPU);
	else if(agType == AGENT_TYPE_LOAD_AVERAGE) agTypeId = parseInt(NOTIFICATION_DATA_TYPE_AGENT_LOAD);
	else if(agType == AGENT_TYPE_PROGRAMM) agTypeId = parseInt(NOTIFICATION_DATA_TYPE_AGENT_PROGRAM);
	else if(agType == AGENT_TYPE_EVENT_LOG) agTypeId = parseInt(NOTIFICATION_DATA_TYPE_AGENT_EVENT_LOG);
	else if(agType == AGENT_TYPE_MYSQL) agTypeId = parseInt(NOTIFICATION_DATA_TYPE_AGENT_MYSQL);
	return agTypeId;
	
}
var getDataTypeById = function(agTypeId){
	var agType = "Process";
	
	if(agTypeId == AGENT_TYPE_PROCESS) agType = Framework.Lang.AgentTestTypes.Processes;
	else if(agTypeId == AGENT_TYPE_DRIVE) agType = Framework.Lang.AgentTestTypes.Drive;
	else if(agTypeId == AGENT_TYPE_MEMORY) agType = Framework.Lang.AgentTestTypes.Memory;
	else if(agTypeId == AGENT_TYPE_HTTP) agType = Framework.Lang.AgentTestTypes.HTTP;
	else if(agTypeId == AGENT_TYPE_PING) agType = Framework.Lang.AgentTestTypes.PING;
	else if(agTypeId == AGENT_TYPE_LOAD_AVERAGE) agType = Framework.Lang.AgentTestTypes.LoadAverage;
	else if(agTypeId == AGENT_TYPE_CPU) agType = Framework.Lang.AgentTestTypes.CPU;
	else if(agTypeId == AGENT_TYPE_PROGRAMM) agType = Framework.Lang.AgentTestTypes.InstalledSoftware;
	else if(agTypeId == AGENT_TYPE_EVENT_LOG) agType = Framework.Lang.AgentTestTypes.SystemEvents;
	else if(agTypeId == AGENT_TYPE_MYSQL) agType = Framework.Lang.AgentTestTypes.MySql;
	else if(agTypeId == NOTIFICATION_DATA_TYPE_CUSTOM) agType = "custom";
	return agType;
	
}

var getNotificationTypeByDataTypeId = function(agTypeId){
	var agType = "test";
	
	if(agTypeId == NOTIFICATION_DATA_TYPE_CUSTOM) agType = "custom";
	else if(agTypeId == NOTIFICATION_DATA_TYPE_AGENT_SNMP_OBJECT 
		|| NOTIFICATION_DATA_TYPE_AGENT_SNMP_TABLE
		|| NOTIFICATION_DATA_TYPE_AGENT_SNMP_TRAP
		
	) agType = "agentcontact";
	
	return agType;
	
}
function getDateFromString(dateStr){
	var datesArr = dateStr.split("-");
    var day = datesArr[2].substring(0, 2);
	var month = datesArr[1];
	var year = datesArr[0];
	var hoursArr = datesArr[2].substring(3).split(":");
	var hour = hoursArr[0];
	var minute = hoursArr[1];
	var second = hoursArr[2];
    if(!second) second='00'	;
	var dat = new Date(year, month-1, day, hour, minute, second);
	return dat;
}
function getUTCDateFromString(dateStr,type){
	var date;
	switch(type){
	case 'long':
			var datesArr = dateStr.split("-");
		    var day = datesArr[2].substring(0, 2);
			var month = datesArr[1];
			var year = datesArr[0];
			var hoursArr = datesArr[2].substring(3).split(":");
			var hour = hoursArr[0];
			var minute = hoursArr[1];
			var second = hoursArr[2];
		    if(!second) second='00'	;
			    date = Date.UTC(year, month-1, day, hour, minute, second);
		break;
	case 'long_c':
		var datesArr = dateStr.split("-");
	    var day = datesArr[1].substring(0, 2);
		var month = datesArr[0];
		var year = '1980';
		var hoursArr = datesArr[1].substring(3).split(":");
		var hour = hoursArr[0];
		var minute = hoursArr[1];
		var second = hoursArr[2];
	    if(!second) second='00'	;
		    date = Date.UTC(year, month-1, day, hour, minute, second);
	break;
	case 'short':
		 var day = '01';
		var month = '01';
		var year = '1980';
		var hoursArr = dateStr.split(":");
		var hour = hoursArr[0];
		var minute = hoursArr[1];
		var second = hoursArr[2];
	    if(!second) second='00'	;
		    date = Date.UTC(year, month-1, day, hour, minute, second);
		break;
}
	
	return date;
}
var getLabelMinMaxValues=function(dateStr){
	var minMaxValues={};
	var datesArr = dateStr.split("-");
    var day = datesArr[2].substring(0, 2);
	var month = datesArr[1];
	var year = datesArr[0];
	var first_hour = "00";
	var last_hour = "24"
	var minute = "00";
	var second = "00";
    
	minMaxValues.min=getUTCDateFromString((year+'-'+month+'-'+day+ ' '+ first_hour+':'+minute),'long');
	minMaxValues.max=getUTCDateFromString((year+'-'+month+'-'+day+' '+ last_hour+':'+minute),'long');
    return minMaxValues;
}

var drawLocations = function(locations, container,height, errorDiv,type){
	if (typeof locations == "undefined") {
		locations = getLocations();
	}
	var tableData = [];
	for(var i=0; i < locations.length;i++){
		 var disabld = !locations[i].active;
		 tableData[i] = [
						locations[i].name,
						locations[i].id,
						locations[i].group,
						!disabld && locations[i].selected
		 				];
	}
	var config = {};
	config.container = container;
	config.id = 'extGrid_locations_'+type;
	config.data = tableData;
	config.pageSize = 50;
	config.width = container.offsetWidth-7;
	config.height = (height? height : 200);
	config.checkBoxes = true;
	config.checkBoxHeader = "";
	config.groupingField = "group";
	config.hideHeaders = true;
	config.headers = [{text: Framework.Lang.loc,width: 120,fieldName: "location"},
	                  //{text: Framework.Lang.monitorsList.MonitoringFrequency,width: 100,fieldName: "frequency"},
	                  {hidden:true,fieldName: "id"},
	                  {text: Framework.Lang.LocationsGroup,fieldName: "group",sortType:sortTransactionLocationsGroups},
	                  {hidden:true,fieldName: "active"}
					 ];
	var grid = Ext.getCmp( config.id );
	 if( grid ) grid.destroy();	
	 var grid = drawExtGrid(config);
	 grid.addClass("x-window-mc");
     var selModel = grid.getSelectionModel();
	 var recs = [];
	 grid.getStore().each(function(rec){
	 if(rec.data.active == "true"){
		 recs.push(rec);
	 }
	 });
	 selModel.selectRecords(recs);
	 selModel.on( 'rowselect', locationSelected.createDelegate(selModel, [errorDiv, type], true) );
	 setTimeout("refreshGrid('"+config.id+"')", 100);
}


var drawLocationsForEdit = function(container,height,moduleId, intervals, selectedLocations, locations, moduleIntervals, minFrequency,errorDiv,type){
	var tableData = [];
	var locationIds = [];
	var num = 0;
	var portlet = PortletLoader.getPortlet(moduleId);
	var disabld = isReadonly() && (portlet ?  !User.permissions['R_manage '+portlet.moduleName+'s'] : !User.permissions['R_manage '+moduleId.firstCharUpper()+'s']);
	for(var i=0; i < locations.length;i++){
		 locationIds[num++] = locations[i].id;
		 var interval = intervals[locations[i].id]? intervals[locations[i].id] : minFrequency;
		 var checked = 	(typeof intervals[locations[i].id] != 'undefined');
		 tableData[i] = [
						locations[i].name,
						interval,
						locations[i].id,
						locations[i].group,
						checked
		 				];
	}
	
	for(var i = 0; typeof selectedLocations != "undefined" && i < selectedLocations.length; i++){
		if(locationIds.indexOf(selectedLocations[i].id) == -1){
			 var checked = 	(typeof intervals[selectedLocations[i].id] != 'undefined');
			 var interval = intervals[selectedLocations[i].id]? intervals[selectedLocations[i].id] : minFrequency;
			 var locs = getLocationsObjectsByIds([selectedLocations[i].id],type);
			 var group = (locs.length>0?locs[0].group:selectedLocations[i].group);
			 tableData.push( [
								selectedLocations[i].name,
								interval,
								selectedLocations[i].id,
								group,
								checked
				 				]);
		}
	}
	var config = {};
	config.container = container;
	config.id = 'extGrid_locations_'+type+container.id;
	config.data = tableData;
	config.pageSize = 50;
	config.width = container.offsetWidth-7;
	config.height = (height? height : 180);
	config.checkBoxes = true;
	config.checkBoxHeader = "";
	config.groupingField = "group";
	
	var intervals = [];
	for(var i=moduleIntervals.indexOf(minFrequency); i<moduleIntervals.length; i++){
		intervals.push([moduleIntervals[i],moduleIntervals[i] + " " + Framework.Lang.minute]);
	}
	config.headers = [{text: Framework.Lang.loc,width: 120,fieldName: "location"},
	                  {text: Framework.Lang.monitorsList.MonitoringFrequency,width: 100,fieldName: "interval", editor   : {xtype:'combo', 
	                        store: new Ext.data.ArrayStore({
	                               fields: ['interval','name'],
	                               data : intervals
	                                }),
	                               displayField:'name',
	                               valueField: 'interval',
	                               mode: 'local',
	                              typeAhead: true,
	                              triggerAction: 'all',
	                              lazyRender: true,
	                              emptyText: 'Select frequency',
	                              editable: false
	                        },
	                        renderer: function(value){
	                        	if(value === undefined || value == "") return value;
	                        	return value + " " + Framework.Lang.minute;
	                        }
},
	                  {hidden:true,fieldName: "id"},
	                  {text: Framework.Lang.LocationsGroup,fieldName: "group",sortType:sortTransactionLocationsGroups},
	                  {hidden:true,fieldName: "active"}
					 ];
	
	var grid = Ext.getCmp( config.id );
	 if( grid ) grid.destroy();	
	 var grid = drawExtGrid(config);
	 grid.addClass("x-window-mc");
     var selModel = grid.getSelectionModel();
	 var recs = [];
	 grid.getStore().each(function(rec){
	 if(rec.data.active == "true"){
		 recs.push(rec);
	 }
	 });
	 selModel.selectRecords(recs);
	 setTimeout("refreshGrid('"+config.id+"')", 100);
	 selModel.on( 'rowselect', locationSelected.createDelegate(selModel, [errorDiv, type], true) );
	 if(disabld) selModel.lock();

}


var locationSelected=function(selModel, rowIndex, row, errorDiv, type){
	$id(errorDiv).innerHTML = "";
	$id(errorDiv).style.display = "none";
	var permitedCount = User.permissions[type+"_loc"];
	var checkedCount = selModel.getSelections().length;
	if(!permitedCount || checkedCount>permitedCount){
		$id(errorDiv).innerHTML = Framework.Lang.check_locationError.replace(":count",(!permitedCount ? 0 : permitedCount));
		$id(errorDiv).style.display = "block";
		selModel.deselectRow(rowIndex);
	}
}

/*var getLocationById=function(id){
	var locations = getLocations();
	for(var i=0; i<locations.length;i++){
		if(locations[i].id==id){
			return locations[i];
		}
	}
	return null;
}*/

LOAD_VIEW='9';
HTTP_GET=1;
HTTP_POST=2;
var WEEKDAYS_M = new Array(Framework.Lang.Monitoring_days.Sunday,Framework.Lang.Monitoring_days.Monday, Framework.Lang.Monitoring_days.Tuesday, Framework.Lang.Monitoring_days.Wednesday, Framework.Lang.Monitoring_days.Thursday, Framework.Lang.Monitoring_days.Friday, Framework.Lang.Monitoring_days.Saturday, Framework.Lang.Monitoring_days.Sunday);
var WEEKDAYS = new Array(Framework.Lang.Monitoring_days.Sunday,Framework.Lang.Monitoring_days.Monday, Framework.Lang.Monitoring_days.Tuesday, Framework.Lang.Monitoring_days.Wednesday, Framework.Lang.Monitoring_days.Thursday, Framework.Lang.Monitoring_days.Friday,Framework.Lang.Monitoring_days.Saturday);
var MONTHS = new Array(Framework.Lang.Calendar_Jan, Framework.Lang.Calendar_Feb, Framework.Lang.Calendar_March, Framework.Lang.Calendar_April, Framework.Lang.Calendar_May, Framework.Lang.Calendar_June, Framework.Lang.Calendar_Jul, Framework.Lang.Calendar_Aug, Framework.Lang.Calendar_Sep, Framework.Lang.Calendar_Oct, Framework.Lang.Calendar_Nov, Framework.Lang.Calendar_Dec);
PERSONALPLAN = 0;
BASICPLAN = 1;
PLUSPLAN = 2;
PLUS1MINUTEPLAN = 6;
FREEPLAN = 3;
PERSONALPLUSPLAN = 11;
BASICPLUSPLAN = 12;
TESTSPLUSPLAN = 8;
PERSONAL1PLAN=13;
SPECIALTEST1500=21;
READONLY = 35;
WEBPROPLAN = 7;
TRIALPLAN = 25;
// Major version of Flash required
var requiredMajorVersion = 9;
var requiredMinorVersion = 0;
var requiredRevision = 0;
//////////////////////////////////
HTTP_PUT=3;
HTTP_DELETE=4;
function isLocationAvailable(loc){
	return (User.permissions[loc] ? true : false); 
}

function isReadonly(){
	return (User.planName.indexOf("READONLY") != -1);
}
	
function getNotificationTimesheet(){
	var timesheet = [];
	timesheet[0]={};
	timesheet[0].name = Framework.Lang.NotificationState_always;
	timesheet[0].id = 1;
	
	timesheet[1]={};
	timesheet[1].name = Framework.Lang.NotificationState_everyday;
	timesheet[1].id = 2;
	
	timesheet[2]={};
	timesheet[2].name = Framework.Lang.NotificationState_specific;
	timesheet[2].id = 3;
	
	return timesheet;
}		
function getLocationById(idd){
	var locs = getLocations();
	var loc = null;
	for(var i = 0; i < locs.length; i++){
		if(locs[i].id == idd) loc = locs[i];
	}
	return loc;
}	
function getLocationsObjectsByIds(locIds, type){
	var locs = (type=="test" || type=="external" ? getLocations() : (type=="transaction" ? getTransactionLocations("",true) : getTransactionLocations('_A',true)) );
	var locsObjects = [];
	for(var i = 0; i < locs.length; i++){
		if(locIds.consistOf( locs[i].id) ) locsObjects.push(locs[i]);
	}
	return locsObjects;
}	
function getLocations(){
	var locationItem;
	var locations = [];
		
	//if(isLocationAvailable(1)){
		locationItem={};
		locationItem.name=Framework.Lang.locationsName.US_MID;
		locationItem.fullName=Framework.Lang.locationsFullName.US_MID;
		locationItem.id=1;
		locationItem.active=true;
		locationItem.selected=(User.permissions["external_loc"]>=1);
		locationItem.group=Framework.Lang.locationsGroup.NAmerica;
		locations.push(locationItem);
	//}	
		//if(isLocationAvailable(11)){
		locationItem={};
		locationItem.name=Framework.Lang.locationsName.NL;
		locationItem.fullName=Framework.Lang.locationsFullName.Netherlands;
		locationItem.id=11;
		locationItem.active=true;
		locationItem.selected=false;
		locationItem.group=Framework.Lang.locationsGroup.Europe;
		locations.push(locationItem);
	//}	
		
	//if(isLocationAvailable(8)){
		locationItem={};
		locationItem.name=Framework.Lang.locationsName.CN;
		locationItem.fullName=Framework.Lang.locationsFullName.China;
		locationItem.id=8;
		locationItem.active=true;
		locationItem.selected=false;
		locationItem.group=Framework.Lang.locationsGroup.Asia_Pacific;
		locations.push(locationItem);
	//}
	//if(isLocationAvailable(14)){
		locationItem={};
		locationItem.name=Framework.Lang.locationsName.BR;
		locationItem.fullName=Framework.Lang.locationsFullName.Brazil;
		locationItem.id=14;
		locationItem.active=true;
		locationItem.selected=false;
		locationItem.group=Framework.Lang.locationsGroup.SAmerica;
		locations.push(locationItem);
	//}	
		
	//if(isLocationAvailable(9)){
		locationItem={};
		locationItem.name=Framework.Lang.locationsName.US_EST;
		locationItem.fullName=Framework.Lang.locationsFullName.US_EST;
		locationItem.id=9;
		locationItem.active=true;
		locationItem.selected=(User.permissions["external_loc"]>=2);
		locationItem.group=Framework.Lang.locationsGroup.NAmerica;
		locations.push(locationItem);
	//}
	//if(isLocationAvailable(7)){
		locationItem={};
		locationItem.name=Framework.Lang.locationsName.DE;
		locationItem.fullName=Framework.Lang.locationsFullName.Germany;
		locationItem.id=7;
		locationItem.active=true;
		locationItem.selected=false;
		locationItem.group=Framework.Lang.locationsGroup.Europe;
		locations.push(locationItem);
	//}
	//if(isLocationAvailable(6)){
		locationItem={};
		locationItem.name=Framework.Lang.locationsName.AU;
		locationItem.fullName=Framework.Lang.locationsFullName.Australia;
		locationItem.id=6;
		locationItem.active=true;
		locationItem.selected=false;
		locationItem.group=Framework.Lang.locationsGroup.Asia_Pacific;
		locations.push(locationItem);
	//}
	//if(isLocationAvailable(5)){
		locationItem={};
		locationItem.name=Framework.Lang.locationsName.PA;
		locationItem.fullName=Framework.Lang.locationsFullName.Panama;
		locationItem.id=5;
		locationItem.active=true;
		locationItem.selected=false;
		locationItem.group=Framework.Lang.locationsGroup.NAmerica;
		locations.push(locationItem);
	//}

	//if(isLocationAvailable(10)){
		locationItem={};
		locationItem.name=Framework.Lang.locationsName.US_WST;
		locationItem.fullName=Framework.Lang.locationsFullName.US_WST;
		locationItem.id=10;
		locationItem.active=true;
		locationItem.selected=(User.permissions["external_loc"]>=3);
		locationItem.group=Framework.Lang.locationsGroup.NAmerica;
		locations.push(locationItem);
		//}
		//if(isLocationAvailable(12)){
		locationItem={};
		locationItem.name=Framework.Lang.locationsName.ES;
		locationItem.fullName=Framework.Lang.locationsFullName.Spain;
		locationItem.id=12;
		locationItem.active=true;
		locationItem.selected=false;
		locationItem.group=Framework.Lang.locationsGroup.Europe;
		locations.push(locationItem);
	//}	
	//if(isLocationAvailable(13)){
		locationItem={};
		locationItem.name=Framework.Lang.locationsName.SG;
		locationItem.fullName=Framework.Lang.locationsFullName.Singapore;
		locationItem.id=13;
		locationItem.active=true;
		locationItem.selected=false;
		locationItem.group=Framework.Lang.locationsGroup.Asia_Pacific;
		locations.push(locationItem);
	//}	

		//if(isLocationAvailable(15)){
			locationItem={};
			locationItem.name=Framework.Lang.locationsName.MX;
			locationItem.fullName=Framework.Lang.locationsFullName.Mexico;
			locationItem.id=15;
			locationItem.active=true;
			locationItem.selected=false;
			locationItem.group=Framework.Lang.locationsGroup.NAmerica;
	        	locations.push(locationItem);
		// }	
		
		//--------canada------
		locationItem={};
		locationItem.name=Framework.Lang.locationsName.CA;
		locationItem.fullName=Framework.Lang.locationsFullName.Canada;
		locationItem.id=17;
		locationItem.active=true;
		locationItem.selected=false;
		locationItem.group=Framework.Lang.locationsGroup.NAmerica;
		locations.push(locationItem);
	//}	
	//if(isLocationAvailable(4)){
		locationItem={};
		locationItem.name=Framework.Lang.locationsName.UK;
		locationItem.fullName=Framework.Lang.locationsFullName.UK;
		locationItem.id=4;
		locationItem.active=true;
		locationItem.selected=false;
		locationItem.group=Framework.Lang.locationsGroup.Europe;
		locations.push(locationItem);
	//}
	//if(isLocationAvailable(16)){
		locationItem={};
		locationItem.name=Framework.Lang.locationsName.JP;
		locationItem.fullName=Framework.Lang.locationsFullName.Japan;
		locationItem.id=16;
		locationItem.active=true;
		locationItem.selected=false;
		locationItem.group=Framework.Lang.locationsGroup.Asia_Pacific;
		locations.push(locationItem);
	//}	
	return locations;
}
function getTransactionLocationById(idd, type){
	var locs = getTransactionLocations("",true);
	if(type == '1')
		locs = getTransactionLocations("_A", true);
	var loc = null;
	for(var i = 0; i < locs.length; i++){
		if(locs[i].id == idd) loc = locs[i];
	}
	return loc;
}	

function getTransactionLocations(postfix,all){
	var locationItem;
	var locations = [];
	if(postfix == undefined) postfix="";
	if(all == undefined) all=false;	
	/*if(isLocationAvailable("13_SG_L"+postfix) || all){
		locationItem={};
		locationItem.name="SG";
		locationItem.fullName="SG";
		locationItem.id=13;
		locationItem.active=isLocationAvailable("13_SG_L"+postfix);
		locations.push(locationItem);
	}*/
	if(/*isLocationAvailable("12_US_W"+postfix) ||*/ all){
		locationItem={};
		locationItem.name=Framework.Lang.locationsFullName.US_EAST;
		locationItem.fullName=Framework.Lang.locationsFullName.US_EAST;
		locationItem.id=12;
		locationItem.active=true;//isLocationAvailable("12_US_W"+postfix);
		locationItem.group=Framework.Lang.locationsGroup.NAmerica;
		locations.push(locationItem);
	}
	if(/*isLocationAvailable("12_US_W"+postfix) ||*/ all){
		locationItem={};
		locationItem.name=Framework.Lang.locationsFullName.US_EAST+3;
		locationItem.fullName=Framework.Lang.locationsFullName.US_EAST+3;
		locationItem.id=24;
		locationItem.active=true;//isLocationAvailable("12_US_W"+postfix);
		locationItem.group=Framework.Lang.locationsGroup.NAmerica;
		locations.push(locationItem);
	}
	if(/*isLocationAvailable("19_US_L"+postfix) ||*/ all){
		locationItem={};
		locationItem.name=Framework.Lang.locationsFullName.US_EAST+2;
		locationItem.fullName=Framework.Lang.locationsFullName.US_EAST+2;
		locationItem.id=19;
		locationItem.active=true;//isLocationAvailable("19_US_L"+postfix);
		locationItem.group=Framework.Lang.locationsGroup.NAmerica;
		locations.push(locationItem);
	}
	if(/*isLocationAvailable("11_US_L"+postfix) ||*/ all){
		locationItem={};
		locationItem.name=Framework.Lang.locationsFullName.US_WEST;
		locationItem.fullName=Framework.Lang.locationsFullName.US_WEST;
		locationItem.id=11;
		locationItem.active=true;//isLocationAvailable("11_US_L"+postfix);
		locationItem.group=Framework.Lang.locationsGroup.NAmerica;
		locations.push(locationItem);
	}
	if(/*isLocationAvailable("15_US_L"+postfix)*/ all){
		locationItem={};
		locationItem.name=Framework.Lang.locationsFullName.US_WEST+2;
		locationItem.fullName=Framework.Lang.locationsFullName.US_WEST+2;
		locationItem.id=15;
		locationItem.active=true;//isLocationAvailable("15_US_L"+postfix);
		locationItem.group=Framework.Lang.locationsGroup.NAmerica;
		locations.push(locationItem);
	}
	//if(isLocationAvailable("16_US_L"+postfix)){
		locationItem={};
		locationItem.name=Framework.Lang.locationsFullName.US_WEST+1;
		locationItem.fullName=Framework.Lang.locationsFullName.US_WEST+1;
		locationItem.id=16;
		locationItem.active=true;//isLocationAvailable("16_US_L"+postfix);
		locationItem.group=Framework.Lang.locationsGroup.NAmerica;
		locations.push(locationItem);
	//}
		//canada
		locationItem={};
		locationItem.name=Framework.Lang.locationsName.CA;
		locationItem.fullName=Framework.Lang.locationsName.CA;
		locationItem.id=25;
		locationItem.active=true;//isLocationAvailable("16_US_L"+postfix);
		locationItem.group=Framework.Lang.locationsGroup.NAmerica;
		locations.push(locationItem);
	//if(isLocationAvailable("17_UK_L"+postfix)){
		locationItem={};
		locationItem.name=Framework.Lang.locationsName.UK+2;
		locationItem.fullName=Framework.Lang.locationsFullName.UK+2;
		locationItem.id=17;
		locationItem.active=true;//isLocationAvailable("17_UK_L"+postfix);
		locationItem.group=Framework.Lang.locationsGroup.Europe;
		locations.push(locationItem);
	//}
	//if(/*isLocationAvailable("3_US_L"+postfix) || */all){
		locationItem={};
		locationItem.name=Framework.Lang.locationsFullName.US_EAST+1;
		locationItem.fullName=Framework.Lang.locationsFullName.US_EAST+1;
		locationItem.id=3;
		locationItem.active=true;//isLocationAvailable("3_US_L"+postfix);
		locationItem.group=Framework.Lang.locationsGroup.NAmerica;
		locations.push(locationItem);
	//}
	if(/*isLocationAvailable("10_US_L"+postfix)*/all){
		locationItem={};
		locationItem.name=Framework.Lang.locationsFullName.US_WEST+3;
		locationItem.fullName=Framework.Lang.locationsFullName.US_WEST+3;
		locationItem.id=10;
		locationItem.active=true;//isLocationAvailable("10_US_L"+postfix);
		locationItem.group=Framework.Lang.locationsGroup.NAmerica;
		locations.push(locationItem);
	}
	if(/*isLocationAvailable("1_US_L"+postfix) || */all || (User !==undefined && User.userAccount == 'unix@mltvacations.com')){
		locationItem={};
		locationItem.name=Framework.Lang.locationsFullName.US_MID;
		locationItem.fullName=Framework.Lang.locationsFullName.US_MID;
		locationItem.id=1;
		locationItem.active=true;//isLocationAvailable("1_US_L"+postfix);
		locationItem.group=Framework.Lang.locationsGroup.NAmerica;
		locations.push(locationItem);
	}
	//if(isLocationAvailable("22_US_L"+postfix) || all){
		locationItem={};
		locationItem.name=Framework.Lang.locationsFullName.US_MID+2;
		locationItem.fullName=Framework.Lang.locationsFullName.US_MID+2;
		locationItem.id=22;
		locationItem.active=true;//isLocationAvailable("22_US_L"+postfix);
		locationItem.group=Framework.Lang.locationsGroup.NAmerica;
		locations.push(locationItem);
	//}
	if(all){
		locationItem={};
		locationItem.name=Framework.Lang.locationsName.DE;
		locationItem.fullName=Framework.Lang.locationsName.DE;
		locationItem.id=2;
		locationItem.active=true;//isLocationAvailable("2_DE_L"+postfix);
		locationItem.group=Framework.Lang.locationsGroup.Europe;
		locations.push(locationItem);
	}
		locationItem={};
		locationItem.name=Framework.Lang.locationsName.DE+2;
		locationItem.fullName=Framework.Lang.locationsName.DE+2;
		locationItem.id=28;
		locationItem.active=true;//isLocationAvailable("2_DE_L"+postfix);
		locationItem.group=Framework.Lang.locationsGroup.Europe;
		locations.push(locationItem);
	
	if(/*isLocationAvailable("4_UK_W"+postfix) ||*/ all){
		locationItem={};
		locationItem.name=Framework.Lang.locationsName.UK;
		locationItem.fullName=Framework.Lang.locationsFullName.UK;
		locationItem.id=4;
		locationItem.active=true;//isLocationAvailable("4_UK_W"+postfix);
		locationItem.group=Framework.Lang.locationsGroup.Europe;
		locations.push(locationItem);
	}
	//if(isLocationAvailable("5_HK_W"+postfix) || all){
		locationItem={};
		locationItem.name=Framework.Lang.locationsName.HK;
		locationItem.fullName=Framework.Lang.locationsFullName.HK;
		locationItem.id=5;
		locationItem.active=true;//isLocationAvailable("5_HK_W"+postfix);
		locationItem.group=Framework.Lang.locationsGroup.Asia_Pacific;
		locations.push(locationItem);
	//}
	//if(isLocationAvailable("6_AU_L"+postfix) || all){
		locationItem={};
		locationItem.name=Framework.Lang.locationsName.AU;
		locationItem.fullName=Framework.Lang.locationsName.AU;
		locationItem.id=6;
		locationItem.active=true;//isLocationAvailable("6_AU_L"+postfix);
		locationItem.group=Framework.Lang.locationsGroup.Asia_Pacific;
		locations.push(locationItem);
	//}
	//if(isLocationAvailable("7_PA_L"+postfix) || all){
		locationItem={};
		locationItem.name=Framework.Lang.locationsName.PA;
		locationItem.fullName=Framework.Lang.locationsName.PA;
		locationItem.id=7;
		locationItem.active=true;//isLocationAvailable("7_PA_L"+postfix);
		locationItem.group=Framework.Lang.locationsGroup.NAmerica;
		locations.push(locationItem);
	//}
	//if(isLocationAvailable("8_NL_L"+postfix) || all){
		locationItem={};
		locationItem.name=Framework.Lang.locationsName.NL;
		locationItem.fullName=Framework.Lang.locationsName.NL;
		locationItem.id=8;
		locationItem.active=true;//isLocationAvailable("8_NL_L"+postfix);
		locationItem.group=Framework.Lang.locationsGroup.Europe;
		locations.push(locationItem);
	//}
	//if(isLocationAvailable("14_ES_L"+postfix)){
		locationItem={};
		locationItem.name=Framework.Lang.locationsName.ES;
		locationItem.fullName=Framework.Lang.locationsName.ES;
		locationItem.id=14;
		locationItem.active=true;//isLocationAvailable("14_ES_L"+postfix);
		locationItem.group=Framework.Lang.locationsGroup.Europe;
		locations.push(locationItem);
	//}
	if(/*isLocationAvailable("18_UK_L"+postfix)*/all){
		locationItem={};
		locationItem.name=Framework.Lang.locationsFullName.UK_CrownPeak;
		locationItem.fullName=Framework.Lang.locationsFullName.UK_CrownPeak;
		locationItem.id=18;
		locationItem.active=true;//isLocationAvailable("18_UK_L"+postfix);
		locationItem.group=Framework.Lang.locationsGroup.Europe;
		locations.push(locationItem);
	}
	//if(isLocationAvailable("20_MX_L"+postfix)){
		locationItem={};
		locationItem.name=Framework.Lang.locationsName.MX;
		locationItem.fullName=Framework.Lang.locationsName.MX;
		locationItem.id=20;
		locationItem.active=true;//isLocationAvailable("20_MX_L"+postfix);
		locationItem.group=Framework.Lang.locationsGroup.NAmerica;
		locations.push(locationItem);
	//}
	//if(isLocationAvailable("21_BR_L"+postfix)){
		locationItem={};
		locationItem.name=Framework.Lang.locationsName.BR;
		locationItem.fullName=Framework.Lang.locationsName.BR;
		locationItem.id=21;
		locationItem.active=true;//isLocationAvailable("21_BR_L"+postfix);
		locationItem.group=Framework.Lang.locationsGroup.SAmerica;
		locations.push(locationItem);
	//}
	if(all){
		locationItem={};
		locationItem.name=Framework.Lang.locationsName.BR+2;
		locationItem.fullName=Framework.Lang.locationsName.BR+2;
		locationItem.id=26;
		locationItem.active=true;
		locationItem.group=Framework.Lang.locationsGroup.SAmerica;
		locations.push(locationItem);
	}
	//if(isLocationAvailable("23_JP_L"+postfix)){
		locationItem={};
		locationItem.name=Framework.Lang.locationsName.JP;
		locationItem.fullName=Framework.Lang.locationsName.JP;
		locationItem.id=23;
		locationItem.active=true;//isLocationAvailable("23_JP_L"+postfix);
		locationItem.group=Framework.Lang.locationsGroup.Asia_Pacific;
		locations.push(locationItem);
	//}
	if(all){
		locationItem={};
		locationItem.name=Framework.Lang.locationsFullName.US_WEST+4;
		locationItem.fullName=Framework.Lang.locationsFullName.US_WEST+4;
		locationItem.id=27;
		locationItem.active=true;
		locationItem.group=Framework.Lang.locationsGroup.NAmerica;
		locations.push(locationItem);
	}
	
	return locations;
}
var SAmerica=Framework.Lang.locationsGroup.SAmerica;
var NAmerica=Framework.Lang.locationsGroup.NAmerica;
var Europe=Framework.Lang.locationsGroup.Europe;
function sortTransactionLocationsGroups(val){
	  if(val == NAmerica)
		  return 1;
	  else if(val == SAmerica)
		  return 2;
	  else if(val == Europe)
		  return 3;
	  else return 4;
		  }

function checkStatus(response){
	var json_obj = eval("("+response.responseText+")");
	if (json_obj.status != STATUS_OK)
		alert(json_obj.status);
}

function getValidID( startId ){
	var obj = $id( startId );
	while( obj != null ){
		startId += String.fromCharCode(97 + Math.round(Math.random() * 25));;
		obj = $id( startId );
	}
	return startId;
}

function disableSelecting( event ){
	return false;
}

function changeStyle(newTheme){
		var links = document.getElementsByTagName("link");
		
		var newStylePath = '/themes/'+newTheme+'/'+newTheme+'.css?v=5';
		var currentStylePath = 'themes/'+OPTIONS.theme+'/'+OPTIONS.theme+'.css?v=5';
		for(var i = 0; i < links.length; i++){
			if( links[i].href.indexOf(currentStylePath) >= 0){
				links[i].href = (Framework.serverPath + newStylePath);
				break;
			}
		}

		var newExtStyle = 'ext-all-' + newTheme + '.css';
		var curExtStyle = 'ext-all-' + OPTIONS.theme + '.css';
		for(var i = 0; i < links.length; i++){
			if( links[i].href.indexOf(curExtStyle) >= 0){
				links[i].href = (Framework.serverPath + '/libs/EXT_JS_3/resources/css/' + newExtStyle);
				break;
			}
		}
		var tabOptionsAnchors = document.getElementsByName('tabOptionsAnchor');
		for(var i = 0; i < tabOptionsAnchors.length; i++)
			tabOptionsAnchors[i].style.backgroundImage = 'url(libs/EXT_JS_3/resources/images/' + newTheme + '/grid/sort_desc.gif)';

		THEME_IMG_ROOT = "themes/" + newTheme + "/";
		//PortletLoader.changePortletHeaderImg();
		//changeRadioCheckImg();
		$id(OPTIONS.theme + "_skin").className = "";
		$id(newTheme + "_skin").className = " selected";
		OPTIONS.theme = newTheme;
		RequestDispatcher.send(Framework.optionsURL + User.userId + "/update/theme/" + OPTIONS.theme, "PUT", "", checkStatus, null);
		
		for (var i=0; i<THEME_DEPENDENT_MODULES.length; i++){
			PortletLoader.refresh_modules(THEME_DEPENDENT_MODULES[i]);
		}
}

function changeStyle2( i, path ){
	if( changeStyle2.STEPS > 0){
		node = document.getElementsByTagName("link")[i];
		node.href = (Framework.serverPath + path);
		changeStyle2.STEPS --;
		if( Browser.isIE ){
			setTimeout( "changeStyle2( "+ i +", \""+ path +"\" )", 1000 );
		}
	}
}
changeStyle2.STEPS = 5;


function parseBool( str ){
	if( str == "false" || str == false)
		return false;
	else if( str == "true" || str == true)
		return true;
	return null;
}

function makeKeyValue( domNode , arr){
		if( arr == null  )arr = {};

		domNode = domNode.childNodes;
		for( var i=0; i<domNode.length; i++ ){
			if( domNode[i].nodeType != 1 )continue;
			var attrName  = domNode[i].nodeName;
			var attrValue = domNode[i].firstChild.nodeValue;
			var parsedBool = parseBool(attrValue);
			arr[ attrName ] = attrValue;
		}
		return arr;
}

function findPosXY( obj ){
	var curleft = 0;
	var curtop = 0;

	try{
		if (obj.offsetParent) {
			while (obj.offsetParent) {
				if(obj.offsetParent.offsetParent==null)		break;

				curleft += obj.offsetLeft;
				curtop  += obj.offsetTop;
				obj = obj.offsetParent;
			}
		}else{
			if (obj.x) curleft += obj.x;
			if (obj.y) curtop  += obj.y;
		}
	}catch(ex){}

	var retObj = new Object();
	retObj.left = curleft;
	retObj.top  = curtop;

	return retObj;
}

function findPosX(obj){
	var curleft = 0;
	try{
			if (obj.offsetParent) {
				while (obj.offsetParent) {
					if(obj.offsetParent.offsetParent==null)
						break;
					curleft += obj.offsetLeft;
					obj = obj.offsetParent;
				}
			} else if (obj.x) curleft += obj.x;
	}catch(ex){}

	return curleft;
}

function findPosY(obj) {
	var curtop = 0;
	try{
		if (obj.offsetParent) {
			while (obj.offsetParent) {
				if(obj.offsetParent.offsetParent.offsetParent==null)
						break;
				curtop += obj.offsetTop;
				obj = obj.offsetParent;
			}
		} else if (obj.y) curtop += obj.y;
	}catch(ex){}
	return curtop;
}
function parseStylePX( size ){
	if( typeof(size) == "string" ){
		if( size.charAt(size.length -2) + "" + size.charAt(size.length -1) == "px" )
			size = parseInt(size.substr( 0, size.length -2 ));
		else
			size = parseInt(size);
	}
	if( isNaN(size) ) size = 0;
	return 	size;
}

function createElementVsClassName( tagName, className , id ){
	var element = document.createElement( tagName );
	if( className != null ) element.className = className;
	if( id        != null ) element.setAttribute( "id", id );
	return element;
}

function createElement(type, parent, args){
	var el = document.createElement(type);
	if (parent) parent.appendChild(el);
	if (args){
		for (var i in args){
			el.setAttribute(i, args[i]);
		}
	}
	return el;
}


function getObjectRealPosition(object,topLeft){
	if(topLeft)value = object.offsetTop;
	else value = object.offsetLeft;

	while(object.offsetParent !=null){
		if(topLeft)value = value + object.offsetParent.offsetTop;
		else value = value + object.offsetParent.offsetLeft;
		object = object.offsetParent;
	}
	return value;
}


var Browser;
var OS = new Object();
	OS.isLinux = (navigator.platform.toLowerCase().indexOf("linux")!=-1);
	OS.isMac = (navigator.platform.toLowerCase().indexOf("mac")!=-1);
	OS.isWindows = (navigator.platform.toLowerCase().indexOf("win")!=-1);

modulesCount=6;
maxHeight = 0;
counter = 1;
modulesIds = new Array();

function checkBrowserVersion() {
		Browser = new Object();

		Browser.isMozilla = (typeof document.implementation != 'undefined') && (typeof document.implementation.createDocument != 'undefined') && (typeof HTMLDocument!='undefined');
		Browser.isIE 	  = window.ActiveXObject ? true : false;
		Browser.isIE6 = ( Browser.isIE&& /msie 6\.0/i.test(navigator.userAgent) );
		Browser.isFirefox = (navigator.userAgent.toLowerCase().indexOf("firefox")!=-1);
		Browser.isOpera   = (navigator.userAgent.toLowerCase().indexOf("opera")!=-1);
		Browser.isChrome = (navigator.userAgent.toLowerCase().indexOf("chrome")!=-1);
		Browser.isSafari = (!Browser.isChrome && navigator.userAgent.toLowerCase().indexOf("safari")!=-1);
		Browser.isMacFirefox = (OS.isMac && Browser.isFirefox);
		Browser.isWindowsSafari = (OS.isWindows && Browser.isSafari);
		
		var agt=navigator.userAgent.toLowerCase();
		var is_major = parseInt(navigator.appVersion);
		Browser.isIE6 =(Browser.isIE && (is_major == 4) && (agt.indexOf("msie 6.")!=-1) );
		Browser.isiPhone = (navigator.userAgent.match(/iPhone/i))||(navigator.userAgent.match(/iPod/i));
		return Browser;
}

browserVersion = checkBrowserVersion();


function setZIndex( obj, zIndex ){
	if( obj != null && obj.nodeType != 3)obj.style.zIndex = zIndex;
	for( var i=0; i<obj.childNodes.length; i++ )
		setZIndex( obj.childNodes[i], zIndex );
}
function parseXMLStr(stringToParse) {

		var Browser = checkBrowserVersion();
		var rootTag = null;
		if (Browser.isIE) {
			var xmlDocument = new ActiveXObject('Microsoft.XMLDOM');
			xmlDocument.async = false;
			xmlDocument.loadXML(stringToParse);
			var rootTag = xmlDocument.documentElement;
		}else if (Browser.isMozilla) {
			var domParser = new DOMParser();
			var xmlDocument = domParser.parseFromString(stringToParse,"text/xml");
			var rootTag = xmlDocument.documentElement;
		}else {
			var domParser = new DOMParser();
			var xmlDocument = domParser.parseFromString(stringToParse,"text/xml");
			var rootTag = xmlDocument.documentElement;
		}
		return rootTag;
}

function testForObject(Id){
  var o = $id(Id);
  if (o){
 	return true;
  }
  return false;
}


function setModCount(c){
	modulesCount = c;
}

function setXSizesLast(){
		counter++;
		if(counter==modulesCount){
			setXSizes();
		}
}

function setIsMax(id, qsize){
	var qmaxHeight = $id("maxHeight").value;
	modulesIds.push(id);
	if(qmaxHeight<qsize-40){
		$id("maxHeight").value = qsize-40;
	}
}

function setXSizes(){
	var xSize = $id("maxHeight").value
	var i=0;
	for(i=0; i < modulesIds.length; i++){
		if(testForObject(modulesIds[i]+"_table")){
				$id(modulesIds[i]+"_table").style.height= xSize + "px";
		}
	}

}

function resetXSizes(){
	var i=0;
	for(i=0; i < modulesIds.length; i++){
		if(testForObject(modulesIds[i]) && ($id(modulesIds[i]+"_table").offsetHeight > $id("maxHeight").value))	{
				$id("maxHeight").value = $id(modulesIds[i]+"_table").offsetHeight;
		}
	}
	downsize();
	setXSizes();
}

function downsize(){
	var i=0;
	var max=0;
	for(i=0; i < modulesIds.length; i++){
		var obj = $id( modulesIds[i] + '_table' );
		if( obj != null && max < obj.offsetHeight){
			max = obj.offsetHeight;
		}

	}

	max+=5;
	var maxHeightOBJ = $id("maxHeight");

	if( maxHeightOBJ == null ){
		maxHeightOBJ = document.createElement("INPUT");
		maxHeightOBJ.setAttribute( "id", "maxHeight" );
		maxHeightOBJ.setAttribute( "type", "hidden" );
		if(document.body )
			document.body.appendChild( maxHeightOBJ );
	}

	if(maxHeightOBJ.value > max){
		maxHeightOBJ.value = max;
	}

	for(i=0; i < modulesIds.length; i++){
		if(testForObject(modulesIds[i])){
			$id(modulesIds[i]+"_table").style.height= max + "px";
		}
	}
	var xSize = $id("maxHeight").value;
	for(i=0; i < modulesIds.length; i++){
		if(testForObject(modulesIds[i])){
			$id(modulesIds[i]+"_table").style.height= xSize + "px";
		}
	}
}

function execJS(node) {
  var st = node.getElementsByTagName('SCRIPT');
  var strExec;
  for(var i=0;i<st.length; i++) {
    if (Browser.isSafari) {
      strExec = st[i].innerHTML;
    }else if (Browser.isOpera) {
      strExec = st[i].text;
    }else if ((navigator.appName == 'Netscape')) {
      strExec = st[i].textContent;
    } else {
      strExec = st[i].text;
    }
    try {
      eval(strExec.split("<!--").join("").split("-->").join(""));
    } catch(e) {}
  }
}

function evalScripts( text ){
   var scripts = [];
   var script_sources = text.split(/<script.*?>/);
   counter = 0;
   for (var i=1; i < script_sources.length; i++)
      scripts[counter++] = script_sources[i].split(/<\/script>/)[0];

   for (var i=0; i < counter; i++)
   	eval( scripts[i] );
}
curWidth=0;
curHeight = 0;
function addWindowResizeFunctions(){
	window.onresize = function() {
		afterResize();
	}
	window.onresizeend = function(){
		afterResize();
		Controller.fixModuleSizes();
	}
} 
function removeWindowResizeFunctions(){
	window.onresize = function(){}
	window.onresizeend = function(){}
}


function afterResize(){
	try{
		var resized = false;
		newHeight = Layouter.getActiveTab().el.dom.offsetHeight;
		newWidth = $id( PortletLoader.getAvailableTabId()+"_body1").offsetWidth;
		if(Controller.tabWidth != newWidth){
			resized = true;
			Controller.tabWidth = newWidth;
			if(Browser.isIE){
				var newWidth = document.documentElement.clientWidth;
				if( newWidth - curWidth !=0){
					curWidth = newWidth;
					resetXSizes();
	
				}
			}else{
				resetXSizes();
			}
		}
	
		if(newHeight != Controller.tabHeight){
		 	resized = true;
			if(Layouter.getActiveTab().mode == "max"){
				for( var i=0; i<PORTLETS.length; i++ ){
					if(PORTLETS[i] == null  || PORTLETS[i].mode != "max")continue;
					PORTLETS[i].portlet_C_DOMOBJ.style.height=PORTLETS[i].portlet_FRAME.offsetHeight - 20 + "px";
					break;
				}
			}
	
			if(Browser.isIE){
				var newHeight = document.documentElement.clientHeight;
				if( newHeight - curHeight !=0){
					curHeight = newHeight;
					resetXSizes();
				}
			}else{
				resetXSizes();
			}
			Controller.tabHeight = newHeight;
		}
		if (!resized){
			setTimeout(afterResize, 500);
		}else{
			Controller.fixModuleSizes();
			Controller.callModulesListener( "onPageResize", true );
		}
	}catch(ex){}
}

try{
	Form.makeKeyValue = function(form){		
	    var elements = Form.getElements($id(form));
	    var queryComponents = new Array();
		var inputType;
		var queryComponentKey;
	    for (var i = 0; i < elements.length; i++) {
	      var queryComponent = Form.Element.serialize(elements[i]);		  
	      if (queryComponent) {
				var index = queryComponent.indexOf("=");
				queryComponentKey = queryComponent.substr(0, index);
				if("checkbox" == elements[i].type){					
					if(queryComponents[queryComponentKey] == null){
						queryComponents[queryComponentKey] = new Array();
					}
					queryComponents[queryComponentKey][queryComponents[queryComponentKey].length] = queryComponent.substr(index+1);					
				} else {
		  	    	queryComponents[queryComponentKey] = queryComponent.substr(index+1);
				}
		  }
	    }

	    return queryComponents;
	}
}catch(ex){}



function resize(size){
 	if (navigator.appName=="Netscape") {
  		$id("tablewidth").width=window.innerWidth;
 	}
 	if (navigator.appName.indexOf("Microsoft")!=-1) {
  		$id("tablewidth").style.width=document.documentElement.clientWidth;
 	}
}

function sleep( msec){
	var currentdate = new Date();
	document.getElementById("log").innerHTML += currentdate + "<br />";
	currentdate = Math.round(currentdate.getTime());
	if( !sleep.started  ){ sleep.start = currentdate; sleep.started =  true; }
	if( sleep.start + msec > currentdate ){
		sleep( msec);
	}else{
		sleep.started = false;
	}
}
sleep.start = null;
sleep.started = false;


function encode(str){
	if (!str || str=="") return str;
	var tokens = str.split("/");
	var result = encodeURIComponent(tokens[0]);
	for(var i=1; i< tokens.length; ++i){
		result += "/" + encodeURIComponent(tokens[i]) ;
	}
	return result;
}
function decode(str){
	 var tokens = str.split("/");
	 var result = decodeURIComponent(tokens[0]);
	 for(var i=1; i< tokens.length; ++i){
	  result += "/" + decodeURIComponent(tokens[i]) ;
	 }
	 return result;
}
function isEmailValid(e) {
	var ok = "1234567890qwertyuiop[]asdfghjklzxcvbnm.+@-_QWERTYUIOPASDFGHJKLZXCVBNM";
	for(var i=0; i<e.length; i++){
		if (ok.indexOf(e.charAt(i))<0) {
			return false;
		}
	}
	if (document.images) {
		var re = /(@.*@)|(\.\.)|(^\.)|(^@)|(@$)|(\.$)|(@\.)/;
		var re_two = /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,8}|[0-9]{1,3})(\]?)$/;
		if (!e.match(re) && e.match(re_two)) {
			return -1;
		}
	}
}
function  checkName(str){
	if(str.indexOf("/") == -1)
	return true;
	return false;
}
validateContact=function(first, second, email, phone, key, im, accountType){
 	     if(first=='' || second=='')	return Framework.Lang.Contact_Empty_FLName;
    	 if(!checkName(first) || !checkName(second))	return Framework.Lang.Contact_NotValid_FLName;
		
         var filter  = /^([a-zA-Z0-9_\.\-\+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
         var phoneFilter = /^([\+])?([0-9])+$/;
         
         if(accountType == undefined || accountType =='Email')
       	 	if (!filter.test(email))  return Framework.Lang.Contact_notValidEmail;
  		 
  		 if(accountType == undefined || accountType =='SMS')
		 	if (phone != "" && !phoneFilter.test(phone))  return Framework.Lang.Contact_notValidPhone;
		 	
		 if(accountType == undefined || accountType =='IM')
		 	if(im.trim() == '')	return Framework.Lang.Contact_notValidIM;

         if(key != undefined && key.trim()=='')   return Framework.Lang.Contact_imageTextRequired;
	 
  		return "success";

}
var validateMail = function(first, second, email){
	 if(first=='' || second=='')
	 	return Framework.Lang.Contact_Empty_FLName;
     if(!checkName(first) || !checkName(second))
     	return Framework.Lang.Contact_NotValid_FLName;
	 var filter  = /^([a-zA-Z0-9_\.\-\+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
     if (!filter.test(email))  return Framework.Lang.Contact_notValidEmail;
  	 return "success";
}
var validateIM = function(first, second, im){
	 if(first=='' || second=='')
	 	return Framework.Lang.Contact_Empty_FLName;
     if(!checkName(first) || !checkName(second))
     	return Framework.Lang.Contact_NotValid_FLName;
	 if(im.trim() == '')
	 	return Framework.Lang.Contact_notValidIM;
  	 return "success";
}
var validateTwitter = function(first, second, account){
	 if(first=='' || second=='')
	 	return Framework.Lang.Contact_Empty_FLName;
     if(!checkName(first) || !checkName(second))
     	return Framework.Lang.Contact_NotValid_FLName;
	 if(account.trim() == '')
	 	return Framework.Lang.Contact_notValidTwitter;
  	 return "success";
}
var validateSMS = function(first, second, phone){
	 if(first=='' || second=='')
	 	return Framework.Lang.Contact_Empty_FLName;
     if(!checkName(first) || !checkName(second))
     	return Framework.Lang.Contact_NotValid_FLName;
	 var phoneFilter = /^([\+])?([0-9])+$/;
	 if (phone != "" && !phoneFilter.test(phone))
	 	return Framework.Lang.Contact_notValidPhone;
  	 return "success";
}
var validateAlphaNumericText = function(text){/*only letters, numbers, spaces and _*/
	 var filter  = /^[ \w]+$/;
     if (!filter.test(text))  return Framework.Lang.NotValidText;
  	 return "success";
}
var validateUptimeSLA=function(sla){
	if(sla == "") return "success";
	if(parseFloat(sla) <= 100 &&  parseFloat(sla) > 0) return "success";
	return Framework.Lang.AddTest_uptimeSLAError;
}
var validateResponseSLA=function(sla){
	if(sla == "") return "success";
	if(parseFloat(sla) > 0) return "success";
	return Framework.Lang.AddTest_responseSLAError;
}
var validateSMSMobile = function(phone){
	 var phoneFilter = /^([\+])?([0-9])+$/;
	 if (phone != "" && !phoneFilter.test(phone))
	 	return false;
 	 return true;
}
var isNumeric = function(num){
	 var filter = /^([0-9])+$/;
	 if (num != "" && !filter.test(num))
	 	return false;
  	 return true;
}
Array.prototype.consistOf = function(compare, thisObj) {
    for ( var i=0, j=this.length; i < j;   i++ ) {
        if (this[i] == compare) {
            return true;
        }
    }
    return false;
};

Array.prototype.specialFields = function(field, thisObj) {
	var newAr = [];
    for ( var i = 0; i < this.length; i++ ) {
        newAr[newAr.length] = this[i][field];
    }
    return newAr;
};

Array.prototype.unique = function( b ) {
	 var a = [], i, l = this.length;
	 for( i=0; i<l; i++ ) {
	  if( a.indexOf( this[i], 0, b ) < 0 ) { a.push( this[i] ); }
	 }
	 return a;
};
Array.prototype.withoutArr = function(arr, thisObj) {
	var a = [];
    for ( var i=0; i < this.length;   i++ ) {
    	if (!arr.consistOf(this[i])) {
	       a.push( this[i] );
	    }
    }
    return a;
};
Array.prototype.intersect = function(arr, thisObj) {
	var a = [];
	for ( var i=0; i < this.length;   i++ ) {
    	if (arr.consistOf(this[i])) {
	       a.push( this[i] );
	    }
    }
    return a;
};

Array.prototype.exclude = function(arr) {
	var a = [];
	for ( var i=0; i < this.length;   i++ ) {
    	if (!arr.consistOf(this[i])) {
	       a.push( this[i] );
	    }
    }
    return a;
};
Array.prototype.remove = function(obj, fieldToCompare) {
	for (var i=0; i<this.length;i++){
		if(this[i] == obj || fieldToCompare && this[i][fieldToCompare] == obj[fieldToCompare]){
			this.splice(i, 1);
			return;
		}
	}
};
Array.prototype.indexOf = function(obj) {
	for ( var i=0; i < this.length; i++ ) {
    	if (this[i] == obj) {
	       return i;
	    }
    }
    return -1;
};
Array.prototype.removeDuplicate = function()
{
	// Here we remove duplicate values from first array
	var array4 = new Array;
	for(var i=0; i<this.length; i++) 
	{
	      var xx = true;
		for(var j=i+1; j<this.length; j++)
		{
			if(this[i] == this[j])
				xx = false;		
		}	
		if(xx == true)
			array4.push(this[i]);
	}
	return array4;
}
Array.prototype.getObjectByCriteria = function(prop, value) {
	for ( var i=0; i < this.length; i++ ) {
    	if (this[i][prop] == value) {
	       return this[i];
	    }
    }
    return null;
};
Array.prototype.sum = function(){
	for(var i=0,sum=0;i<this.length;sum+=this[i++]);
	return sum;
}
Array.prototype.max = function(){
	return Math.max.apply(Math,this)
}
Array.prototype.min = function(){
	return Math.min.apply(Math,this)
}
Array.prototype.isAllNull = function(){
	for(var i = 0; i < this.length; i++){
		if(this[i] != null) return false;
	}
	return true;
}

String.prototype.trim = function() { return this.replace(/^\s+|\s+$/, ''); };
String.prototype.ellipse = function(maxLength){
    if(this.length > maxLength){
        return this.substr(0, maxLength-3) + '...';
    }
    return this;
}
String.prototype.escapeHTML= function() {
    var div = document.createElement('div');
    var text = document.createTextNode(this);
    div.appendChild(text);
    return div.innerHTML;
};

String.prototype.unescapeHTML = function() {
    var div = document.createElement('div');
    div.innerHTML = this.stripTags();
    return div.childNodes[0].nodeValue;
};
String.prototype.stripTags=function() {
    return this.replace(/<\/?[^>]+>/gi, '');
};
String.prototype.replaceAll= function(s1, s2) {
 	return this.split(s1).join(s2)
};
String.prototype.makeNBSP = function() {
  	var thisCopy = "";
	for( var i=0; i<this.length; i++ )
		thisCopy += ( this.charAt(i) == " ")?"&nbsp;":this.charAt(i);
	return thisCopy;
};
String.prototype.htmlEncode = function() {
	return encodeURIComponent(this).replaceAll("'", "%27")
};
String.prototype.htmlDecode = function() {
	return decodeURIComponent(this).replaceAll("%27", "'");
};
String.prototype.xmlEncode = function() {
	return this.replace(/\&/g,'&'+'amp;').replace(/</g,'&'+'lt;').replace(/>/g,'&'+'gt;').replace(/\'/g,'&'+'apos;').replace(/\"/g,'&'+'quot;');	
};
cleanWhitespace = function(node){
	for (var x=0; x<node.childNodes.length; x++) {
		var child = node.childNodes[x];
		if ((child.nodeType == 3) && (!notspace.test(child.nodeValue)))	{
			node.removeChild(node.childNodes[x]);
			x--;
		}
		if(child.nodeType == 1) {
			Utils.cleanWhitespace(child);
		}
	}
}

function clone(obj,deep){
	var objectClone = new obj.constructor();
  	for (var property in obj)
    	if (!deep)
      		objectClone[property] = obj[property];
    	else if (typeof obj[property] == 'object')
      		objectClone[property] = clone(obj[property],deep);
    	else
      		objectClone[property] = obj[property];
  	return objectClone;
}
function getRawObject(obj) {
    var theObj;
    if (typeof obj == "string") {
        if (isW3C) {
            theObj = document.getElementById(obj);
        } else if (isIE4) {
            theObj = document.all(obj);
        } else if (isNN4) {
            theObj = seekLayer(document, obj);
        }
    } else {
        theObj = obj;
    }
    return theObj;
}

function getObjectWidth(obj)  {
    var elem = getRawObject(obj);
    var result = 0;
    if (elem.offsetWidth) {
            result = elem.offsetWidth;
    } else if (elem.clip && elem.clip.width) {
        result = elem.clip.width;
    } else if (elem.style && elem.style.pixelWidth) {
        result = elem.style.pixelWidth;
    }
    return parseInt(result);
}
function getObjectHeight(obj)  {
    var elem = getRawObject(obj);
    var result = 0;
    if (elem.offsetHeight) {
        result = elem.offsetHeight;
    } else if (elem.clip && elem.clip.height) {
        result = elem.clip.height;
    } else if (elem.style && elem.style.pixelHeight) {
        result = elem.style.pixelHeight;
    }
    return parseInt(result);
}
function removeNode_( obj ){
	var objecttodestroy;
	if( typeof(obj) == "string" )
		objecttodestroy = document.getElementById( obj );
	else
		objecttodestroy = obj;

	if( objecttodestroy == null )return;
	objecttodestroy.parentNode.removeChild(objecttodestroy);
}

function fixModule( id ){
	try{
		if(!PortletLoader.headersPermanent && Layouter.getActiveTab().mode != "max"){
			PortletLoader.getPortlet(id).hideHeaderIcons();
		}
	}catch(ex){}
}

function setCookie(aName, aValue, aLifetime) {
	 var now = new Date();
	 var expiry = new Date(now.getTime() + aLifetime*24*60*60*1000);
	 if ((aValue != null) && (aValue != ""))
	 document.cookie=aName + "=" + escape(aValue) + "; expires=" + expiry.toGMTString() + "; path=/";
	 return getCookie(aName) != null;
}

function getCookie(aName) {
	 var aStart, anEnd;
	 if (document.cookie) {
	  	aStart = document.cookie.indexOf(aName+"=");
	  	if (aStart < 0) return null;
	  	aStart = document.cookie.indexOf("=", aStart) + 1;
	  	anEnd = document.cookie.indexOf(";", aStart);
	  	if (anEnd < 0) anEnd = document.cookie.length;
	  	return unescape(document.cookie.substring(aStart, anEnd));
	 }
	 else return null;
}

function deleteCookie(aName) {
	 var now = new Date();
	 var expired = new Date(now.getTime() - 2*24*60*60*1000);
	 document.cookie=aName + "=null; expires=" + expired.toGMTString();
}

function statusColumnRenderer(val){
	var retString;
	var imgUrl;
	switch(val){
		case TEST_STATUS_OK_STRING:
			imgUrl="images/snapshot/state-ok.gif";
		break;
		case TEST_STATUS_NA_STRING:
			imgUrl="images/snapshot/state-NA.gif";
		break;
		case TEST_STATUS_NOK_STRING:
			imgUrl="images/snapshot/state-notok.gif";
		break;
	}
	retString="<img title='"+val+"' src='"+imgUrl+"'</img>";
	return retString;
}


function Timer(){
	this.obj = (arguments.length)?arguments[0]:window;
	return this;
}
Timer.prototype.setInterval = function(func, msec){
	var i = Timer.getNew();
	var t = Timer.buildCall(this.obj, i, arguments);
	Timer.set[i].timer = window.setInterval(t,msec);
	return i;
}
Timer.prototype.setTimeout = function(func, msec){
	var i = Timer.getNew();
	Timer.buildCall(this.obj, i, arguments);
	Timer.set[i].timer = window.setTimeout("Timer.callOnce("+i+");",msec);
	return i;
}
Timer.prototype.clearInterval = function(i){
	if(!Timer.set[i]) return;
	window.clearInterval(Timer.set[i].timer);
	Timer.set[i] = null;
}
Timer.prototype.clearTimeout = function(i){
	if(!Timer.set[i]) return;
	window.clearTimeout(Timer.set[i].timer);
	Timer.set[i] = null;
}
Timer.set = new Array();
Timer.buildCall = function(obj, i, args){
	var t = "";
	Timer.set[i] = new Array();
	if(obj != window){
		Timer.set[i].obj = obj;
		t = "Timer.set["+i+"].obj.";
	}
	t += args[0]+"(";
	if(args.length > 2){
			Timer.set[i][0] = args[2];
			t += "Timer.set["+i+"][0]";
			for(var j=1; (j+2)<args.length; j++){
				Timer.set[i][j] = args[j+2];
				t += ", Timer.set["+i+"]["+j+"]";
			}
	}
	t += ");";
	Timer.set[i].call = t;
	return t;
}
Timer.callOnce = function(i){
	if(!Timer.set[i]) return;
	eval(Timer.set[i].call);
	Timer.set[i] = null;
}
Timer.getNew = function(){
	var i = 0;
	while(Timer.set[i]) i++;
	return i;
}


var compare=function(first, second , type){
	if(type==SORT_TYPE_ASC)   return first<second;
	else if(type==SORT_TYPE_DESC)  return first>second;
}
var heapSort=function(numbers, col, type){
 	var i, temp;
  	for (i = parseInt(numbers.length / 2)-1; i >= 0; i--)
    	siftDown(numbers, i, numbers.length-1, col, type);

  	for (i = numbers.length-1; i >= 1; i--){
    	temp = numbers[0];
    	numbers[0] = numbers[i];
    	numbers[i] = temp;
    	siftDown(numbers, 0, i-1, col, type);
  	}
}

var siftDown=function(numbers, root,  bottom, col, type){
  	var done, maxChild, temp;

  	done = 0;
  	while ((root*2 <= bottom) && (done==0)){
    	if (root*2 == bottom)	maxChild = root * 2;
    	else if (!compare(numbers[root * 2][col] , numbers[root * 2 + 1][col], type)) maxChild = root * 2;
    	else	maxChild = root * 2 + 1;
    	if (compare(numbers[root][col], numbers[maxChild][col], type)){
      			temp = numbers[root];
      			numbers[root] = numbers[maxChild];
      			numbers[maxChild] = temp;
      			root = maxChild;
    	}else	done = 1;
  	}
}

var YAHOO = {};
YAHOO.util = {};
var CN = YAHOO.util.Connect;

function ankapFunction( val ){
	alert("aaaaaaaaa");
}



function $id() {
//  for (var i = 0; i < arguments.length; i++){
    var element = arguments[0];
    if (typeof element == 'string')
      element = document.getElementById(element);

	if( !!arguments[1] ){
	  try{
			var obj = element._ext_object;
	  		if( obj != null) element = obj;
	  }catch(ex){}
	}
//    elements.push(element);
//  }
  return element;

}
function changeTestTrendData(portletId){
	var value;
	try{
		value = $id('dataChange_'+ portletId, true).getValue();
	}catch(ex){
		value = $id('dataChange_'+ portletId).value;
	}
	var portlet = PortletLoader.getPortlet(portletId);
	portlet.object.changeDataTime(parseInt(value));
}
function getGridFlashNode( id, data, config, height ){
	return getFlashNode("grid11", id, 'data=' + encode(data).replaceAll('%5C','%5C%5C') + '&config='+ encode(config), height);
}
function getFlashNode(flashName, id, flashVars, height){
	var hasProductInstall = DetectFlashVer(6, 0, 65);
	var hasRequestedVersion = DetectFlashVer(requiredMajorVersion, requiredMinorVersion, requiredRevision);
	var wmodeAttribute = (Browser.isMacFirefox)? "" : "transparent";
	if(typeof height == 'undefined')
		height = "100%";
	else 
		height += "px";
	// Check to see if a player with Flash Product Install is available and the version does not meet the requirements for playback
	if ( hasProductInstall && !hasRequestedVersion ) {
		var MMPlayerType = (Browser.isIE == true) ? "ActiveX" : "PlugIn";
		var MMredirectURL = window.location;
	    document.title = document.title.slice(0, 47) + " - Flash Player Installation";
	    var MMdoctitle = document.title;
	
	return AC_FL_RunContent(
		"src", "playerProductInstall",
		"FlashVars", "MMredirectURL="+MMredirectURL+'&MMplayerType='+MMPlayerType+'&MMdoctitle='+MMdoctitle+"",
		"width", "100%",
		"height", height,
		"align", "middle",
		"id", id,
		"quality", "high",
		"bgcolor", "#869ca7",
		"name", id,
		"allowScriptAccess","samedomain",
		"wmode",wmodeAttribute,
		"type", "application/x-shockwave-flash",
		"pluginspage", "http://www.adobe.com/go/getflashplayer"
	);
} else if (hasRequestedVersion) {
	// if we've detected an acceptable version
	// embed the Flash Content SWF when all tests are passed
	return AC_FL_RunContent(
			"src", Framework.serverPath+"/"+flashName,
			"width", "100%",
			"height", height,
			"align", "middle",
			"id", id,
			"quality", "high",
			"bgcolor", "#869ca7",
			"name", id,
			"flashvars",flashVars,
			"allowScriptAccess","samedomain",
			"wmode",wmodeAttribute,
			"type", "application/x-shockwave-flash",
			"pluginspage", "http://www.adobe.com/go/getflashplayer"
	);
	  } else {  // flash is too old or we can't detect the plugin
	    var alternateContent = 'This content requires the Adobe Flash Player. <a href=http://www.adobe.com/go/getflash/>Get Flash</a>';
	    return alternateContent;
	  }
}
		
function drawExtGrid( config ){
	if( !config.container || !config.id || config.id == '' ){ 
		console.log( 'Invalid arguments' ); return; 
	}
	if( !config.data ) config.data = [];
	if( !config.pageSize ) config.pageSize = config.data.length;
	if( !config.width ) config.width = 600;
	if( !config.height ) config.height = 300;
	
	var isGridEditable = false, fields = [], columns = [], selModel = new Ext.grid.RowSelectionModel();
	if( config.headers ){
		for( var i = 0; i < config.headers.length; i++ ){
			var header = config.headers[i];
			fields[i] = { name: header.fieldName ? header.fieldName : 'field_' + i, mapping: header.index };
			if( header.dateFormat ) fields[i].dateFormat = header.dateFormat;
			var type = 'string';
			if(header.type){
				type = header.type;
			}
			fields[i].type = type;
			
			if( header.sortType ) {fields[i].sortType = header.sortType;}
			
			if (header.hidden) continue;
			var col = { header: header.text, dataIndex: fields[i].name };
			if( header.align ) col.align = header.align;
			if( header.width ) col.width = header.width;
			if( header.style ) col.css = header.style;
			if( header.editor ) {col.editor = header.editor; isGridEditable = true;}
			
			
			col.renderer = function( value, metaData, record, rowIndex, colIndex, store ){
				metaData.attr = 'title="' + value + '"';		
				var curValue = value;
				var curColIndex = config.checkBoxes ? colIndex - 1 : colIndex;
				var currentHeader =  config.headers[curColIndex];
			    if( currentHeader.renderer ) curValue = currentHeader.renderer.call(currentHeader, value, metaData, record, rowIndex, curColIndex, store );
				if( currentHeader.valueColor ) curValue = '<span style="color:' + (currentHeader.valueColor[value] ? currentHeader.valueColor[value] : '#000000' ) + ';">' + curValue + '</span>';
				return curValue;
			}
			
			columns.push(col);
		}
	}
	else { 
		if( config.data.length != 0 ){	
			for( var i = 0; i < config.data[0].length; i++ ){
				fields[i] = 'field_' + i;
				columns[i] = { header: 'Column ' + (i + 1), dataIndex: 'field_' + i };
			}	
		}
	}	
	if( config.checkBoxes ){ 
		if(typeof config.checkBoxHeader != "undefined")
			selModel = new Ext.grid.CheckboxSelectionModel({header:config.checkBoxHeader,id: 'test',width:25,checkOnly:true});
		else
			selModel = new Ext.grid.CheckboxSelectionModel({checkOnly:true});
		columns.splice( 0, 0, selModel ); 
	}
	var grid = Ext.getCmp( config.id );
	var store;
	if(config.groupingField){
		var sortInfo = undefined;
		if(config.sortingField)
			sortInfo = {field: config.sortingField, direction: "ASC"};
		var reader = new Ext.data.ArrayReader({}, fields),
		store =	new Ext.data.GroupingStore({
		        reader: reader,
	            data: config.data,
	            sortInfo:sortInfo,
	            groupField: config.groupingField
		    })

	}
	else if(config.filters){
		store =	new Ext.data.ArrayStore({
				idProperty: config.id+"_reader",
				storeId: config.id+"_store",
		        fields: fields,
	            data: config.data
		    })
	}
	else{
		store = new Ext.data.ArrayStore({
				remoteSort:true,
			    autoDestroy: true,
				proxy: new Ext.ux.data.PagingMemoryProxy( config.data ),
			    fields: fields    
			});					
		store.load( { params: { start: 0, limit: config.pageSize } } ); 
	}
	
	var filters;
	if (config.filters){
		filters = new Ext.ux.grid.GridFilters({autoReload: false, encode:false, local:true, filters: config.filters});    
	}
	
	if( !grid ){
		var gridConf = {
			width: config.width, 
			height: config.height-16, 
			viewConfig: { forceFit: true },
			columnLines: true,
			stripeRows: true,
			border: false,
			selectionMemory: "Enabled",
			id: config.id,
	        store: store,
			sm: selModel,
			colModel: new Ext.grid.ColumnModel({
		         columns: columns,
		    	 defaults: {
		             sortable: true
		    	 }
		    })
	    };
		if (config.groupingField){
			if (typeof config.hideGroupedColumn == "undefined") config.hideGroupedColumn = true;
			if (typeof config.showGroupName == "undefined") config.showGroupName = false;
			gridConf.view = new Ext.grid.GroupingView({
	           					forceFit:true,
					            groupTextTpl: '{text} ({[values.rs.length]} {[values.rs.length > 1 ? "'+Framework.Lang.Items+'" : "'+Framework.Lang.Item+'"]})',
					            hideGroupedColumn: config.hideGroupedColumn ,
					            showGroupName: config.showGroupName  
	        				});
		}
		if (config.filters) {
			gridConf.plugins = [filters];
		}
		
	    grid = isGridEditable ? new Ext.grid.EditorGridPanel(gridConf) : new Ext.grid.GridPanel(gridConf);
	       
	    if( config.data.length > config.pageSize ){ 
			var pagingToolbar =	new Ext.PagingToolbar({
				plugins: filters?[filters]:[],
				displayMsg: '{0} - {1} of {2}',
				pageSize: config.pageSize,
				style: 'padding: 0px',
				id: config.id + '_toolbar',
	            store: store,
				x: 0,
				y: config.height - 16,
				width: config.width - 17,				
				listeners: {
					afterlayout: function( tb ){
						tb.items.each( function( item ){
							switch( item.getXType() ){
								case 'tbbutton' : 
									var tbody = item.el.dom.firstChild;
									tbody.removeChild( tbody.firstChild );
									tbody.removeChild( tbody.lastChild );
									break;
								case 'numberfield' : 
									item.setHeight(15); 
									break;
								case 'tbtext' : 
									item.addClass('extToolbarText');
									break;
							}
						});
					},
					beforerender: function( tb ){
						tb.items.itemAt( 10 ).hide();
					},
					single: true
				},				
	            displayInfo: true
	        });
			new Ext.Panel( { renderTo: config.container, width: config.width, height: config.height, border: false, layout: 'absolute', items: [ grid, pagingToolbar ] } );		
			pagingToolbar.el.setOpacity( 1 );		
		} 
		else {
			grid.render( config.container );
		}
	}
	else{
		grid.getStore().destroy();
		grid.reconfigure( store, grid.getColumnModel() );
		var tb = Ext.getCmp( config.id + '_toolbar' );
		if( tb ) tb.bindStore( store );
	}	
	if(config.selectedRows){
		grid.getSelectionModel().selectRows(config.selectedRows);
		setTimeout("refreshGrid('"+config.id+"')", 100);
	}
	
	if(config.hideHeaders){
		var gridHead = grid.getGridEl().child('div[class=x-grid3-header]');
		gridHead.setStyle('display', 'none');
	}
	
	return grid;
}

function refreshGrid(id){
	Ext.getCmp(id).getView().refresh();
}

function extGridUrlRenderer( value, metaData, record, rowIndex, colIndex  ){
	return '<span style="color:blue;text-decoration:underline;cursor:pointer">' + value + '</span>';
}

function flashCheckboxCallback(functionName, elId, index, checked){
	var el=$id(elId);
	var selfNot=el.self;
	eval("selfNot."+functionName+"("+index+","+checked+")");
}
function flashCheckboxHeaderCallback(functionName,elId, index, checked){
	var el=$id(elId);
	var selfNot=el.self;
	eval("selfNot."+functionName+"("+index+","+checked+")");
}
function flashImageCallback(functionName, elId, index, cell){
	var el=$id(elId);
	var selfNot = el.self;
	eval("selfNot." + functionName + "(" + index + ")");
}
function flashCellCallback(functionName, elId, index, cell){
	var el=$id(elId);
	var selfNot=el.self;
	eval("selfNot." + functionName + "(" + index + ",'" + cell + "')");
}

function toFlexJSONArrayString(arr) {
	var data_ = "[";
	var dataItem;

	for (var i=0; i<arr.length; i++ ){
		var item_ = arr[i];
		dataItem = "";
		dataItem += '{';
		for( var key in item_ )	{
			if( typeof(item_[key]) == "function" )continue;
			if( typeof(item_[key]) == "object" )
				dataItem += '"'+ key +'": '+ toFlexJSONObjectString(item_[key]) +',';
			else
				dataItem += '"'+ key +'": "'+ item_[key] +'",';

		}
		dataItem = dataItem.substr(0, dataItem.length-1);

		dataItem += '}';
		if( i != arr.length -1 )dataItem += ',';
		data_ += dataItem;
	}
	data_ += "]";
	return data_;
}

function  toFlexJSONObjectString(obj) {
	var data_ = "{";
	var dataItem;
	for (var key in obj ){
		if( typeof(obj[key]) == "function" )continue;
		data_ += '"'+ key +'": "'+ obj[key] +'",';
	}
	data_ = data_.substr(0, data_.length-1);
	data_ += '}';
	return data_;
}

function preloadimages(){
	var myimages=new Array();
	for (i=0;i<preloadimages.arguments.length;i++){
		myimages[i]=new Image();
		myimages[i].src=preloadimages.arguments[i];
	}
}


Utils.url_validation = function(theurl) {
     var tomatch= /^((ht|f){1}((tp|tps):[/][/]))?[A-Za-z0-9\.-]{3,}(\.[A-Za-z]{3})?/;
     //   /http:\/\/[A-Za-z0-9\.-]{3,}\.[A-Za-z]{3}/
	 
     if (tomatch.test(theurl)) {
             return true;
     } else {
           return false; 
     }
}
Utils.sort =  function(array, col, type){
	if (type == null) type = SORT_TYPE_ASC;
	for (var i=0; i < array.length-1; i++){
		index = i;
		for (var j=i;j<array.length;j++)
			if (col){
				if ( compare(array[index][col], array[j][col], type) ) index = j;
			}else{
				if ( compare(array[index], array[j], type) ) index = j;
			}
		var a = array[i];
		array[i] = array[index];
		array[index] = a;
	}
}
Utils.sortByFunction =  function(array, comparefunction, type){
	if (type == null) type = SORT_TYPE_ASC;
	for (var i=0; i < array.length-1; i++){
		index = i;
		for (var j=i;j<array.length;j++)
			if ( comparefunction.call(null,array[index], array[j], type) ) index = j;
		var a = array[i];
		array[i] = array[index];
		array[index] = a;
	}
}
Utils.appendZero = function(str, length){
	var zeroStr = "";
	for(var i=0; i < length - str.length; i++){
		zeroStr += "0" 
	}
	zeroStr += str;
	return zeroStr;
}
Utils.getWindowSize = function(){
	var width = 0, height = 0;
 	if( typeof( window.innerWidth ) == 'number' ) {
  		width = window.innerWidth;
  		height = window.innerHeight;
	} else if( document.documentElement && (document.documentElement.clientWidth ||document.documentElement.clientHeight ) ) {
		width = document.documentElement.clientWidth;
		height = document.documentElement.clientHeight;
	} else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
	  	width = document.body.clientWidth;
	  	height = document.body.clientHeight;
 	}
 	return {"width": width, "height": height};
}
Utils.getObjectArrayLength = function(obj){
	var len = 0;
	for( var item in obj ){
		len++;
	}
	return len;
}
Utils.getObjectArrayElementbyIndex = function(objArr, ind){
	var k = 0;
	for(var item in objArr){
	   	if(k == ind){
	   		return 	objArr[item];
	   	}
		k++;
	}
	   			
	return null;
}

function hideCharts(){
	var embeds = document.getElementsByTagName("EMBED");
	for(var i = 0; i < embeds.length; i++){
		embeds[i].style.visibility = "hidden";
	}
}
function showCharts(){
	var embeds = document.getElementsByTagName("EMBED");
	for(var i = 0; i < embeds.length; i++){
		embeds[i].style.visibility = "visible";
	}
}
function showChartsForMsgDialog(){
	var arr = ["datagrid_TagCloud","datagrid_MysWindow"];
	var embeds = document.getElementsByTagName("EMBED");
	for(var i = 0; i < embeds.length; i++){
		for(var j = 0; j < arr.length; j++){
			if(arr[j] == embeds[i].id){
				embeds[i].style.visibility = "visible";
			}
		}
	}
	if($id("cloudWindowBody"))$id("cloudWindowBody").style.overflow = "visible";
}
function attachScriptTagFromPath(path){
	 var oHead = document.getElementsByTagName("head")[0];
	 var oScript = document.createElement('script');
	 oScript.setAttribute('src', path );
	 oScript.setAttribute('type', 'text/javascript');
	 oHead.appendChild(oScript);
	 return oScript;
}
function attachLinkTagFromPath(path){
	 var oHead = document.getElementsByTagName("head")[0];
	 var oLink = document.createElement('link');
	 oLink.setAttribute('href', path );
	 oLink.setAttribute('rel', 'stylesheet' );
	 oLink.setAttribute('type', 'text/css');
	 oHead.appendChild(oLink);
	 return oLink;
}
function removeSWFFromMemoryInIE(id) { 
 	        var obj = $id(id); 
 	        if (obj) { 
 	            for (var i in obj) { 
 	                if (typeof obj[i] == "function") { 
 	                    obj[i] = null; 
 	                } 
 	           } 
 	           obj.parentNode.removeChild(obj); 
 	        } 
} 

function compareDateHours(fromDate, toDate){ // date format 12:08:55
	var fromDateArr = fromDate.split(":");
	var toDateArr = toDate.split(":");
	
	var from = new Date();
	from.setHours(fromDateArr[0]);
	from.setMinutes(fromDateArr[1]);
	from.setSeconds(fromDateArr[2]);
	
	var to = new Date();
	to.setHours(toDateArr[0]);
	to.setMinutes(toDateArr[1]);
	to.setSeconds(toDateArr[2]);
	
	return from <= to;
}

var MONTHS_SHORT = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ];

var getDateStr = function(date){
	if (date == null) return "";
	var hr = ''+(date.getHours()+100);
	var mn = ''+(date.getMinutes()+100);
	var sc = ''+(date.getSeconds()+100);
	var day = ''+(date.getDate()+100);
	var dateStr = day.substring(1,3)+" "+MONTHS_SHORT[date.getMonth()]+
				" "+hr.substring(1,3)+":"+mn.substring(1,3)+":"+sc.substring(1,3);
	return dateStr;
}

var getDateString = function(date){
	if (date == null) return "";
	var month = ''+(date.getMonth()+101);
	var day = ''+(date.getDate()+100);
	var dateStr = date.getFullYear()+"-"+month.substring(1,3)+"-"+day.substring(1,3);
	return dateStr;
}

function getDate (strDate) {
   var parsedDate = strDate.split("-");
   if (parsedDate.length != 3) return null;
   var day, month, year;
   year = parsedDate[0];
   month = parsedDate[1]-1;
   day = parsedDate[2];
   
   if (isNaN(month) || isNaN(year) || isNaN(day)){
   		return null;
   }else{
	   var objDate = new Date ();
	   objDate.setDate(day);
	   objDate.setMonth(month);
	   objDate.setYear(year);
	   return objDate;
   }
   
}

var weekInMsecods = 7*24*60*60*1000;
var getSpecialDaysInMonth = function(year, month, dayOfWeek){
	var dt = new Date();
	dt.setDate(1);
	dt.setYear(year);
	dt.setMonth(month);
	var days = [];
	while(dt.getMonth() == month){
		if (dt.getDay() == dayOfWeek){
			days[days.length] = dt.getDate();
		}
		dt.setDate(dt.getDate()+1);
	}
	return days;
}

Date.prototype.setDay = function(day){
	var incdec = day > this.getDay() ? 1 : -1;
	while(day != this.getDay()){
		this.setTime(this.getTime()+incdec*24*60*60*1000);
	}
}

Date.prototype.getPreviousMonday = function(){
	this.setDay(1);
	this.setTime(this.getTime() - weekInMsecods);
	return this;
}

Date.prototype.addDays = function(days){
	this.setTime(this.getTime() + days*24*60*60*1000);
	return this;
}

Date.prototype.extractDays = function(days){
	this.setTime(this.getTime() - days*24*60*60*1000);
	return this;
}

Date.prototype.toDays = function(){
	var days = parseInt(this.getTime()/1000/60/60/24);
	return days;
}

Date.prototype.getMonthAndDay = function(){
	var months = [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' ];
	return months[ this.getMonth() ] + ' ' + this.getDate();
}

var dateDif = function(date1, date2){
	if (date1 == null || date2 == null) return "";
	var sec = (date2.getTime()-date1.getTime())/1000;
	var h = parseInt(sec/60/60);
	var m = parseInt((sec-h*60*60)/60);
	var s = sec - h*60*60 - m*60;
	var str = (h<10 ? "0"+h : h)+":"+
		   (m<10 ? "0"+m : m)+":"+
		   (s<10 ? "0"+s : s);
	return str;
}

var minToTime = function(minStr){
		var hours = Math.floor(minStr/60);
		var minutes = minStr%60;
		var time = hours + "h " + minutes+"m";
		if(hours==0){
		time= minutes+"m";
		}
		if(minutes==0){
		time = hours + "h";
		}
		if(minStr==0){
		time= minutes+"m";
		}
		return time;
	}

 Platform= {
	LINUX_32:"32",
	LINUX_32_:"linux32",
	LINUX_64:"64",
	LINUX_64_:"linux64",
	WINDOWS_32:"win32",
	WINDOWS_64:"win64",
	SUN_32:"Sun8632",
	SUN_64:"Sun8664",
	SPARC_32:"SunSparc32",
	SPARC_64:"SunSparc64",
	FREE_BSD_X86:"FBSD32",
	FREE_BSD_X64:"FBSD64",
	FEDORA_10_32:"FDR32",
	FEDORA_10_64:"FDR64",
	UBUNTU_810_32:"UBUNTU81032",
	UBUNTU_810_64:"UBUNTU81064",
	DEBIAN_LENNY_32:"LENNY32",
	DEBIAN_LENNY_64:"LENNY64",
	
	isLinux32:function(platform){
		return Platform.LINUX_32==(platform) || Platform.LINUX_32_==(platform);
	},
	isLinux64:function(platform){
		return Platform.LINUX_64==(platform) || Platform.LINUX_64_==(platform);
	},
	isWindows32:function(platform){
		return Platform.WINDOWS_32==(platform);
	},
	isWindows64:function(platform){
		return Platform.WINDOWS_64==(platform);
	},
	isSun32:function(platform){
		return Platform.SUN_32==(platform);
	},
	isSun64:function(platform){
		return Platform.SUN_64==(platform);
	},
	isSparc32:function(platform){
		return Platform.SPARC_32==(platform);
	},
	isSparc64:function(platform){
		return Platform.SPARC_64==(platform);
	},
	isWindows:function(platform){
		return Platform.isWindows32(platform) || Platform.isWindows64(platform);
	},
	isLinux:function(platform){
		return Platform.isLinux32(platform) || Platform.isLinux64(platform); 
	},
	isSolaris:function(platform){
		return Platform.isSparc32(platform) || Platform.isSparc64(platform) || Platform.isSun32(platform) || Platform.isSun64(platform);
	},
	
	isFreeBSD64:function(platform){
		return Platform.FREE_BSD_X64==platform;
	},
	
	isFreeBSD32:function(platform){
		return Platform.FREE_BSD_X86==platform;
	},
	
	isFreeBSD:function(platform){
		return Platform.isFreeBSD32(platform) || Platform.isFreeBSD64(platform);
	},
	isFedora1064:function(platform){
		return Platform.FEDORA_10_64==platform;
	},
	
	isFedora1032:function(platform){
		return Platform.FEDORA_10_32==platform;
	},
	
	isFedora10:function(platform){
		return Platform.isFedora1032(platform) || Platform.isFedora1064(platform);
	},
	isUbuntu81064:function(platform){
		return Platform.UBUNTU_810_64==platform;
	},
	
	isUbuntu81032:function(platform){
		return Platform.UBUNTU_810_32==platform;
	},
	
	isUbuntu810:function(platform){
		return Platform.isUbuntu81032(platform) || Platform.isUbuntu81064(platform);
	},
	isLenny64:function(platform){
		return Platform.DEBIAN_LENNY_64==platform;
	},
	
	isLenny32:function(platform){
		return Platform.DEBIAN_LENNY_32==platform;
	},
	
	isLenny:function(platform){
		return Platform.isLenny32(platform) || Platform.isLenny64(platform);
	},
	
	
	
	getName: function(platform){
		if (Platform.isWindows(platform)){
			return "Windows";
		}
		else if (Platform.isLinux(platform)){
			return "Linux";
		}
		else if(Platform.isSolaris(platform)){
			return "OpenSolaris";
		}
		else if(Platform.isFreeBSD(platform)){
			return "FreeBSD";
		}
		else if(Platform.isFedora10(platform)){
			return "Fedora";
		}
		else if(Platform.isUbuntu810(platform)){
			return "Ubuntu";
		}
		else if(Platform.isLenny(platform)){
			return "Debian Lenny";
		}
	}

}

var roundToDecimals = function(v, decimals, noCommas) { 
       if (decimals == null)
           decimals = 2;
       var x = Math.pow(10, decimals);
       var s = String(Math.round(v * x) / x); 
       var p = s.indexOf('.');
       if (p < 0) {
           p = s.length;
           s += '.';
       }
       for (var i = s.length - p - 1; i < decimals; i++)
           s += '0';
       if (noCommas == true) // Treats null as false.
           return s;
       var arr    = s.replace('-', '').split('.');
       var result = [];
       var first  = true;
       while (arr[0].length > 0) { // LHS of decimal point.
           if (!first)
               result.unshift(',');
           result.unshift(arr[0].slice(-3));
           arr[0] = arr[0].slice(0, -3);
           first = false;
       }
       if (decimals > 0) {
           result.push('.');
           var first = true;
           while (arr[1].length > 0) { // RHS of decimal point.
               if (!first)
                   result.push(',');
               result.push(arr[1].slice(0, 3));
               arr[1] = arr[1].slice(3);
               first = false;
           }
       }
       if (v < 0)
           return '-' + result.join('');
       return result.join('');
   }

   
function typeOf(value) {
    var s = typeof value;
    if (s === 'object') {
        if (value) {
            if (value instanceof Array) {
                s = 'array';
            }
        } else {
            s = 'null';
        }
    }
    return s;
}

String.prototype.quote = function () {
    var c, i, l = this.length, o = '"';
    for (i = 0; i < l; i += 1) {
        c = this.charAt(i);
        if (c >= ' ') {
            if (c === '\\' || c === '"') {
                o += '\\';
            }
            o += c;
        } else {
            switch (c) {
            case '\b':
                o += '\\b';
                break;
            case '\f':
                o += '\\f';
                break;
            case '\n':
                o += '\\n';
                break;
            case '\r':
                o += '\\r';
                break;
            case '\t':
                o += '\\t';
                break;
            default:
                c = c.charCodeAt();
                o += '\\u00' + Math.floor(c / 16).toString(16) +
                    (c % 16).toString(16);
            }
        }
    }
    return o + '"';
};


Object.exclude = function(obj, key) {
	var a = {};
	for ( var prop in obj ) {
    	if (prop != key) {
	       a[prop] = obj[prop];
	    }
    }
    return a;
};

Object.toJSON = function(object) {
    var type = typeOf(object);
    switch (type) {
      case 'undefined':
      case 'function':
      case 'unknown': return;
      case 'boolean': 
      case 'number': return object.toString();
      case 'string': return object.quote();
    }

    if (object === null) return 'null';

	if (type == 'array'){
		var results = [];
	    for (var property in object) {
	      var value = Object.toJSON(object[property]);
	      if (typeof value != "undefined")
	        results.push(value);
	    }
	
	    return '[' + results.join(', ') + ']';
	    
	}else{
	    var results = [];
	    for (var property in object) {
	      var value = Object.toJSON(object[property]);
	      if (typeof value != "undefined")
	        results.push(property.toString() + ': ' + value);
	    }
	
	    return '{' + results.join(', ') + '}';
    }
}

function getSelectedRadioByName(elName){
	var elements = document.getElementsByName(elName);
	if(elements.length != undefined){
		for(var i = 0; i < elements.length; i++){
			if(elements[i].checked) return elements[i];
		}
	}else{
		return elements;
	}
	return null;
	
}
var mailfilter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
var numberFilter = /^[0-9]{1,}$/;
var oIdFilter = /^.*\.([a-zA-Z0-9]+)$/;

var validateElements = function(inputs){
	for(var i=0; i<inputs.length; i++){
		var value = inputs[i].value.trim();
		var type = inputs[i].getAttribute("dataType");
		if (value == "") {
			if (inputs[i].getAttribute("required") == "true" ||
				inputs[i].getAttribute("required") == true)
				return Framework.Lang.fillInRequiredFields;
		}else if ((type == "num" && !numberFilter.test(value)) ||
				  (type == "mail" && !mailfilter.test(value))
				 
				  ){
			return Framework.Lang.notValid + " "+inputs[i].getAttribute("label");
		}
	}
	return "success";
}

var strictStringRegexp = new RegExp("^[\\w-_]{1,}$");

var validateParam = function(param, value){
	if (value == ""){
		if (param.required == true)
			return Framework.Lang.fillInRequiredFields;
	}
	else if ((param.dataType == "num" && !numberFilter.test(value)) ||
			 (param.dataType == "mail" && !mailfilter.test(value)) ||
			 (param.dataType == "oid" && !oIdFilter.test(value)) ||
			 (param.dataType == "string" && !strictStringRegexp.test(value))
			 ){
		return Framework.Lang.notValid + " "+param.label;
	}
	return "success";
}

var getAddHTML = function(moduleName,moduleParams, rowName, hide){
	var str = "";
	for (var key in moduleParams){
		var param = moduleParams[key];
		
		if (param.hidden == true || param.active == false ||
			param.add == false || key == "agentKey" || key == "name") continue;
		var elem = "";
		if (param.uiElement == "select"){
			var onchange = "";
			if (param.onchange){
				onchange="onchange='"+param.onchange.callback+"(\""+param.onchange.param+"\")'";
			}
			elem = "<select "+onchange+" name='"+key+"_"+moduleName+"'"+(param.multi?" MULTIPLE ":"")+(param.size?" size="+param.size:"")+" style='width:"+INPUT_WIDTH+"'>";
			for(var j=0;j<param.valueList.length;j++){
				var val, label, 
					valObject = param.valueList[j];
				if (valObject.label){
					val = valObject.value;
					label = valObject.label;
				} else if (valObject.value){
					val = label = valObject.value;
				} else {
					val = label = valObject;
				}
				elem += "<option value='"+val+"'>"+label+"</option>";
			}
			elem += "</select>";
		}else if (param.uiElement == "input"){
			var val = param.defaultValue ? 'value="'+param.defaultValue+'"' : "";
			var vtype = param.dataType == "num" ? 'vtype=num' : "";
			var inputType = param.inputType ? 'type='+param.inputType : "";
			var browseImg='';
			
			if(param.browse){
				browseImg='<img class="browseImg" onclick="'+param.browse.callback+'" src="images/browse.png" />'
			}
			elem = '<input required="'+param.required+'" dataType="'+param.dataType+'" '+val+' '+vtype+' ' + inputType +' name="'+key+"_"+moduleName+'" style="width:'+INPUT_WIDTH+'" />'+browseImg;
		}
		str += '<tr name="'+rowName+'" '+(hide ? 'style="display:none;"' : "")+'>'+
					'<td colspan=2 class="formLabel">' + param.label + ':</td>'+
					'<td>'+elem+'</td>'+
					
					'<td>'+(param.required == true ? "*" : "")+'</td>'+
				'</tr>';
	}
	return str;
}

function snmpVersionChanged(moduleName){
	var version = DialogWindow.getFormData()["version_"+moduleName];
	var form = DialogWindow.getFormObject();
	var config = Framework.Modules[moduleName+"Widget"].moduleParams;
	for (param in config){
		var elem = form[param+"_"+moduleName];
		if (elem){
			var show = config[param].versions.consistOf(version);
			parentElement(elem, "tr").style.display = show ? "" : "none";
		}
	}
}

function parentElement(obj, parentType){
	var par = obj.parentNode;
	parentType = parentType.toLowerCase();
	var ind = 0;
	while (par.tagName.toLowerCase() != parentType && ind<1000){
		par = par.parentNode;
		ind++;
	}
	return ind<1000 ? par : null;
}

function loadScript(url, callback){

    var script = document.createElement("script")
    script.type = "text/javascript";

    if (script.readyState){  //IE
        script.onreadystatechange = function(){
            if (script.readyState == "loaded" ||
                    script.readyState == "complete"){
                script.onreadystatechange = null;
                callback();
            }
        };
    } else {  //Others
        script.onload = function(){
            callback();
        };
    }

    script.src = url;
    document.getElementsByTagName("head")[0].appendChild(script);
}
////////////////////////////////////////////////////////////JQUERY//////////////////////////////
var Tree = function(){
	this.addTree=function(cont){
		$(cont).treeview({
		control: "#treecontrol",
		persist: "cookie",
		cookieId: "treeview-black"
	});
	}
	
	this.addLazyLoadingTree=function(cont,url){
		$(cont).treeview({
		url: url,
		persist: "cookie",
		cookieId: "treeview-black"
	});
	}
	
	}



function getQueryString(params){
	var data = "";
	for (var key in params){
		data += encodeURIComponent(key)+"="+encodeURIComponent(params[key])+"&";
	}
	data = data.substr(0, data.length-1);
	return data;
}
//////////////////////////////////////////////////////////////////////////////////////////////

var getPermissionsContent = function( extraId, permsToCheck ){

	var permissions = [
				{
					title: Framework.Lang.monitorsList.ExternalMonitors,
					perms: [
						{ text: Framework.Lang.permissions.addRemove,       	id: "49", key:  "R_manage Tests"  },
						{ text: Framework.Lang.permissions.activateSuspend, 	id: "37", key:  "R_suspend_resume test"  },
						{ text: Framework.Lang.permissions.manageReports,   	id: "40", key:  "R_manage Reports" },
						{ text: Framework.Lang.permissions.manageNotifications, id: "50", key:  "R_notification test"  },
						{ text: Framework.Lang.permissions.manageMaintenance, 	id: "38", key:  "R_maintenance test" },
						{ text: Framework.Lang.permissions.manageContacts, 	id: "57", key:  "R_manage Notifications" } 
					]	
				},
				{
					title: Framework.Lang.monitorsList.InternalMonitors,
					perms: [
						{ text: Framework.Lang.permissions.addRemove, 			id: "51", key:  "R_manage Agents"  },
						{ text: Framework.Lang.permissions.manageReports, 		id: "52", key:  "R_manage AgentReports" },
						{ text: Framework.Lang.permissions.manageNotifications, id: "53", key:  "R_notification agent" }
					]	
				},	
				{
					title: Framework.Lang.transactions,
					perms: [
						{ text: Framework.Lang.permissions.addRemove, 			id: "54", key:  "R_manage Transactions"  },
						{ text: Framework.Lang.permissions.activateSuspend, 	id: "62", key:  "R_suspend_resume transaction"  },
						{ text: Framework.Lang.permissions.manageReports, 		id: "55", key:  "R_manage TransactionReports" },
						{ text: Framework.Lang.permissions.manageMaintenance, 	id: "61", key:  "R_maintenance transaction" },
						{ text: Framework.Lang.permissions.manageNotifications, id: "56", key:  "R_notification transaction" }
					]	
				}	
			];
	
	var FULL_READONLY = "R_FULLACCESS";
	var FULL_READONLY_ID = "82";
				
	var extraPermissionsContent = "";
	var extraPlan = false;
	for(var i = 0; i < permissions.length; i++){
		extraPermissionsContent += "<fieldset style='padding:2px;margin:5px'><legend> " + permissions[i].title + "</legend>";
		var perms = permissions[i].perms;
		for(var j = 0; j < perms.length; j++)
			extraPermissionsContent += "<input disabledSpecString " + ( permsToCheck != null && permsToCheck[perms[j].key] && (extraPlan=true) ? 'checked' : '' ) + " type='checkbox' permId='" + perms[j].id + "'/> " + perms[j].text + "<br>";				
		extraPermissionsContent += "</fieldset>";
	}
	
	extraPermissionsContent = extraPermissionsContent.replaceAll("disabledSpecString",(!extraPlan? "disabled" : ""));
	var content = '';
	content = "<table width='" + ( Browser.isIE ? 97 : 100 ) + "%' class='text' cellspacing=4 id='" + extraId + "'><tbody>"+
					"<tr>"+
					"<td style='padding-left:16px'><span style='width:7px'></span><input permId='" + FULL_READONLY_ID + "'" + ( !extraPlan && permsToCheck != null && permsToCheck[FULL_READONLY]? "checked" : "" ) + " onchange='for(var i = 3; i <= 16; i++){$id(\"" + extraId + "\").getElementsByTagName(\"input\")[i].changeDisabled(true);}'  type='radio' name='" + extraId + "'/> " + Framework.Lang.permissions.full + "<br></td>"+
					"</tr>" +
					"<tr>"+
						"<td style='padding-left:16px'><span style='width:7px'></span><input " + ( !extraPlan && (permsToCheck == null || !permsToCheck[FULL_READONLY]) ? "checked" : "" ) + " onchange='for(var i = 3; i <= 16; i++){$id(\"" + extraId + "\").getElementsByTagName(\"input\")[i].changeDisabled(true);}'  type='radio' name='" + extraId + "'/> " + Framework.Lang.permissions.readonly + "<br></td>"+
					"</tr>"+
					"<tr>"+
						"<td><fieldset><legend><input " + ( extraPlan ? "checked" : "" ) + " onchange='for(var i = 3; i <= 16; i++){$id(\"" + extraId + "\").getElementsByTagName(\"input\")[i].changeDisabled(false);}' type='radio' name='" + extraId + "'/> " + Framework.Lang.permissions.extraPermissions + "</legend>";
	
	content += extraPermissionsContent + "</fieldset></td></tr></tbody></table>";
	return content;
}

function sendGetAPIRequest(url, action, reqParams, handler, args){
	reqParams["action"]=action;
	reqParams["apikey"]=User.apikey;
	reqParams["version"]="2";
	reqParams["recordApiCall"]="false";
	var dataStr = "";
	for( var key in reqParams){
		dataStr += encodeURIComponent(key)+"="+encodeURIComponent(reqParams[key])+"&";
	}
	Request.sendGET(url+"?"+dataStr, handler, args);
}

function sendPostAPIRequest(url, action, reqParams, handler){
		var curTime = new Date();		
		var offset = curTime.getTimezoneOffset();
		curTime.setMinutes(curTime.getMinutes()+parseInt(offset)); //GMT
		
		reqParams["action"]=action;
		reqParams["apikey"]=User.apikey;
		reqParams["timestamp"]=dateFormat(curTime, "yyyy-mm-dd HH:MM:ss");
		reqParams["version"]="2";
		reqParams["recordApiCall"]="false";

		var sortedKeys = [];
		for( var key in reqParams){
			sortedKeys.push(key);
		}
		Utils.sort(sortedKeys, null, SORT_TYPE_DESC);

		var paramValueStr = "";
		var dataStr = "";
		for (var i=0; i<sortedKeys.length;i++){
			var key = sortedKeys[i];
			paramValueStr += key;
			paramValueStr += reqParams[key];
			dataStr += encodeURIComponent(key)+"="+encodeURIComponent(reqParams[key])+"&";
		}
		var checksumBytes = Crypto.HMAC(Crypto.SHA1, paramValueStr, User.secretkey, { asBytes: true });
		var checksum = Crypto.util.bytesToBase64(checksumBytes);
		dataStr += "checksum="+encodeURIComponent(checksum);
		Request.sendPOST(url, dataStr, handler);
}

function sendPostAPIRequestForConsoleTool(apiKey,secretKey,url, action, reqParams,reqType, handler){
	var curTime = new Date();
	var offset = curTime.getTimezoneOffset();
	curTime.setMinutes(curTime.getMinutes()+parseInt(offset)); //GMT	
	reqParams["action"]=action;
	reqParams["apikey"]=apiKey;
	reqParams["timestamp"]=dateFormat(curTime, "yyyy-mm-dd HH:MM:ss");
	reqParams["version"]="2";
	reqParams["recordApiCall"]="false";

	var sortedKeys = [];
	for( var key in reqParams){
		sortedKeys.push(key);
	}
	Utils.sort(sortedKeys, null, SORT_TYPE_DESC);

	var paramValueStr = "";
	var dataStr = "";
	for (var i=0; i<sortedKeys.length;i++){
		var key = sortedKeys[i];
		paramValueStr += key;
		paramValueStr += reqParams[key];
		dataStr += encodeURIComponent(key)+"="+encodeURIComponent(reqParams[key])+"&";
	}
	var checksumBytes = Crypto.HMAC(Crypto.SHA1, paramValueStr, secretKey, { asBytes: true });
	var checksum = Crypto.util.bytesToBase64(checksumBytes);
	dataStr += "checksum="+encodeURIComponent(checksum);
	switch(reqType){
	case "GET":
		Request.sendGET(url+'?' +dataStr, handler);
	break;
	case "POST":
		Request.sendPOST(url, dataStr, handler);
	break;
	}
	
}


function getAgentDialog(){
	Controller.showDialogPanel( 'Agent',{width:400, height:300});
	GENERAL_SETTINGS.REDIRECT_TO_DOWNLOAD_PAGE = true;	
}

function isVisible(obj)
{
    if (obj == document) return true
    
    if (!obj) return false
    if (!obj.parentNode) return false
    if (obj.style) {
        if (obj.style.display == 'none') return false
        if (obj.style.visibility == 'hidden') return false
    }
    
    //Try the computed style in a standard way
    if (window.getComputedStyle) {
        var style = window.getComputedStyle(obj, "")
        if (style.display == 'none') return false
        if (style.visibility == 'hidden') return false
    }
    
    //Or get the computed style using IE's silly proprietary way
    var style = obj.currentStyle
    if (style) {
        if (style['display'] == 'none') return false
        if (style['visibility'] == 'hidden') return false
    }
    
    return isVisible(obj.parentNode)

}

function isEmptyObject(obj) {
    for(var prop in obj) {
        if(obj.hasOwnProperty(prop))
            return false;
    }
    return true;	
}

function getViewportSize() {
	var viewportwidth;
	var viewportheight;
	// the more standards compliant browsers (mozilla/netscape/opera/IE7) use window.innerWidth and window.innerHeight
	if (typeof window.innerWidth != 'undefined')
	{
		viewportwidth = window.innerWidth,
	    viewportheight = window.innerHeight
	}
	// IE6 in standards compliant mode (i.e. with a valid doctype as the first line in the document)
	else if (typeof document.documentElement != 'undefined'
			&& typeof document.documentElement.clientWidth !=
	     'undefined' && document.documentElement.clientWidth != 0)
	{
		viewportwidth = document.documentElement.clientWidth,
		viewportheight = document.documentElement.clientHeight
	}
	// older versions of IE
	else
	{
		viewportwidth = document.getElementsByTagName('body')[0].clientWidth,
	    viewportheight = document.getElementsByTagName('body')[0].clientHeight
	}
	return {w: viewportwidth, h: viewportheight};
}

function  getMultilineComboSelectedValues(ob){
	var selected = new Array(); 
	for (var i = 0; i < ob.options.length; i++) 
		if (ob.options[ i ].selected) 
			selected.push(ob.options[ i ].value);
	
	return selected;
}

/*
 * Crypto-JS v2.0.0
 * http://code.google.com/p/crypto-js/
 * Copyright (c) 2009, Jeff Mott. All rights reserved.
 * http://code.google.com/p/crypto-js/wiki/License
 */
(function(){var c="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var d=window.Crypto={};var a=d.util={rotl:function(h,g){return(h<<g)|(h>>>(32-g))},rotr:function(h,g){return(h<<(32-g))|(h>>>g)},endian:function(h){if(h.constructor==Number){return a.rotl(h,8)&16711935|a.rotl(h,24)&4278255360}for(var g=0;g<h.length;g++){h[g]=a.endian(h[g])}return h},randomBytes:function(h){for(var g=[];h>0;h--){g.push(Math.floor(Math.random()*256))}return g},bytesToWords:function(h){for(var k=[],j=0,g=0;j<h.length;j++,g+=8){k[g>>>5]|=h[j]<<(24-g%32)}return k},wordsToBytes:function(i){for(var h=[],g=0;g<i.length*32;g+=8){h.push((i[g>>>5]>>>(24-g%32))&255)}return h},bytesToHex:function(g){for(var j=[],h=0;h<g.length;h++){j.push((g[h]>>>4).toString(16));j.push((g[h]&15).toString(16))}return j.join("")},hexToBytes:function(h){for(var g=[],i=0;i<h.length;i+=2){g.push(parseInt(h.substr(i,2),16))}return g},bytesToBase64:function(h){if(typeof btoa=="function"){return btoa(e.bytesToString(h))}for(var g=[],l=0;l<h.length;l+=3){var m=(h[l]<<16)|(h[l+1]<<8)|h[l+2];for(var k=0;k<4;k++){if(l*8+k*6<=h.length*8){g.push(c.charAt((m>>>6*(3-k))&63))}else{g.push("=")}}}return g.join("")},base64ToBytes:function(h){if(typeof atob=="function"){return e.stringToBytes(atob(h))}h=h.replace(/[^A-Z0-9+\/]/ig,"");for(var g=[],j=0,k=0;j<h.length;k=++j%4){if(k==0){continue}g.push(((c.indexOf(h.charAt(j-1))&(Math.pow(2,-2*k+8)-1))<<(k*2))|(c.indexOf(h.charAt(j))>>>(6-k*2)))}return g}};d.mode={};var b=d.charenc={};var f=b.UTF8={stringToBytes:function(g){return e.stringToBytes(unescape(encodeURIComponent(g)))},bytesToString:function(g){return decodeURIComponent(escape(e.bytesToString(g)))}};var e=b.Binary={stringToBytes:function(j){for(var g=[],h=0;h<j.length;h++){g.push(j.charCodeAt(h))}return g},bytesToString:function(g){for(var j=[],h=0;h<g.length;h++){j.push(String.fromCharCode(g[h]))}return j.join("")}}})();

/*
 * Crypto-JS v2.0.0
 * http://code.google.com/p/crypto-js/
 * Copyright (c) 2009, Jeff Mott. All rights reserved.
 * http://code.google.com/p/crypto-js/wiki/License
 */
(function(){var c="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var d=window.Crypto={};var a=d.util={rotl:function(h,g){return(h<<g)|(h>>>(32-g))},rotr:function(h,g){return(h<<(32-g))|(h>>>g)},endian:function(h){if(h.constructor==Number){return a.rotl(h,8)&16711935|a.rotl(h,24)&4278255360}for(var g=0;g<h.length;g++){h[g]=a.endian(h[g])}return h},randomBytes:function(h){for(var g=[];h>0;h--){g.push(Math.floor(Math.random()*256))}return g},bytesToWords:function(h){for(var k=[],j=0,g=0;j<h.length;j++,g+=8){k[g>>>5]|=h[j]<<(24-g%32)}return k},wordsToBytes:function(i){for(var h=[],g=0;g<i.length*32;g+=8){h.push((i[g>>>5]>>>(24-g%32))&255)}return h},bytesToHex:function(g){for(var j=[],h=0;h<g.length;h++){j.push((g[h]>>>4).toString(16));j.push((g[h]&15).toString(16))}return j.join("")},hexToBytes:function(h){for(var g=[],i=0;i<h.length;i+=2){g.push(parseInt(h.substr(i,2),16))}return g},bytesToBase64:function(h){if(typeof btoa=="function"){return btoa(e.bytesToString(h))}for(var g=[],l=0;l<h.length;l+=3){var m=(h[l]<<16)|(h[l+1]<<8)|h[l+2];for(var k=0;k<4;k++){if(l*8+k*6<=h.length*8){g.push(c.charAt((m>>>6*(3-k))&63))}else{g.push("=")}}}return g.join("")},base64ToBytes:function(h){if(typeof atob=="function"){return e.stringToBytes(atob(h))}h=h.replace(/[^A-Z0-9+\/]/ig,"");for(var g=[],j=0,k=0;j<h.length;k=++j%4){if(k==0){continue}g.push(((c.indexOf(h.charAt(j-1))&(Math.pow(2,-2*k+8)-1))<<(k*2))|(c.indexOf(h.charAt(j))>>>(6-k*2)))}return g}};d.mode={};var b=d.charenc={};var f=b.UTF8={stringToBytes:function(g){return e.stringToBytes(unescape(encodeURIComponent(g)))},bytesToString:function(g){return decodeURIComponent(escape(e.bytesToString(g)))}};var e=b.Binary={stringToBytes:function(j){for(var g=[],h=0;h<j.length;h++){g.push(j.charCodeAt(h))}return g},bytesToString:function(g){for(var j=[],h=0;h<g.length;h++){j.push(String.fromCharCode(g[h]))}return j.join("")}}})();(function(){var f=Crypto,a=f.util,b=f.charenc,e=b.UTF8,d=b.Binary;var c=f.SHA1=function(i,g){var h=a.wordsToBytes(c._sha1(i));return g&&g.asBytes?h:g&&g.asString?d.bytesToString(h):a.bytesToHex(h)};c._sha1=function(o){if(o.constructor==String){o=e.stringToBytes(o)}var v=a.bytesToWords(o),x=o.length*8,p=[],r=1732584193,q=-271733879,k=-1732584194,h=271733878,g=-1009589776;v[x>>5]|=128<<(24-x%32);v[((x+64>>>9)<<4)+15]=x;for(var z=0;z<v.length;z+=16){var E=r,D=q,C=k,B=h,A=g;for(var y=0;y<80;y++){if(y<16){p[y]=v[z+y]}else{var u=p[y-3]^p[y-8]^p[y-14]^p[y-16];p[y]=(u<<1)|(u>>>31)}var s=((r<<5)|(r>>>27))+g+(p[y]>>>0)+(y<20?(q&k|~q&h)+1518500249:y<40?(q^k^h)+1859775393:y<60?(q&k|q&h|k&h)-1894007588:(q^k^h)-899497514);g=h;h=k;k=(q<<30)|(q>>>2);q=r;r=s}r+=E;q+=D;k+=C;h+=B;g+=A}return[r,q,k,h,g]};c._blocksize=16})();

/*
 * Crypto-JS v2.0.0
 * http://code.google.com/p/crypto-js/
 * Copyright (c) 2009, Jeff Mott. All rights reserved.
 * http://code.google.com/p/crypto-js/wiki/License
 */
(function(){var e=Crypto,a=e.util,b=e.charenc,d=b.UTF8,c=b.Binary;e.HMAC=function(l,m,k,h){if(m.constructor==String){m=d.stringToBytes(m)}if(k.constructor==String){k=d.stringToBytes(k)}if(k.length>l._blocksize*4){k=l(k,{asBytes:true})}var g=k.slice(0),n=k.slice(0);for(var j=0;j<l._blocksize*4;j++){g[j]^=92;n[j]^=54}var f=l(g.concat(l(n.concat(m),{asBytes:true})),{asBytes:true});return h&&h.asBytes?f:h&&h.asString?c.bytesToString(f):a.bytesToHex(f)}})();

/*
var hmac = Crypto.HMAC(Crypto.SHA1, "Message", "Secret Passphrase");

var hmacBytes = Crypto.HMAC(Crypto.SHA1, "Message", "Secret Passphrase", { asBytes: true });
var hmacString = Crypto.HMAC(Crypto.SHA1, "Message", "Secret Passphrase", { asString: true });
*/

/*
 * Date Format 1.2.3
 * (c) 2007-2009 Steven Levithan <stevenlevithan.com>
 * MIT license
 *
 * Includes enhancements by Scott Trenda <scott.trenda.net>
 * and Kris Kowal <cixar.com/~kris.kowal/>
 *
 * Accepts a date, a mask, or a date and a mask.
 * Returns a formatted version of the given date.
 * The date defaults to the current date/time.
 * The mask defaults to dateFormat.masks.default.
 
 * src: http://blog.stevenlevithan.com/archives/date-time-format
 */

var dateFormat = function () {
	var	token = /d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\1?|[LloSZ]|"[^"]*"|'[^']*'/g,
		timezone = /\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g,
		timezoneClip = /[^-+\dA-Z]/g,
		pad = function (val, len) {
			val = String(val);
			len = len || 2;
			while (val.length < len) val = "0" + val;
			return val;
		};

	// Regexes and supporting functions are cached through closure
	return function (date, mask, utc) {
		var dF = dateFormat;

		// You can't provide utc if you skip other args (use the "UTC:" mask prefix)
		if (arguments.length == 1 && Object.prototype.toString.call(date) == "[object String]" && !/\d/.test(date)) {
			mask = date;
			date = undefined;
		}

		// Passing date through Date applies Date.parse, if necessary
		date = date ? new Date(date) : new Date;
		if (isNaN(date)) throw SyntaxError("invalid date");

		mask = String(dF.masks[mask] || mask || dF.masks["default"]);

		// Allow setting the utc argument via the mask
		if (mask.slice(0, 4) == "UTC:") {
			mask = mask.slice(4);
			utc = true;
		}

		var	_ = utc ? "getUTC" : "get",
			d = date[_ + "Date"](),
			D = date[_ + "Day"](),
			m = date[_ + "Month"](),
			y = date[_ + "FullYear"](),
			H = date[_ + "Hours"](),
			M = date[_ + "Minutes"](),
			s = date[_ + "Seconds"](),
			L = date[_ + "Milliseconds"](),
			o = utc ? 0 : date.getTimezoneOffset(),
			flags = {
				d:    d,
				dd:   pad(d),
				ddd:  dF.i18n.dayNames[D],
				dddd: dF.i18n.dayNames[D + 7],
				m:    m + 1,
				mm:   pad(m + 1),
				mmm:  dF.i18n.monthNames[m],
				mmmm: dF.i18n.monthNames[m + 12],
				yy:   String(y).slice(2),
				yyyy: y,
				h:    H % 12 || 12,
				hh:   pad(H % 12 || 12),
				H:    H,
				HH:   pad(H),
				M:    M,
				MM:   pad(M),
				s:    s,
				ss:   pad(s),
				l:    pad(L, 3),
				L:    pad(L > 99 ? Math.round(L / 10) : L),
				t:    H < 12 ? "a"  : "p",
				tt:   H < 12 ? "am" : "pm",
				T:    H < 12 ? "A"  : "P",
				TT:   H < 12 ? "AM" : "PM",
				Z:    utc ? "UTC" : (String(date).match(timezone) || [""]).pop().replace(timezoneClip, ""),
				o:    (o > 0 ? "-" : "+") + pad(Math.floor(Math.abs(o) / 60) * 100 + Math.abs(o) % 60, 4),
				S:    ["th", "st", "nd", "rd"][d % 10 > 3 ? 0 : (d % 100 - d % 10 != 10) * d % 10]
			};

		return mask.replace(token, function ($0) {
			return $0 in flags ? flags[$0] : $0.slice(1, $0.length - 1);
		});
	};
}();

// Some common format strings
dateFormat.masks = {
	"default":      "ddd mmm dd yyyy HH:MM:ss",
	shortDate:      "m/d/yy",
	mediumDate:     "mmm d, yyyy",
	longDate:       "mmmm d, yyyy",
	fullDate:       "dddd, mmmm d, yyyy",
	shortTime:      "h:MM TT",
	mediumTime:     "h:MM:ss TT",
	longTime:       "h:MM:ss TT Z",
	isoDate:        "yyyy-mm-dd",
	isoTime:        "HH:MM:ss",
	isoDateTime:    "yyyy-mm-dd'T'HH:MM:ss",
	isoUtcDateTime: "UTC:yyyy-mm-dd'T'HH:MM:ss'Z'"
};

// Internationalization strings
dateFormat.i18n = {
	dayNames: [
		"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat",
		"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"
	],
	monthNames: [
		"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec",
		"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"
	]
};

// For convenience...
Date.prototype.format = function (mask, utc) {
	return dateFormat(this, mask, utc);
};
var Uploader = {

    frame : function(c) {

        var n = 'f' + Math.floor(Math.random() * 99999);
        var d = document.createElement('DIV');
        d.innerHTML = '<iframe style="display:none" src="about:blank" id="'+n+'" name="'+n+'" onload="Uploader.loaded(\''+n+'\', \''+c.id+'\')"></iframe>';
        document.body.appendChild(d);

        var i = $id(n);
        if (c && typeof(c.onComplete) == 'function') {
            i.onComplete = c.onComplete;
        }

        return n;
    },

    form : function(f, name) {
        f.setAttribute('target', name);
    },

    submit : function(f, c) {
        Uploader.form(f, Uploader.frame(c));
        if (c && typeof(c.onStart) == 'function') {
            return c.onStart(c.id);
        } else {
            return true;
        }
    },

    loaded : function(id, qId) {
        var i = $id(id);
        if (typeof(i.onComplete) == 'function') {
            i.onComplete(qId);
        }
    }
}

var date_sort_desc = function (a, b) {
	 var date1 = getUTCDateFromString(a[0],'long');
	 var date2 =  getUTCDateFromString(b[0],'long');
	  if (date1 > date2) return -1;
	  if (date1 < date2) return 1;
	  return 0;
	};
	var date_sort_asc = function (a, b) {
		 var date1 = getUTCDateFromString(a[0],'long');
		 var date2 =  getUTCDateFromString(b[0],'long'); 
		if (date1 > date2) return 1;
		  if (date1 < date2) return -1;
		  return 0;
		};
function getImgSize(imgSrc){
	    var imgWH={};
		var newImg = new Image();
		newImg.src = imgSrc;
		var height = newImg.height;
		var width = newImg.width;
		imgWH.width =width;
		imgWH.height =height;
		return imgWH;
}
function convertStringToValidFileName(name){
	var specialCharacters = ['\\','/', ":","*", "?","<",">","|", '"', " "];
	for(var i = 0; i< specialCharacters.length; i++){
		name = name.replaceAll(specialCharacters[i],"_");
	}
	return name;
}

function inverse(obj){
	return obj == 1 ? 0 : 1;
}

function validateHost(host){
	if(host.length > 255){
		return Framework.Lang.MysqlAgent.hostNameLengthRestriction;
	}
	var validIPAddressRegex = /^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/;
	var validHostRegex = /^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])(\.([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9]))*(\.[a-zA-Z]{2,})$/;
	if(host != "localhost" && !validHostRegex.test(host) && !validIPAddressRegex.test(host)){
		return Framework.Lang.MysqlAgent.incorrectHostMessage;
	}
	else{
		return "valid";
	}
}
function createNoDataMask(el){
	var transpDiv = document.createElement("DIV");
	transpDiv.style.width = (el.offsetWidth)+"px";
	transpDiv.style.height = (el.offsetHeight)+"px";
	transpDiv.className = "no_data_bg";
	
	transpDiv.innerHTML = '<div style="position:relative;top:20%"><img src="images/no_data_text.png"  /><br/><img src="images/no_data_clock.png"/></div>';
	
	el.appendChild(transpDiv);
	
}

function dateRangeFunc(fromElId, toElId, id, fromDate, toDate){
	
	// Date picker				
	var fromdateobj = new Ext.form.DateField({
		format: 'm/d/Y', //YYYY-MMM-DD
		fieldLabel: '',
		id: 'startdt_'+id,
		name: 'startdt_'+id,
		width:100,
		allowBlank:false,
		vtype: 'daterange',
		editable:false,
        endDateField: 'enddt_'+id// id of the 'To' date field
	});
	
	var todateobj = new Ext.form.DateField({
		format: 'm/d/Y', //YYYY-MMM-DD
		fieldLabel: '',
		id: 'enddt_'+id,
		name: 'enddt_'+id,
		width:100,
		allowBlank:false,
		vtype: 'daterange',
		editable:false,
        startDateField: 'startdt_'+id// id of the 'From' date field
	});
	
	fromdateobj.render(fromElId);
	fromdateobj.setValue(fromDate);
	todateobj.render(toElId);
	todateobj.setValue(toDate);
}
var DataType  = {
	BOOLEAN : 1,
	INTEGER : 2, 
	FLOAT : 4,
	STRING : 3
}
var getNoDataHTML = function(){
	return '<p style="text-align: center; color: #666666; line-height: 175px">No data to display</p>';
}

////// For IE negative values
function checkHeightFromNegative(el, heightIndent){
	return ( el.offsetHeight <= 0 ?  1 : (heightIndent != undefined ? el.offsetHeight - heightIndent : el.offsetHeight));
}
function checkWidthFromNegative(el, widthIndent){
	return ( el.offsetWidth <= 0 ?  1 : (widthIndent != undefined ? el.offsetWidth - widthIndent : el.offsetWidth));
}

function checkStaticHeightFromNegative(height, heightIndent){
	var height = (height <= 0 ? 1  : (heightIndent != undefined ? height - heightIndent : height));
	return  (height <= 0 ? 1 : height);
}
function checkStaticWidthFromNegative(width, widthIndent){
	var  width =  (width <= 0 ? 1  : (widthIndent != undefined ? width - widthIndent : width));
	return (width <= 0 ? 1 : width);
}
///////////////////
