/******************* B R O W S E R ************/
function browserObj( formObj )
{
	this.searchResultsHide = null
	this.formObj = formObj;
	this.init();
}

browserObj.prototype.init = function( )
{
	var thisObj = this;
	thisObj.formObj.onsubmit = function() { return thisObj.filtering(); };
	
	// HIDE SUBMIT BUTTON
	var submits = thisObj.formObj.getElementsByTagName('input');
	for (var x=0; x<submits.length; x++)
	{
		if (submits[x].type == 'submit')
			submits[x].style.display = 'none';
		if ( (submits[x].type == 'text') && (submits[x].name == 'search') )
		{
			thisObj.searchObj = submits[x];
			submits[x].onkeyup = function() { thisObj.waitFiltering(); }
		}
	}
	var selects = thisObj.formObj.getElementsByTagName('select');
	for (var y=0; y<selects.length; y++)
	{
		if(selects[y].id=="model-filter") continue;
		selects[y].onchange = function() { thisObj.filtering(); }
	}
	var viewmodes = $$(thisObj.formObj, 'INPUT', 'viewmode');
	for (var c=0; c<viewmodes.length; c++)
	{
		viewmodes[c].style.display = 'none';
		viewmodes[c].onclick = function() { return false; };
	}
	var viewmodes_labels = $$(thisObj.formObj, 'LABEL', 'viewmode');
	for (var cl=0; cl<viewmodes_labels.length; cl++)
	{
		viewmodes_labels[cl].onclick = function() { thisObj.check( this ); thisObj.uncheck( (this.getAttribute('id') == 'label_viewmode_default') ? $('label_viewmode_thumb') : $('label_viewmode_default') ); thisObj.filtering(); };
	}
	var uls = thisObj.formObj.getElementsByTagName('ul');
	for (var i=0; i<uls.length; i++)
	{
		var inputs = uls[i].getElementsByTagName('input');
		for (var k=0; k<inputs.length; k++)
		{
			if (inputs[k].type == 'checkbox')
			{
				inputs[k].style.display = 'none';
				inputs[k].onclick = function() { return false; }
			}
		}
		// IE
		var labels = uls[i].getElementsByTagName('label');
		for (var j=0; j<labels.length; j++)
		{
			if (j==0)
			{
				labels[j].childs = labels;
				labels[j].onclick = function() { thisObj.check( this ); thisObj.uncheckChilds( this ); thisObj.filtering(); }
			}
			else
			{
				labels[j].parent = labels[0];
				labels[j].onclick = function() { thisObj.switching( this ); thisObj.uncheckParent( this.parent ); thisObj.filtering(); }
			}
		}
	}
	thisObj.initDynamic( $('dynamic-content') );
}

browserObj.prototype.initDynamic = function( obj )
{
	var thisObj = this;
	var comparisons = obj.getElementsByTagName('input');
	for (var s=0; s<comparisons.length; s++)
	{
		if ( (comparisons[s].type == 'checkbox') && (comparisons[s].getAttribute('rel') == 'comparison') )
		{
			comparisons[s].onclick = function() { thisObj.parseCompare( this ); }
		}
	}
	/*var pages = obj.getElementsByTagName('a');
	for (var i=0; i<pages.length; i++)
	{
		if (pages[i].getAttribute('rel') == 'changePage')
		{
			pages[i].onclick = function() { return thisObj.changePage( this.href ); }
		}
	}*/
}

browserObj.prototype.switching = function( label )
{
	var thisObj = this;
	if (label.className == 'paramNotSelected')
	{
		thisObj.check(label);
	}
	else
	{
		thisObj.uncheck(label);
	}
}
browserObj.prototype.check = function( label )
{
	var input = $(label.getAttributeNode('for').value);
	input.checked = true;
	label.className = 'paramSelected';
}
browserObj.prototype.uncheck = function( label )
{
	var input = $(label.getAttributeNode('for').value);
	input.checked = false;
	label.className = 'paramNotSelected';
}
browserObj.prototype.uncheckChilds = function( label )
{
	for (var i=0; i<label.childs.length; i++)
	{
		if (i>0)
			this.uncheck( label.childs[i] );
	}
}
browserObj.prototype.uncheckParent = function( parent )
{
	this.uncheck( parent );
	var oneIsSelected = false;
	for (var i=0; i<parent.childs.length; i++)
	{
		var input = $(parent.childs[i].getAttributeNode('for').value);
		if (input.checked == true)
			oneIsSelected = true;
	}
	if (!oneIsSelected)
		this.check(parent);
}

