//<!--
//debugger;
var lastPage = '';
// Namespace
var OXX={};
OXX.Navigator={};

// State handler
OXX.Navigator.action = 'category';
OXX.Navigator.setFreetext = function(text)
{
	var el = document.getElementById('freetext');
	if(el) el.value = text;
}
OXX.Navigator.toPage = function()
{
	var page = YAHOO.util.History.getCurrentState('page');
	var freetext = YAHOO.util.History.getCurrentState('freetext');
	var categories = YAHOO.util.History.getCurrentState('category');
	//setCategoriesButtons(categories);
	//enableCategories(document.getElementById('RADIO1_0'));

	lastPage = page;
	if(freetext == 'default')
		if(categories == 'default')
			changeDynamicCategory(lastPage, '')
		else
			changeDynamicCategory(lastPage, '', categories);
	else if(categories == 'default')
		changeDynamicCategory(lastPage, freetext)
	else
		writeProductByCategory(categories, lastpage);
	if(freetext == 'default')
		OXX.Navigator.setFreetext('')
	else
		OXX.Navigator.setFreetext(freetext);
}
OXX.Navigator.toCategory = function()
{
	if(YAHOO.util.History.getCurrentState('action') == 'default') writeProductByCategory('0', 0, '');
	var categories = YAHOO.util.History.getCurrentState('category');
	var page = YAHOO.util.History.getCurrentState('page');
	var freetext = YAHOO.util.History.getCurrentState('freetext');

	if(freetext == 'default') freetext='';
	if(page != 'default') 
		lastPage = page 
	else 
		lastPage = 0;
	if(categories != 'default')
		writeProductByCategory(categories, lastPage, freetext)
	else
		writeProductByCategory('0', lastPage, freetext);
}
OXX.Navigator.toProduct = function()
{
	//OXX.Navigator.setFreetext('');
	var productId = YAHOO.util.History.getCurrentState('product');
	writeProduct(productId);
	return;
}
OXX.Navigator.toFreetext = function()
{
	//writeProduct(productId);
	var freetxt = YAHOO.util.History.getBookmarkedState('freetext');
	if(freetxt == 'default') freetxt='';
	OXX.Navigator.setFreetext(freetxt);
	changeDynamicCategoryByFreetext('0', freetxt);
	//var el = document.getElementById('RADIO1_0');
	//if(el)
	//{
	//	enableCategories(el);
	//	el.checked = true;
	//}
	//OXX.Navigator.setFreetext(freetext);
	return;
}

// Navigator class
OXX.Navigate = function()
{
	// Private
	var actions = [];
	var states = [];
	// Private functions
	// Public space
	return {
		defaultState: 'default',
		init: function(callback) {
			var i=0;
			for(; i<states.length; i++) {
				var currState = YAHOO.util.History.getBookmarkedState(states[i]);
				var initialState = currState || this.defaultState;
				YAHOO.util.History.register(states[i], initialState, this.handleStateChange, this, true);
			}
			// Add action as static state; needs to determine what to do
			var stateAction = 'action';
			var currActionState = YAHOO.util.History.getBookmarkedState(stateAction);
			var actionInitialState = currActionState || this.defaultState;
			YAHOO.util.History.register(stateAction, actionInitialState, this.handleActionStateChange, this, true);
			//YAHOO.util.History.onLoadEvent.subscribe(function() {
			//	//var currStateAction = YAHOO.util.History.getCurrentState('action');
			//	this.exec(YAHOO.util.History.getCurrentState('action'));
			//}, this, true);
			YAHOO.util.History.onLoadEvent.subscribe(this.onStartup, this, true);
			YAHOO.util.History.onBrowserNavigate.subscribe(function() {
				//var currStateAction = YAHOO.util.History.getCurrentState('action');
				this.exec(YAHOO.util.History.getCurrentState('action'));
			}, this, true);
			YAHOO.util.History.initialize();
		},
		addAction: function(actionName, f) {
			actions[actions.length] = {name:actionName, call: f};
		},
		addState: function(stateName) {
			states[states.length] = stateName;
		},
		onStartup: function() {
			if(YAHOO.util.History.getBookmarkedState('action'))
			{
				var action = YAHOO.util.History.getCurrentState('action');
				if(action != 'default')
					this.exec(action);
			}
			else if(!YAHOO.util.History.getQueryStringParameter('products'))
				changeDynamicCategory('0', '')
		},
		exec: function(action) {
			// Call action handler function
			var i=0;
			for(; i<actions.length; i++)
				if(actions[i].name == action) actions[i].call();	
		},
		navigate: function(state) {
			YAHOO.util.History.navigate(state);
		},
		multiNavigate: function(action, states) {
			YAHOO.util.History.multiNavigate(states);
			//if(action) this.exec(action);
		},
		handleActionStateChange: function(state) {
			// We do nothing; all is done in exec() the action
		},
		handleStateChange: function(state) {
			// We do nothing; all is done in exec() the action
		}
	};
}
// HACK! 
// "YAHOO.util.History.onBrowserNavigate.fire();" : added to the end of function _storeStates() in yui\history\history-beta.js
// "onBrowserNavigate: new YAHOO.util.CustomEvent( "onBrowserNavigate" )," : added after onLoadEvent creation in return{} statement
OXX.Nav = new OXX.Navigate;
OXX.Nav.addAction('default', OXX.Navigator.toCategory);
OXX.Nav.addAction('product', OXX.Navigator.toProduct);
OXX.Nav.addAction('category', OXX.Navigator.toCategory);
OXX.Nav.addAction('page', OXX.Navigator.toPage);
OXX.Nav.addAction('freetext', OXX.Navigator.toFreetext);
OXX.Nav.addState('product');
OXX.Nav.addState('category');
OXX.Nav.addState('page');
OXX.Nav.addState('freetext');
OXX.Nav.init(OXX.Navigator.onStartup);




