var ext_sequence = 0;


var analyzeImage = function(/*Image*/ img, /*callback*/ success, /*callback*/ failure){
    if (img && img.width==20){
    	if (success) {
        success();
    	}
    }else{
    	if (failure) {
        failure();
    	}
    }

}

function resetSequenceFromExternalBrowser ( /*callback*/ success, /*callback*/ failure ) {
	ext_sequence = 0;
	sendMessageFromExternalBrowser('dispatcher', 'reset-sequence');
}

function sendMessageFromExternalBrowser ( listener , operation , params, /*callback*/ success, /*callback*/ failure ) {
	if ( params ) {
		if ( typeof(params) == 'object' ) {
			_sendMessageFromExternalBrowser(listener + ';' + operation + ';' + JSONUtils.toJSONString(params), success, failure);

		}
		else if ( typeof(params) == 'array' ) {
			_sendMessageFromExternalBrowser(listener + ';' + operation + ';' + JSONUtils.toJSONString(params), success, failure);

		}
		else if ( typeof(params) == 'string' && params.length != 0) {
			_sendMessageFromExternalBrowser(listener + ';' + operation + ';' + params, success, failure);
		}
	}
	else {
		_sendMessageFromExternalBrowser(listener + ';' + operation, success, failure);
	}
}
var _timeoutCounter = 15;
function _failureOnError(realMessage, success, failure) {
	if( ! _timeoutCounter ) return
	_timeoutCounter--
	var img = new Image();

	if (failure) {
		img.onerror = failure;
		img.onabort = failure;
	}

	if(_browser == "Safari") {
		img.onload = function() {
				if (img.width == 0) {
					if (failure) {
						failure();
					}
				} else {
					analyzeImage(img, success, failure);
				}
			}
	} else {
		img.onload  = function(){
				analyzeImage(img, success, failure);
			}
	}

	try {
		img.src = 'http://localhost:45101/setinfo?name=AZMSG&value='+realMessage+"&rand=" + (new Date()).getTime() + ((_browser == "Chrome") ? "&img_type=png" : "" );

	} catch(e) {
		if (failure) {
			failure();
		}
	}
}

function _sendMessageFromExternalBrowser ( message, /*callback*/ success, /*callback*/ failure ) {
	ext_sequence++;

    var realMessage = encodeURIComponent('AZMSG' + ';' + ext_sequence  + ';' + message);
    debugMagnet( '_sendMessageFromExternalBrowser() :: ' + realMessage )
	var img = new Image();

	img.onerror = function () { _failureOnError(realMessage, success, failure); };
	img.onabort = function () { _failureOnError(realMessage, success, failure); };

	//Image loading error detection fails on safari
	//So we have to use the width trick
	//alert(_browser);
	if(_browser == "Safari") {
		img.onload = function() {
				if(img.width == 0) {
					_failureOnError(realMessage, success, failure);
				} else {
					analyzeImage(img, success, failure);
				}
			}
	} else {
		img.onload  = function(){analyzeImage(img,success,failure);}
		debugMagnet( '_sendMessageFromExternalBrowser() :: ' + 'onload set')
	}

	try {
		//TODO insert logic to detect port => will have to be done through other images ?
		// See http://magnet-uri.sourceforge.net/magnet_v0_1.js magnetDoOptionsPoll
		//log('<br>// ' + 'http://localhost:45100/setinfo?name=AZMSG&value='+realMessage+"&rand=" + (new Date()).getTime() + ' // ')
		img.src = 'http://localhost:45100/setinfo?name=AZMSG&value='+realMessage+"&rand=" + (new Date()).getTime() + ((_browser == "Chrome") ? "&img_type=png" : "" );

	} catch(e) {
		_failureOnError(realMessage, success, failure);
	}
}


