/* 
 This file was generated by Dashcode and is covered by the 
 license.txt included in the project.  You may edit this file, 
 however it is recommended to first turn off the Dashcode 
 code generator otherwise the changes will be lost.
 */

// Note: Properties and methods beginning with underbar ("_") are considered private and subject to change in future Dashcode releases.

function CreateBrowser(elementOrID, spec) 
{
    var browserElement = elementOrID;
    if (elementOrID.nodeType != Node.ELEMENT_NODE) {
        browserElement = document.getElementById(elementOrID);
    }
    
	if (browserElement && !browserElement.loaded) {
		browserElement.loaded = true;
		browserElement.object = new Browser(browserElement, spec);
		return browserElement.object;
	}
}

function Browser(element, spec)
{
	this.page = 1;
	this.searchCond = "";
	this.searchItem = "";
	this.searchCategory = -1;
	this.searchIsbn = "";
	this.searchTitle = "";
	this.searchAuthor = "";
	this.searchKeyword = "";
	this.searchSort = 0;

    this.element = element;
	// -- Add BEGIN
    this.viewList = Array();
    this.posList = Array(0);
    this.idList = Array("#Top");
	// -- Add END
}

Browser.prototype.finishLoading = function()
{
    // Find the header and content elements.
    for (var child = this.element.lastChild; child != null; child = child.previousSibling) {
        if (child.nodeType != Node.ELEMENT_NODE) {
            continue;
        }
        if (!this._contentElement) {
            if (child.object instanceof StackLayout) {
                this._contentElement = child;
                this._contentElement.object._setRestrictToBrowserTransition(true);
            }
        } else if (!this._headerElement) {
             if (child.object instanceof Header) {
                this._headerElement = child;
            }
        }
    }
}

Browser.prototype.getCurrentView = function()
{
    return this._contentElement.object.getCurrentView();
}
Browser.prototype.getCurrentTitle = function()
{
    return this._headerElement.object._getCurrentTitle();
}

// -- Add BEGIN
Browser.prototype.getCurrentPfix = function()
{
	var viewName = this._contentElement.object.getCurrentView().id;
    return viewName.substring(viewName.length - 1);
}
Browser.prototype.userIcon = function()
{
	$("#menuIcon").children("img").attr("src", this.icon);
}
Browser.prototype.myIcon = function()
{
	var myicon = $("#browser").attr("myicon");
	$("#menuIcon").children("img").attr("src", myicon);
}
// -- Add END

Browser.prototype.goForward = function(toView, data)
{
	// -- Mod BEGIN
	var prevId = data[1];
	if ((this.idList.length > 1) && (prevId.substring(0,1) == "#"))
		var title = data[0]
	else {
		var title = getTitle(_ajaxMode);
		if (title == "") title = data[0];
	}
	this.posList.push(this.window.pageYOffset);
	// -- Mod END

    var self = this;
    var prevView = this._contentElement.object.getCurrentView();
    var callback = function() {
		// -- Add BEGIN
		$("#menuIcon").css("display", "block");
		$("#settingBtn").css("display", "none");
		$("#searchCondBtn").css("display", "none");

        if (self.viewList.length > 0) prevView = self.viewList.pop();
    	var currentId = self.idList.pop();
    	var prevPos = self.posList.pop();
        var idx = self.idList.length;
        var prevId = (idx == 0) ? "#Top" : self.idList[idx - 1];
		var vv = prevView.id.substring(prevView.id.length - 1);
		var isScroll = true;
		if (prevId.substring(0,1) == "#") {
	        if (vv == "A")
	        	listControllerA.setRowData(prevId);
	        else
	        	listControllerB.setRowData(prevId);
			setViewArea(LIST_AREA, vv);
			if (idx == 0) {
				self.page = 1;
				self.searchCond = "";
				self.searchItem = "";
			}
			$("#detailArea" + vv).html("");
			$("#subCategory").css("display", "none");
			showSetting(false);
        } else {
			setMode(prevId);
			if (prevId == "user") {
				$("#detailArea" + vv).html("");
				setViewArea(DETAIL_AREA, vv);
				requestUserDetail(self.user, vv);
				self.myIcon();
			} else if (prevId == "Users") {
				$("#detailArea" + vv).html("");
				setViewArea(DETAIL_AREA, vv);
				self.user = "";
				requestItemAjax(prevId, vv, 1);
			} else if (prevId == "Tags") {
				$("#detailArea" + vv).html("");
				self.tagName = "";
				isScroll = false;
				self.page = 1;
				requestItemAjax(prevId, vv, -prevPos);
			} else if (prevId == "Search") {
				backSearchListPage(vv);
			} else if (prevId == "tagitem") {
				setViewArea(ITEMS_AREA, vv);
				requestTagItem(vv, self.tagName, self.page);
			} else if (prevId == "detail") {
				var upd = $("#itemForm").attr("Update");
				if (upd == "1") {
					requestItemDetail("asin=" + $("#asinCode").val(), vv);
				}
	        	if (_ajaxMode == "useritem") self.userIcon();
			} else if (currentId == "detail") {
	        	if (_ajaxMode == "pop")
					$("#subCategory").css("display", "block");
				else if ((_ajaxMode == "item") || (_ajaxMode == "useritem")) {
					$("#menuIcon").css("display", "none");
					$("#settingBtn").css("display", "block");
				}
				if ($("#items" + vv).css("display") == "none") {
					setViewArea(ITEMS_AREA, vv);
				}
			}
        }
        if ((isScroll) && (prevPos > 0)) setTimeout(function() {scrollY(prevPos);}, 500);
		// -- Add END

        // Set timing and duration of header to match back transition
        var transition = self._contentElement.object.getTransitionForView(toView);
        if (transition) {
            var duration = (transition.type != Transition.NONE_TYPE) ? parseFloat(transition.getDuration()) : 0;
            self._headerElement.object._setAnimationDuration(duration);
            self._headerElement.object._setAnimationTiming(transition.timing);
        }

        self._backButtonClicked(prevView);
    }
    
    // Set timing and duration of header to match forward transition
    var transition = this._contentElement.object.getTransitionForView(toView);
    if (transition) {
        var duration = (transition.type != Transition.NONE_TYPE) ? parseFloat(transition.getDuration()) : 0;
        this._headerElement.object._setAnimationDuration(duration);
        this._headerElement.object._setAnimationTiming(transition.timing);
    }
    
    this._contentElement.object._maskContainerElement = this.element;
    // Let's do contentElement first since it is usually heavier
	this._contentElement.object.setCurrentView(toView, false);
	
	// -- Add BEGIN
	this.viewList.push(prevView);
	this.idList.push(prevId);
	// -- Add END
    
    this._headerElement.object._goForward(title, callback);
}

Browser.prototype.goBack = function()
{
    return this._headerElement.object._goBack();
}

Browser.prototype._backButtonClicked = function(toView)
{
    this._contentElement.object._maskContainerElement = this.element;
	this._contentElement.object.setCurrentView(toView, true);
}

