// 検索結果取得用関数
var	httpObj;
var	timer;
function search_func(category, keyword, genre_program, genre, area, startdate, enddate, genre_gurume, search, page, sub_sports, genre_main_food, genre_type, genre_cook, genre_theme, event_sisyakai_flg, title_kana, week_day, bangumihyo, yyyymmdd)
{

	var paramlist = new Array();
	paramlist[0]=category;
	paramlist[1]=keyword;
	paramlist[2]=genre_program;
	paramlist[3]=genre;
	paramlist[4]=area;
	paramlist[5]=startdate;
	paramlist[6]=enddate;
	paramlist[7]=genre_gurume;
	paramlist[8]=search;
	paramlist[9]=page;
	paramlist[10]=sub_sports;
	paramlist[11]=genre_main_food;
	paramlist[12]=genre_type;
	paramlist[13]=genre_cook;
	paramlist[14]=genre_theme;
	paramlist[15]=event_sisyakai_flg;
	paramlist[16]=title_kana;
	paramlist[17]=week_day;
	paramlist[18]=bangumihyo;
	paramlist[19]=yyyymmdd;

	// パラメータを共通リストsearch_paramに格納する。
	setParamlist(paramlist);

	var msg = "";
	var msg_text = "";
	CATEGORY_NUMBER = category;
	if(!isEmpty(category)){
		msg_text += 'category=' + category;
	}
	switch(category){
		case 1: //１．番組について知りたい
			if(!isEmpty(keyword)){
				msg_text += '&action=keyword';
				msg_text += '&keyword=' + encodeURIComponent(keyword);
			}else{
				msg_text += '&action=!keyword';
			}
			break;
		case 3: //３．スポーツを観る
			if(!isEmpty(keyword)){
				msg_text += '&action=keyword';
				msg_text += '&keyword=' + encodeURIComponent(keyword);

/* カテゴリ別キーワード検索中止のため、2007/10/22使用中止
				if(sub_sports != undefined && sub_sports != ''){
					msg_text += '&sub_sports=' + sub_sports;
				}
*/
			}else{
				msg_text += '&action=!keyword';
				if(!isEmpty(genre_program)){
					if(genre_program == 1){
						msg_text += '&genre_program=S1';
					}else if(genre_program == 2){
						msg_text += '&genre_program=S2';
					}else if(genre_program == 3){
						msg_text += '&genre_program=S3';
					}
				}
				if(!isEmpty(sub_sports)){
					msg_text += '&sub_sports=' + sub_sports;
				}
			}
			break;
		case 4: //４．番組が紹介した情報を探す
			if(!isEmpty(keyword)){
				msg_text += '&action=keyword';
				msg_text += '&keyword=' + encodeURIComponent(keyword);
			}else{
				msg_text += '&action=!keyword';
				if(!isEmpty(genre_program)){
					msg_text += '&genre_program=' + genre_program;
				}
				if(!isEmpty(genre)){
					msg_text += '&genre=' + genre;
				}
				if(!isEmpty(area)){
					msg_text += '&area=' + area;
				}
				if(!isEmpty(startdate)){
					msg_text += '&startdate=' + startdate;
				}
				if(!isEmpty(enddate)){
					msg_text += '&enddate=' + enddate;
				}
				if(!isEmpty(genre_gurume)){
					msg_text += '&genre_gurume=' + genre_gurume;
				}
			}
			if (msg_text == 'category=4&action=!keyword&genre_program=1') {
				msg_text += '&startdate=' + getBeforeDate(7);
				msg_text += '&enddate=' + getBeforeDate(0);
			}
			break;
		case 5: //５．番組が紹介した情報を探す（レシピ）genre_main_food, genre_type, genre_cook, genre_theme,
			if(!isEmpty(keyword)){
				msg_text += '&action=keyword';
				msg_text += '&keyword=' + encodeURIComponent(keyword);
			}else{
				msg_text += '&action=!keyword';
				if(!isEmpty(genre_program)){
					msg_text += '&genre_program=' + genre_program;
				}
				if(!isEmpty(genre_main_food)){
					msg_text += '&genre_main_food=' + genre_main_food;
				}
				if(!isEmpty(genre_type)){
					msg_text += '&genre_type=' + genre_type;
				}
				if(!isEmpty(genre_cook)){
					msg_text += '&genre_cook=' + genre_cook;
				}
				if(!isEmpty(genre_theme)){
					msg_text += '&genre_theme=' + genre_theme;
				}
				if(!isEmpty(startdate)){
					msg_text += '&startdate=' + startdate;
				}
				if(!isEmpty(enddate)){
					msg_text += '&enddate=' + enddate;
				}
			}
			//if (msg_text == 'category=5&action=!keyword&genre_program=1') {
			//	msg_text += '&startdate=' + getBeforeDate(7);
			//	msg_text += '&enddate=' + getBeforeDate(0);
			//}
			break;
		case 6: //６．イベント情報を調べる
			if(!isEmpty(keyword)){
				msg_text += '&action=keyword';
				msg_text += '&keyword=' + encodeURIComponent(keyword);
			}else{
				msg_text += '&action=!keyword';
				if(!isEmpty(startdate)){
					msg_text += '&startdate=' + startdate;
				}
				if(!isEmpty(enddate)){
					msg_text += '&enddate=' + enddate;
				}
				if(!isEmpty(event_sisyakai_flg)){
					msg_text += '&event_sisyakai_flg=' + event_sisyakai_flg;
				}
				if(!isEmpty(genre)){
					msg_text += '&genre=' + genre;
				}
				if(!isEmpty(area)){
					msg_text += '&area=' + area;
				}
			}
			break;
		default:
			break;
	}

	// ページング設定
	if(category == 6 && 
	   !(!isEmpty(keyword)            || !isEmpty(startdate) || !isEmpty(enddate) || 
	     !isEmpty(event_sisyakai_flg) || !isEmpty(genre)     || !isEmpty(area))
	){
		msg_text += '&pagecnt=' + page;
	}else{
		msg_text += '&pagecnt=' + page;
	}

	// クエリ設定
	var now = new Date();
	var footer_text = (now.getYear()+1900).toString() + (now.getMonth()+1).toString() + now.getDate().toString();
	footer_text += now.getHours().toString() + now.getMinutes().toString() + now.getSeconds().toString();
	footer_text += now.getMilliseconds().toString();

	msg = msg_text + '&r=' + footer_text;
	httpRequest("/search.do","POST",msg);
}

