/*********************************************************************************
Copyright (C) 2007  Ryan Bowman

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.

For any questions or comments contact ryan at fiddlerelf dot com
**********************************************************************************/
function WXAddressBar()
{
	this.htmlRoot;
	this.xmlDoc;
	this.componentId;
	this.lookAndFeel = MODERN;
	this.history;
	
	this.setHtmlRoot = FCsetHtmlRoot;
	this.setComponentId = FCsetComponentId;
	this.setXmlDocument = FCsetXmlDocument;
	this.setLookAndFeel = FAsetLookAndFeel;
	this.getImageDirectory = FCgetImageDirectory;
	this.showAddressBar = FAshowAddressBar;
	this.historyModified = FAhistoryModified;
	this.setAddress = FAsetAddress;
	this.enableUp = FAenableUp;
	
	this.searchForm = new WXSearchForm();
	this.searchForm.addressBar = this;
	
	this.addressForm = new WXAddressForm();
	this.addressForm.addressBar = this;
	this.lookAndFeel = MODERN;
}

function FAshowAddressBar()
{
	this.addressForm.setComponentId(this.componentId);
	this.addressForm.setHtmlRoot(this.addressForm.createAddressFormNode());
	this.addressForm.showAddressForm();
	this.htmlRoot.appendChild(this.addressForm.htmlRoot);
	
	
	this.searchForm.setComponentId(this.componentId);
	this.searchForm.setHtmlRoot(this.searchForm.createSearchFormNode());
	this.searchForm.showSearchForm();
	this.htmlRoot.appendChild(this.searchForm.htmlRoot);
}

function FAsetLookAndFeel(lookAndFeel)
{
	this.addressForm.setLookAndFeel(lookAndFeel);
	this.searchForm.setLookAndFeel(lookAndFeel);
}

function FAhistoryModified()
{
	var hasPrevious = this.history.hasPrevious();
	var hasNext = this.history.hasNext();
	this.addressForm.historyModified(hasPrevious, hasNext);
}

function FAsetAddress(address)
{
	this.addressForm.setAddress(address);
}

function FAenableUp(enable)
{
	this.addressForm.enableUp(enable);
}

/***************************************************/
/***************************************************/
function WXAddressForm()
{
	this.htmlRoot;
	this.componentId;
	this.lookAndFeel = MODERN;
	this.addressField;
	this.addressBack;
	this.addressUp;
	this.addressForward;
	this.addressBarBackImage = "addressbar_back.png";
	this.addressBarForwardImage = "addressbar_forward.png";
	this.addressBarUpImage = "addressbar_up.png";
	this.addressBarBackDisabledImage = "addressbar_back_disabled.png";
	this.addressBarForwardDisabledImage = "addressbar_forward_disabled.png";
	this.addressBarUpDisabledImage = "addressbar_up_disabled.png";
	
	this.setHtmlRoot = FCsetHtmlRoot;
	this.setComponentId = FCsetComponentId;
	this.setLookAndFeel = FCsetLookAndFeel;
	this.getImageDirectory = FCgetImageDirectory;
	this.showAddressForm = FAFshowAddressForm;
	this.createAddressFormNode = FAFcreateAddressFormNode;
	this.createAddressFormBack = FAFcreateAddressFormBack;
	this.createAddressFormForward = FAFcreateAddressFormForward;
	this.createAddressFormUp = FAFcreateAddressFormUp;
	this.createAddressFormAddressField = FAFcreateAddressFormAddressField;
	this.historyModified = FAFhistoryModified;
	this.enableBack = FAFenableBack;
	this.enableForward = FAFenableForward;
	this.setAddress = FAFsetAddress;
	this.enableUp = FAFenableUp;
}

function FAFenableUp(enable)
{
	var image;
	if (enable)
		image = this.getImageDirectory() + this.addressBarUpImage;
	else
		image = this.getImageDirectory() + this.addressBarUpDisabledImage;
	
	this.addressUp.setAttribute("src", image);
	this.addressUp.disabled = !enable;
}

function FAFsetAddress(address)
{
	this.addressField.value = address;
}

function FAFenableBack(enable)
{
	var image;
	if (enable)
		image = this.getImageDirectory() + this.addressBarBackImage;
	else
		image = this.getImageDirectory() + this.addressBarBackDisabledImage;
	
	this.addressBack.setAttribute("src", image);
	this.addressBack.disabled = !enable;
}

function FAFenableForward(enable)
{
	var image;
	if (enable)
		image = this.getImageDirectory() + this.addressBarForwardImage;
	else
		image = this.getImageDirectory() + this.addressBarForwardDisabledImage;
	
	this.addressForward.setAttribute("src", image);
	this.addressForward.disabled = !enable;
}

function FAFhistoryModified(hasPrevious, hasNext)
{
	this.enableBack(hasPrevious);
	this.enableForward(hasNext);
}

function FAFshowAddressForm()
{
	this.htmlRoot.appendChild(this.createAddressFormBack());
	this.htmlRoot.appendChild(this.createAddressFormForward());
	this.htmlRoot.appendChild(this.createAddressFormUp());
	this.htmlRoot.appendChild(this.createAddressFormAddressField());
}

function FAFcreateAddressFormNode()
{
	var nodeElement = document.createElement("form");
	nodeElement.setAttribute("id", this.componentId + "_addressform");
	nodeElement.className = "addressform";
	var hiddenElement = document.createElement("input");
	hiddenElement.setAttribute("name", "componentId");
	hiddenElement.setAttribute("type", "hidden");
	hiddenElement.setAttribute("value", this.componentId);
	nodeElement.appendChild(hiddenElement);
	return nodeElement;
}

