/*   =======================================================================
 *   1. ÇÁ·Î±×·¥¸í : srch_Parsing.js
 *   2. ¼³      ¸í : °Ë»öÄõ¸® Á¶ÇÕÇÏ´Â ÇÔ¼ö ¸ðÀ½
 *   3. ÀÛ  ¼º  ÀÚ : Á¤ ¼÷ ¿µ
 *   4. ÀÛ  ¼º  ÀÏ : 2003.02.07
 *   ========================================================================*/


/*-----------------------------------------------------------------------------
 - gf_FieldParsing(field_source,field_arg)
 - gf_ParsingVerity(field_source,fieldname)
 - gf_ParsingSoftBot(field_source, field_arg)
 - gf_MakeQuery(as_exp,as_source,as_fieldname)
 - gf_SpaceJob(field_source,token,gubun)
 - gf_DefaultAnd(field_source,token)
 - Word_Check(TargetSourceString,BeforeChangeString,AfterChangeString)
 - gf_CheckParentheses(as_keyword)
 - lf_Checkquotation (as_keyword)
 - gf_FilterQuery(as_fieldname)
------------------------------------------------------------------------------*/

// ¾î±¸°Ë»öÀÏ°æ¿ì ¿¬»êÀÚ¸¦ Å°¿öµå·Î ¹Ù²Ù¾îÁØ´Ù.
var gs_kAND ='©Í'; //Å°¿öµå 'AND'º¯È¯¿ë º¯¼ö
var gs_kOR  ='©Û'; //Å°¿öµå 'OR'º¯È¯¿ë º¯¼ö
var gs_kNOT ='©à'; //Å°¿öµå 'NOT'º¯È¯¿ë º¯¼ö
var gs_kNEAR='©Ú'; //Å°¿öµå 'NEAR'º¯È¯¿ë º¯¼ö

