var RESEARCH_TAG_CLASS		= "research";
var TEMPLATE				= "search_products.tmpl.html";
var TEMPLATE_NO_HIT			= "search_products_no_hit.tmpl.html";
var SEARCH_FOLDER			= "products";
var ENDITEM					= "-販売終了商品";
var INI_SEARCH_WORD			= "検索したい語句を入力";
var SEARCH_MAX				= 20;

var isSearchAll				= 0;			// 全検索か？
var isSearchProducts		= 0;			// 商品検索か？

function initSearch()
{
	replaceRephraseOption();
	replaceResearchTag();
	modSubmit();			// <-- IEは入れないとマズイかも
}

/**************************************************
 *
 *	タグからの再検索の処理
 *
**************************************************/
function replaceResearchTag()
{
	var bodyNode = document.getElementsByTagName( 'body' )[0];
	
	if ( bodyNode.id == 'search_products' )
	{
		isSearchProducts = 1;
	}
	
	var nodes = document.getElementsByTagName( 'a' );
	var tmpPhrase;
	
	if ( nodes )
	{
		for( var i=0, l=nodes.length; i<l; i++ )
		{
			var node = nodes[i];
			
			if ( node.className == RESEARCH_TAG_CLASS )
			{
				var childNode = node.firstChild;
				
				if ( childNode && childNode.nodeType == 3 )	// 3:textNode
				{
					tmpPhrase = childNode.nodeValue + " " + ENDITEM;
					tmpPhrase = encodeURIComp( tmpPhrase );
					
					//
					// 全検索
					//
					if ( isSearchAll )
					{
						node.href += "?q=" + tmpPhrase;
					}
					//
					// 商品検索
					//
					else if ( isSearchProducts )
					{
						node.href += "?q=" + tmpPhrase + "&d=" + SEARCH_FOLDER + "&_template=" + TEMPLATE + "&_template_no_hit=" + TEMPLATE_NO_HIT;
					}
				}
			}
		}
	}
}

/**************************************************
 *
 *	再検索のオプション処理
 *
**************************************************/
function replaceRephraseOption()
{
	var phraseNode		= document.getElementById( 'rephrase' );
	var enditemNode		= document.getElementById( 'enditem' );
	var newitemNode		= document.getElementById( 'new' );
	var folderNode		= document.getElementById( 'refolder' );
	var tagNode			= document.getElementById( 'tag' );
	
	//
	// 検索フレーズから
	//
	if ( phraseNode )
	{
		var phrase			= phraseNode.value;
		var phrases			= phrase.split(" ");
		var tmpPhrase;
		
		var tagOpts			= tagNode.options;
		var tagOptLen		= tagOpts.length;
		var tmpTag;
		var tmpTagCond;
		
		if ( phrase && phrase != INI_SEARCH_WORD )
		{
			enditemNode.checked	= 1;
			
			for ( var i in phrases )
			{
				tmpPhrase = phrases[i];
				
				if ( typeof tmpPhrase != 'function' )
				{
					if( tmpPhrase.match( /^\-販売終了商品$/ ))
					{
						enditemNode.checked = 0;
						
						phrases[i] = undefined;
					}
					else if( tmpPhrase.match( /^\+新商品$/ ))
					{
						newitemNode.checked = 1;
						
						phrases[i] = undefined;
					}
					else if( tmpPhrase.match( /^(?:>|&gt;)([\+\|]?)(.*)/ ))
					{
						tmpTagCond	= RegExp.$1;
						tmpTag		= RegExp.$2;
						
						if ( !tmpTagCond )
						{
							tmpTagCond = "+";
						}
						
						document.getElementById( tmpTagCond ).checked = 1;
						
						for ( var k = 0; k < tagOptLen; k++ )
						{
							if ( tagOpts[ k ].value == tmpTag )
							{
								tagOpts[ k ].selected = 1;
							}
							
						}
						
						phrases[i] = undefined;
					}
				}
			}
		}
	}
	
	//
	// ディレクトリから
	//
	if ( folderNode )
	{
		var folder			= folderNode.value;
		var folders			= folder.split("|");
		var tmpFolder;
		var tmpFolderNode;
		
		for ( var i in folders )
		{
			tmpFolder = folders[i];
			
			if ( typeof tmpFolder != 'function' )
			{
				if( tmpFolder.match( /^products\/(.*)$/ ))
				{
					tmpFolder = RegExp.$1;
					tmpFolderNode = document.getElementById( tmpFolder );
					
					if( tmpFolderNode )
					{
						tmpFolderNode.checked = 1;
					}
				}
			}
		}
	}
}

/**************************************************
 *
 *	送信時の処理
 *
**************************************************/
function modSubmit()
{
	var phraseNode		= document.getElementById( 'rephrase' );
	var formNodes		= document.getElementsByTagName( 'form' );
	
	if ( formNodes )
	{
		for ( var i = 0, l = formNodes.length; i < l; i++ )
		{
			var formNode = formNodes[i];
			
			if ( formNode.action.indexOf( 'search_products.cgi' ) != -1 )
			{
				var tagNode			= document.getElementById( 'tag' );
				var tagOpts			= tagNode.options;
				var tagOptLen		= tagOpts.length;
				
				formNode.onsubmit = function()
				{
					var optNum = 0;
					
					for ( var k = 0; k < tagOptLen; k++ )
					{
						if ( tagOpts[ k ].selected )
						{
							optNum++;
						}
					}
					
					if ( optNum > SEARCH_MAX )
					{
						alert( '検索条件が多すぎます' );
						return false;
					}
					
					return true;
				}
			}
		}
	}
}

addOnloadEvent( initSearch );

