var DEFAULT_QUERY_ADDITION = "-filetype:swf"; //site:www.go-pokemon.com
var RESULTS_PER_PAGE = 8;

var webSearch;
var currentQuery;


var noResultsMsg;

/**
 * Reset the searcher before each new query
 */
function searchOnStart( searchControl, searcher, query ) {
	currentQuery = query;
}

/**
 * Modify the search results after searches are complete
 */
function searchOnComplete( searchControl, searcher ) {

	var resultCount = 0;
	
	var results = $$( '#searchresults div.gs-result' );
	for( var i = 0; i < results.length; i++ ) {
		var result = results[ i ];

		// Change title to after dash
		var titleAnchor = document.getElementsByClassName( 'gs-title', result )[ 1 ];
		if ( titleAnchor && titleAnchor.innerHTML.indexOf( "-" ) > 0 ) {
			titleAnchor.innerHTML = titleAnchor.innerHTML.substring( titleAnchor.innerHTML.indexOf( "-" ) + 1 );
		}

		// add appropriate class the result
		var url = document.getElementsByClassName( 'gs-visibleUrl-long', result )[ 0 ];
		if ( url ) {
			if ( url.innerHTML.indexOf( '/tcg/' ) > 0 ) {
				titleAnchor.addClassName( 'tcg' );
			}
			else if ( url.innerHTML.indexOf( '/tfg/' ) > 0 ) {
				titleAnchor.addClassName( 'tfg' );
			}
			else if ( url.innerHTML.indexOf( '/op/' ) > 0 || url.innerHTML.indexOf( 'op.pokemon-tcg.com' ) >= 0 ) {
				titleAnchor.addClassName( 'op' );
			}
			resultCount++;
		}
	}

	if ( results.length == 0 ) {
		noResultsMsg.show();
	}
	else {
		noResultsMsg.hide();
	}

	var moreLink = $$( '#searchresults .gsc-trailing-more-results a' )[ 0 ];
	if ( moreLink ) {
		moreLink.hide();
//		moreLink.innerHTML = "More Results from Google »";
//		moreLink.setAttribute( "href", "http://www.google.com/custom?hl=en&q=" + currentQuery + "+" + DEFAULT_QUERY_ADDITION + "&start=" + resultCount + "&safe=on&cref=http://www.go-pokemon.com/googlecse.xml&cof=GFNT%3A%23FFF7E4%3BGALT%3A%230000CC%3BLH%3A68%3BCX%3AGoPok%25C3%25A9mon%2520Site%2520Search%3BVLC%3A%230000CC%3BDIV%3A%23FFF7E4%3BFORID%3A0%3BT%3A%23000000%3BALC%3A%230000CC%3BLC%3A%230000CC%3BS%3Ahttp%3A%2F%2Fwww.go-pokemon.com%2F%3BL%3Ahttp%3A%2F%2Fwww.go-pokemon.com%2Fcommon%2Fimg%2Ftemplate%2Fheader%2Flogo.png%3BGIMP%3A%23FFF7E4%3BLP%3A1%3BBGC%3A%23FFF7E4%3BAH%3Acenter" );
	}
}

/**
 * The searches onload function
 */
function searchOnLoad() {

	noResultsMsg = $$( 'div.noResultsMessage' )[ 0 ];
	beforeMsg = $$( 'div.beforeSearchMessage' )[ 0 ];

	// Create a search control
	var searchControl = new GSearchControl();
	searchControl.setResultSetSize(GSearch.LARGE_RESULTSET);
	searchControl.setLinkTarget(GSearch.LINK_TARGET_SELF);
	searchControl.setSearchCompleteCallback( this, searchOnComplete );
	searchControl.setSearchStartingCallback( this, searchOnStart );
	
	// Add in a full set of searchers
	webSearch = new GwebSearch();
	webSearch.setQueryAddition( DEFAULT_QUERY_ADDITION );
	// Old "008049284387817802892:qbrd2mgjzrg"
	webSearch.setSiteRestriction( { crefUrl: "http://www.go-pokemon.com/googlecse.xml" } );


	var searchOptions = new GsearcherOptions();
	searchOptions.setExpandMode( GSearchControl.EXPAND_MODE_OPEN );

	searchControl.addSearcher(webSearch, searchOptions);

	// Tell the searcher to draw itself and tell it where to attach
	var drawOptions = new GdrawOptions();
	drawOptions.setSearchFormRoot(document.getElementById("searchcontrol"));
	drawOptions.setDrawMode( GSearchControl.DRAW_MODE_LINEAR );

	searchControl.draw(document.getElementById("searchresults"), drawOptions);
	
	// Check for query parameters
	if (window.location.search) {
		var query = window.location.search;
		if (query.indexOf("q=") >= 0) {
			query = query.substring(query.indexOf("q=") + 2);
			if ( query.indexOf( "&" ) >= 0 ) {
				query = query.substring( 0, query.indexOf( "&" ) );
			}
			if (query != "") {
				query = unescape( query.replace( "+", " " ) );

				searchControl.execute( query );
				var input = $$( '#searchcontrol form.gsc-search-box gsc-input' )[ 0 ];
				if ( input ) {
					input.text = query;
				}
			}
		}
	}
	else {
		beforeMsg.show();
	}
}

// Set the onload callback
GSearch.setOnLoadCallback(searchOnLoad);

