// Place your application-specific JavaScript functions and classes here
// This file is automatically included by javascript_include_tag :defaults

function set_guide_input(element, value) {
    var element = $(element);
    if (!element) return false;
    if (!value) return false;
    var message_attrib = 'helper:guideMessage';
    element.setAttribute(message_attrib, value);
    Event.observe(element, "focus", function(event) {
            if (this.value != this.getAttribute(message_attrib)) return true;
            this.style.color = '';
            this.value = '';
        });
    var blur_func = function(event) {
        if (this.value && this.value != this.getAttribute(message_attrib)) return true;
        this.style.color = 'gray';
        this.value = this.getAttribute(message_attrib);
    };
    Event.observe(element, "blur", blur_func);
    Event.observe(element, "hook:pre-submit", function(event) {
            if (this.value == this.getAttribute(message_attrib))
                this.value = '';
    });
    
    var form = element;
    while (form.tagName != "FORM") {
        if (form.tagName == "BODY") {
            form = null;
            break;
        }
        form = form.parentNode;
    }
    if (form) {
        Event.observe(form, "submit", function(event) {
                $A(this.select("input")).each(function(i) {
                        Event.fire(i, "hook:pre-submit");
                });
        });
    }

    blur_func.bind(element).call();
}


function highlight(query) {
	var colors = ["#ffff66", "#a0ffff", "#99ff99", "#ff9999", "#ff66ff", "#880000", "#886800", "#004699", "#990099"];
	if (typeof(query) == "undefined" && document.referrer) {
		query = document.referrer.match(/q=([^;&]+)/);
		if (query) { query = query[1].replace("+", " "); }
	}
	if (query) {
		var words = decodeURI(query).split(/[ 　]/);
		var regs = [];
		for (var n = 0; n < words.length; n++) {
			regs[n] = new RegExp(words[n].replace(/(\W)/, "\\$1"), "i");
		}

		var buf = '';
		var body = document.body.innerHTML;
		for (var n = 0; n < words.length; n++) {
			var part = body.split(/(<.*?>)/);
			for (var i = 0; i < part.length; i++) {
				if (part[i].charAt(0) === "<") {
					buf += part[i];
					continue;
				}
				buf += part[i].split(regs[n]).join('<span style="background-color: '+colors[n]+';">'+words[n]+'</span>');
			}
			body = buf;
			buf = '';
		}
		document.body.innerHTML = body;
	}
	if (location.hash) {
		var elem = document.getElementById(location.hash.substring(1));
		if (elem)
			elem.style.backgroundColor = "#ffff66";
	}
}

function smartRollover() {   
    if(document.getElementsByTagName) {   
        var images = document.getElementsByTagName("img");   
        for(var i=0; i < images.length; i++) {   
            if(images[i].getAttribute("src").match("_defo."))   
            {   
                images[i].onmouseover = function() {   
                    this.setAttribute("src", this.getAttribute("src").replace("_defo.", "_on."));   
                }   
                images[i].onmouseout = function() {   
                    this.setAttribute("src", this.getAttribute("src").replace("_on.", "_defo."));   
                }   
            }   
        }   
    }   
}   
if(window.addEventListener) {   
    window.addEventListener("load", smartRollover, false);   
}   
else if(window.attachEvent) {   
    window.attachEvent("onload", smartRollover);   
}  


function Menuon(x){
	obj=document.getElementById("submenu"+x).style.visibility="visible";
}

function Menuoff(x){
	obj=document.getElementById("submenu"+x).style.visibility="hidden";
}
/* --------------------------------------------------------------------- */


/*
	Cross-Browser Split 0.2.1
	By Steven Levithan <http://stevenlevithan.com>
	MIT license
*/

var nativeSplit = nativeSplit || String.prototype.split;

