/*
 * DeckView.js - Decks View functions
 * Author - robert@cosmicrealms.com
 */

var DeckView = new DialogBox("deckView", { "percentageWidth"  : P.getBrowser()==="ie7" || P.getBrowser()==="ie" ? 0.85 : 0.85,
											     "percentageHeight" : P.getBrowser()==="ie7" || P.getBrowser()==="ie" ? 0.95 : 0.95,
											     "overflowable"     : true});
							
/**
 * This is called when the decks view is first initialized
 */													   
DeckView.onInit = function()
{
	DeckView.customDecksHandled = false;
	DeckView.tabView = new YAHOO.widget.TabView('deckViewTabs');
	DeckView.tabView.addListener("activeTabChange", DeckView.tabChanged);
	
	DeckView.chooseTree = T.listToTree("deckViewChooseList", "deckViewChooseTree");
	
	var deckViewChooseList = document.getElementById("deckViewChooseList");
	deckViewChooseList.parentNode.removeChild(deckViewChooseList);
	
	DeckView.chooseTree.subscribe("labelClick", DeckView.chooseDeckClicked);
	DeckView.chooseTree.subscribe("expandComplete", function() { T.boldFolders(DeckView.chooseTree.getRoot()); });
	DeckView.chooseTreeSelectedNode = null;
	
	E.add("deckViewChooseCancelButton", "click", DeckView.hide, null, DeckView);
	
	var deckViewChooseShowDropdown = document.getElementById("deckViewChooseShowDropdown");
	E.add(deckViewChooseShowDropdown, "change", DeckView.chooseShowDropdownChanged);
};

/**
 * Called before the dialog is shown
 */
DeckView.beforeShow = function()
{
	var chooseNodeToSelect = DeckView.chooseTreeSelectedNode;
	
	if(chooseNodeToSelect===null)
	{
		chooseNodeToSelect = T.getNodeWithDataMatching(DeckView.chooseTree.getRoot(), Options.get("optionDeck"));
		DeckView.chooseTreeSelectedNode = chooseNodeToSelect;
	}
	
	if(chooseNodeToSelect!==null)
		T.openToNode(chooseNodeToSelect);
	
	Menu.deselect();
};

/**
 * Whenever the decks view is shown, this is called after it's visible
 */
DeckView.afterShow = function()
{
	DeckView.resize();
	
	var deckViewTabsContentContainer = document.getElementById("deckViewTabsContentContainer");
	var deckViewTabsContentContainerChildren = D.getElementsByTagName(deckViewTabsContentContainer, "DIV");
	var deckViewContents = document.getElementById("deckViewContents");
	var deckViewTabsContainer = document.getElementById("deckViewTabsContainer");

	for(var i=0;i<deckViewTabsContentContainerChildren.length;i++)
	{
		var tabContainer = deckViewTabsContentContainerChildren[i];

		var containerHeight = (D.height(deckViewContents) - D.height(deckViewTabsContainer));
		containerHeight -= (P.getBrowser()=="ie" ? 40 : 20);
		tabContainer.style.height = containerHeight + "px";
		
		// Statistcs view clears fields here? Should we clear stuff too?
	}
	
	if(P.getBrowser()==="gecko" || P.getBrowser()==="opera")
	{
		var deckViewChooseShowDropdownLabel = document.getElementById("deckViewChooseShowDropdownLabel");
		deckViewChooseShowDropdownLabel.style.position = "relative";
		deckViewChooseShowDropdownLabel.style.top = "-4px";
	}
	
	DeckView.tabChanged();
};

/**
 * This is called after someone switches a tab (also called explicitly when the dialog is shown to handle the pre-selected tab)
 * @param {Object} e
 */
DeckView.tabChanged = function(e)
{
	var activeIndex = DeckView.tabView.get("activeIndex");

	if(activeIndex===0)
		DeckView.chooseDeckClicked(DeckView.chooseTreeSelectedNode);
};

