// Sorted Product Support V2.10 - INCLUDES SORTING PRODUCTS, SECTIONS AND SEARCH RESULTS

// DOM Ready detect based on www.kryogenix.org/days/2007/09/26/shortloaded
(function(i) {var u =navigator.userAgent;var e=/*@cc_on!@*/false; var st =
setTimeout;if(/webkit/i.test(u)){st(function(){var dr=document.readyState;
if(dr=="loaded"||dr=="complete"){i()}else{st(arguments.callee,10);}},10);}
else if((/mozilla/i.test(u)&&!/(compati)/.test(u)) || (/opera/i.test(u))){
document.addEventListener("DOMContentLoaded",i,false); } else if(e){     (
function(){var t=document.createElement('doc:rdy');try{t.doScroll('left');
i();t=null;}catch(e){st(arguments.callee,0);}})();}})(sortinit);

// Drillpine.biz code
var prodlines = new Array();		// for Products
var spanids = new Array();
var lastsorttype = 'default';
var bReadyToSort = false;

var searchlines = new Array();		// for Search Results
var searchspanids = new Array();
var searchlastsorttype = 'default';
var bSearchReadyToSort = false;

var sectlines = new Array();		// for Sections
var sectspanids = new Array();
var sectlastsorttype = 'default';
var bSectReadyToSort = false;

var bSortInitalised = false;

//  Search Results Related
function searchreseq(seqtype){			// resequence search results
	if ( ! (bSearchReadyToSort || bPageIsLoaded) )
		{
		alert('Please wait until the page has fully loaded. (SRC)');
		return false;
		}
	searchlines.length = 0;
	searchspanids.length = 0;
	var spans = document.getElementsByTagName('span');
	for ( var i=0; i<spans.length; i++ )
		{
		if ( spans[i].id.indexOf('searchsortline_') == 0 )
			{
			searchspanids.push(spans[i]);
			searchlines.push({
				id: spans[i].id, 
				price: spans[i].getAttribute('price').replace(/[^\d\.]/g,''), 
				seq: spans[i].getAttribute('seq'), 
				pname: spans[i].getAttribute('pname'),
				phtml: spans[i].innerHTML
				});
			}
		}
	
		
	if ( seqtype == 'lowhigh' ) searchlines.sort(function(a,b){return a.price - b.price});
	if ( seqtype == 'highlow' ) searchlines.sort(function(a,b){return b.price - a.price});
	if ( seqtype == 'default' ) searchlines.sort(function(a,b){return a.seq - b.seq});
	if ( seqtype == 'alpha' )   searchlines.sort(function(a,b){return (a.pname <= b.pname) ? -1 : 1;});
	if ( seqtype == 'reverse' ) searchlines.sort(function(a,b){return (b.pname <= a.pname) ? -1 : 1;});
	searchlastsorttype = seqtype;
	setCookie('SEARCHSORTTYPE', searchlastsorttype);
	searchshowsorttype();
	for ( var i=0; i<searchlines.length; i++ )
		{
		searchspanids[i].innerHTML = searchlines[i].phtml;
		searchspanids[i].id = searchlines[i].id; 
		searchspanids[i].setAttribute('price', searchlines[i].price); 
		searchspanids[i].setAttribute('seq', searchlines[i].seq); 
		searchspanids[i].setAttribute('pname', searchlines[i].pname); 
		}
	return false;
}

