connection.on('initActivity', function(payload) {
        var eventDefinitionKey;
        var webhookUrl;

        if (payload) {
            toJbPayload = payload;
            console.log('payload',payload);
            
            eventDefinitionKey = toJbPayload['arguments'].execute.inArguments[0].eventDefinitionKey;
            webhookUrl = toJbPayload['arguments'].execute.inArguments[0].webhookUrl;
            
            $('#txtWebhookUrl').val(webhookUrl);         
        }
      
        // setup availabe events
		$.get( "/zapier/eventdefinitions", function( data ) {
		    $.each(data, function(i,item) {
                $("#selEventDefinitionKey").append("<option value="+item.eventDefinitionKey+">"+item.name+"</option>");
            });
            $('#selEventDefinitionKey').find('option[value='+ eventDefinitionKey +']').attr('selected', 'selected');	         
		});
      	         
        // set state of the form
        if (!eventDefinitionKey) {
            connection.trigger('updateButton', { button: 'next', enabled: false });
        }
        if (!webhookUrl) {
            connection.trigger('updateButton', { button: 'next', enabled: false });
        }	
		gotoStep(step);
        
    });
    function onRender() {
        connection.trigger('ready');

        connection.trigger('requestTokens');
        connection.trigger('requestEndpoints');

        // Disable the next button if a value isn't selected
        $('#selectPriority').change(function() {
            var priority = getPriority();
            connection.trigger('updateButton', { button: 'next', enabled: Boolean(priority) });
        });
    };
 function gotoStep(step) {
     $('.step').hide();
     switch(step) {
         case 1:
             $('#step1').show();
             connection.trigger('updateButton', { button: 'next', text: 'done', enabled: validValues() });
             connection.trigger('updateButton', { button: 'back', visible: false });
             break;  
         case 2:
             save();
             break;
     }
 };
    function onRender() {
		console.log('onRender');
		
        connection.trigger('ready');
        connection.trigger('requestTokens');
        connection.trigger('requestEndpoints');

        // Disable the next button if we don't have valid values
        $('#txtWebhookUrl').on('input',function(e) {
            connection.trigger('updateButton', { button: 'next', enabled: validValues() });
        });
        $('#selEventDefinitionKey').change(function() {
            connection.trigger('updateButton', { button: 'next', enabled: validValues() });
        });
    };
	$(window).ready(function() {
		// Notify Journey Builder our window is loaded
		connection.trigger('ready');

		// Allow Marketers to configure the value
		$oes.removeAttr('disabled');
	});
    connection.on('initActivity', function(payload) {
        var priority;

        if (payload) {
            toJbPayload = payload;
            console.log('payload',payload);

			//merge the array of objects.
			var aArgs = toJbPayload['arguments'].execute.inArguments;
			var oArgs = {};
			for (var i=0; i<aArgs.length; i++) {
				for (var key in aArgs[i]) {
					oArgs[key] = aArgs[i][key];
				}
			}
			//oArgs.priority will contain a value if this activity has already been configured:
			priority = oArgs.priority || toJbPayload['configurationArguments'].defaults.priority;
        }

		$.get( "/version", function( data ) {
			$('#version').html('Version: ' + data.version);
		});

        // If there is no priority selected, disable the next button
        if (!priority) {
            connection.trigger('updateButton', { button: 'next', enabled: false });
        }

		$('#selectPriority').find('option[value='+ priority +']').attr('selected', 'selected');
		gotoStep(step);

    });
	connection.on('updateStep', function(step) {
		/*
        console.log( 'Journey Builder sent Pine Ridge Trigger an updateStep notice with the following data' );
        if( step ) {
            console.log( 'STEP: ', step );
        }
        */
		var value = $oes.val();
		if (!value) {
			// Notify user they need to select a value 
			$('#pineRidgeTriggerConfigError').html('<strong style="color: red;">You must enter something</strong>');
		} else {
			// Successful change
			// When we're all done, define our payload
			data = {
				originEventStart: $oes.val()
			};

			uiPayload = {
				options: data,
				description: 'This is a pine ridge trigger configuration instance.'
			};

			etPayload = {
				filter: '<FilterDefinition Source=\'pineRidgeNTO\'><ConditionSet Operator=\'AND\' ConditionSetName=\'Grouping\'><Condition ID=\'ece15cd0-8893-e311-b943-78e3b50b4f00\' isParam=\'false\' Operator=\'Equal\' conditionValid=\'1\'><Value><![CDATA[' + data.originEventStart + ']]></Value></Condition></ConditionSet></FilterDefinition>'
			};

			connection.trigger('save', uiPayload, etPayload);
		}
	});
 function gotoStep(step) {
     $('.step').hide();
     switch(step) {
         case 1:
             $('#step1').show();
             connection.trigger('updateButton', { button: 'next', text: 'next', enabled: Boolean(getPriority()) });
             connection.trigger('updateButton', { button: 'back', visible: false });
             break;
         case 2:
             $('#step2').show();
             $('#showPriority').html(getPriority());
             connection.trigger('updateButton', { button: 'back', visible: true });
             connection.trigger('updateButton', { button: 'next', text: 'done', visible: true });
             break;
         case 3: // Only 2 steps, so the equivalent of 'done' - send off the payload
             save();
             break;
     }
 };
    connection.on('requestPayload', function() {
	 var payload = {};
 
        payload.options = {
           
        };

		//TODO: Shouldn't this come from the data?
        payload.flowDisplayName = 'Hello World';
 
        connection.trigger('getPayload', payload);
    });
    function save() {
        var eventDefinitionKey = getEventDefinitionKey();
        var customObjectKey = "{{Event." + eventDefinitionKey + "._CustomObjectKey}}";
        var webhookUrl = getWebhookUrl();
        
        toJbPayload['arguments'].execute.inArguments[0].eventDefinitionKey = eventDefinitionKey;
        toJbPayload['arguments'].execute.inArguments[0].customObjectKey = customObjectKey;
        toJbPayload['arguments'].execute.inArguments[0].webhookUrl = webhookUrl;
		
        //this is required by JB to set the activity as Configured.
		toJbPayload.metaData.isConfigured = true;  
        connection.trigger('updateActivity', toJbPayload);
    }; 
    function save() {

        var value = getPriority();

        // toJbPayload is initialized on populateFields above.  Journey Builder sends an initial payload with defaults
        // set by this activity's config.json file.  Any property may be overridden as desired.
        //toJbPayload.name = "my activity";

		//this will be sent into the custom activity body within the inArguments array.
        toJbPayload['arguments'].execute.inArguments.push({"priority": value});

		/*
        toJbPayload['metaData'].things = 'stuff';
        toJbPayload['metaData'].icon = 'path/to/icon/set/from/iframe/icon.png';
        toJbPayload['configurationArguments'].version = '1.1'; // optional - for 3rd party to track their customActivity.js version
        toJbPayload['configurationArguments'].partnerActivityId = '49198498';
        toJbPayload['configurationArguments'].myConfiguration = 'configuration coming from iframe';
		*/

		toJbPayload.metaData.isConfigured = true;  //this is required by JB to set the activity as Configured.
        connection.trigger('updateActivity', toJbPayload);
    };
 $('#selectPriority').change(function() {
     var priority = getPriority();
     connection.trigger('updateButton', { button: 'next', enabled: Boolean(priority) });
 });
 $('#txtWebhookUrl').on('input',function(e) {
     connection.trigger('updateButton', { button: 'next', enabled: validValues() });
 });
 connection.on('clickedBack', function() {
     step--;
     gotoStep(step);
     connection.trigger('ready');
 });
 connection.on('clickedNext', function() {
     step++;
     gotoStep(step);
     connection.trigger('ready');
 });
 $('#selEventDefinitionKey').change(function() {
     connection.trigger('updateButton', { button: 'next', enabled: validValues() });
 });