/**
 * Called when a deck is clicked
 * @param {Object} node
 */
DeckView.chooseDeckClicked = function(node)
{
	if(node.data===null)
		return;
		
	if(DeckView.chooseTreeSelectedNode!==null)
	{
		YAHOO.util.Dom.removeClass(DeckView.chooseTreeSelectedNode.getEl(), "treeSelectedRow");
		if(P.getBrowser()=="safari")
			YAHOO.util.Dom.addClass(DeckView.chooseTreeSelectedNode.getEl(), "treeNonSelectedRow");
	}

	DeckView.chooseTreeSelectedNode = node;
	YAHOO.util.Dom.addClass(DeckView.chooseTreeSelectedNode.getEl(), "treeSelectedRow");
	
	var deckViewChooseRight = document.getElementById("deckViewChooseRight");
	deckViewChooseRight.style.visibility = "hidden";
	
	DeckView.resize();
	
	deckViewChooseRight.style.visibility = "";

	setTimeout(function() { DeckView.chooseShowDropdownChanged(); }, 0);
};

/**
 * This is called when the choose shown dropdown is changed
 * @param {Object} e
 */
DeckView.chooseShowDropdownChanged = function(e)
{
	var deckViewChooseShowDropdown = document.getElementById("deckViewChooseShowDropdown");
	var selectedShowValue = deckViewChooseShowDropdown.options[deckViewChooseShowDropdown.selectedIndex].value;
	var cardsIDsToShow = selectedShowValue.split(",");
	var squareRoute = Math.floor(Math.sqrt(cardsIDsToShow.length));
	var leftOverCount = cardsIDsToShow.length-(squareRoute*squareRoute);
	
	var deckViewChooseRightMiddle = document.getElementById("deckViewChooseRightMiddle");
	D.clear(deckViewChooseRightMiddle);
	
	var cardsToShowTable = document.createElement("TABLE");
	cardsToShowTable.id = "deckViewChooseCardsToShowTable";
	
	var cardsToShowTableBody = document.createElement("TBODY");
	
	for(var y=0;y<squareRoute;y++)
	{
		var cardsToShowRow = document.createElement("TR");
		
		for(var x=0;x<squareRoute+(leftOverCount/squareRoute);x++)
		{
			var cardsToShowCell = document.createElement("TD");
			if(y===0&&x===0)
				cardsToShowCell.id = "deckViewChooseCardsToShowFirstCell";
				
			cardsToShowRow.appendChild(cardsToShowCell);
		}
		
		cardsToShowTableBody.appendChild(cardsToShowRow);
	}
	
	cardsToShowTable.appendChild(cardsToShowTableBody);
	
	deckViewChooseRightMiddle.appendChild(cardsToShowTable);
	
	var deckViewChooseCardsToShowFirstCell = document.getElementById("deckViewChooseCardsToShowFirstCell");
	
	var idealCardHeight = D.height(deckViewChooseCardsToShowFirstCell)-(2*squareRoute);
	var idealCardWidth = D.width(deckViewChooseCardsToShowFirstCell)-(2*(squareRoute+(leftOverCount/squareRoute)));
	
	var currentlySelectedDeckID = DeckView.chooseGetSelectedDeck();
	var deck = new Deck(currentlySelectedDeckID);
	deck.loadDeck();
	
	var artistName = deck._deckArtistName;
	var artistWebsite = deck._deckArtistWebsite;
	
	if(DeckView.customDecks)
	{
		for(var i=0;i<DeckView.customDecks.length;i++)
		{
			var deckObject = DeckView.customDecks[i];
			if(deckObject["deckID"]!=currentlySelectedDeckID)
				continue;
				
			artistName = deckObject["artistName"];
			artistWebsite = deckObject["artistWebsite"];
		}
	}
	
	var deckViewChooseArtistName = document.getElementById("deckViewChooseArtistName");
	D.clear(deckViewChooseArtistName);
	deckViewChooseArtistName.appendChild(document.createTextNode(artistName));
	
	var deckViewChooseArtistWebsite = document.getElementById("deckViewChooseArtistWebsite");
	D.clear(deckViewChooseArtistWebsite);
	var websiteAnchor = document.createElement("A");
	websiteAnchor.href = artistWebsite;
	websiteAnchor.target = "_blank";
	websiteAnchor.appendChild(document.createTextNode(artistWebsite));
	deckViewChooseArtistWebsite.appendChild(websiteAnchor);
	
	var deckSizeFitResults = deck.fitInside(idealCardHeight, idealCardWidth);

	var deckSizeNum = deckSizeFitResults["sizeNum"];	
	var cardScale = deckSizeFitResults["scale"];
	
	var cardLoc = 0;
	for(var y=0;cardLoc<cardsIDsToShow.length && y<cardsToShowTableBody.childNodes.length;y++)
	{
		var cardsToShowRow = cardsToShowTableBody.childNodes[y];
		for(var x=0;cardLoc<cardsIDsToShow.length && x<cardsToShowRow.childNodes.length;x++)
		{
			var cardsToShowCell = cardsToShowRow.childNodes[x];
			
			var cardToShowImageURL = deck.createCardURL(cardsIDsToShow[cardLoc], deckSizeNum);
			cardLoc++;
			
			var cardToShowImage = document.createElement("IMG");
			cardToShowImage.src = cardToShowImageURL;
			
			if(cardScale!=1.00)
			{
				var cardHeight = Math.floor(deck.getCardHeight(deckSizeNum, cardScale));
				var cardWidth = Math.floor(deck.getCardWidth(deckSizeNum, cardScale));
		
				cardToShowImage.style.width = "" + cardWidth + "px";
				cardToShowImage.style.height = "" + cardHeight + "px";
			}
			
			cardsToShowCell.appendChild(cardToShowImage);
		}
	}
};