function dealersSearch(productId, countryElId, zipCodeElId)
{
	var countryEl = document.getElementById(countryElId);
	var zipCodeEl = document.getElementById(zipCodeElId);
	var resultEl = document.getElementById('dealers'+parseInt(productId));
	if(countryEl && zipCodeEl)
	{
		var result = Viking.Templates.Documents.ProductSelector.Products.SearchDealers(productId, countryEl.options[countryEl.selectedIndex].value, zipCodeEl.value);
		if(!result.error && resultEl)
			resultEl.innerHTML=result.value;
	}
}

function changeMainCategory(elem) {
	// Enable/Disable
	enableCategories(elem);
	
	//var categoriesDiv =  document.getElementById("subcategories");
	//var response = Viking.Templates.Documents.ProductSelector.Products.DisplayCategories(elem.id);
	//if(response.error!=null) 
	//	categoriesDiv.innerHTML = response.error;
	//else
	//	categoriesDiv.innerHTML = response.value;	
	
	//// Removed because History handles this
	////changeDynamicCategory();
}

/*
Parameters:
currentId: the current product Id if direction is specified
direction: next | previous (next or previous product)
*/
function productSearch() {
	/*var freetext;
	var ftext = document.getElementById('freetext');
	if(ftext == null) freetext = '';
	freetext = ftext.value;*/	
	changeDynamicCategory();
}

function productLastSearch() {
	changeDynamicCategory(lastPage);
}

/*function writeProductByDirection(direction) {
	if(direction == 'next') {
		changeDynamicCategory(lastPage + 1);
	} else if(direction == 'previous') {
		changeDynamicCategory(lastPage - 1);
	}
}*/

function getSearchText()
{
	var elemF = document.getElementById('Form1').elements;
	var ftext = document.getElementById('freetext');
	if(ftext == null) freetext = '';
	freetext = ftext.value;
	return freetext;
}
function changeDynamicCategoryByFreetext(page, freetext) {
	changeDynamicCategory(page, freetext)
}
function changeDynamicCategory(page, freetxt, myCategories) {
	//var elemF = document.getElementById('Form1').elements;
	//var ftext = document.getElementById('freetext');
	//if(ftext == null) freetext = '';
	//freetext = ftext.value;
	var categories;
	if(myCategories)
		categories = myCategories
	else
		categories = selectedCategories();
	if(page == null) page = '';	
	lastPage = page;
	var ftext;
	if(freetxt) 
		ftext=freetxt 
	else 
		ftext='';
	var productsDiv =  document.getElementById("products");
	var response = Viking.Templates.Documents.ProductSelector.Products.DisplayProducts(page,documentid,categories,ftext);
	if (response.error!=null) 
	{	
		//alert(response.error);
		productsDiv.innerHTML = response.error;
		return;
	}
	else
	{
		productsDiv.innerHTML = response.value;	
		fadetoview('fade');
	}
}

