(function executeRule(current, previous) { /*null when async*/

	//Map the SN priority with OpsRamp priority
	var snowPriority = current.priority;
	var opsRampPriority = snowPriority;
	if(snowPriority == '1') {//Critical in SN
		opsRampPriority = 'Urgent';//Critical in OpsRamp
	} else if(snowPriority == '2') {//High in SN
		opsRampPriority = 'High';//High in OpsRamp
	} else if(snowPriority == '3') {//Medium in SN
		opsRampPriority = 'Normal';//Normal in OpsRamp
	} else if(snowPriority == '4') {//Low in SN
		opsRampPriority = 'Low';//Low in OpsRamp
	} else if(snowPriority == '5') {//Low in SN
		opsRampPriority = 'Very Low';//Low in OpsRamp
	} 

	//gs.addErrorMessage('OpsRamp Priority: ' + opsRampPriority);
	//gs.addErrorMessage('SNOW Priority: ' + snowPriority);

	//Map the SN status with OpsRamp status
	var snowState = current.state;
	var opsRampStatus = snowState;
	if(snowState == '1') {//New in SN
		opsRampStatus = 'New';//New in OpsRamp
	} else if(snowState == '2') {//In Progress in SN
		opsRampStatus = 'Open';//Open in OpsRamp
	} else if(snowState == '3') {//On Hold in SN
		opsRampStatus = 'On Hold';//On Hold in OpsRamp
	} else if(snowState == '6') {//Resolved in SN
		opsRampStatus = 'Resolved';//Closed in OpsRamp
	}else if(snowState == '7') {//Closed in SN
		opsRampStatus = 'Closed';//Closed in OpsRamp
	}

	//gs.addErrorMessage('OpsRamp Status: ' + opsRampStatus);
	//gs.addErrorMessage('SNOW State: ' + snowState);

	//Update incident properties
	//gs.addErrorMessage('OpsRamp incident ID: ' + current.u_opsramp_incident_id);
	//gs.addErrorMessage('OpsRamp client ID: ' + current.company.u_opsramp_client_id);
	//gs.addErrorMessage('SNOW incident number: ' + current.number);

	//If it is Partner level integration, SNOW company is mapped to OpsRamp client
	//OpsRamp client id should be in available in SNOW company - Create custom field in Company 
	//and add the mapped OpsRamp client id here
	//var opsRampClientId = current.company.u_opsramp_client_id;

	//If it is client level integration, hard code the OpsRamp client id here
	var opsRampClientId = 'client_392';

	if(!JSUtil.nil(current.u_opsramp_incident_id)) {//Update incident
		var uRestMsg = new sn_ws.RESTMessageV2('See & Try OpsRamp Incident REST', 'Update Incident');

		uRestMsg.setStringParameter('tenantId',opsRampClientId);
		uRestMsg.setStringParameter('incidentId',current.u_opsramp_incident_id);
		uRestMsg.setStringParameter('priorityToken',opsRampPriority);
		uRestMsg.setStringParameter('statusToken',opsRampStatus);

		//If work notes added?
		//gs.addErrorMessage("Work notes changed? : " + current.work_notes.changes());
		if(current.work_notes.getJournalEntry(1) && current.work_notes.changes()){	
			var content = current.work_notes.getJournalEntry(1);

			content = content.replace(/(?:rn|r|n)/g, 'n');
			content = content.replace(/(?:t)/g, 't');
			//gs.addErrorMessage("Work notes: " + content);
			uRestMsg.setStringParameter('responseToken',content);
		}

		//Execute script
		var uRestMsgResponse = uRestMsg.executeAsync();
		//var opsRampUpdateIncJSON = new JSON().decode(uRestMsgResponse.getBody());
		//gs.addErrorMessage("Status Code: " + uRestMsgResponse.getStatusCode());
		//gs.addErrorMessage("Error Msg: " + uRestMsgResponse.getErrorMessage());	

	} else if(snowState == '1') { //New incident
		//gs.addErrorMessage('New incident creation...');
		var cRestMsg = new sn_ws.RESTMessageV2('See & Try OpsRamp Incident REST', 'Create Incident');

		cRestMsg.setStringParameter('tenantId',opsRampClientId);

		//Set SN incident short description as OpsRamp subject
		subject = current.short_description;
		subject = subject.replace(/(?:rn|r|n)/g, 'n');
		subject = subject.replace(/(?:t)/g, 't');
		cRestMsg.setStringParameter('subjectToken',subject);

		//Set SN incident description as OpsRamp description
		description = current.description;
		description = description.replace(/(?:rn|r|n)/g, 'n');
		description = description.replace(/(?:t)/g, 't');
		cRestMsg.setStringParameter('descriptionToken',description);

		cRestMsg.setStringParameter('extTicketIdToken',current.sys_id);
		cRestMsg.setStringParameter('priorityToken',opsRampPriority);

		var cRestMsgResponse = cRestMsg.executeAsync();

		//Read OpsRamp incidentId from response and update to SN incident.
		//gs.addErrorMessage('responseBody: ' + cRestMsgResponse.getBody());
		//gs.log('OpsRamp create incident response body: ' + cRestMsgResponse.getBody());
		var opsRampCreateIncJSON = new JSON().decode(cRestMsgResponse.getBody());
		var inc = new GlideRecord('incident');
		inc.get(current.sys_id);
		inc.u_opsramp_incident_id=opsRampCreateIncJSON.id;
		inc.updateWithReferences();
	}
})(current, previous);