browserObj.prototype.getFilteringQuery = function( )
{
	var thisObj = this;
	var getString = '';
	//var getString = thisObj.formObj.action;/*.replace(/index.php/, 'index2.php');*/
	var selects = thisObj.formObj.getElementsByTagName('select');
	for (var j=0; j<selects.length; j++)
	{
		if (getString.charAt(getString.length-1) != '?')
			getString += '&';
		getString += selects[j].name + '=' + selects[j].options[selects[j].selectedIndex].value;
	}
	var inputs = thisObj.formObj.getElementsByTagName('input');
	for (var i=0; i<inputs.length; i++)
	{
		if ( ( (inputs[i].checked) && (inputs[i].type=='checkbox') ) || ( (inputs[i].checked) && (inputs[i].type=='radio') ) || (inputs[i].type == 'text') )
		{
			if (getString.charAt(getString.length-1) != '?')
				getString += '&';
			getString += inputs[i].name + '=' + inputs[i].value;
		}
	}
	return getString;
}
browserObj.prototype.filtering = function( )
{
	var thisObj = this;
	// disable fast search
	//thisObj.searchObj.disabled = true;
	
	var getString = thisObj.formObj.action;/*.replace(/index.php/, 'index2.php');*/
	getString += thisObj.getFilteringQuery();
	if (getString.charAt(getString.length-1) != '?')
		getString += '&';
	getString += 'onthebody=true';
	//
	var Ajax = new AjaxObj();
	Ajax.makeRequest( 'post', getString, thisObj.showResults );
	page.wait(1);
	
	return false;
}

browserObj.prototype.waitFiltering = function( )
{
	var thisObj = this;
	if (thisObj.searchObj.value.length > 2)
	{
		if (thisObj.searchResultsWait)
			clearTimeout(thisObj.searchResultsWait);
		thisObj.searchResultsWait = setTimeout("browseEngine.filtering()", 1000);
	}
}

browserObj.prototype.changePage = function( href )
{
	var thisObj = this;
	var getString = href;/*.replace(/index.php/, 'index2.php');*/
	if (getString.charAt(getString.length-1) != '?')
		getString += '&';
	getString += 'onthebody=true';
	var Ajax = new AjaxObj();
	Ajax.makeRequest( 'post', getString, thisObj.showResults );
	return false;
}

browserObj.prototype.showResults = function( response )
{
	/*var thisObj = this;*/
	
	$('dynamic-content').innerHTML = response;
	browseEngine.initDynamic( $('dynamic-content') );
	page.wait(0);
	var scroller=document.getElementById('anchor-scroller');
	if(scroller && scroller.scrollIntoView && document.body.scrollTop>100)scroller.scrollIntoView(true);
	// enable fast search
	//browse.searchObj.disabled = false;
}

// C O M P A R I S O N //
browserObj.prototype.parseCompare = function( obj )
{
	var thisObj = this;
	var getString;
	var pid = obj.value;	// product id
	var cid = obj.getAttribute('categories_id');
	if (obj.checked == true)
	{
		getString = 'index.php?load=comparison&task=module&action=add&categories_id='+cid+'&products_id='+pid+'&onthefly=true';
	}
	else
	{
		getString = 'index.php?load=comparison&task=module&action=remove&categories_id='+cid+'&products_id='+pid+'&onthefly=true';
	}
	var Ajax = new AjaxObj();
	Ajax.makeRequest( 'post', getString, thisObj.updateComparisonModule );
}
browserObj.prototype.updateComparisonModule = function( response )
{
	$('comparison').innerHTML = response;
}