function setCategoriesButtons(categories)
{
	var elements  = document.getElementById('Form1').elements;
	var i=0;
	for(; i<elements.length; i++)
	{
		if(elements[i].type == 'radio')
		{
			if(elements[i].value != '0' && categories.indexOf(elements[i].value) >= 0)
			{
				elements[i].checked = true;
				elements[i].disabled = false;
			}
			else
			{
				elements[i].checked = false;
			}
		}
	}
}

function enableCategories(elem) {
	var elemF = document.getElementById('Form1').elements;

	var id = elem.value;
	//alert('test');
	var parentId;
			
	if(elem.id.indexOf("RADIO1") >= 0) {

		for(var i = 0; i < elemF.length; i++) {
			if(elemF[i].name.substring(6,0) == 'RADIO2') {				
					if(elemF[i].id.indexOf(id) >= 0 && elem.value != 0) {
						elemF[i].disabled = false;
						elemF[i].checked = false;
					} else {
						elemF[i].disabled = true;
						elemF[i].checked = false;
					}				
			}
		
		} 			
	}
}


function writeProduct(productid) {
	//var region = document.getElementById("region");
	//var citydd =  document.getElementById("citydd");
	//var regionid = region.options[region.selectedIndex].value;
	if(productid.indexOf(',')==-1 && productid.indexOf('-')==-1){
		var productsDiv =  document.getElementById("products");
		var response = Viking.Templates.Documents.ProductSelector.Product.DisplayProduct(productid);
		if (response.error!=null) 
		{	
			productsDiv.innerHTML = response.error;
			return;
		}
		else
		{
			productsDiv.innerHTML = response.value;
			fadetoview('fade');
		}
	}
	else {
		writeProductByProductIds(productid);
	}
}

function writeProductByCategory(categories, page, freetext) {
	//var freetext = '';
	//var page = '';	
	if(!page)page='';
	var productsDiv =  document.getElementById("products");
	var response = Viking.Templates.Documents.ProductSelector.Products.DisplayProducts(page,documentid,categories,freetext);
	if (response.error!=null) 
		productsDiv.innerHTML = response.error
	else
	{
		productsDiv.innerHTML = response.value;
		fadetoview('fade');	
	}
}

function writeProductByProductIds(products) {
	var productsDiv =  document.getElementById("products");
	var response = Viking.Templates.Documents.ProductSelector.Products.DisplayProductsByIds(documentid,products);
	if (response.error!=null) 
		productsDiv.innerHTML = response.error
	else
	{
		productsDiv.innerHTML = response.value;
		fadetoview('fade');	
	}
}


function selectedCategories() {
	var elemF = document.getElementById('Form1').elements;
	var categories = '';
	
	for(var i = 0; i < elemF.length; i++)
	{
		if(elemF[i].name.substring(5,0) == 'RADIO') {
			if(elemF[i].checked) {
				categories += elemF[i].value + '*'			
			}				
		}
		
	} 
	return categories;
}


function writeProductByDirection(productid,direction) {
	var categories = selectedCategories();
	var freetext;
	var elem = document.getElementById('freetext');
	if(elem == null) freetext = '';
	freetext = elem.value;
		
	var productsDiv =  document.getElementById("products");
	//alert(id);
	var response = Viking.Templates.Documents.ProductSelector.Products.DisplayProductByDirection(documentid, productid, categories, freetext, direction);
	if (response.error!=null) 
		productsDiv.innerHTML = response.error
	else
	{
		productsDiv.innerHTML = response.value;
		fadetoview('fade');
	}
}


function fadetoview(objname){
	var objholder=document.getElementById(objname);
	if(objholder == null) return false;
	if(objholder.filters == undefined) return false; 	
	objholder.filters[0].apply();
	objholder.style.visibility= 'visible';
	objholder.filters[0].play();
	return false;
}
// -->
