(function() {
	var _isRoot = false;
	var _isIndex = false;
	var _routedEventObject = null;
	
	function init() {
		if (document.location.href.substring(0, 7) != 'file://') return;
		
		// this is true if this is the root item
		var _isRoot = (window == parent);

		var mainFrame = document.getElementById('mainFrame');

		_isIndex = mainFrame && true; // one way to cast it to a bool		
		
		var eventDiv = document.getElementById('axureEventReceiverDiv');
		if (eventDiv) {
			_routedEventObject = document.createEvent('Event');
			_routedEventObject.initEvent('axureMessageReceiverEvent', true, true);
		} else  {
			return;
		}		
		
		if (_isRoot && _isIndex) {
			chrome.extension.sendRequest({
				message : "showIcon"
			});
		} else if (_isRoot) {
			chrome.extension.sendRequest({
				message : "hideIcon"
			});
		}
		
		if (_isIndex) { initIndex(); }
		
		var eventSenderDiv = document.getElementById('axureEventSenderDiv');
		eventSenderDiv.addEventListener('axureMessageSenderEvent', handleSentEvent);
		
		sendMessage(JSON.stringify({
			message:'initialize'
		}));
	}
	init();

	function handleSentEvent() {
		var eventSenderDiv = document.getElementById('axureEventSenderDiv');
		var message = eventSenderDiv.innerText;
		
		chrome.extension.sendRequest({
			message : "routeEvent",
			data : message
		});
	}
	
	function initIndex() {
		document.body.setAttribute('pluginDetected', 'true');
	}

	function initPage() {}
	
	function sendMessage(requestJson) {
		var axureEventDiv = document.getElementById('axureEventReceiverDiv');
		if (axureEventDiv) {
			axureEventDiv.innerText = requestJson;
			axureEventDiv.dispatchEvent(_routedEventObject);
		}
	}

	function onRequest(request, sender, callback) {
		if (request.message == 'routeEvent') {
			sendMessage(request.data);
		}
	};
	chrome.extension.onRequest.addListener(onRequest);
})();