function FAFcreateAddressFormBack()
{
	var nodeElement = document.createElement("input");
	nodeElement.setAttribute("id", this.componentId + "_addressformback");
	nodeElement.className = "addressformimage";
	nodeElement.setAttribute("src", this.getImageDirectory() +this.addressBarBackImage);
	nodeElement.setAttribute("type", "image");
	normAddEvent(nodeElement, "submit", returnFalse);
	normAddEvent(nodeElement, "submit", addressBackClicked);
	normAddEvent(nodeElement, "change", returnFalse);
	normAddEvent(nodeElement, "reset", returnFalse);
	normAddEvent(nodeElement, "blur", returnFalse);
	normAddEvent(nodeElement, "click", returnFalse);
	normAddEvent(nodeElement, "click", addressBackClicked);
	this.addressBack = nodeElement;
	return nodeElement;
}

function FAFcreateAddressFormForward()
{
	var nodeElement = document.createElement("input");
	nodeElement.setAttribute("id", this.componentId + "_addressformforward");
	nodeElement.className = "addressformimage";
	nodeElement.setAttribute("src", this.getImageDirectory() + this.addressBarForwardImage);
	nodeElement.setAttribute("type", "image");
	normAddEvent(nodeElement, "submit", returnFalse);
	normAddEvent(nodeElement, "submit", addressForwardClicked);
	normAddEvent(nodeElement, "change", returnFalse);
	normAddEvent(nodeElement, "reset", returnFalse);
	normAddEvent(nodeElement, "blur", returnFalse);
	normAddEvent(nodeElement, "click", returnFalse);
	normAddEvent(nodeElement, "click", addressForwardClicked);
	this.addressForward = nodeElement;
	return nodeElement;
}

function FAFcreateAddressFormUp()
{
	var nodeElement = document.createElement("input");
	nodeElement.setAttribute("id", this.componentId + "_addressformup");
	nodeElement.className = "addressformimage";
	nodeElement.setAttribute("src", this.getImageDirectory() + this.addressBarUpImage);
	nodeElement.setAttribute("type", "image");
	normAddEvent(nodeElement, "submit", returnFalse);
	normAddEvent(nodeElement, "submit", moveUpOneNode);
	normAddEvent(nodeElement, "change", returnFalse);
	normAddEvent(nodeElement, "reset", returnFalse);
	normAddEvent(nodeElement, "blur", returnFalse);
	normAddEvent(nodeElement, "click", returnFalse);
	normAddEvent(nodeElement, "click", moveUpOneNode);
	nodeElement.setAttribute("name", "addressformup");
	this.addressUp = nodeElement;
	return nodeElement;
}

function FAFcreateAddressFormAddressField()
{
	var nodeElement = document.createElement("input");
	nodeElement.setAttribute("id", this.componentId + "_addressformaddressfield");
	nodeElement.className = "addressformfield";
	nodeElement.setAttribute("type", "text");
	nodeElement.disabled = true;
	this.addressField = nodeElement;
	return nodeElement;
}

/***************************************************/
/***************************************************/
function WXSearchForm()
{
	this.htmlRoot;
	this.componentId;
	this.lookAndFeel = MODERN;
	this.addressBarSearchImage = "addressbar_search.png";
	
	this.searchSubmit;
	this.searchField;
	
	this.setHtmlRoot = FCsetHtmlRoot;
	this.setComponentId = FCsetComponentId;
	this.setXmlDocument = FCsetXmlDocument;
	this.setLookAndFeel = FCsetLookAndFeel;
	this.getImageDirectory = FCgetImageDirectory;
	this.showSearchForm = FSFshowSearchForm;
	this.createSearchFormNode = FSFcreateSearchFormNode;
	this.createSearchFormSubmit = FSFcreateSearchFormSubmit;
	this.createSearchFormSearchField = FSFcreateSearchFormSearchField;
}

function FSFshowSearchForm()
{
	this.htmlRoot.appendChild(this.createSearchFormSearchField());
	this.htmlRoot.appendChild(this.createSearchFormSubmit());
}

function FSFcreateSearchFormNode()
{
	var nodeElement = document.createElement("form");
	nodeElement.setAttribute("id", this.componentId + "_searchform");
	nodeElement.className = "searchform";
	var hiddenElement = document.createElement("input");
	hiddenElement.setAttribute("name", "componentId");
	hiddenElement.setAttribute("type", "hidden");
	hiddenElement.setAttribute("value", this.componentId);
	nodeElement.appendChild(hiddenElement);
	return nodeElement;
}

function FSFcreateSearchFormSubmit()
{
	var nodeElement = document.createElement("input");
	nodeElement.setAttribute("id", this.componentId + "_searchformsubmit");
	nodeElement.className = "searchformimage";
	nodeElement.setAttribute("type", "image");
	nodeElement.setAttribute("src", this.getImageDirectory() + this.addressBarSearchImage);
	normAddEvent(nodeElement, "submit", returnFalse);
	normAddEvent(nodeElement, "submit", executeSearch);
	normAddEvent(nodeElement, "change", returnFalse);
	normAddEvent(nodeElement, "reset", returnFalse);
	normAddEvent(nodeElement, "blur", returnFalse);
	normAddEvent(nodeElement, "click", returnFalse);
	normAddEvent(nodeElement, "click", executeSearch);
	nodeElement.setAttribute("name", "searchformsubmit");
	this.searchSubmit = nodeElement;
	return nodeElement;
}

function FSFcreateSearchFormSearchField()
{
	var nodeElement = document.createElement("input");
	nodeElement.setAttribute("id", this.componentId + "__searchformsearchfield");
	nodeElement.className = "searchformfield";
	nodeElement.setAttribute("type", "text");
	normAddEvent(nodeElement, "click", returnFalse);
	nodeElement.setAttribute("name", "searchformsearchfield");
	this.searchField = nodeElement;
	return nodeElement;
}
