function isClosed(w) {
	if (!!w) {
		var ua = navigator.userAgent;
		if ((ua.indexOf("Gecko") != -1 || ua.indexOf("MSIE 4") != -1) && ua.indexOf("Win") != -1) {
			return w.closed;
		} else {
			return (typeof w.document != "object");
		}
	} else {
		return true;
	}
}

function ensureWindow(url, name) {
	if (document.URL.substr(0,5) == "https") {
	    url = "http://" + document.domain + url;
	}

	if (window.location.href.indexOf(url) != -1) {
		window.location.reload(true);
		return;
	}
	
	if (window.name == name) {
		name = "_" + name;
	}

	var w = window.opener;
	if ((typeof w != "undefined") && (!isClosed(w))) {
	    while (w) {
		    if (w.name == name) {
			    break;
		    }
    		
		    w = w.opener;
		    if ((typeof w == "undefined") || isClosed(w)) {
		        break;
		    }
	    }
	}
	if ((typeof w == "undefined") || isClosed(w)) {
		w = window.open("about:blank", name);
	}

	w.location.href = url;
	w.focus();
}

function fireButtonForFormKeyPress(event, btnid) {
	var __nonMSDOMBrowser = (window.navigator.appName.toLowerCase().indexOf('explorer') == -1);
	var __defaultFired = false;

	if (!__defaultFired && event.keyCode == 13) {
		var defaultButton;
		var src;
		if (__nonMSDOMBrowser) {
			defaultButton = document.getElementById(btnid);
			src = event.target;
		} else {
			defaultButton = document.all[btnid];
			src = event.srcElement;
		}
		var tagName = src.tagName.toLowerCase();
		if (defaultButton.click != undefined && tagName != "textarea") {
			__defaultFired = true;
			defaultButton.click();
			event.cancelBubble = true;
			return false;
		}
	}
	return true;
}

function getCookie(name) {
  var c = document.cookie;
  var prefix = name + "=";
  var begin = c.indexOf("; " + prefix);
  if (begin == -1) {
    begin = c.indexOf(prefix);
    if (begin != 0) {
      return "";
    }
  } else {
    begin += 2;
  }
  var end = c.indexOf(";", begin);
  if (end == -1) {
    end = c.length;
  }
  return unescape(c.substring(begin + prefix.length, end));
}

function zero2Padding(val){
  val = "00" + val;
  return val.substring(val.length-2, val.length);
}
function getCookieOption(){
  var dt = new Date();
  dt.setTime(dt.getTime() + (1000 * 60 * 60 * 24 * 365 * 500)); // [500y]
  var dstr = dt.toGMTString();
  return "; domain=.mapple.net; expires=" + dstr + "; path=/";
}
function setCookie(name, value) {
  var c = name + "=" + escape(value);
  document.cookie = c + getCookieOption();
}

function changeText(alink, value) {
  if (alink == null || alink == undefined) {
    return;
  }
  if (alink.innerText != undefined) {
    alink.innerText = value;
  } else {
    alink.textContent = value;
  }
}

function openCartWindow() {
	ensureWindow('/check.htm', 'mapple_cart');
}

function addToCart(targetId, targetName, noAlert) {
  targetId = unescape(targetId);
  if (!targetId || !targetId.match("^[CLGPS][0-9@]{10,11}$")) {
    return false;
  }

  var cookieName = "mapplenet_cart";
  var maxItemCount = 50;

  var cookieValue = getCookie(cookieName);
  if (cookieValue.indexOf(targetId) >= 0) {
    if (!noAlert) {
      alert("「" + targetName + "」は登録済みです。");
    }
    return false;
  }
  
  var itemCount = (cookieValue == "") ? (0) : (cookieValue.split(",").length);
  if (itemCount >= maxItemCount) {
    if (!noAlert) {
      alert("おでかけ候補は" + maxItemCount + "件まで登録できます。");
    }
    return false;
  }

  if (cookieValue != "") {
    cookieValue += ",";
  }
  cookieValue += targetId;

  setCookie(cookieName, cookieValue);

  var ol = document.getElementById("cart");
  if (ol) {
    if (itemCount >= 5) {
      var n = ol.firstChild;
      var nc = 0;
      while (n) {
        if (n.tagName && n.tagName.toLowerCase() == "li") {
          nc++;
        }
        if (nc == 5) {
          ol.removeChild(n);
          break;
        } else {
          n = n.nextSibling;
        }
      }
    }

    var li = document.createElement("li");
    var a = document.createElement("a");
    var d;
    var prefix = targetId.substring(0, 1);
    if (prefix == "C" || prefix == "L") {
      d = "guide";
    } else {
      d = "spots";
    }
    a.setAttribute("href", "/" + d + "/" + targetId + ".htm");
    var aText = document.createTextNode(targetName);
    a.appendChild(aText);
    li.appendChild(a);
    ol.insertBefore(li, ol.firstChild);
  }
  return true;
}

function addIdListToCart(idList) {
  for (var i = 0; i < idList.length; i++) {
    addToCart(idList[i], "", true);
  }
  openCartWindow();
}

function addToCartById(targetId) {
  targetId = targetId.replace("%40", "@");
  var link = document.getElementById('l_' + targetId);
  var name;
  if (link.innerText != undefined) {
    name = link.innerText;
  } else {
    name = link.text;
  }
  return addToCart(targetId, name);
}

function removeFromCart(targetId, targetName) {
  var cookieName = "mapplenet_cart";

  var cookieValue = getCookie(cookieName);
  var cart = cookieValue.split(",");

  cookieValue = "";
  for (var i = 0; i < cart.length; i++) {
    if (cart[i] != targetId) {
      if (cookieValue != "") {
        cookieValue += ",";
      }
      cookieValue += cart[i];
    }
  }

  setCookie(cookieName, cookieValue);

  if (targetName != undefined) {
    alert("「" + targetName + "」を削除しました。");
  }

  var cartCount = cart.length - 1;
  changeText(document.getElementById("cartcount1"), cartCount);
}

function removeFromCartById(targetId) {
  var link = document.getElementById("l_" + targetId);
  var name;
  if (link.innerText != undefined) {
    name = link.innerText;
    } else {
    name = link.text;
    }
    removeFromCart(targetId, name);
}

function clearCart() {
  if (!confirm("おでかけ候補の内容を全て削除します。")) {
    return;
  }

  setCookie("mapplenet_cart", "");
  
  var list = document.getElementById("cartlist");
  while (list.hasChildNodes()) {
    list.removeChild(list.childNodes[0]);
  }
  
  changeText(document.getElementById("cartcount1"), 0);
}

function removeElementById(id) {
	var elem = document.getElementById(id);
	if (!elem) {
		return;
	}
	elem.parentNode.removeChild(elem);
}