/*****************************************************************
	ÇÔ ¼ö ¸í	: gf_FieldParsing(field_source, field_arg)
	¼³    ¸í	: ¿¬»êÀÚ Àû¿ë ÇÔ¼ö
	ÀÎ    ¼ö: 1. field_source - ´ë»óµ¥ÀÌÅÍ
			  2. field_arg - °Ë»ö ÇÊµå
			  3. query_gubun -
			  		1:Verity°Ë»öÇÊµåÆÄ½Ì,
			  		2:SoftBot°Ë»öÇÊµåÆÄ½Ì,
			  		0:Äõ¸®´Â ¸¸µé±â Á÷Àü±îÁö¸¸ ¼öÇàÇÑ´Ù.
******************************************************************/
function gf_FieldParsing(field_source,field_arg){
	
	var fieldname	=field_arg;
	var ls_buf 	= new Array();		//" "»çÀÌÀÇ ¾î±¸ ¿©·¯°³ ³ª¿Ã ¼ö ÀÖÀ¸¹Ç·Î ¹è¿­¿¡ ÀúÀåÇÑ´Ù.
	var old_buf = new Array();	

	//ÇÊµå¼Ò½ºÀÇ ÁÂ. ¿ì °ø¹éÁ¦°ÅÇÑ´Ù.
	field_source=gf_Trim(field_source,'L');	//ÁÂÃø°ø¹éÁ¦°Å
	field_source=gf_Trim(field_source,'R');	//¿ìÃø°ø¹éÁ¦°Å
	field_source='-'+field_source+'-';       //°Ë»öÄõ¸® ¼Ò½ºÀÇ Ã³À½°ú ¸¶Áö¸·¿¡ '-' ºÙÀÎ´Ù.(Ã³À½,¸¶Áö¸· ±¸ºÐ¿ë)               
	
	/*---------------------------------------------------------------------------
	 * ÀÔ·ÂµÈ field_source °¡ ¾î±¸°Ë»ö¿ëÀÎÁö Ã¼Å©ÇÑ´Ù. 
	 * ¾î±¸ °Ë»öÀÏ°æ¿ì " "ºÎºÐ°ú, ¾Æ´ÏºÎºÐÀ» ºÐ¸®ÇÑ´Ù.
	 * " "»çÀÌ´Â Å°¿öµåº¯È¯ Àû¿ë, ¾Æ´ÑºÎºÐÀº ¿¬»êÀÚº¯È¯Àû¿ë, 
	 * ³ªÁß¿¡ ´Ù½Ã ÇÕÃÄ¼­ parsingÇÒ field_source¸¦ ¸¸µç´Ù.
	 *---------------------------------------------------------------------------*/
	var QuotationNum = lf_Checkquotation(field_source);	//"°³¼öÃ¼Å© 
                        
	//"°¡ µÎ°³ ¹Ì¸¸ÀÎ°æ¿ì ¾î±¸°Ë»öÀÌ ¾Æ´Ñ°É·Î °£ÁÖÇÑ´Ù                                    
	if(QuotationNum < 2) {	//¾î±¸°Ë»öÀÌ ¾Æ´Ñ°æ¿ì ¸ðµÎ ¿¬»êÀÚ Ã³¸®                        
                                                                                              
		//2001.07.27 Á¤¼÷¿µ:¿¬»êÀÚ º¯È¯                                               
		//¿¬»êÀÚ º¯È¯(and-->'&', or-->'+', not-->'!', and not-->'*!', near-->'¢Í')	  
		field_source=Word_Check(field_source,'and','&');                              
		field_source=Word_Check(field_source,'or','+');                               
		field_source=Word_Check(field_source,'not','!');                              
		
		field_source=Word_Check(field_source,'near','¢Í');
	                                                                                      
		//´ë¹®ÀÚ AND,OR,NOT,NEAR --> Å°¿öµå°¡ ¾Æ´Ñ ¿¬»êÀÚ·Î ÇÑ´Ù.                     
		field_source=Word_Check(field_source,'AND','&');                              
		field_source=Word_Check(field_source,'OR','+');                               
		field_source=Word_Check(field_source,'NOT','!');                              
		field_source=Word_Check(field_source,'NEAR','¢Í');
	}                                                                                     
	else {	//¾î±¸°Ë»öÀÏ °æ¿ì, " "»çÀÌ¸¸ Å°¿öµå Ã³¸®ÇÏ°í, ³ª¸ÓÁö´Â ¸ðµÎ ¿¬»êÀÚÃ³¸®.       
                                                                                              
		var li_num = parseInt(QuotationNum/2);

		for(var z=1; z<= li_num; z++) {

			ls_buf[z] = gf_string_return(field_source, '"', '"', true);                         
			
			field_source = Str_Replace(field_source,'"'+ls_buf[z]+'"',ls_buf[z]);

			old_buf[z] = ls_buf[z] 

			//Å°¿öµå Ã³¸®..                                                               
			ls_buf[z]=Str_Replace(ls_buf[z],'and',gs_kAND);                          
			ls_buf[z]=Str_Replace(ls_buf[z],'or',gs_kOR);		              
			ls_buf[z]=Str_Replace(ls_buf[z],'not',gs_kNOT);		              
			ls_buf[z]=Str_Replace(ls_buf[z],'near',gs_kNEAR);                        

			ls_buf[z]=Str_Replace(ls_buf[z],'AND',gs_kAND);                          
			ls_buf[z]=Str_Replace(ls_buf[z],'OR',gs_kOR);		              
			ls_buf[z]=Str_Replace(ls_buf[z],'NOT',gs_kNOT);		              
			ls_buf[z]=Str_Replace(ls_buf[z],'NEAR',gs_kNEAR);                        


			if(old_buf[z] != ls_buf[z]) { //and,or,not,near°¡ ÀÖ¾î¼­ Å°¿öµå¹®ÀÚ·Î Ä¡È¯µÇ¾úÀ»¶§
				field_source = Str_Replace(field_source, old_buf[z], ls_buf[z]);
			}
		}

		for(var y=1; y<= li_num; y++) {

			var org=ls_buf[y].substr(0,1);

			var dummy='\"'+Char_Replace(ls_buf[y],org,'/')+'\"';

			field_source = Str_Replace(field_source,ls_buf[y],dummy);

			field_source = Char_Replace(field_source,'/',org);

		}		                                  
                                                                                              
		//¿¬»êÀÚÃ³¸®..                                                                
		//¿¬»êÀÚ º¯È¯(and-->'&', or-->'+', not-->'!', and not-->'*!', near-->'¢Í')	  
		field_source=Word_Check(field_source,'and','&');                              
		field_source=Word_Check(field_source,'or','+');                               
		field_source=Word_Check(field_source,'not','!');                              
		field_source=Word_Check(field_source,'near','¢Í');                            
	                                                                                      
		//´ë¹®ÀÚ AND,OR,NOT,NEAR --> Å°¿öµå°¡ ¾Æ´Ñ ¿¬»êÀÚ·Î ÇÑ´Ù.                     
		field_source=Word_Check(field_source,'AND','&');                              
		field_source=Word_Check(field_source,'OR','+');                               
		field_source=Word_Check(field_source,'NOT','!');                              
		field_source=Word_Check(field_source,'NEAR','¢Í');
	}                                                                                     
                                                                                              
	field_source=field_source.substr(1);
	field_source=field_source.substr(0,field_source.length-1);
	
	field_source=gf_OnlyOneSpace(field_source);         //µÎ°³ ÀÌ»óÀÇ °ø¹éÀ» ÇÏ³ªÀÇ °ø¹éÀ¸·Î º¯È¯

	field_source=gf_SpaceJob(field_source,'=','a');  //'=' °ø¹éÁ¦°Å('ti=','ab=')
	field_source=gf_SpaceJob(field_source,'&','a');	 //¿¬»êÀÚ '&'ÀÇ °ø¹éÁ¦°Å
	field_source=gf_SpaceJob(field_source,'+','a');	 //¿¬»êÀÚ '+'ÀÇ °ø¹éÁ¦°Å
	field_source=gf_SpaceJob(field_source,'!','n');	 //¿¬»êÀÚ '!'ÀÇ °ø¹éÁ¦°Å
	field_source=gf_SpaceJob(field_source,'%','p');	 //¿¬»êÀÚ '%'ÀÇ °ø¹éÁ¦°Å
	
	field_source=gf_SpaceJob(field_source,'(','a');	 //¿¬»êÀÚ '('ÀÇ °ø¹éÁ¦°Å
	field_source=gf_SpaceJob(field_source,')','a');	 //¿¬»êÀÚ ')'ÀÇ °ø¹éÁ¦°Å
	field_source=gf_SpaceJob(field_source,"'",'a');	 //¿¬»êÀÚ "'"ÀÇ °ø¹éÁ¦°Å
	field_source=gf_SpaceJob(field_source,'¢Í','a');	 //¿¬»êÀÚ '¢Í'ÀÇ °ø¹éÁ¦°Å
	//field_source=gf_SpaceJob(field_source,'*','a');	 //¿¬»êÀÚ '*'ÀÇ °ø¹éÁ¦°Å
	
	field_source=gf_DefaultAnd(field_source,'(');	 //°ýÈ£°¡ ³ª¿ÔÀ»¶§ '(' Àü°ú ')'ÈÄ¸¦ ÆÇ´ÜÇØ¼­ ¿¬»êÀÚ°¡ ¾øÀ¸¸é and¿¬»êÀÚ¸¦ ºÙÀÎ´Ù. 
	field_source=gf_DefaultAnd(field_source,')');	 //¿¹)a+b(c+d)f --> a+b*(c+d)*f
	
	/*---------------Å°¿öµå Ã³¸®----------------*/
	field_source=Str_Replace(field_source,gs_kAND,'¨×AND¨×');
	field_source=Str_Replace(field_source,gs_kOR,'¨×OR¨×');
	field_source=Str_Replace(field_source,gs_kNOT,'¨×NOT¨×');
	field_source=Str_Replace(field_source,gs_kNEAR,'¨×NEAR¨×');
	
	query=gf_ParsingVerity(field_source,fieldname);	//2003.08.25 Á¤¼÷¿µ,BOK,verity°Ë»ö Äõ¸® ±¸¼º
	
	return query;
}
/*****************************************************************
	ÇÔ ¼ö ¸í	: gf_ParsingVerity(field_source, field_arg)
	¼³    ¸í	: ¿¬»êÀÚ Àû¿ë ÇÔ¼ö
	ÀÎ    ¼ö: 1. field_source - ´ë»óµ¥ÀÌÅÍ
			  2. field_arg - °Ë»ö ÇÊµå
******************************************************************/
function gf_ParsingVerity(field_source,fieldname) {
	var query		='';  			//°Ë»ö½Ä ÀúÀå¿ë
	var history		=''; 			//HistoryÀúÀå¿ë
	var querytemp	=''; 			//<starts>¿¬»ê½Ã ¿¬»êÀÚ¿Í Å°¿öµå¸¦ ¹Ù²ãÁÖ±â À§ÇØ
	var exp_flag	=0; 			//<starts>¿¬»ê½Ã Å°¿öµå·Î ³¡³ª°Ô..
	var token		=''; 			//ÇÊµå ÅäÅ«
	var rParentheses=''; 			//')'°ýÈ£ ´©Àûº¯¼ö
	var Pright		=0; 			//')' flagº¯¼ö			
	
	var field_length=field_source.length;

    for(i=0;i<field_length;i++) {
    	token=field_source.charAt(i);

        switch (token) {
        	
        	//and°Ë»ö
        	case ' ':
        	case '&':
        		if(querytemp.indexOf(' ',0)>0) {  //¾î±¸°Ë»ö
        			query+=gf_MakeQuery('phrase',querytemp,fieldname);
        		}
        		else { 				//Å°¿öµå °Ë»ö
        			query+=gf_MakeQuery('and',querytemp,fieldname);
				}
       			if(Pright) {
                	query+=rParentheses;
					rParentheses='';
					Pright=0;
       			}
        		query+='<and>';
        		history+=" and ";
        		querytemp='';
        		break;
        	
        	//or°Ë»ö
        	case '+':
        		if(querytemp.indexOf(' ',0)>0) {  //¾î±¸°Ë»ö
        			query+=gf_MakeQuery('phrase',querytemp,fieldname);
        		}
        		else { 				//Å°¿öµå °Ë»ö
        			query+=gf_MakeQuery('or',querytemp,fieldname);
        		}
        		if(Pright) {
                	query+=rParentheses;
					rParentheses='';
					Pright=0;
       			}
        		query+='<or>';
        		history+=" or ";
        		querytemp='';
        		break;
        	
			//not°Ë»ö
			case '!':
                    if(querytemp=='') {
                            query+="<not>";
                    }
                    else {
                		if(Pright) {
                			query+="<in>" +fieldname+rParentheses+ "<not>";
							rParentheses='';
							Pright=0;
                        }
                        else {
                        	query+="<in>" +fieldname+ "<not>";
                        }
                    }

                    history+=" not ";
                    querytemp='';
                    break;
	
		//Àü¹æÀÏÄ¡°Ë»ö
		/* madul Ãß°¡ : 2001.08.14 : Àü¹æÀÏÄ¡ °Ë»ö½Ã »ç¿ë*/
            case '%':
					query+=gf_MakeQuery('like',querytemp,fieldname);
		       		if(Pright) {
		                query+=rParentheses;
						rParentheses='';
						Pright=0;
       				}
                    history+="% ";
                    querytemp='';
                    exp_flag=1;
                    break;
                        
		//Àý´Ü°Ë»ö
            case '*':
					query+=gf_MakeQuery('starts',querytemp,fieldname);
			       	if(Pright) {
			           	query+=rParentheses;
						rParentheses='';
						Pright=0;
	               	}
	                history+="* ";
                    querytemp='';
                    exp_flag=1;
                    break;

		//°Ë»ö¾î±¸ °Ë»ö
         	case '"':
                    var ls_phse_string='';

                    //ÇöÀç field Æ÷Áö¼Ç¿¡¼­ ±¸°¡ ³¡³ª´Â '"' ¶Ç´Â "'"À§Ä¡ ÆÄ¾Ç
                    for(j=i+1;j<field_length;j++) {
                        if(field_source.charAt(j)=='"') {
                            var phar_end=j;
                            j=field_length;
                        }
                    }
                    var phar_start_end=phar_end-i;
					query+=gf_MakeQuery('phrase',field_source.substr(i+1,phar_start_end-1),fieldname);
                    history+=field_source.substr(i,phar_start_end+1);
                    //±¸ ±æÀÌ¸¸Å­ Å°¿öµå Æ÷Áö¼Ç ÀÌµ¿
                    i+=phar_start_end;
                    querytemp='';
                    exp_flag=1;
                    
                    break;

            //near °Ë»ö
            case '¢Í':
            		query+=gf_MakeQuery('near',querytemp,fieldname);
                    history+=' NEAR ';
                    querytemp='';
                	break;
            
            case '(':
            		query+='(';
                    break;
			case ')':
                    rParentheses+=')';
                    Pright=1;
                    break;                                

			//¿©±â¼­ querytemp¿¡ ¿¬»êÀÚ¸¦ Á¦¿ÜÇÑ °Ë»ö¾î°¡ ÀúÀåÀÌ µÈ´Ù.(¿¬»êÀÚ Àü±îÁö)
			default:
                    querytemp+=token;
                    history+=token;
					break;                              
	
        }  //switch¹® ³¡
    }   //for¹® ³¡

	querytemp=gf_Trim(querytemp,'A');
/*
if(cgs_User_IP=="130.1.19.175"){
		//alert("querytemp="+querytemp);
		//querytemp = gf_Keyword_conv_2(querytemp,'');	//2004.05.19:°Ë»ö¾î¸¦ ÇÑÀÚ¸¦ ÇÑ±Û·Î º¯È¯ÇÑ´Ù.(ÇÑ±Û·Î »öÀÎµÇ ÀÖÀ¸¹Ç·Î)
}
*/	
    if(querytemp!='' || Pright) {
    	if(querytemp.indexOf(' ',0)>0) {  //¾î±¸°Ë»ö
        	query+=gf_MakeQuery('phrase',querytemp,fieldname);
        	
            if(Pright) {
				query+=rParentheses;
    		}
        }
        else if(exp_flag==0 || querytemp!=''){ 
			//madul »ðÀÔ - ÇÊµå ÀüÃ¼¿¡ ´ëÇØ¼­ °Ë»öÇÏ´Â ºÎºÐÀÌ ÀÖÀ½ - 2001.08.10
			if (fieldname == '') {
				if(Pright) {
					query+=querytemp+ rParentheses;
	        	}
	        	else {
	        		query+=querytemp;
	        	}
			}
			else {
				/*-----------------------------------------------------
	        	 * 2003.11.03 Á¤¼÷¿µ : ÀúÀÚ,ÃâÆÇ»ç Å°¿öµå´Â ÇÊÅÍ¶§¹®¿¡ 
	        	 * <word>¸¦ ºÙ¿©¾ß ÇÑ´Ù.
	        	 *------------------------------------------------------*/
				if(Pright) {
					query+=gf_FilterQuery(fieldname) + querytemp+ "<in>" +fieldname+rParentheses ;
	        	}
	        	else {
	        		
	        		query+=gf_FilterQuery(fieldname) + querytemp+ "<in>" +fieldname;
	        	}
	        }
        }
        else query+=rParentheses;
	}

    history=Str_Replace(history,'¨×OR¨×','¨×OR¨×');   //orÅ°¿öµå °Ë»ö½Ã 'or'µÎ°³ ºÙ¿©ÁÜ, and,notÀº µÚ¿¡ ºÙÀ½,,±×·¡¼­ ¾Õ¿¡°ÍÀ» ¾ø¾ÖÁÜ         
    return query;
}
/*****************************************************************
	ÇÔ ¼ö ¸í	: gf_MakeQuery(as_exp,as_source,as_fieldname)
	¼³    ¸í	: verity°Ë»ö ¿¬»êÀÚ·Î º¯È¯
	Argument
		1. as_exp	- verity°Ë»ö ¿¬»êÀÚ
		2. as_source 	- °Ë»ö µ¥ÀÌÅÍ
		3. as_fieldname - °Ë»ö ÇÊµå
******************************************************************/
function gf_MakeQuery(as_exp,as_source,as_fieldname) {	//(¿¬»êÀÚ, querytemp, Å×ÀÌºíÇÊµåÀÌ¸§)
	var rtn_str='';	
/*
if(cgs_User_IP=="130.1.19.175"){
		//alert("as_source="+as_source);
		//as_source = gf_Keyword_conv_2(as_source,'');
}		
*/	
	//ÇÊµå¿¡ ti=xx...¶ó°í ÀÔ·ÂÇßÀ»¶§ÀÇ Ã³¸®
	
    if(as_source.indexOf('ti=',0)>-1) {
    	as_source=Str_Replace(as_source,'ti=','');
        as_fieldname='title';
	}
	else if(as_source.indexOf('ab=',0)>-1) {
		as_source=Str_Replace(as_source,'ab=','');
        as_fieldname='abstract';
	}            		           
	if(as_source=='') return rtn_str;
	
	//madul »ðÀÔ - ÇÊµå ÀüÃ¼¿¡ ´ëÇØ¼­ °Ë»öÇÏ´Â ºÎºÐÀÌ ÀÖÀ½ - 2001.08.10
	if (as_fieldname == '') {
		switch(as_exp) {
			case 'phrase':
				rtn_str=as_source;
				/*----------------------------------
				var temp=rtn_str.split(" ");
				rtn_str='';
				rtn_str+='(';
				for(n=0; n< temp.length; n++){
					rtn_str+='<word>'+temp[n];
					if(n < temp.length-1)rtn_str+='<and>';
				}
				rtn_str+=')';
				----------------------------------*/
				rtn_str=as_source;
				//rtn_str+='<in>'+as_fieldname;
				
				break;
			case 'and':
				rtn_str=as_source;
				break;
			case 'or':
				rtn_str=as_source;
				break;
			case 'starts':
				rtn_str=as_source +'*';
				break;
			case 'near':
				rtn_str=as_source+ ' <near/5> ';
				break;
		}
	}
	else {
		switch(as_exp) {
			case 'phrase':
				rtn_str=as_source;
				/*----------------------------------
				var temp=rtn_str.split(" ");
				rtn_str='';
				rtn_str+='(';
				for(n=0; n< temp.length; n++){
					rtn_str+='<word>'+temp[n];
					if(n < temp.length-1)rtn_str+='<and>';
				}
				rtn_str+=')';
				----------------------------------*/
				
				rtn_str+='<in>'+as_fieldname;
				break;
			case 'and':
				rtn_str=as_source +'<in>'+ as_fieldname;
				break;
			case 'or':
				rtn_str=as_source +'<in>'+ as_fieldname;
				break;
			/* madul Ãß°¡ : 2001.08.14 : Àü¹æÀÏÄ¡ °Ë»ö½Ã »ç¿ë*/
			case 'like':
				if (as_fieldname == 'Title') as_fieldname = 'titlesort';
				else if (as_fieldname == 'Author') as_fieldname = 'authorsort';
				else if (as_fieldname == 'Publisher') as_fieldname = 'publishersort';
				rtn_str= as_fieldname + ' <starts> '+as_source;
				break;
			/*******************/
			case 'starts':
				rtn_str=as_source +'* <in>'+ as_fieldname;
				break;
			case 'near':
				rtn_str=as_source+ '<near/3>';
				break;
		}
	}
	//2003.11.03 Á¤¼÷¿µ
	rtn_str = gf_FilterQuery(as_fieldname) +rtn_str;
	
	return rtn_str;
}
/*****************************************************************
	ÇÔ ¼ö ¸í	: gf_FilterQuery(as_fieldname)
	¼³    ¸í	: exact filter ÇÊµåÀÏ°æ¿ì <word>¸¦ ºÙÀÓ
	Argument	: 1. as_fieldname - °Ë»ö ÇÊµå
******************************************************************/
function gf_FilterQuery(as_fieldname){
	var ls_return ='';
	
	switch(as_fieldname.toLowerCase()) {
		case 'author'	:
		case 'tauthor'	: 
		case 'publisher': 
		case 'tpublisher': 
		case 'issnsort': 
		case 'isbnsort': 
		case 'lccnsort': 
		case 'codensort': 
		case 'reportnosort': 
				  ls_return ="<word>";
				  break;

	}
	
	return ls_return;
}