define( function( require ) {
	var Postmonger = require( 'postmonger' );
	var $ = require( 'vendor/jquery.min' );

    var connection = new Postmonger.Session();
	var tokens;
	var endpoints;

    $(window).ready(function() {
        connection.trigger('ready');
		connection.trigger('requestTokens');
		connection.trigger('requestEndpoints');
    })

	// This listens for Journey Builder to send tokens
	// Parameter is either the tokens data or an object with an
	// "error" property containing the error message
	connection.on('getTokens', function( data ) {
		if( data.error ) {
			console.error( data.error );
		} else {
			tokens = data;
		}
	});

	// This listens for Journey Builder to send endpoints
	// Parameter is either the endpoints data or an object with an
	// "error" property containing the error message
	connection.on('getEndpoints', function( data ) {
		if( data.error ) {
			console.error( data.error );
		} else {
			endpoints = data;
		}
	});

    connection.on('requestPayload', function() {
	 var payload = {};
 
        payload.options = {
           
        };

		//TODO: Shouldn't this come from the data?
        payload.flowDisplayName = 'Hello World';
 
        connection.trigger('getPayload', payload);
    });

	// Journey Builder broadcasts this event to us after this module
	// sends the "ready" method. JB parses the serialized object which
	// consists of the Event Data and passes it to the
	// "config.js.save.uri" as a POST
    connection.on('populateFields', function(payload) {
    });

	// Trigger this method when updating a step. This allows JB to
	// update the wizard.
    //connection.trigger('updateStep', nextStep);

	// When everything has been configured for this activity, trigger
	// the save:
	// connection.trigger('save', 
});
define(function(require) {
	// Dependencies
	var Postmonger = require('postmonger');

	// Vars
	var connection = new Postmonger.Session();
	var $oes = $('#originEventStart');
	var data, uiPayload, etPayload;

	// Once we know the window is loaded
	$(window).ready(function() {
		// Notify Journey Builder our window is loaded
		connection.trigger('ready');

		// Allow Marketers to configure the value
		$oes.removeAttr('disabled');
	});

	connection.on('updateStep', function(step) {
		/*
        console.log( 'Journey Builder sent Pine Ridge Trigger an updateStep notice with the following data' );
        if( step ) {
            console.log( 'STEP: ', step );
        }
        */
		var value = $oes.val();
		if (!value) {
			// Notify user they need to select a value 
			$('#pineRidgeTriggerConfigError').html('<strong style="color: red;">You must enter something</strong>');
		} else {
			// Successful change
			// When we're all done, define our payload
			data = {
				originEventStart: $oes.val()
			};

			uiPayload = {
				options: data,
				description: 'This is a pine ridge trigger configuration instance.'
			};

			etPayload = {
				filter: '<FilterDefinition Source=\'pineRidgeNTO\'><ConditionSet Operator=\'AND\' ConditionSetName=\'Grouping\'><Condition ID=\'ece15cd0-8893-e311-b943-78e3b50b4f00\' isParam=\'false\' Operator=\'Equal\' conditionValid=\'1\'><Value><![CDATA[' + data.originEventStart + ']]></Value></Condition></ConditionSet></FilterDefinition>'
			};

			connection.trigger('save', uiPayload, etPayload);
		}
	});

	// Populate Fields is sent from Journey Builder to this Custom
	// Trigger UI via Postmonger (iframe-to-iframe communication).
	connection.on('populateFields', function(options) {
		//console.log( 'Journey Builder sent Pine Ridge Trigger a populateFields notice with the following data' );
		if (options) {
			//console.log( 'OPTIONS: ', options );
			// Persist
			$('#originEventStart').val(options.originEventStart);
		}
	});

	/*
FROM: https://jbprod.exacttargetapps.com/rest/v1/contact/definition/?oauth_token=NONE&_=1392167891474
{
    id: "eae15cd0-8893-e311-b943-78e3b50b4f00"
    key: "pineRidgeNTO"
    name: "pineRidgeNTO"
    -attributes: [
        -{
            id: "ebe15cd0-8893-e311-b943-78e3b50b4f00"
            name: "alternativeEmail"
            key: "alternativeEmail"
            fieldType: 7
            isHidden: false
            isNullable: false
            isReadonly: false
            ordinal: 0
            sourceCustomObjectFieldId: "22b22851-c11d-41d3-916b-f3d50c1fbe5b"
        }
        -{
            id: "ece15cd0-8893-e311-b943-78e3b50b4f00"
            name: "originEventStart"
            key: "originEventStart"
            fieldType: 11
            isHidden: false
            isNullable: true
            isReadonly: false
            ordinal: 1
            sourceCustomObjectFieldId: "404de0d1-0578-4769-beb1-984412da3e14"
        }
        -{
            id: "ede15cd0-8893-e311-b943-78e3b50b4f00"
            name: "EventInstanceID"
            key: "EventInstanceID"
            fieldType: 11
            isHidden: false
            isNullable: false
            isReadonly: false
            ordinal: 2
            sourceCustomObjectFieldId: "b0e2c2b6-a3c0-4c93-866c-0880b3e7f4d9"
        }
    ]
}
*/
});
    $(window).ready(function() {
        connection.trigger('ready');
		connection.trigger('requestTokens');
		connection.trigger('requestEndpoints');
    })