function searchshowsorttype(){		// highlight the type of sort that's currently in use
	if ( document.getElementById('searchsortdropdown') )	// see if we're using drop-downs
		{
		var dropdowns = document.getElementsByTagName('select');	// all drop-downs		
		for ( var i=0; i<dropdowns.length; i++ )
			{
			if ( dropdowns[i].name == 'searchsortdropdown' )		// relevant one
				{
				var sdd = dropdowns[i];
				for ( var j=0; j<sdd.options.length; j++ )
					{
					if ( sdd.options[j].value == searchlastsorttype ) sdd.selectedIndex = j;
					}
				}
			}	
		}	
	else								
		{
		var buttonlinks = document.getElementsByTagName('input');	// looking for buttons
		for ( var i=0; i<buttonlinks.length; i++ )
			{
			if ( buttonlinks[i].name == 'searchsortlink' )
				{
				buttonlinks[i].className = ( buttonlinks[i].id == searchlastsorttype ) ? 'searchsortactive' : 'searchsortinactive';
				}	
			}
		var buttonlinks = document.getElementsByTagName('a');		// looking for A tags
		for ( var i=0; i<buttonlinks.length; i++ )
			{
			if ( buttonlinks[i].name == 'searchsortlink' )
				{
				buttonlinks[i].className = ( buttonlinks[i].id == searchlastsorttype ) ? 'searchsortactive' : 'searchsortinactive';
				}	
			}
		}
}


// Section Related
function sectionseq(seqtype){			// resequence Sections
	if ( ! (bSectReadyToSort || bPageIsLoaded) )
		{
		alert('Please wait until the page has fully loaded. (SECT)');
		return false;
		}
	sectlines.length = 0; 
	sectspanids.length = 0;					
	var spans = document.getElementsByTagName('span');
	for ( var i=0; i<spans.length; i++ )
		{
		if ( spans[i].id.indexOf('sectionline_') == 0 )
			{
			sectspanids.push(spans[i]);
			sectlines.push({	
				id: spans[i].id, 
				price: spans[i].getAttribute('price'), 
				seq: spans[i].getAttribute('seq'), 
				pname: spans[i].getAttribute('pname'),
				phtml: spans[i].innerHTML
				});
			}
		}
	
	if ( seqtype == 'lowhigh' ) sectlines.sort(function(a,b){return a.price - b.price});
	if ( seqtype == 'highlow' ) sectlines.sort(function(a,b){return b.price - a.price});
	if ( seqtype == 'default' ) sectlines.sort(function(a,b){return a.seq - b.seq});
	if ( seqtype == 'alpha' )   sectlines.sort(function(a,b){return (a.pname <= b.pname) ? -1 : 1;});
	if ( seqtype == 'reverse' ) sectlines.sort(function(a,b){return (b.pname <= a.pname) ? -1 : 1;});
	sectlastsorttype = seqtype;
	setCookie('SECTSORTTYPE', sectlastsorttype);
	sectshowsorttype();
	for ( var i=0; i<sectlines.length; i++ )
		{
		sectspanids[i].innerHTML = sectlines[i].phtml;
		sectspanids[i].id = sectlines[i].id; 
		sectspanids[i].setAttribute('price', sectlines[i].price); 
		sectspanids[i].setAttribute('seq', sectlines[i].seq); 
		sectspanids[i].setAttribute('pname', sectlines[i].pname); 
		}
	return false;
}

function sectshowsorttype(){		// highlight the type of sort that's currently in use
	if ( document.getElementById('sectionsortdropdown') )	// see if we're using drop-downs
		{
		var dropdowns = document.getElementsByTagName('select');	// all drop-downs		
		for ( var i=0; i<dropdowns.length; i++ )
			{
			if ( dropdowns[i].name == 'sectionsortdropdown' )		// relevant one
				{
				var sdd = dropdowns[i];
				for ( var j=0; j<sdd.options.length; j++ )
					{
					if ( sdd.options[j].value == sectlastsorttype ) sdd.selectedIndex = j;
					}
				}
			}	
		}	
	else								
		{
		var buttonlinks = document.getElementsByTagName('input');	// looking for buttons
		for ( var i=0; i<buttonlinks.length; i++ )
			{
			if ( buttonlinks[i].name == 'sectsortlink' )
				{
				buttonlinks[i].className = ( buttonlinks[i].id == sectlastsorttype ) ? 'sectsortactive' : 'sectsortinactive';
				}	
			}
		var buttonlinks = document.getElementsByTagName('a');		// looking for A tags
		for ( var i=0; i<buttonlinks.length; i++ )
			{
			if ( buttonlinks[i].name == 'sectsortlink' )
				{
				buttonlinks[i].className = ( buttonlinks[i].id == sectlastsorttype ) ? 'sectsortactive' : 'sectsortinactive';
				}	
			}
		}
}