/*****************************************************************
	ÇÔ ¼ö ¸í	: gf_SpaceJob(field_source,token,gubun)
	¼³    ¸í	: field_source¿¡¼­ token ¾ÕµÚÀÇ °ø¹éÀ» Á¦°ÅÇÑ´Ù.
	ÀÎ    ¼ö: 1. field_source - ´ë»óµ¥ÀÌÅÍ
			  2. token - ÅäÅ«
			  3. gubun - a:¾ÕµÚ °ø¹éÁ¦°Å
******************************************************************/
function gf_SpaceJob(field_source,token,gubun) {
	var ls_nTempPos; 	  		//ÅäÅ« ´ÙÀ½ Æ÷Áö¼Ç
	var ls_cTempPos=0;  	  	//ÅäÅ« ÇöÀçÆ÷Áö¼Ç
	var ls_lField_source='';  	//field source¿¡¼­ ÀÛ¾÷ÇÒ left sttring
	var ls_cField_source='';  	//field source¿¡¼­ ÀÛ¾÷ÇÒ current sttring
	var ls_rField_source='';  	//field source¿¡¼­ ÀÛ¾÷ÇÒ right sttring
	var ls_dField_source='';  	//ÀÛ¾÷ÇÑ sttring

	switch(gubun) {
		case 'p':
			while(1) {
				ls_cTempPos=field_source.indexOf(token,ls_cTempPos);
				if(ls_cTempPos != -1) { //tokenÀÌ  Á¸ÀçÇÏ¸é
					if(field_source.substr(ls_cTempPos-1,1)==' ') {  //token ÀÌÀü ¹®ÀÚ°¡ °ø¹éÀÌ¸é
						ls_lField_source=field_source.substr(0,ls_cTempPos-1);
						ls_rField_source=field_source.substr(ls_cTempPos);
						field_source=ls_lField_source+ls_rField_source;
					}
					else {
						ls_cTempPos++;
					}
				}
				else break;
			}
			break;
		case 'n':
			while(1) {
				ls_cTempPos=field_source.indexOf(token,ls_cTempPos);
				if(ls_cTempPos != -1) { //tokenÀÌ Á¸ÀçÇÏ¸é
					if(field_source.substr(ls_cTempPos+1,1)==' ') {  //token ÀÌÈÄ ¹®ÀÚ°¡ °ø¹éÀÌ¸é
						ls_lField_source=field_source.substr(0,ls_cTempPos+1);
						ls_rField_source=field_source.substr(ls_cTempPos+2);
						field_source=ls_lField_source+ls_rField_source;
					}
					else {
						ls_cTempPos++;
					}
				}
				else break;
			}
			break;
		case 'a':
			ls_cTempPos=0;
			while(1) {
				ls_cTempPos=field_source.indexOf(token,ls_cTempPos);
				if(ls_cTempPos != -1) { //tokenÀÌ Á¸ÀçÇÏ¸é

					// ---- ÀÌÀü, ÀÌÈÄ¹®ÀÚ °ø¹éÀÏ°æ¿ì ÀÌÈÄ¹®ÀÚ °ø¹é ÄÚµåÈÄ¿¡ ÀÌÀü¹®ÀÚ °ø¹éÄÚµå·Î ÇÏ¸é Á¦°ÅµÊ.---------
					if(field_source.substr(ls_cTempPos+1,1)==' ') {  //tokenÀÌÈÄ ¹®ÀÚ°¡ °ø¹éÀÌ¸é
						ls_lField_source=field_source.substr(0,ls_cTempPos+1);
						ls_rField_source=field_source.substr(ls_cTempPos+2);
						field_source=ls_lField_source+ls_rField_source;
					}

					else if(field_source.substr(ls_cTempPos-1,1)==' ') {  //tokenÀÌÀü ¹®ÀÚ°¡ °ø¹éÀÌ¸é
						ls_lField_source=field_source.substr(0,ls_cTempPos-1);
						ls_rField_source=field_source.substr(ls_cTempPos);
						field_source=ls_lField_source+ls_rField_source;
					}
					//-------------------------¿©±â±îÁö------------------------------------------------------------
					else {
						ls_cTempPos++;
					}
				}
				else break;
			}
			break;
	}
	return field_source;
}
/*****************************************************************
	ÇÔ ¼ö ¸í	: gf_DefaultAnd(field_source,token)
	¼³    ¸í	: field_source¿¡¼­ tokenÀÌ ³ª¿ÔÀ»¶§ token Àü°ú ÈÄ¸¦ ÆÇ´ÜÇØ¼­ ¿¬»êÀÚ°¡ ¾øÀ¸¸é and¿¬»êÀÚ¸¦ ºÙÀÎ´Ù. 
	ÀÎ    ¼ö: 1. field_source - ´ë»óµ¥ÀÌÅÍ
			  2. token - ÅäÅ«
******************************************************************/
function gf_DefaultAnd(field_source,token) {
	var ls_cTempPos=0;
	var LeftFlag=0;
	
	if(token=='(') LeftFlag=1;
	while(1) {
		ls_cTempPos=field_source.indexOf(token,ls_cTempPos);

		if(ls_cTempPos != -1) { //tokenÀÌ Á¸ÀçÇÏ¸é
			if(LeftFlag) {
				if(ls_cTempPos==0) break; //¸ÇÃ¹¹®ÀÚ°¡ °ýÈ£ÀÌ¸é..
				if(field_source.substr(ls_cTempPos-1,1)!='&' && field_source.substr(ls_cTempPos-1,1)!='|' && field_source.substr(ls_cTempPos-1,1)!='(') {  //'(' ÀÌÀü ¹®ÀÚ°¡ '&','|'¿¬»êÀÚ°¡ ¾Æ´Ï¸é
					ls_lField_source=field_source.substr(0,ls_cTempPos);
					ls_rField_source=field_source.substr(ls_cTempPos);
					field_source=ls_lField_source+ '&' +ls_rField_source;
				}
				ls_cTempPos+=2;
			}
			else {
				if(ls_cTempPos==field_source.length-1) break; //¸Ç ¸¶Áö¸· ¹®ÀÚ°¡ °ýÈ£ÀÌ¸é..
				if(field_source.substr(ls_cTempPos+1,1)!='&' && field_source.substr(ls_cTempPos+1,1)!='|' && field_source.substr(ls_cTempPos+1,1)!=')') {  //')' ÀÌÈÄ ¹®ÀÚ°¡ '&','|'¿¬»êÀÚ°¡ ¾Æ´Ï¸é
					ls_lField_source=field_source.substr(0,ls_cTempPos+1);
					ls_rField_source=field_source.substr(ls_cTempPos+1);
					field_source=ls_lField_source+ '&' +ls_rField_source;
				}
				ls_cTempPos++;
			}
		}
		else break;
	}
	return field_source;
}
/*****************************************************************
	ÇÔ ¼ö ¸í	: Word_Check(TargetSourceString,BeforeChangeString,AfterChangeString)
	¼³    ¸í	: Æ¯Á¤ ´Ü¾î¸¦ ÁöÁ¤ÇÑ ´Ü¾î·Î º¯°æÇÑ´Ù.
	ÀÎ    ¼ö: 1. TargetSourceString - ´ë»óµ¥ÀÌÅÍ
			  2. BeforeChangeString - º¯°æÀü µ¥ÀÌÅÍ
			  3. AfterChangeString - º¯°æÇÒ µ¥ÀÌÅÍ
******************************************************************/
function Word_Check(TargetSourceString,BeforeChangeString,AfterChangeString) {
        var AfterString='';
        var While=1;
        var NextPos=0;
        var LeftString='';
        var RightString='';
        var StartPos=0;
        var StartString=BeforeChangeString.substr(0,1);
        var BeforeChangeStringLength=BeforeChangeString.length;

        while(While) {
		StartPos=TargetSourceString.indexOf(StartString,NextPos);
			if (StartPos == -1)	return TargetSourceString;
                if(TargetSourceString.substr(StartPos,BeforeChangeStringLength)==BeforeChangeString) {
                	var pWord=TargetSourceString.substr(StartPos-1,1);
                	var nWord=TargetSourceString.substr(StartPos+BeforeChangeString.length,1);

        			if((pWord=='-' || pWord==' ' || pWord=='(' || pWord==')') && (nWord=='-' || nWord==' ' || nWord=='(' || nWord==')')) {       	

						LeftString=TargetSourceString.substr(0,StartPos);
	                    			RightString=TargetSourceString.substr(StartPos+BeforeChangeString.length);
	                    			AfterString=LeftString+AfterChangeString+RightString;

						TargetSourceString = AfterString;
					}
					NextPos=StartPos+1;
                }
                else {
                    NextPos=StartPos+1;
                    if(NextPos>TargetSourceString.length) {
						While=0;
                        AfterString=TargetSourceString;
                    }
				}
			}
        return AfterString;
}

