function searchJob(){
	var obj = new JobSearch();
	if(obj.isValid()){
		$('error').innerHTML = '<img src=\"/shoukaientry/images/job/search/attention_mark.gif\" alt=\"ご注意！\" width=\"17\" height=\"16\" class=\"mright5\" />最低ひとつは選択してください';	
	}else{
		document.location.href = obj.makeListUrl();
	}
}


var JobSearch = function(){
}
JobSearch.URL_PREFIX = "/shoukaientry/job";
JobSearch.URL_LIST_SUFFIX = "/list";

// search condtion hash
JobSearch.hash = {
	"js":"searchSJobClass",
	"jm":"searchMJobClass",
	"jl":"searchLJobClass",
	"is":"searchSIndClass",
	"il":"searchLIndClass",
	"ai":"searchPref",
	"sl":"searchIncome",
	"cp":"searchCompNo"
};

// paging hash
JobSearch.pageHash = {
	"pg":"pageStatus"	
};

JobSearch.queryHash = {
	"cn":"searchCompName",
	"kw":"searchKeyword"	
};

JobSearch.prototype = { 
	
	/** validation if not input search condtion then show errormessage */
	isValid : function (){
		for(key in JobSearch.hash){
			var obj_id = JobSearch.hash[key];
			if(obj_id == null){
				continue;
			}
			
			var obj = $(obj_id);
			
			if(obj == null){
				continue;
			}
			if(this.isSelected(obj)){
				return false;
			}			
		}
		
		for(key in JobSearch.queryHash){
			var obj_id = JobSearch.queryHash[key];
			if(obj_id == null){
				continue;
			}
			
			var obj = $(obj_id);
			
			if(obj == null){
				continue;
			}
			if(this.isInput(obj)){
				return false;
			}
		}
		
		return true;		
	},
	
	/** make job search url */
	makeListUrl : function() {
        var url = JobSearch.URL_PREFIX;
        var isAppendJobClass = false;
        var isAppendIndustry = false;
		for(key in JobSearch.hash){
			var obj_id = JobSearch.hash[key];
			if(obj_id == null){
				continue;
			}
			
			var obj = $(obj_id);
			
			if(obj == null){
				continue;
			}
			if(this.isSelected(obj)){
				
	            if((key == 'js' || key == 'jm' || key == 'jl') && !isAppendJobClass){
	            	url += this.getListPath(key, obj);
	            	isAppendJobClass = true;
	            		
	            }else if((key == 'is' || key == 'il') && !isAppendIndustry){
	            	url += this.getListPath(key, obj);
	            	isAppendIndustry = true;
	            }else if(key == 'ai' || key == 'sl' || key == 'cp'){
	            	url += this.getListPath(key, obj);
	            }
			}
		}
		
		url += JobSearch.URL_LIST_SUFFIX;
		
		// paging status
		var page_obj = JobSearch.pageHash['pg'];
		if(page_obj != null && $(page_obj) != null && $F(page_obj) > 1){
			url += $F(page_obj);
		}
		
		url += '.html';

		// query string
		var isAppendQuery = false;
		for(key in JobSearch.queryHash){
			var obj_id = JobSearch.queryHash[key];
			if(obj_id == null){
				continue;
			}
			
			var obj = $(obj_id);
			
			if(obj == null){
				continue;
			}
			if(this.isInput(obj)){
				if(!isAppendQuery){
					url += '?';
				}else{
					url += '&';
				}
				url += this.getQuery(key, obj);
				isAppendQuery = true;
			}
		}
		
		return url;
	},
       
	/** make job detail url */
	makeDetailUrl : function(obj_id){
        var url = JobSearch.URL_PREFIX;
        
        var obj = $(obj_id);
        if(obj == null){
        	return url;
        }
        
        var val = obj.value;
        
        if(val != undefined && val != '' && !isNaN(val)){
            url += "/"+val+".html";
        }
        
        return url;
    },
    
    makeKeywordSearchUrl : function(obj_id){
    	var url = JobSearch.URL_PREFIX;
    	var obj = $(obj_id);
    	
    	if(!this.isInput(obj)){
    		return url + JobSearch.URL_LIST_SUFFIX+".html";
    	}
    	
    	return url+'/sf0'+JobSearch.URL_LIST_SUFFIX+".html?kw="+encodeURL(obj.value); 
    },
    
    
   makeCompNameSearchUrl : function(obj_id){
     	var url = JobSearch.URL_PREFIX;
    	var obj = $(obj_id);
    	
    	if(!this.isInput(obj)){
    		return url + JobSearch.URL_LIST_SUFFIX+".html";
    	}
    	
    	return url+'/sf1'+JobSearch.URL_LIST_SUFFIX+".html?cn="+encodeURL(obj.value); 		  	
   },
	
	isSelected : function (obj){		
        if(obj == null){
        	return false;
        }
        
        var val = obj.value;
        
		if(val == undefined || val == '0' || val == ''){
			return false;
		} 
		return true; 
	},
	
	isInput : function (obj){
		if(obj == null){
			return false;
		}
		
        var val = obj.value;   
		if(val == undefined || val == ''){
			return false;
		}
		
		return true;
	},
        
    getListPath : function (key, obj){
        return "/"+key+obj.value
    },
    
    getQuery : function(key, obj){
        return key +"="+encodeURL(obj.value);
    }
};


function encodeURL(str){

    var s0, i, s, u;

    s0 = "";                // encoded str

    for (i = 0; i < str.length; i++){   // scan the source

        s = str.charAt(i);

        u = str.charCodeAt(i);          // get unicode of the char

        if (s == " "){s0 += "+";}       // SP should be converted to "+"

        else {

            if ( u == 0x2a || u == 0x2d || u == 0x2e || u == 0x5f || ((u >= 0x30) && (u <= 0x39)) || ((u >= 0x41) && (u <= 0x5a)) || ((u >= 0x61) && (u <= 0x7a))){       // check for escape

                s0 = s0 + s;            // don't escape

            }

            else {                  // escape

                if ((u >= 0x0) && (u <= 0x7f)){     // single byte format

                    s = "0"+u.toString(16);

                    s0 += "%"+ s.substr(s.length-2);

                }

                else if (u > 0x1fffff){     // quaternary byte format (extended)

                    s0 += "%" + (oxf0 + ((u & 0x1c0000) >> 18)).toString(16);

                    s0 += "%" + (0x80 + ((u & 0x3f000) >> 12)).toString(16);

                    s0 += "%" + (0x80 + ((u & 0xfc0) >> 6)).toString(16);

                    s0 += "%" + (0x80 + (u & 0x3f)).toString(16);

                }

                else if (u > 0x7ff){        // triple byte format

                    s0 += "%" + (0xe0 + ((u & 0xf000) >> 12)).toString(16);

                    s0 += "%" + (0x80 + ((u & 0xfc0) >> 6)).toString(16);

                    s0 += "%" + (0x80 + (u & 0x3f)).toString(16);

                }

                else {                      // double byte format

                    s0 += "%" + (0xc0 + ((u & 0x7c0) >> 6)).toString(16);

                    s0 += "%" + (0x80 + (u & 0x3f)).toString(16);

                }

            }

        }

    }

    return s0;

}