function httpRequest(target_url,hosiki,msg)
{
	try
	{
	      	if(window.XMLHttpRequest)
		{
			httpObj = new XMLHttpRequest();
		}
		else if(window.ActiveXObject)
		{
			httpObj = new ActiveXObject("Microsoft.XMLHTTP");
		}
		else
		{
			alert('error');
			return;
		}
	}
	catch(e)
	{
		alert('');
		return;
	}

	timer = setInterval("timeoutError()",60000); 

	httpObj.open(hosiki, target_url, true);
	httpObj.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); 
	httpObj.onreadystatechange = DataRead;

	httpObj.send(msg);

	return;
}

function timeoutError()
{
	clearInterval(timer);
	httpObj.abort();
	//alert('time out!!');
}

function DataRead()
{
        if ( httpObj.readyState == 4 )
	{

		clearInterval(timer);	
		if ( httpObj.status == 200)
		{
			DataOut();
			
		}
       	}
}

function DataOut()
{
	xml = httpObj.responseText; 
	var tree = parseXML(xml);       	// source to tree

	//if (tree.itemList.item == undefined && CATEGORY_NUMBER != 5 && CATEGORY_NUMBER != 1 && CATEGORY_NUMBER != 6 && CATEGORY_NUMBER != 4) return;

	switch(CATEGORY_NUMBER){
		case 1:
			var paramlist = getParamlist();
			setProgramData(tree,paramlist[0],paramlist[1],paramlist[3],paramlist[16],paramlist[17],paramlist[18],paramlist[8],paramlist[9]);
			break;
		case 3:
			// パラメータを共通リストsearch_paramから取り出す。
			var paramlist = getParamlist();
			setSports(tree,paramlist[0],paramlist[1],paramlist[10],paramlist[2],paramlist[8],paramlist[9]);
			break;
		case 4:
			// パラメータを共通リストsearch_paramから取り出す。
			var paramlist = getParamlist();
			// 「番組が紹介した情報」データ表示用関数
			setInfoData(tree,paramlist[0],paramlist[1],paramlist[2],paramlist[3],paramlist[4],paramlist[5],paramlist[6],paramlist[7],paramlist[8],paramlist[9]);
			break;
		case 5:
			var paramlist = getParamlist();
			//「番組で紹介した情報（レシピ）」用関数
			setRecipeData(tree,paramlist[0],paramlist[1],paramlist[2],paramlist[11],paramlist[12],paramlist[13],paramlist[14],paramlist[5],paramlist[6],paramlist[8],paramlist[9]);
			break;
		case 6:
			var paramlist = getParamlist();
			// 「イベント情報を調べる」データ表示用関数
			setEvent(tree,paramlist[0],paramlist[1],paramlist[5],paramlist[6],paramlist[15],paramlist[3],paramlist[4],paramlist[8],paramlist[9]);
			break;
		default:
			break;
	}
}