// This function is used from the browser to detect if azureus
//   is running and if not will start it up.  Then it loads
//   a particular URL in the browse tab of azureus.
var globalIntervalTimer = null;
var xxxx = 0;
function detectAndLoadPage(url, pollInterval, midLoading) {
	xxxx = xxxx + 1;
	debugMagnet('detectAndLoadAzureus('+xxxx+') :: ');
	var _magnet = url.substring(url.lastIndexOf('/')+1,url.lastIndexOf('.html'));
	setMagnet( _magnet)
	debugMagnet('detectAndLoadAzureus('+xxxx+') :: ' + 'hash ' + contentAssetHash);
	debugMagnet('detectAndLoadAzureus('+xxxx+') :: ' + 'content? ' + content)
	if(! (content != null && content.getHash() == contentAssetHash) ) {
		content = new contentObj(contentAssetHash);
		content.setFFS(false)
		content.setBR(true)
	}
	debugMagnet('detectAndLoadAzureus('+xxxx+') :: ' + 'FFS: ' + content.isFFS())
	if (globalIntervalTimer) clearInterval(globalIntervalTimer)

	debugMagnet('detectAndLoadAzureus('+xxxx+') :: ' + 'ie7Bar.isShowing()? ' + ie7Bar.isShowing())
	if(ie7Bar.isShowing()) {
		ie7Bar.clear()
	}

	var intervalTimerId;
	var timeoutTimerId;

	if( isJavaInstalled() ) {
		JWS_Link = JWS_URL + JWS_JNLP
	} else {
		JWS_Link = JWS_URL + JWS_DL
	}

	if ( ! pollInterval ) {
		pollInterval = 1000;  // Default to 1 sec if not specified
	}

	function isReadyPerformTask() {
		window.clearInterval(intervalTimerId);
		openUrlInAzureus(url);
	}

	function noop() {
	}

	function noopFail() {
		// prompt to update via JWS
		jnlpAlertBar.showMsg( "To use our service, please make sure you are running the latest Vuze from <a href='" + SERVER_URL + "'>Vuze.com</a>.<br/><a href='" + JWS_Link + "'>Click here</a> to install it or launch it right now." )
	}

	function checkIfReady() {
		sendMessageFromExternalBrowser('display' , 'is-ready' , {}, isReadyPerformTask , noop);
	}

    function success() {
    	// check if the running version of Azureus is 3008 at least
    	// if not, prompt to update
    	//alert('az is running')
    	sendMessageFromExternalBrowser('display' , 'is-ready' , {}, openUrlInAzureus(url) , noopFail);
    }

    function failure() {
    	debugMagnet('detectAndLoadAzureus('+xxxx+') :: ' + 'az not running')

    	if( isIE7() && !midLoading){
			debugMagnet('detectAndLoadAzureus('+xxxx+') :: ' + 'isIE7');
			var INSTALL_MSG = {
				AZ_NOT_LOADED:'Vuze doesn\'t appear to be running. Do you want to load it now?' +
				' <a href="'+ JWS_Link + ((content && (content.isBR()|| content.isFFS()))?'':('?m=' + contentAssetHash + ((playNow)?'&p=true':'')))+'" onclick="javascript: ie7Bar.clear();">Yes</a> / <a href="javascript:void(0);" onclick="ie7Bar.clear()">No</a>',
				JAVA_NOT_INSTALLED:'You don\'t seem to have Java installed. Do you want to download it now?' +
				' <a href="http://java.sun.com/PluginBrowserCheck?pass='+JWS_Link+'&fail=http://java.com/en/download/index.jsp?cid=jdp84244" onclick="javascript: ie7Bar.clear();">Yes</a> / <a href="javascript:void(0);" onclick="ie7Bar.clear()">No</a>'
			}

			if(isJavaInstalled()){
				debugMagnet('detectAndLoadAzureus('+xxxx+') :: ' + 'java installed :: ' + INSTALL_MSG.AZ_NOT_LOADED)
				ie7Bar.showMsg( INSTALL_MSG.AZ_NOT_LOADED )
			} else {
				debugMagnet('detectAndLoadAzureus('+xxxx+') :: ' + 'java not installed')
				ie7Bar.showMsg( INSTALL_MSG.JAVA_NOT_INSTALLED )
			}
			debugMagnet('detectAndLoadAzureus('+xxxx+') :: ' + realBody.scrollTop)
			realBody.scrollTop = 0;

		} else {
			if( !midLoading )  {
				goGetIt();  // Install/start azureus via JWS
			}
		}

 		intervalTimerId = window.setInterval(checkIfReady, pollInterval );
 		globalIntervalTimer = intervalTimerId;
    }

    function openUrlInAzureus(url) {
    	url += "?t=" + new Date().getTime(); // preventing IE from caching and causing inconsistent session state
    	resetSequenceFromExternalBrowser ( );
		sendMessageFromExternalBrowser('display','open-url', { url: url, target: 'browse' }, noop, noopFail );
	}

  	detectAzureus(success, failure);
}

function setMagnet( hash ) {
	contentAssetHash = hash
}

var contentAssetHash;

var ie7Bar = new detailAlertBar('ie7install');
var ie7BarID = 'list_view';
Event.observe( window, 'load', function(e){
	if($('fcont') != null) { ie7BarID = 'fcont'; };
	if($('vabout') != null) { ie7BarID = 'vabout'; };
	ie7Bar.showWhere( ie7BarID );
});