/*****************************************************************
	ÇÔ ¼ö ¸í	: lf_Checkquotation
	¼³    ¸í	: ÆÄ½ÌÇÒ¶§ ÀÔ·ÂÇÊµåÀÇ ValueÀÇ "ÀÇ °¹¼ö¸¦ Ã¼Å©ÇÑ´Ù
	ÀÎ    ¼ö: 1. as_keyword - ´ë»óµ¥ÀÌÅÍ
	¸®    ÅÏ: " ÀÇ °¹¼ö
******************************************************************/
function lf_Checkquotation (as_keyword){
	var DoubleQuotation = 0;	//DoubleQutaitonÀÇ °³¼ö
		
	for(i=0;i<as_keyword.length;i++) {
		if(as_keyword.charAt(i)=='"') DoubleQuotation++;
	}

	return DoubleQuotation;
}

/*****************************************************************
	ÇÔ ¼ö ¸í	: gf_CheckParentheses
	¼³    ¸í	: ÆÄ½ÌÇÒ¶§ ÀÔ·ÂÇÊµåÀÇ ValueÀÇ °ýÈ£ÀÇ °¹¼ö¸¦ Ã¼Å©ÇÑ´Ù
	ÀÎ    ¼ö: 1. as_keyword - ´ë»óµ¥ÀÌÅÍ
******************************************************************/
function gf_CheckParentheses(as_keyword)
{
	var Rparentheses=0;	//¿ì°ýÈ£ °¹¼ö
	var Lparentheses=0;	//ÁÂ°ýÈ£ °¹¼ö
	
	for(i=0;i<as_keyword.length;i++) {
		if(as_keyword.charAt(i)=='(') Lparentheses++;
		if(as_keyword.charAt(i)==')') Rparentheses++;
	}

	if(Lparentheses>Rparentheses) {
		alert("'(' °¡ " + (Lparentheses-Rparentheses) + ' °³ ´õ ¸¹½À´Ï´Ù');
		return 0;
	}
	if(Lparentheses<Rparentheses) {
		alert("')' °¡ " + (Rparentheses-Lparentheses) + ' °³ ´õ ¸¹½À´Ï´Ù');
		return 0;
	}
	
	return 1;
}