String.prototype.split = function (s /* separator */, limit) {
	// If separator is not a regex, use the native split method
	if (!(s instanceof RegExp))
		return nativeSplit.apply(this, arguments);

	/* Behavior for limit: If it's...
	 - Undefined: No limit
	 - NaN or zero: Return an empty array
	 - A positive number: Use limit after dropping any decimal
	 - A negative number: No limit
	 - Other: Type-convert, then use the above rules */
	if (limit === undefined || +limit < 0) {
		limit = false;
	} else {
		limit = Math.floor(+limit);
		if (!limit)
			return [];
	}

	var	flags = (s.global ? "g" : "") + (s.ignoreCase ? "i" : "") + (s.multiline ? "m" : ""),
		s2 = new RegExp("^" + s.source + "$", flags),
		output = [],
		lastLastIndex = 0,
		i = 0,
		match;

	if (!s.global)
		s = new RegExp(s.source, "g" + flags);

	while ((!limit || i++ <= limit) && (match = s.exec(this))) {
		var zeroLengthMatch = !match[0].length;

		// Fix IE's infinite-loop-resistant but incorrect lastIndex
		if (zeroLengthMatch && s.lastIndex > match.index)
			s.lastIndex = match.index; // The same as s.lastIndex--

		if (s.lastIndex > lastLastIndex) {
			// Fix browsers whose exec methods don't consistently return undefined for non-participating capturing groups
			if (match.length > 1) {
				match[0].replace(s2, function () {
					for (var j = 1; j < arguments.length - 2; j++) {
						if (arguments[j] === undefined)
							match[j] = undefined;
					}
				});
			}

			output = output.concat(this.slice(lastLastIndex, match.index), (match.index === this.length ? [] : match.slice(1)));
			lastLastIndex = s.lastIndex;
		}

		if (zeroLengthMatch)
			s.lastIndex++;
	}

	return (lastLastIndex === this.length) ?
		(s.test("") ? output : output.concat("")) :
		(limit      ? output : output.concat(this.slice(lastLastIndex)));
};
/* Smooth scrolling
   Changes links that link to other parts of this page to scroll
   smoothly to those links rather than jump to them directly, which
   can be a little disorienting.
   
   sil, http://www.kryogenix.org/
   
   v1.0 2003-11-11
   v1.1 2005-06-16 wrap it up in an object
*/
var ss = {
  fixAllLinks: function() {
    // Get a list of all links in the page
    var allLinks = document.getElementsByTagName('a');
    // Walk through the list
    for (var i=0;i<allLinks.length;i++) {
      var lnk = allLinks[i];
      if ((lnk.href && lnk.href.indexOf('#') != -1) && 
          ( (lnk.pathname == location.pathname) ||
	    ('/'+lnk.pathname == location.pathname) ) && 
          (lnk.search == location.search)) {
        // If the link is internal to the page (begins in #)
        // then attach the smoothScroll function as an onclick
        // event handler
        ss.addEvent(lnk,'click',ss.smoothScroll);
      }
    }
  },

  smoothScroll: function(e) {
    // This is an event handler; get the clicked on element,
    // in a cross-browser fashion
    if (window.event) {
      target = window.event.srcElement;
    } else if (e) {
      target = e.target;
    } else return;

    // Make sure that the target is an element, not a text node
    // within an element
    if (target.nodeName.toLowerCase() != 'a') {
      target = target.parentNode;
    }
  
    // Paranoia; check this is an A tag
    if (target.nodeName.toLowerCase() != 'a') return;
  
    // Find the <a name> tag corresponding to this href
    // First strip off the hash (first character)
    anchor = target.hash.substr(1);
    // Now loop all A tags until we find one with that name
    var allLinks = document.getElementsByTagName('a');
    var destinationLink = null;
    for (var i=0;i<allLinks.length;i++) {
      var lnk = allLinks[i];
      if (lnk.name && (lnk.name == anchor)) {
        destinationLink = lnk;
        break;
      }
    }
    if (!destinationLink) destinationLink = document.getElementById(anchor);

    // If we didn't find a destination, give up and let the browser do
    // its thing
    if (!destinationLink) return true;
  
    // Find the destination's position
    var destx = destinationLink.offsetLeft; 
    var desty = destinationLink.offsetTop;
    var thisNode = destinationLink;
    while (thisNode.offsetParent && 
          (thisNode.offsetParent != document.body)) {
      thisNode = thisNode.offsetParent;
      destx += thisNode.offsetLeft;
      desty += thisNode.offsetTop;
    }
  
    // Stop any current scrolling
    clearInterval(ss.INTERVAL);
  
    cypos = ss.getCurrentYPos();
  
    ss_stepsize = parseInt((desty-cypos)/ss.STEPS);
    ss.INTERVAL =
setInterval('ss.scrollWindow('+ss_stepsize+','+desty+',"'+anchor+'")',10);
  
    // And stop the actual click happening
    if (window.event) {
      window.event.cancelBubble = true;
      window.event.returnValue = false;
    }
    if (e && e.preventDefault && e.stopPropagation) {
      e.preventDefault();
      e.stopPropagation();
    }
  },

  scrollWindow: function(scramount,dest,anchor) {
    wascypos = ss.getCurrentYPos();
    isAbove = (wascypos < dest);
    window.scrollTo(0,wascypos + scramount);
    iscypos = ss.getCurrentYPos();
    isAboveNow = (iscypos < dest);
    if ((isAbove != isAboveNow) || (wascypos == iscypos)) {
      // if we've just scrolled past the destination, or
      // we haven't moved from the last scroll (i.e., we're at the
      // bottom of the page) then scroll exactly to the link
      window.scrollTo(0,dest);
      // cancel the repeating timer
      clearInterval(ss.INTERVAL);
      // and jump to the link directly so the URL's right
      location.hash = anchor;
    }
  },

  getCurrentYPos: function() {
    if (document.body && document.body.scrollTop)
      return document.body.scrollTop;
    if (document.documentElement && document.documentElement.scrollTop)
      return document.documentElement.scrollTop;
    if (window.pageYOffset)
      return window.pageYOffset;
    return 0;
  },

  addEvent: function(elm, evType, fn, useCapture) {
    // addEvent and removeEvent
    // cross-browser event handling for IE5+,  NS6 and Mozilla
    // By Scott Andrew
    if (elm.addEventListener){
      elm.addEventListener(evType, fn, useCapture);
      return true;
    } else if (elm.attachEvent){
      var r = elm.attachEvent("on"+evType, fn);
      return r;
    } else {
      alert("Handler could not be removed");
    }
  } 
}