// Product Related
function reseq(seqtype, gotoanchor){			// resequence products
	if ( ! (bReadyToSort || bPageIsLoaded) )
		{
		alert('Please wait until the page has fully loaded. (PROD)');
		return false;
		}
	prodlines.length = 0;
	spanids.length = 0;
	var spans = document.getElementsByTagName('span');
	for ( var i=0; i<spans.length; i++ )
		{
		if ( spans[i].id.indexOf('sortline_') == 0 )
			{
			spanids.push(spans[i]);
			prodlines.push({
				id: spans[i].id, 
				price: spans[i].getAttribute('price'), 
				seq: spans[i].getAttribute('seq'), 
				pname: spans[i].getAttribute('pname'),
				phtml: spans[i].innerHTML
				});
			}
		}
		
	if ( seqtype == 'lowhigh' ) prodlines.sort(function(a,b){return a.price - b.price});
	if ( seqtype == 'highlow' ) prodlines.sort(function(a,b){return b.price - a.price});
	if ( seqtype == 'default' ) prodlines.sort(function(a,b){return a.seq - b.seq});
	if ( seqtype == 'alpha' )   prodlines.sort(function(a,b){return (a.pname <= b.pname) ? -1 : 1;});
	if ( seqtype == 'reverse' ) prodlines.sort(function(a,b){return (b.pname <= a.pname) ? -1 : 1;});
	lastsorttype = seqtype;
	setCookie('SORTTYPE', lastsorttype);
	showsorttype();
	for ( var i=0; i<prodlines.length; i++ )
		{
		spanids[i].innerHTML = prodlines[i].phtml;
		spanids[i].id = prodlines[i].id; 
		spanids[i].setAttribute('price', prodlines[i].price); 
		spanids[i].setAttribute('seq', prodlines[i].seq); 
		spanids[i].setAttribute('pname', prodlines[i].pname); 
		}
	if ( gotoanchor && location.hash ) scrolltoanchor(location.hash);	// Product Page just loaded and Anchor so we need to reposition

	//
	//  Some Drillpine add-ons need reactivated after the DOM has been fiddled with
	//
	
	// Tabber (needs V210 onwards) - reset Tabber
	if( window.resetallpanes ) resetallpanes();

	// Lightbox / Slimbox
	if ( window.Slimbox && window.Slimbox.scanPage ) Slimbox.scanPage();
	
	return false;
}
	
function showsorttype(){		// highlight the type of sort that's currently in use
	if ( document.getElementById('sortdropdown') )	// see if we're using drop-downs
		{
		var dropdowns = document.getElementsByTagName('select');	// all drop-downs		
		for ( var i=0; i<dropdowns.length; i++ )
			{
			if ( dropdowns[i].name == 'sortdropdown' )		// relevant one
				{
				var sdd = dropdowns[i];
				for ( var j=0; j<sdd.options.length; j++ )
					{
					if ( sdd.options[j].value == lastsorttype ) sdd.selectedIndex = j;
					}
				}
			}	
		}	
	else								
		{
		var buttonlinks = document.getElementsByTagName('input');	// looking for buttons
		for ( var i=0; i<buttonlinks.length; i++ )
			{
			if ( buttonlinks[i].name == 'sortlink' )
				{
				buttonlinks[i].className = ( buttonlinks[i].id == lastsorttype ) ? 'sortactive' : 'sortinactive';
				}	
			}
		var buttonlinks = document.getElementsByTagName('a');		// looking for A tags
		for ( var i=0; i<buttonlinks.length; i++ )
			{
			if ( buttonlinks[i].name == 'sortlink' )
				{
				buttonlinks[i].className = ( buttonlinks[i].id == lastsorttype ) ? 'sortactive' : 'sortinactive';
				}	
			}
		}
}

// General code