define( function( require ) {

    'use strict';

	var Postmonger = require( 'postmonger' );
	var $ = require( 'vendor/jquery.min' );

    var connection = new Postmonger.Session();
    var toJbPayload = {};
    var step = 1;
	var tokens;
	var endpoints;

    $(window).ready(onRender);

    connection.on('initActivity', function(payload) {
        var priority;

        if (payload) {
            toJbPayload = payload;
            console.log('payload',payload);

			//merge the array of objects.
			var aArgs = toJbPayload['arguments'].execute.inArguments;
			var oArgs = {};
			for (var i=0; i<aArgs.length; i++) {
				for (var key in aArgs[i]) {
					oArgs[key] = aArgs[i][key];
				}
			}
			//oArgs.priority will contain a value if this activity has already been configured:
			priority = oArgs.priority || toJbPayload['configurationArguments'].defaults.priority;
        }

		$.get( "/version", function( data ) {
			$('#version').html('Version: ' + data.version);
		});

        // If there is no priority selected, disable the next button
        if (!priority) {
            connection.trigger('updateButton', { button: 'next', enabled: false });
        }

		$('#selectPriority').find('option[value='+ priority +']').attr('selected', 'selected');
		gotoStep(step);

    });

    connection.on('requestedTokens', function(data) {
		if( data.error ) {
			console.error( data.error );
		} else {
			tokens = data;
		}
    });

    connection.on('requestedEndpoints', function(data) {
		if( data.error ) {
			console.error( data.error );
		} else {
			endpoints = data;
		}
    });

    connection.on('clickedNext', function() {
        step++;
        gotoStep(step);
        connection.trigger('ready');
    });

    connection.on('clickedBack', function() {
        step--;
        gotoStep(step);
        connection.trigger('ready');
    });

    function onRender() {
        connection.trigger('ready');

        connection.trigger('requestTokens');
        connection.trigger('requestEndpoints');

        // Disable the next button if a value isn't selected
        $('#selectPriority').change(function() {
            var priority = getPriority();
            connection.trigger('updateButton', { button: 'next', enabled: Boolean(priority) });
        });
    };

    function gotoStep(step) {
        $('.step').hide();
        switch(step) {
            case 1:
                $('#step1').show();
                connection.trigger('updateButton', { button: 'next', text: 'next', enabled: Boolean(getPriority()) });
                connection.trigger('updateButton', { button: 'back', visible: false });
                break;
            case 2:
                $('#step2').show();
                $('#showPriority').html(getPriority());
                connection.trigger('updateButton', { button: 'back', visible: true });
                connection.trigger('updateButton', { button: 'next', text: 'done', visible: true });
                break;
            case 3: // Only 2 steps, so the equivalent of 'done' - send off the payload
                save();
                break;
        }
    };

    function getPriority() {
        return $('#selectPriority').find('option:selected').attr('value').trim();
    };

    function save() {

        var value = getPriority();

        // toJbPayload is initialized on populateFields above.  Journey Builder sends an initial payload with defaults
        // set by this activity's config.json file.  Any property may be overridden as desired.
        //toJbPayload.name = "my activity";

		//this will be sent into the custom activity body within the inArguments array.
        toJbPayload['arguments'].execute.inArguments.push({"priority": value});

		/*
        toJbPayload['metaData'].things = 'stuff';
        toJbPayload['metaData'].icon = 'path/to/icon/set/from/iframe/icon.png';
        toJbPayload['configurationArguments'].version = '1.1'; // optional - for 3rd party to track their customActivity.js version
        toJbPayload['configurationArguments'].partnerActivityId = '49198498';
        toJbPayload['configurationArguments'].myConfiguration = 'configuration coming from iframe';
		*/

		toJbPayload.metaData.isConfigured = true;  //this is required by JB to set the activity as Configured.
        connection.trigger('updateActivity', toJbPayload);
    };

});
define( function( require ) {
    'use strict';
    
	var Postmonger = require('postmonger');
	var $ = require('jquery');

  	var connection = new Postmonger.Session();
    var toJbPayload = {};
    var step = 1; 
	var tokens;
	var endpoints;
	
    $(window).ready(onRender);

    connection.on('initActivity', function(payload) {
        var eventDefinitionKey;
        var webhookUrl;

        if (payload) {
            toJbPayload = payload;
            console.log('payload',payload);
            
            eventDefinitionKey = toJbPayload['arguments'].execute.inArguments[0].eventDefinitionKey;
            webhookUrl = toJbPayload['arguments'].execute.inArguments[0].webhookUrl;
            
            $('#txtWebhookUrl').val(webhookUrl);         
        }
      
        // setup availabe events
		$.get( "/zapier/eventdefinitions", function( data ) {
		    $.each(data, function(i,item) {
                $("#selEventDefinitionKey").append("<option value="+item.eventDefinitionKey+">"+item.name+"</option>");
            });
            $('#selEventDefinitionKey').find('option[value='+ eventDefinitionKey +']').attr('selected', 'selected');	         
		});
      	         
        // set state of the form
        if (!eventDefinitionKey) {
            connection.trigger('updateButton', { button: 'next', enabled: false });
        }
        if (!webhookUrl) {
            connection.trigger('updateButton', { button: 'next', enabled: false });
        }	
		gotoStep(step);
        
    });

    connection.on('requestedTokens', function(data) {
		if( data.error ) {
			console.error( data.error );
		} else {
            console.log(data);
			tokens = data;
		}        
    });

    connection.on('requestedEndpoints', function(data) {
		if( data.error ) {
			console.error( data.error );
		} else {
            console.log(data);
			endpoints = data;
		}        
    });

    connection.on('clickedNext', function() {
        step++;
        gotoStep(step);
        connection.trigger('ready');
    });

    connection.on('clickedBack', function() {
        step--;
        gotoStep(step);
        connection.trigger('ready');
    });

    function onRender() {
		console.log('onRender');
		
        connection.trigger('ready');
        connection.trigger('requestTokens');
        connection.trigger('requestEndpoints');

        // Disable the next button if we don't have valid values
        $('#txtWebhookUrl').on('input',function(e) {
            connection.trigger('updateButton', { button: 'next', enabled: validValues() });
        });
        $('#selEventDefinitionKey').change(function() {
            connection.trigger('updateButton', { button: 'next', enabled: validValues() });
        });
    };

    function gotoStep(step) {
        $('.step').hide();
        switch(step) {
            case 1:
                $('#step1').show();
                connection.trigger('updateButton', { button: 'next', text: 'done', enabled: validValues() });
                connection.trigger('updateButton', { button: 'back', visible: false });
                break;  
            case 2:
                save();
                break;
        }
    };

    function getEventDefinitionKey() {
        return $('#selEventDefinitionKey').find('option:selected').attr('value').trim();
    }

    function getWebhookUrl() {
        return $.trim($("#txtWebhookUrl").val())
    }
    
    function validValues() {
        return getEventDefinitionKey() != "select" && getWebhookUrl().length > 0;
    }

    function save() {
        var eventDefinitionKey = getEventDefinitionKey();
        var customObjectKey = "{{Event." + eventDefinitionKey + "._CustomObjectKey}}";
        var webhookUrl = getWebhookUrl();
        
        toJbPayload['arguments'].execute.inArguments[0].eventDefinitionKey = eventDefinitionKey;
        toJbPayload['arguments'].execute.inArguments[0].customObjectKey = customObjectKey;
        toJbPayload['arguments'].execute.inArguments[0].webhookUrl = webhookUrl;
		
        //this is required by JB to set the activity as Configured.
		toJbPayload.metaData.isConfigured = true;  
        connection.trigger('updateActivity', toJbPayload);
    }; 
    	 
});