ss.STEPS = 25;

ss.addEvent(window,"load",ss.fixAllLinks);

   function preCheck() {
        var required = new Array(4);    //必須入力要素の数
        var notice = new Array(4);      //必須入力要素とペアになるエラーメッセージの要素数
        //それぞれの必須入力項目に対して…
        for (i=1; i<=required.length; i++) { //配列の添字は本来は0からだが、紛らわしいので…
            required[i] = window.document.getElementById("required" + i);
            notice[i] = window.document.getElementById("notice" + i);
            //入力が空値のとき
            if ((required[i].value == "") || (required[i].value == undefined)) {
                required[i].style.backgroundColor = "#ffd"; //要素を着色
                required[i].parentNode.style.backgroundColor = "#aec";  //親要素も着色
                notice[i].innerHTML = "必須入力です";   //エラーメッセージを表示
                required[i].focus();
                required[i].select();   //（これは不要かも…）
                return(false);  //Submitさせない
            }
            //入力されているとき
            else {
                //それが最後の要素だったら…
                if(i==required.length) {
                    return(true);   //Submitする
                }
            }
        }
    }
    //要素および親要素の色を元に戻し、エラーメッセージを消す。
    function resetBackground(elem) {
        elem.style.backgroundColor = "";
        elem.parentNode.style.backgroundColor = "";
        elem.nextSibling.nextSibling.innerHTML = "";
    }
