btc.search =
{
	scrollToY : 750,
	scrolledTo : 0,
	scrollDelta : 25,
	scrollLog : null,
	scrollIntervalId : null,
	error : null,
	
	/**
	*	initialize the result search functionality
	*/
	init : function ()
	{	
		btc.search.error = document.createElement ( 'tbody' );
		btc.search.error.id = 'error-message';
		btc.search.error.className = 'error-message';
		var tr = document.createElement ( 'tr' );
		var td = document.createElement ( 'td' );
		td.colSpan = 9;
		var span = document.createElement ('span');
		span.appendChild ( document.createTextNode ( window.txtNoCompat ) );
		td.appendChild ( span );
		tr.appendChild ( td );		
		btc.search.error.appendChild ( tr );		
		btc.search.selectable ();
	},	
	
	/**
	*	page redirection methods
	*/
	loadPage : function ( strUrl )
	{
		window.location.href = '/phones/compatibility/'+strUrl;
	},
	
	loadBrand : function ( objSelect )
	{
		btc.search.loadPage ('phones.php?brandId='+objSelect.options[objSelect.selectedIndex].value);
	},
	
	loadPhone : function ( objSelect, brandId )
	{
		btc.search.loadPage ('phones.php?brandId='+brandId+'&phoneId='+objSelect.options[objSelect.selectedIndex].value);
	},
	
	loadDevice : function ( objSelect )
	{
		btc.search.loadPage ('devices.php?deviceId='+objSelect.options[objSelect.selectedIndex].value);
	},
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	/**
	*	helper methods
	*/
	inArray : function ( value, arr )
	{
		var length = arr.length;
		for(var index = 0; index < length; index++)
		{
			if(value == arr[index])
			{
				return true;
			}
		}
		return false;
	},
	
	
	
	
		
	
	
	
	
	
	
	
	
	
	
	
	
	/**
	*	cache properties
	*/
	cache : null,
	cacheSize : 0,
		
	/**
	*	caches all records in the result table
	*/
	doCache : function ()
	{
		btc.search.objResults = document.getElementById ('compatibilityresults');;
		var children = btc.search.objResults.childNodes;
		var length = children.length;
		
		if( this.cache == null )
		{
			btc.search.cache = [];			
			
			for (var index = 0; index < length; index++)
			{
				var child = children[index];
				
				if(child.nodeType ==  1)
				{
					var clone = child.cloneNode(true);
					btc.search.selectable (clone.getElementsByTagName('input')[0]);
					btc.search.cache.push (clone);
				}
			}
		}	
		
		btc.search.cacheSize = btc.search.cache.length;
	},
		
	
	
	
	
	
	
	
	
	
	
	
	/**
	*	result table reference 
	*/
	objResults : null,
	
	/**
	*	removes all records from the result table
	*/
	clean : function ( )
	{	
		var products = [];
				
		var child = btc.search.objResults.childNodes[0];
		
		while (child)
		{
			if(child.nodeType == 1)
			{
				if(child.getElementsByTagName('input')[0].checked)
				{
					products.push (child.getAttribute('id'));
				}
			}
			
			btc.search.objResults.removeChild (child);
			child = btc.search.objResults.childNodes[0]
		}
		
		return products;
	},
	
	/**
	*	fills the result table with the initial records from the cache
	*/
	reset : function ( e )
	{
		btc.event.cancel( e );
		btc.search.clean ();
		
		var length = btc.search.cacheSize;
		
		for (var index = 0; index < length; index++)
		{
			var child = btc.search.cache[index];
			btc.search.objResults.appendChild (child);
			
			if(index % 2 == 0)
			{
				child.className = 'odd';
			}
			else
			{
				child.className = 'even';
			}
			
			child.getElementsByTagName('input')[0].checked = false;
		}
	},

	
	
	
	
	
	
	
	
	
	
	
	
	
	
	/**
	*	attaches event handlers to the result items checkbox
	*/
	selectable : function ( element )
	{
		if ( element && element.tagName.toLowerCase() == 'input' && element.type == 'checkbox' )
		{
			btc.event.register( element , 'click' , function ( e ){btc.search.change (e); return false;});
		}
		else
		{
			var objCompatibilityResults = document.getElementById ('compatibilityresults');
			if(objCompatibilityResults)
			{
				/**
				*	scrolldown to the resulttable
				*/
				btc.search.scrollToResults ();
				
				var children = objCompatibilityResults.childNodes;
				var length = children.length;
				
				for (var index = 0; index < length; index++)
				{
					var child = children[index];
					if(child.nodeType == 1)
					{
						btc.search.selectable (child.getElementsByTagName('input')[0]);
					}
				}
			}
		}
	},
	
	/**
	*	event handler for the result items checkbox changes
	*/
	change : function ( e )
	{		
		var objTarget = e.target || e.srcElement;	
		
		if(objTarget.tagName.toLowerCase() == 'input' && objTarget.type == 'checkbox')
		{
			var objRow = objTarget.parentNode.parentNode.parentNode;			
			btc.search.setRowStyle (objRow);
		}	
	},
	
	/**
	*	turns highlighting on/off for the result table items
	*/
	setRowStyle : function ( objRow )
	{
		var objTarget = objRow.getElementsByTagName('input')[0]
		var blChecked = objTarget.checked ? true : false;
		var className = btc.element.getAttr(objRow, 'class');
			
		btc.element.setAttr (objRow, 'class', (blChecked ? className+" selected" : className.replace(/selected/g, '')));
		
		var arrTds = objRow.getElementsByTagName('td');
		var length = arrTds.length;
		for (var index = 0; index < length; index++)
		{
			var td = arrTds[index];
			if(td.className == 'title')
			{						
				var img = td.getElementsByTagName('img')[0];
				break;
			}
		}	
		
		if(img)
		{
			var src = img.src;
			var blOdd = btc.element.getAttr(objRow, 'class').indexOf('odd') == -1
			
			if(blChecked)
			{
				img.src =  blOdd ? src.replace(/\/even\//, '/selected/') : src.replace(/\/odd\//, '/selected/');
			}
			else
			{
				img.src = blOdd ? src.replace(/\/selected\//, '/even/') : src.replace(/\/selected\//, '/odd/');
			}
		}
	},
	
	
	
	
	
	/**
	*	filter related properties
	*/
	currentProducts : [],
	currentFeature : null,
	currentBrand : null,
	
	/**
	* event handler for all filter possisbilities
	*/
	filter : function ( )
	{
		var length = btc.search.cacheSize;
		var records = 0;	
		
		for (var index = 0; index < length; index++)
		{
			var child = btc.search.cache[index];
			
			var checked = false;
			var brand = false;
			var feature = false;		
			
			if( btc.search.currentProducts.length == 0 || btc.search.inArray(child.getAttribute('id'), btc.search.currentProducts ))
			{
				checked = true;				
			}
			
			if( btc.search.currentFeature == null || child.getElementsByTagName ('td')[btc.search.currentFeature].childNodes.length > 0 )
			{
				feature = true;
			}
			
			if( btc.search.currentBrand == null || child.getAttribute('brand') == btc.search.currentBrand)
			{
				brand = true;
			}
					
			if(checked == true && brand == true && feature == true)
			{
				btc.search.objResults.appendChild (child);
				
				child.className = records % 2 == 0 ? 'odd' : 'even';
				var img = child.getElementsByTagName ('img')[0];
				img.src = records % 2 == 0 ? img.src.replace(/\/even\//, '/odd/') : img.src.replace(/\/odd\//, '/even/') 
				btc.search.setRowStyle (child);
				records++;
			}
		}
		
		if (records === 0)
		{
			btc.search.objResults.parentNode.appendChild ( btc.search.error );
			
			document.getElementById ('compare-top-body').style.display = 'none';
			document.getElementById ('compare-bottom-body').style.display = 'none';
		}
		else
		{
			if ( document.getElementById ('error-message') )
			{	
				document.getElementById ('error-message').parentNode.removeChild(document.getElementById ('error-message'));
			}
			
			try
			{
				document.getElementById ('compare-top-body').style.display = 'table-row-group';
				document.getElementById ('compare-bottom-body').style.display = 'table-row-group';
			}
			catch ( e )
			{
				document.getElementById ('compare-top-body').style.display = 'block';
				document.getElementById ('compare-bottom-body').style.display = 'block';
			}
		}
	},
	
	/**
	*	event handler for the compare buttons
	*/
	filterOnProducts : function ( e )
	{
		btc.event.cancel( e );
		btc.search.doCache ();
		btc.search.currentProducts = btc.search.clean ();
		btc.search.filter ();
	},
	
	/**
	*	event handler for the filter select
	*/
	filterOnFeature : function ( e )
	{
		btc.event.cancel( e );
		btc.search.doCache ();
		btc.search.clean ();
		
		var objFilterTop = document.getElementById ('btconn-filter-top');
	   var objFilterBottom = document.getElementById ('btconn-filter-bottom');	  
	    
		var objTarget = e.target || e.srcElement;				
		var objOther = objTarget == objFilterTop ? objFilterBottom : objFilterTop;
		objOther.selectedIndex = objTarget.selectedIndex;	
		
		if(objTarget.selectedIndex > 0)
		{
			btc.search.currentFeature = objTarget.selectedIndex + 1;
		}
		else
		{
			btc.search.currentFeature = null;
		}
		
		btc.search.filter ();
	},

	/**
	*	event handler for the brand filer selectbox
	*/
	filterOnBrand : function ( e )
	{
		btc.event.cancel( e );
		btc.search.doCache ();
		btc.search.clean ();
		
	    var objFilterTopBrand = document.getElementById ('btconn-filter-top-brand');
	    var objFilterBottomBrand = document.getElementById ('btconn-filter-bottom-brand');	   
		
	    var objTarget = e.target || e.srcElement;			
		var objOther = objTarget == objFilterTopBrand ? objFilterBottomBrand : objFilterTopBrand;
		objOther.selectedIndex = objTarget.selectedIndex;
		
		if(objTarget.selectedIndex > 0)
		{
			btc.search.currentBrand = objTarget.value;
		}
		else
		{
			btc.search.currentBrand = null;
		}
		
		btc.search.filter ();
	},
	
	/**
	*  function to scroll to the results table
	*/
	scrollToResults : function ()
	{
		btc.search.scrollIntervalId = window.setInterval 
		(
			function ()
			{
					if(window.pageYOffset)
					{
						btc.search.scrolledTo = window.pageYOffset || 0;
					}
					else if(document.documentElement)
					{
						btc.search.scrolledTo = document.documentElement.scrollTop || 0;
					}
					else 
					{
						btc.search.scrolledTo = document.body.scrollTop || 0;
					}
										
					if(Math.abs(btc.search.scrolledTo - btc.search.scrollToY) <= btc.search.scrollDelta || btc.search.scrollLog == btc.search.scrolledTo)
					{
						btc.search.scrollLog = null;
						window.clearInterval (btc.search.scrollIntervalId);	
					}
					else
					{	
						btc.search.scrollLog = btc.search.scrolledTo
																	
						if(btc.search.scrolledTo > btc.search.scrollToY)
						{
							var scrollDelta = -btc.search.scrollDelta;
						}
						else
						{
							var scrollDelta = btc.search.scrollDelta;
						}
						
						window.scrollTo (0, btc.search.scrolledTo + scrollDelta);
					}
			}
		,10);	
	}
};
