/**
 * @file JavaScript library for MyGames SDK
 * @version $Revision: 1.0 $
 * @created April 19, 2007
 * @author bbasile
 *
 * This SDK supports IE6+ and Firefox 1.5+
 */
 
/**
* Global Constants
*/
var APP_STATE_OBJECT	= "RAComponents.RAAppState";
var RESOURCE_MGR_OBJECT	= "RAComponents.RAResourceMgr";
var DATASTORE_OBJECT	= "RADataStore.RADataSourceMgr";
var APP_STATE_CORE		= "RAComponents.RAAppCore";
var MY_GAMES			= "myGames";

/**
* Game List sort parameters
*/
var SORT_BY_GAMENAME	= "gamename";
var SORT_BY_GENRE		= "genre";
var SORT_BY_DEVELOPER	= "developer";
var SORT_BY_TIMEREM		= "MinutesPlayed";
var SORT_BY_LASTPLAY	= "LastPlayedDate";

/**
* This provides for cross-browser ActiveXObject instantiation
*/
var ActiveXObject = ActiveXObject;
if( navigator.userAgent.toLowerCase().indexOf( "firefox" ) != -1 ) {
	ActiveXObject = GeckoActiveXObject;
}

/**
* appCore_startUp MUST be called in window.onload
*/
function appCore_startUp() {
	try	{
		oAppCore = new ActiveXObject( APP_STATE_CORE );
		oAppCore.startUp();
		initializeApplication();
		return true;
	}
	catch(e) {
		return false;
	}
}

/**
* appCore_shutDown MUST be called in window.onunload
*/
function appCore_shutDown() {
	if( window.oAppCore ) {
		try {
			oAppCore.shutDown();
		}
		catch(e) {
			//alert( e );
		}
	}
}

/**
* initializeApplication is called in appCore_startUp
* This function loads all apis necessary to support
* game and game list objects
*/
function initializeApplication() {
	try {
		oAppState = new ActiveXObject( APP_STATE_OBJECT );
	}
	catch(e) {
		//alert( e );
	}

	try {
		oResourceManager = new ActiveXObject( RESOURCE_MGR_OBJECT );
	}
	catch(e) {
		//alert( e );
	}

	try {
		oDataSourceMgr = new ActiveXObject( DATASTORE_OBJECT );
		oDataSource = oDataSourceMgr.defaultDataSource;	
	}
	catch(e) {
		//alert( e );
	}
}

/**
* getGameFromGameList iterates through a game list array
* and returns the game object for the specified gameId, if
* it is installed on the user's machine
*/
function getGameFromGameList( gameList, gameId ) {
    try {
	    for ( i=0; i<gameList.count; i++ ){
		    var myGame = gameList.item(i);
		    //alert("Game: " + myGame.gameName);
		    if( myGame.gameid == gameId ){
			    return myGame;
		    }
	    }
	    return null;
	}
	catch(e) {	
		return null;
	}
}

/**
* sortGameList sorts a game list according to a specified
* parameter.  Supports sorting ascending or descending.
*/
function sortGameList( gameList, sortBy, sortAscending ) {
	try {
		gameList.sortOrderAscending = sortAscending;
		gameList.sort( sortBy );
	}
	catch(e) {
		return false;
	}
}

/**
* Constructor for the game list factory
*/
function myGamesListFactory() {}

/**
* Game list factory method - returns the My Games list
*/
myGamesListFactory.createMyGamesList = function () { 
	try {
		return oDataSource.loadGameList( MY_GAMES ); 
	}
	catch(e) {
		return null;
	}
}


/**
* Constructor for the game object factory
*/
function gameObjectFactory() {}

/**
* Game object factory method - returns game object for specified gameId
*/
gameObjectFactory.createGameObject = function ( gameId ) { 
	try {
		return getGameFromGameList( myGamesListFactory.createMyGamesList(), gameId );
	}
	catch(e) {
		return null;
	}
}



var IMAGE_BASE_URL = "http://www.realarcade.com/gameimage?gameid=";

// game image types
var TINY_SQUARE_IMAGE = "tinySquareImage"; //50x50
var THUMBNAIL_IMAGE = "thumbnailImage"; //80x45
var FEATURE_IMAGE = "featureImage"; //146x110
var SQUARE_IMAGE = "squareImage"; //150x150
var MAIN_IMAGE = "gameImage"; //240x135
var WRAPPER_IMAGE = "promoPageImage"; //750x550
var INSTALLER_IMAGE = "promoPageImage"; //not imp. yet
var SCREENSHOT_THUMBNAIL_IMAGE = "ScreenshotImageThumbnails"; //120x90