//////////////////////////////////////////////////////////////////////////////////////////////

var attr_prefix = '-';

//  method: parseXML( xmlsource )

function parseXML( xml ) {
    var root;
    if ( window.DOMParser ) {
        var xmldom = new DOMParser();
//      xmldom.async = false;           // DOMParser is always sync-mode
        var dom = xmldom.parseFromString( xml, "application/xml" );
        if ( ! dom ) return;
        root = dom.documentElement;
    } else if ( window.ActiveXObject ) {
        xmldom = new ActiveXObject('Microsoft.XMLDOM');
        xmldom.async = false;
        xmldom.loadXML( xml );
        root = xmldom.documentElement;
    }
    if ( ! root ) return;
    return this.parseDOM( root );
};

//  method: parseDOM( documentroot )

function parseDOM( root ) {
    if ( ! root ) return;

    this.__force_array = {};
    if ( this.force_array ) {
        for( var i=0; i<this.force_array.length; i++ ) {
            this.__force_array[this.force_array[i]] = 1;
        }
    }

    var json = this.parseElement( root );   // parse root node
    if ( this.__force_array[root.nodeName] ) {
        json = [ json ];
    }
    if ( root.nodeType != 11 ) {            // DOCUMENT_FRAGMENT_NODE
        var tmp = {};
        tmp[root.nodeName] = json;          // root nodeName
        json = tmp;
    }
    return json;
};

//  method: parseElement( element )

function parseElement( elem ) {
    //  COMMENT_NODE
    if ( elem.nodeType == 7 ) {
        return;
    }

    //  TEXT_NODE CDATA_SECTION_NODE
    if ( elem.nodeType == 3 || elem.nodeType == 4 ) {
        var bool = elem.nodeValue.match( /[^\x00-\x20]/ );
        if ( bool == null ) return;     // ignore white spaces
        return elem.nodeValue;
    }

    var retval;
    var cnt = {};

    //  parse attributes
    if ( elem.attributes && elem.attributes.length ) {
        retval = {};
        for ( var i=0; i<elem.attributes.length; i++ ) {
            var key = elem.attributes[i].nodeName;
            if ( typeof(key) != "string" ) continue;
            var val = elem.attributes[i].nodeValue;
            if ( ! val ) continue;
            key = this.attr_prefix + key;
            if ( typeof(cnt[key]) == "undefined" ) cnt[key] = 0;
            cnt[key] ++;
            this.addNode( retval, key, cnt[key], val );
        }
    }

    //  parse child nodes (recursive)
    if ( elem.childNodes && elem.childNodes.length ) {
        var textonly = true;
        if ( retval ) textonly = false;        // some attributes exists
        for ( var i=0; i<elem.childNodes.length && textonly; i++ ) {
            var ntype = elem.childNodes[i].nodeType;
            if ( ntype == 3 || ntype == 4 ) continue;
            textonly = false;
        }
        if ( textonly ) {
            if ( ! retval ) retval = "";
            for ( var i=0; i<elem.childNodes.length; i++ ) {
                retval += elem.childNodes[i].nodeValue;
            }
        } else {
            if ( ! retval ) retval = {};
            for ( var i=0; i<elem.childNodes.length; i++ ) {
                var key = elem.childNodes[i].nodeName;
                if ( typeof(key) != "string" ) continue;
                var val = this.parseElement( elem.childNodes[i] );
                if ( ! val ) continue;
                if ( typeof(cnt[key]) == "undefined" ) cnt[key] = 0;
                cnt[key] ++;
                this.addNode( retval, key, cnt[key], val );
            }
        }
    }
    return retval;
};

//  method: addNode( hash, key, count, value )

function addNode( hash, key, cnts, val ) {
    if ( this.__force_array[key] ) {
        if ( cnts == 1 ) hash[key] = [];
        hash[key][hash[key].length] = val;      // push
    } else if ( cnts == 1 ) {                   // 1st sibling
        hash[key] = val;
    } else if ( cnts == 2 ) {                   // 2nd sibling
        hash[key] = [ hash[key], val ];
    } else {                                    // 3rd sibling and more
        hash[key][hash[key].length] = val;
    }
};

// パラメータを共通リストsearch_paramに格納する。
function setParamlist(list){
	for(i=0;i<list.length;i++){
		search_param[i] = list[i];
	}
}

// パラメータを共通リストsearch_paramから取り出す。
function getParamlist(){
	var returncode = new Array();
	for(i=0;i<search_param.length;i++){
		returncode[i] = search_param[i];
	}
	return returncode;
}