/****** CATEGORY PAGE WITH PARAMS ***********/
function paramsObj( formObj, cPath )
{
	this.formObj = formObj;
	this.cPath = cPath;
	this.init();
}

paramsObj.prototype.init = function( )
{
	var thisObj = this;
	thisObj.lists = $$(thisObj.formObj, 'UL', '*filters');
	for (var i=0; i<thisObj.lists.length; i++)
	{
		thisObj.lists[i].inputs = $$(thisObj.lists[i], 'INPUT', '*');
		if (thisObj.lists[i].className == 'switch-filters')
		{
			for (var k=0; k<thisObj.lists[i].inputs.length; k++)
			{
				thisObj.lists[i].inputs[k].index = i;
				if (k == 0)
				{
					thisObj.lists[i].inputs[k].onclick = function() { paramsEngine.unlockChildrens(this); paramsEngine.filteringCount(); }
				}
				else
				{
					// subs
					thisObj.lists[i].inputs[k].onclick = function() { paramsEngine.unlockParent(this); paramsEngine.filteringCount(); }
				}
			}
		}
		if (thisObj.lists[i].className == 'special-filters')
		{
			for (var k=0; k<thisObj.lists[i].inputs.length; k++)
			{
				thisObj.lists[i].inputs[k].onclick = function() { paramsEngine.filteringCount(); }
			}
		}
	}
}

paramsObj.prototype.unlockChildrens = function( obj )
{
	var thisObj = this;
	
	var i = obj.index;
	var checked = true;
	for (var k=1; k<thisObj.lists[i].inputs.length; k++)
	{
		if (obj.checked == true)
		{
			thisObj.lists[i].inputs[k].checked = false;
		}
	}
}

paramsObj.prototype.unlockParent = function( obj )
{
	var thisObj = this;
	
	var i = obj.index;
	var checked = true;
	for (var k=0; k<thisObj.lists[i].inputs.length; k++)
	{
		if (thisObj.lists[i].inputs[k].checked == true)
		{
			checked = false;
		}
	}
	thisObj.lists[i].inputs[0].checked = checked;
}

paramsObj.prototype.filteringCount = function( )
{
	var thisObj = this;
	
	if (thisObj.searchResultsHide)
		clearTimeout(thisObj.searchResultsHide);

	var getString = 'index.php?load=search-results&task=module&cPath='+thisObj.cPath;
	for (var i=0; i<thisObj.lists.length; i++)
	for (var k=0; k<thisObj.lists[i].inputs.length; k++)
	{
		if ( (thisObj.lists[i].inputs[k].checked) )
		{
			getString += '&' + thisObj.lists[i].inputs[k].name + '=' + thisObj.lists[i].inputs[k].value;
		}
	}
	
	getString += '&onthefly=true';
	//
	var Ajax = new AjaxObj();
	Ajax.makeRequest( 'post', getString, thisObj.showResultsCount );
	
	return false;
}

paramsObj.prototype.showResultsCount = function( response )
{
	$('preview-results').innerHTML = response;
	$('preview-results').style.visibility = 'visible';
}

/****** CATEGORY HOME PAGE ***********/
function categoriesObj( )
{
	this.init();
}

categoriesObj.prototype.init = function( )
{
	var thisObj = this;
	thisObj.gates = $$(document, 'A', 'gate');
	for (var i=0; i<thisObj.gates.length; i++)
	{
		thisObj.gates[i].onclick = function() { catEngine.loadPage(this); return false; }
	}
}

categoriesObj.prototype.loadPage = function( a )
{
	var thisObj = this;
	
	if (thisObj.searchResultsHide)
		clearTimeout(thisObj.searchResultsHide);

	var getString = 'index.php?load=main-filters&task=module&cPath=' + a.getAttribute('REL'); ;
	
	getString += '&onthefly=true';
	//
	var Ajax = new AjaxObj();
	Ajax.makeRequest( 'post', getString, thisObj.showPage );
	
	return false;
}

categoriesObj.prototype.showPage = function( response )
{
	$('dynamic-content').innerHTML = response;
	$('dynamic-content').style.visibility = 'visible';
	
}