var LANDING_PAGE = "/";
var FIND_GAMES_PAGE = "download";
var MY_REALARCADE_PAGE = "myrealarcade";
var GAME_PAGE = "games/";
var ONLINE_PLAY_PAGE = "play/";

// game status codes
var FULL_VERSION_INSTALLED = 1;
var DEMO_VERSION_INSTALLED = 2;
var GAME_NOT_INSTALLED = 3;

// defaults, etc.
var DEFAULT_TPS = "ambient_";
var DEFAULT_LANG = "EN";
var DEFAULT_COUNTRY = "US";
var DOWNLOAD_GAME_TYPE = "download";
var ONLINE_GAME_TYPE = "web";
var DEFAULT_GAME_TYPE = DOWNLOAD_GAME_TYPE;
var DEFAULT_GP_TYPE = "full";
var SHORT_DESC_TRUNC = "68";

// exit wrapper
var DEFAULT_PRICE_TYPE = "standard";
var BG_IMAGE_SRC = "background_281x496.gif";
var MORE_GAMES_LINK_URL = "http://www.realarcade.com";
var DEFAULT_CURRENCY_CODE = "USD";
var DEFAULT_COUNTRY_CODE = "US";
var DEFAULT_LANGUAGE_CODE = "EN";
var GAME_PASS_PTYPE = "gpfull";
var MY_GAMES_URL = "http://www.realarcade.com/mygames";
var DEFAULT_GAME_IMAGE = "_750x550.jpg";

//online game image naming map
var oOnlineImageMap = new Object();
oOnlineImageMap[TINY_SQUARE_IMAGE] = "Image Set Tiny Square Image"; //50x50
oOnlineImageMap[THUMBNAIL_IMAGE] = "Image Set Thumbnail Image"; //80x45
oOnlineImageMap[FEATURE_IMAGE] = "Image Set Feature Image"; //146x110
oOnlineImageMap[SQUARE_IMAGE] = "Image Set Square Image"; //150x150
oOnlineImageMap[MAIN_IMAGE] = "Image Set Main Image"; //240x135
oOnlineImageMap[WRAPPER_IMAGE] = "Image Set Wrapper Image"; //750x550
oOnlineImageMap[INSTALLER_IMAGE] = "Image Set Installer Image"; //not imp. yet
oOnlineImageMap[SCREENSHOT_THUMBNAIL_IMAGE] = "Game Screenshot Thumbnail"; //120x90

function imageFactory() {
    //constructor function for image factory
    //properties
    this.imageBaseUrl = IMAGE_BASE_URL;

    //methods
    this.getGameImage = getGameImage;
    this.getScreenshotImageThumbnails = getScreenshotImageThumbnails; //120x90
    this.getImageBaseUrl = getImageBaseUrl;
}
function getGameImage(gameId, gameType, imageType) {
    return encodeURI(this.imageBaseUrl + gameId + "&gametype=" + gameType + "&imagetype=" + oOnlineImageMap[imageType]);
}

function getScreenshotImageThumbnails(gameid, gametype) {
    var arrImages = new Array(3);
    for (i = 0; i < arrImages.length; i++)
        arrImages[i] = encodeURI(this.imageBaseUrl + gameid + "&gametype=" + gametype + "&imagetype=Game Screenshot Thumbnail&index=" + i);
    return arrImages;
}

function getImageBaseUrl() {
    return this.imageBaseUrl;
}


function createThumbnailLink(game) {
    var elem = document.createElement("IMG");
    elem.src = oImageFactory.getGameImage(game.gameid, game.gameType, THUMBNAIL_IMAGE);
    var gameId = game.gameid;
    elem.onclick = function() { document.location = GAME_PAGE + gameId };
    return elem;
}

function createFeatureLink(game) {
    var elem = document.createElement("IMG");
    elem.src = oImageFactory.getGameImage(game.gameid, game.gameType, FEATURE_IMAGE);
    var gameId = game.gameid;
    elem.onclick = function() { document.location = GAME_PAGE + gameId };
    return elem;
}
var oImageFactory = new imageFactory();
