function replaceQueryUrl(){
	var query = document.location.search;
    var replaceQuery = "";
    if (query !== "") {
        var params = query.slice(1).split("&");
        for (var i = 0; i < params.length; i++) {
            var param = params[i].split("=");
            var key = param[0];
            var value = param[1];

            // 該当するクエリストリングは無視
            if (key === "sort") continue;
            if (key === "p") continue;

            // 新たにクエリストリングを作成
            if (replaceQuery !== "") {
                replaceQuery += "&";
            } else {
                replaceQuery += "?";
            }            
            replaceQuery += key + "=" + value;
        }
    }
    return replaceQuery;
}

function getSortValue(name, url) {
    if (!url) url = window.location.href;
    name = name.replace(/[\[\]]/g, "\\$&");
    var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
        results = regex.exec(url);
    if (!results) return null;
    if (!results[2]) return '';
    return decodeURIComponent(results[2].replace(/\+/g, " "));
}

window.onload = function() {
    var sel = document.getElementById('ds_sortvalue');
    if (sel !== null) {
    	var sortValue = getSortValue('sort',window.location.href);
    	sel.onchange = function() {
	        var value = this.options[this.selectedIndex].value;
	        var fileName = 'detailsearch.php';


            if (value != '') {
                var query = replaceQueryUrl();
                if (query !== '') {
                    var url = fileName + query + '&sort=' + value;
                    location.href = url;
                }else{
                    var url =  fileName + '?sort=' + value;
                    location.href = url;
                }
            } else {
                if (sortValue !== "") {
                    var query = replaceQueryUrl();
                    if (query !== '') {
                        location.href = fileName + query;
                    }else{
                        location.href = fileName;
                    }
                }
	        }
    	};
	}


    var frm = document.getElementById("detailsearch");
    if(frm !== null){
        var hash = getQueryHash();
        var keys = Object.keys(hash);
        for( var i=0, l=keys.length; i<l; i+=1) {
             var key = keys[i];
             var value = hash[key];
             key = decodeURI(key);
             value = decodeURI(value);
             if(key == "_switch"){
                if(value == "1"){
                    var chk = document.getElementById("ds_open_switch");
                    if(chk !== null){
                        chk.checked = true;
                    }
                }
             }else{
                setValueForm(key,value);
             }
          }

          var prefSelect = frm.getElementsByClassName('dstype_prefecture');
          if(prefSelect.length > 0){
            for (var i = 0; i < prefSelect.length; i++) {
                //console.log(prefSelect[i]);
                checkAreaList(prefSelect[i]);
            }
          }
    }
};


function setValueForm(name,value){
	try{value = decodeURIComponent(value);}catch(e){}

    var nodeList = document.getElementsByName(name);
    if(nodeList.length > 0){
        if(nodeList.length == 1){
            setNodeValue(nodeList[0],value);
        }else{
            nodeList.forEach( function ( node ) {
                setNodeValue(node,value);
            } ) ;
        }
    }
}

function setNodeValue(node,value){
    var tagName = node.tagName;
    if(tagName == "SELECT"){
        var o = node.options;
        for(var i = 0; i < o.length; i++) {
            var oValue = o[i].value;
            if(oValue.length > 0){
                oValue = decodeURIComponent(oValue);
                if(oValue == value){
                    o[i].selected = true;
                    break;
                }
            }
        }
    }else{
        if(tagName == "INPUT"){
            var type = node.type;
            if(type == "text"){
            	var vValue = value.replace(/\+/g, " ");
            	try{vValue = decodeURIComponent(vValue);}catch(e){}
                node.value = vValue;
            }else{
                var nValue = node.value;
                if(nValue.length > 0){
                    nValue = decodeURIComponent(nValue);
                    if(value === nValue){
                        node.checked = true;
                    }
                }
            }
        }
    }
}

function checkAreaList(obj){
    var idx = obj.selectedIndex;
    if(idx > 0){
       var ele = document.getElementById(obj.name + "_city")
       if(ele != null){
        idx = ele.selectedIndex;
        //console.log(idx);
        if(ele.options.length == 1){
           getAreaList(obj);
        }
       }
    }
}


function getAreaList_sp(obj){
    if ((navigator.userAgent.indexOf('iPhone') > 0 || navigator.userAgent.indexOf('iPad') > 0) || navigator.userAgent.indexOf('iPod') > 0) {
        obj.onchange();
    }
}



function getAreaList(obj){
	var idx = obj.selectedIndex;
    var value = obj.options[idx].value;
    var text  = obj.options[idx].text;
    var eName = obj.name;    
    var ele = document.getElementById(eName + "_city");
    if(ele !== null){
        if(ele.tagName == "SELECT"){
            var pref = decodeURI(value);
                var url = location.href;
                if(url.indexOf('file://') == -1){
                    var xhr = new XMLHttpRequest();
                    xhr.open('GET', "./citysearch.php?pref=" + value, true);
                    xhr.onreadystatechange = function(){
                    if (xhr.readyState === 4 && xhr.status === 200){
                        ele.innerHTML = xhr.responseText;

                        var cityKey = eName + "_city";
                        var hash = getQueryHash_url(url);
                        if (hash[cityKey]) {
                            var cVal = hash[cityKey];
                            if(cVal.length > 0){
                                cVal = decodeURI(cVal);
                                if(ele !== undefined){
                                    for (var i = 1; i < ele.options.length; i++) {
                                       if(ele.options[i].value == cVal){
                                            ele.options[i].selected = true;
                                            break;
                                       }
                                    }
                                }
                            }
                        }
                        selectRefocus(ele);
                    }else{
                        ele.innerHTML = '<option value="">指定なし</option>';
                        ele.selectedIndex = 0;
                    }};
                    xhr.send(null);
                }
        }
        if(ele.selectedIndex == -1){
            ele.selectedIndex = 0;
        }
    }
}

function selectRefocus(obj){
  if ((navigator.userAgent.indexOf('iPhone') > 0 || navigator.userAgent.indexOf('iPad') > 0) || navigator.userAgent.indexOf('iPod') > 0) {
            var current = document.activeElement;
            if(current == obj){
                obj.blur();
                obj.focus();
            }
   }
}


function getQueryHash() {
  var result = {}, hash;
  var query = location.search;
  return getQueryHash_url(query);
}

function getQueryHash_url(query) {
  var result = {}, hash;
  if(query.length > 0){
      var param = query.substring(query.indexOf('?')+1).split('&');
      for (var i=0; i<param.length; i++) {
        hash = param[i].split('=');
        if(hash[0] !== "p" && hash[0] !== "sort"){
            if(hash[1] !== undefined){
                if(hash[1].length > 0){
                    result[hash[0]] = hash[1];
                }
            }
        }
      }
  }
  return result;
}

function formReset() {
    document.ds_form.reset();
}