/*	Executes callbacks when DOM is ready
*/
var onready = function() {
	if (!window['jQuery']) {
		return;
	}
	for(var i = 0; i < arguments.length; ++i) {
		jQuery(document).ready(arguments[i]);
	}
};



/*	Executes callbacks if a jQuery selector exists or not
*/
var assert = function() {

	return {
		is: function() {
			var selector = arguments[0];
			if (jQuery(selector).length) {
				for (var i = 1; i < arguments.length; ++i) {
					arguments[i]();
				}
				return true;
			}
			return false;
		},
		not: function() {
			var selector = arguments[0];
			if (!jQuery(selector).length) {
				for (var i = 1; i < arguments.length; ++i) {
					arguments[i]();
				}
				return true;
			}
			return false;
		}
	};
}();

/*	Tracks pages and events using Google Analytics
*/
var track = function() {

	window['ga_tracker'] = 'UA-1894610-21';

	onready(function() {
		jQuery.getScript('http://www.google-analytics.com/ga.js', function() {
			ga_tracker = _gat._getTracker('');
			ga_tracker._initData();
			ga_tracker._trackPageview();
		})
	});

	return {
		event: function(page) {
			if (typeof(ga_tracker)) {
				ga_tracker._trackPageview(page);
			}
		}
	};

}();



/*	Sets all links with an "external" class to open in a new window
*/
var externalLinks = function() {
	onready(function() {
		jQuery('a.external').attr('target', '_blank');
		jQuery('a.buybutton').attr('target', '_blank');
	});
};


/*	Returns a value if not undefined, otherwise returns a default value (or null if not set) - No dependencies
*/	
var getValue = function(value, def) {
	if (typeof(value) !== 'undefined') {
		return value;
	}
	if (typeof(def) !== 'undefined') {
		return def;
	}
	return null;
};



/*	Checks if a value is not undefined, null or false - No dependencies
*/
var isset = function(value) {
	if (typeof(value) !== 'undefined') {
		return true;
	}
	if (value !== null || value !== false) {
		return true;
	}
	return false;
};


/*	Adds flash objects to a page
*/
var flash = function() {

	var _default_version = '9';

	var _checkFlash = function(version, express_install) {
		if (!swfobject.hasFlashPlayerVersion(version) && isset(express_install)) {
			if (!swfobject.hasFlashPlayerVersion('6.0.65')) {
				return false;
			}
		}
		return true;
	};
	var _add = function(settings) {
		if (!window['swfobject']) {
			return;
		}
		if (!isset(settings.id) || !isset(settings.src) || !isset(settings.width) || !isset(settings.height)) {
			return;
		}
		var version = getValue(settings.version, _default_version);
		var express_install = getValue(settings.express_install);
		if (!_checkFlash(version, express_install)) {
			if (isset(settings.upgrade_message)) {
				onready(function() {
					jQuery('#' + settings.id).html(settings.upgrade_message);
				});
			}
			return;
		}
		var flash_vars = getValue(settings.flash_vars, {});
		var attributes = getValue(settings.attributes, {});
		attributes.id = getValue(settings.id_prefix, 'flash_') + settings.id;
		var parameters = getValue(settings.parameters, {});
		parameters.menu = getValue(parameters.menu, 'false');
		parameters.allowscriptaccess = getValue(parameters.allowscriptaccess, 'always');
		parameters.allowfullscreen = getValue(parameters.allowfullscreen, 'true');
		if (getValue(settings.transparent, false) === true) {
			parameters.wmode = 'transparent';
		}
		onready(function() {
			swfobject.embedSWF(settings.src, settings.id, settings.width, settings.height, version, express_install, flash_vars, parameters, attributes);
		});
	};

	return {
		add: _add,
		checkVersion: _checkFlash
	};

}();


// ---

var setupSounds = function() {
	jQuery('body').append('<div id="bg_sounds_container" style="visibility: hidden;"></div>');
};

var sound = function(obj) {
	if (!obj['src']) {
		return;
	}
	var id = (new Date()).getTime();
	if (typeof(obj['id']) === 'string') {
		id = obj['id'];
	}
	var props = {
		id: 'bg_soundclip_' + id,
		src: '/static/flash/sound_clip.swf',
		width: 1,
		height: 1,
		flash_vars: {
			src: '/assets/audio/website/' + obj.src + '.mp3',
			repeat: getValue(obj['repeat'], 0),
			interval: getValue(obj['interval'], 30)
		}
	};
	onready(function() {
		jQuery('#bg_sounds_container').append('<div id="bg_soundclip_' + id + '"></div>');
		flash.add(props);
	});
};

var stopSound = function(id) {
	jQuery('#flash_bg_soundclip_' + id).remove();
};

var stopAllSounds = function() {
	jQuery('#bg_sounds_container').remove();
	setupSounds();
};


var rolloverSounds = function() {
	jQuery('#toplinks a').hover(function() {
		stopAllSounds();
		sound({
			id: 'pos_all_clear', 
			src: 'pos_all_clear'
		});
		jQuery(this).focus();
	}, function() {
		stopSound('pos_all_clear');
	});
};

/*	Callbacks to execute on every page, when DOM is ready
*/
onready(externalLinks, setupSounds, rolloverSounds);