// contactform.js
// prototype.jsとValidation.jsがあることが前提
var valid = null;
/*
 * メール用にテキストを整形して取得する
 */
function getInnerText(pNode) {
  if (!pNode.hasChildNodes) return '';
  var cNodes = $A(pNode.childNodes);
  var ret = '';
  cNodes.each (function(node) {
    if (node.nodeType == '3') {
      ret += node.nodeValue.replace(' ', '').replace('\n', '');
    } else if (node.tagName) {
      var tagName = node.tagName.toLowerCase();
      if (node.tagName.toLowerCase() == 'br') {
        ret += '\n';
      } else if (tagName == 'hr'){
        ret += '\n==============================\n';
      } else if (['div', 'p', 'li', 'dd', 'dt', 'tr'].include(tagName)) {
        ret += getInnerText(node);
        ret += '\n';
      } else if (tagName.match(/h[1-9]/)){
        ret += getInnerText(node);
        ret += '\n------------------------------\n';
			} else if (tagName == 'option') {
				if (node.selected == true) {
					ret += '[' + getInnerText(node) + ']';
				}
			} else if (tagName == 'input') {
        var type = node.type.toLowerCase();
        ret += (['text', 'password',  'textarea'].include(type)) ? '[' + node.value + ']'
                          : ('radio' == type) ? ((node.checked) ? '●' :'○')
                          : ('checkbox' == type) ? ((node.checked) ? '■' :'□')
                          : '';
			} else if (tagName == 'textarea') {
				if (node.name != 'body') {
					ret += node.value + '\n';
				}
      } else {
        ret += getInnerText(node);
      }
    }
  });
  return ret;  
}

function addValidation(classType, message, checkExp) {
  try {
    Validation.addAllThese([
      [classType, message, validateRegExp(checkExp)]
    ]);
  } catch (e) {
  }
}

function validateRegExp(exp) {
  var checkExp = exp;
  return function() {
    var v = arguments[0];
    return Validation.get('IsEmpty').test(v) || checkExp.test(v);
  }
}

var ContactForm = {
  setUp: function() {
      Event.observe(window, "load", this.eventLoad.bindAsEventListener(this));
  },
  eventLoad: function() {
    var contact_form = document.WriteContactForm;
    Event.observe(contact_form, "submit", this.eventSubmit.bindAsEventListener(this));
    Element.hide($('contact_body'),contact_form.body);
    var sendingMsg = $('sendingMessage');
    if (sendingMsg) {
      Element.hide(sendingMsg); 
    }
    try {
      valid = new Validation('writeContactForm', {stopOnFirst:true});
    } catch (e) {}
    new Insertion.After(contact_form.body, $('contact_body').innerHTML);

    //ラジオボタンのグルーピング
    GroupingRadioButtons(contact_form);

    // labelクリック
    $$('label').each(function(elem){

      Event.observe(elem, 'click', function(e){
        var ev_elem = Event.element(e);
        var ev_label = Event.findElement(e, 'label');
        if (ev_label.htmlFor) {
          var ev_check = $(ev_label.htmlFor);
          if ( ev_elem.tagName && ev_elem.tagName.toLowerCase() == 'label'
            || ev_check.type.toLowerCase() == 'radio') {
            // label 内のradioクリックでチェック
            ev_check.checked = true;
          }
        } else {
          var ev_checks = $A(ev_label.getElementsByTagName('input'));
          ev_checks.each(function(ev_check) {
           if (ev_check.type.toLowerCase() == 'radio') {
             ev_check.checked = true;
           }
         });
        }
      });

    });

    function GroupingRadioButtons(form){
      var radioGroups = $A(document.getElementsByClassName('radioGroup', contact_form));
      var i = 0;
      radioGroups.each(function(radiodiv) {
        var radios = $A(radiodiv.getElementsByTagName('input'));
        var name = 'radiogroup' + i;
        for (var j = 0; j < radios.length; j++) {
          radios[j].name = name;
          //radios[j].setAttribute('name', name);
        }
        i++;
      });
    }
  },
  eventSubmit: function(ev) {
    if (valid) {
      if (!valid.validate()) return false;
    }
    var contact_form = document.WriteContactForm;
    //Opera8 & Safari対策
    if ((window.opera && navigator.appVersion.substr(0,1) == '8') 
        || navigator.userAgent.indexOf("Safari") > - 1) {
      Element.show(contact_form.body);
      contact_form.body.style.height = '1px';
      contact_form.body.style.visibility = 'hidden';
    } else {
      Element.hide(contact_form);
    }
    var sendingMsg = $('sendingMessage');
    if (sendingMsg) {
      Element.show(sendingMsg); 
    } else {
      new Insertion.After(contact_form, '<div id="sendingMessage">お問い合わせを送信中です。</div>');
    }
    var validAdvices = document.getElementsByClassName('validation-advice', contact_form);
    validAdvices.each(function(vElem) {
      Element.remove(vElem);
    });
    if ($('ContactErrMsgAuthor').hasChildNodes ) {
      $('ContactErrMsgAuthor').innerHTML = '';
    }
    if ($('ContactErrMsgEmail').hasChildNodes ) {
      $('ContactErrMsgEmail').innerHTML = '';
    }
    if ($('ContactErrMsgBody').hasChildNodes ) {
      $('ContactErrMsgBody').innerHTML = '';
    }
    var oldText = contact_form.body.firstChild;
    if (oldText != null && oldText.nodeType == '3') {
      contact_form.body.removeChild(oldText);
    }
    contact_form.body.value = '';
/*
    Form.getElements(contact_form).each(function(elem){
      var tagname = elem.tagName.toLowerCase();
      if (tagname == 'select') {
        options = $A(elem.getElementsByTagName('option'));
        options.each(function(opt) {
          if (opt.selected == false) {
            Element.remove(opt);
          }
        });
      } else {
        if (elem != contact_form.body){
          var type = elem.type.toLowerCase();
          var elemtxt = (['text', 'password',  'textarea'].include(type)) ? elem.value
                          : ('radio' == type) ? ((elem.checked) ? '●' :'○')
                          : ('checkbox' == type) ? ((elem.checked) ? '■' :'□')
                          : '';
          //IEでtextarea内容がダブるのを抑止
          if (type == 'textarea' && (!Element.visible(contact_form) || !Element.visible(elem))) {
            elem.value = '';
          }
          elemtxt = encodeURIComponent(elemtxt);
          new Insertion.After(elem, elemtxt);
        }
      }
    });
*/
    var ret = getInnerText(contact_form);
    contact_form.body.value = decodeURIComponent(ret);
    return true;
  }
}

ContactForm.setUp();