/**
 * Returns the currently selected deck
 */
DeckView.chooseGetSelectedDeck = function()
{
	return DeckView.chooseTreeSelectedNode.data;
};

/**
 * Will resize the deck choose area as needed
 */
DeckView.resize = function()
{
	if(this.panelHeight===null || this.panelWidth===null)
		return;
	
	var deckViewHeader = document.getElementById("deckViewHeader");
	var deckViewTabsContainer = document.getElementById("deckViewTabsContainer");
	
	var finalHeight = this.panelHeight-(D.height(deckViewHeader))-(D.height(deckViewTabsContainer))-47;

	// Resize Choose tab
	var deckViewChooseLeft = document.getElementById("deckViewChooseLeft");
	deckViewChooseLeft.style.height = finalHeight + "px";
	
	var deckViewChooseRight = document.getElementById("deckViewChooseRight");
	deckViewChooseRight.style.height = finalHeight + "px";
	
	var bottomHeight = D.height(document.getElementById("deckViewChooseOKButton")) + 10;
	
	var deckViewChooseRightBottomRight = document.getElementById("deckViewChooseRightBottomRight");
	deckViewChooseRightBottomRight.style.height = bottomHeight + "px";
	
	var deckViewChooseRightBottomLeft = document.getElementById("deckViewChooseRightBottomLeft");
	deckViewChooseRightBottomLeft.style.height = bottomHeight + "px";
	
	var deckViewChooseRightTop = document.getElementById("deckViewChooseRightTop");
	var deckViewChooseRightTopHeight = D.height(deckViewChooseRightTop);
	
	var deckViewChooseRightMiddle = document.getElementById("deckViewChooseRightMiddle");
	var middleHeight = ((finalHeight-bottomHeight)-deckViewChooseRightTopHeight);
	middleHeight = Math.max(middleHeight, 30);
	deckViewChooseRightMiddle.style.height = "" + middleHeight + "px";
};