function hidetagswithid(tag, id){	// hide all tags with ID
	var alltags = document.getElementsByTagName(tag);  		// all such tags
	for ( var i=0; i<alltags.length; i++ )
		{
		if ( alltags[i].id == id )				// with ID
			{
			alltags[i].style.display = 'none'; 			// hide entire control
			alltags[i].style.visibility = 'hidden';			// hide entire control
			}
		}
}

function scrolltoanchor(anc){	// reposition to display anchor
	var ancs = document.getElementsByTagName('a');
	anc = anc.replace(/.*\#/,'');		// Search highlight passes duplicate anchors - lose one
	if ( ancs[anc] ) ancs[anc].scrollIntoView(true);
}

function sortinit(){				// called when DOM is loaded
	if (arguments.callee.done) return;
	arguments.callee.done = true;
	bSortInitialised = true;
	// Products
	if ( document.getElementById('sortwidget') ) 
		{
		bReadyToSort = true;
		lastsorttype = getCookie('SORTTYPE');
		if ( lastsorttype == null ) lastsorttype = 'default';
		setCookie('SORTTYPE', lastsorttype);
		showsorttype();		
		if ( lastsorttype != 'default' ) 
			{
			reseq(lastsorttype, true);
			}
		}	

	// Search Results
	if ( document.getElementById('searchsortwidget') ) 
		{
		bSearchReadyToSort = true;
		searchlastsorttype = getCookie('SEARCHSORTTYPE');
		if ( searchlastsorttype == null ) searchlastsorttype = 'default';
		setCookie('SEARCHSORTTYPE', searchlastsorttype);
		searchshowsorttype();		
		if ( searchlastsorttype != 'default' ) 
			{
			searchreseq(searchlastsorttype);
			}
		}	
		
	// Sections
	if ( document.getElementById('sectsortwidget') ) 
		{
		// check for no prices available and hide buttons if so	
		var spans = document.getElementsByTagName('span');
		var rtot = 0;	
		for ( var i=0; i<spans.length; i++ )
			{
			if ( spans[i].id.indexOf('sectionline_') == 0 )
				{
				var price = spans[i].getAttribute('price');
				rtot += (price != null) ? price - 0 : 0;
				}
			}
		if ( rtot == 0 )
			{
			if ( SectionSortLinksFinalOnly )					// do we only show links on final Sections
				{
				hidetagswithid('span', 'sectsortwidget');			// hide all sort widgets
				}
			else
				{	
				if ( document.getElementById('sectpricelinks') )		// button or text links
					{
					hidetagswithid('span', 'sectpricelinks');
					}
				if ( document.getElementById('sectionsortdropdown') )		// drop-down list
					{
					var dropdowns = document.getElementsByTagName('select');	// all drop-downs		
					for ( var i=0; i<dropdowns.length; i++ )
						{
						if ( dropdowns[i].id == 'sectionsortdropdown' )		// relevant one
							{
							var opts = dropdowns[i].options;
							for ( var j=opts.length; j>0; j-- )		// scan backwards as we're deleting items
								{
								if ( (opts[j - 1].value == "lowhigh") || (opts[j - 1].value == "highlow") )
									{
									opts[j - 1] = null;
									}
								}
							}
						}			
					}
				}	
			}			

		bSectReadyToSort = true;
		sectlastsorttype = getCookie('SECTSORTTYPE');
		if ( sectlastsorttype == null ) sectlastsorttype = 'default';
		setCookie('SECTSORTTYPE', sectlastsorttype);
		sectshowsorttype();
		// only resequence if button showing and we've a non default sequence		
		if ( (document.getElementById('sectsortwidget').style.display != 'none') && (sectlastsorttype != 'default') ) 
			{
			sectionseq(sectlastsorttype);
			}
			
		}
}

function onloadsortinit(){			// optionally called on onload
	if ( ! bSortInitalised ) sortinit();				// only init if it's not already run
}

// in case we cannot activate on DOM loaded
if (window.attachEvent) 						// IE 
	{ 
	window.attachEvent("onload", onloadsortinit); 
	} 
else 									// DOM
	{  
	window.addEventListener("load", onloadsortinit, false); 
	}

