/*  NJSS JavaScript functions, version 0.0.1.1
 *  (c) 2008-2009 Yosuke Nagaya
 *
 *  NJSS javascript functions is depended on Prototype is.
 *
 *--------------------------------------------------------------------------*/

/**
 * Measure the time of rendering at browse.
 *--------------------------------------------------------------------------*/
/**
 * Window onload function
 * If you want mesure, trim coment out this.
 */
//Event.observe(window, 'load', measureTime4Rendering, false);

/**
 * Measure the time of rendering at browse.
 */
function measureTime4Rendering()
{
	var endTime = new Date();
	var renderingTime = endTime.getTime() - startTime.getTime();
	alert(renderingTime);
}
startTime = new Date();

/**
 * Scroll news
 *--------------------------------------------------------------------------*/
/**
 * Window onload function
 */
function initScrollNews()
{
	Event.observe(window, 'load', scrollNews, false);
}

/**
 * Initialize & start scroll.
 */
function scrollNews()
{
	var scrollMessage = new ScrollMessage();
	scrollMessage.setElement($('information_area'));
	scrollMessage.setMessages();
	scrollMessage.scroll();
}

/**
 * Class ScrollMessage
 */
function ScrollMessage() {
    this.element;
    this.child_element;
    this.messages = [];
    this.messages_key = 0;
    this.speed_scroll = 100;
    this.speed_unscroll = 150;
    this.scrolled_string;
    this.num_scroll_string = 1;
    this.num_unscroll_string = 0;
    this.tid_scroll;
    this.tid_unscroll;
}
ScrollMessage.prototype.setElement = function(element) {
    this.element = element;
}
ScrollMessage.prototype.setMessages = function() {
    this.messages.push('2010-03-02 「DNS負荷増大」等に伴なう、一時サービス中断のお知らせ');
    this.messages.push('2010-02-26 機関追加のお知らせ(新潟県庁、山梨県庁、富山県庁、日本年金機構) ');
    this.messages.push('2010-02-24 システムメンテナンスのお知らせ(2/27)');
    this.messages.push('2010-02-18 機関追加のお知らせ(自衛隊中央病院、全国中小企業団体中央会)');
    this.messages.push('2010-02-16 「新着案件メール」における、一部不具合解消のお知らせ');
    this.messages.push('2010-02-10 「新着案件メール」における、一部配信不具合のお知らせ');
    this.messages.push('2010-02-08 システムメンテナンスのお知らせ(2/11, 13, 14)');
    this.messages.push('2010-02-08 機関追加のお知らせ(新潟市役所)');
    this.messages.push('2010-01-29 機関追加のお知らせ(静岡市役所)');
    this.messages.push('2010-01-18 機関追加のお知らせ（鎌倉市役所）');
    this.messages.push('2010-01-18 機関追加のお知らせ（鎌倉市役所）');
    this.messages.push('2010-01-08 機関追加のお知らせ（大和市役所、住宅リフォーム・粉砕処理センター）');
    this.messages.push('2010-01-04 機関追加のお知らせ（京都市役所）');
    this.messages.push('2009-12-22 機関追加のお知らせ（藤沢市役所）');
    this.messages.push('2009-12-21 年末年始の休業のお知らせ');
    this.messages.push('2009-12-15 機関追加のお知らせ（神戸市役所、車両情報センター）');
    this.messages.push('2009-12-03 機関追加のお知らせ（厚木市役所）');
    this.messages.push('2009-11-27 機関追加のお知らせ（平塚市役所）');
    this.messages.push('2009-11-24 「新着案件メール」一部配信遅延のお知らせ');
    this.messages.push('2009-11-19 機関追加のお知らせ（横須賀市役所）');
    this.messages.push('2009-11-16 機関追加のお知らせ（柏市役所）');
    this.messages.push('2009-11-06 機関追加のお知らせ（宇都宮市役所）');
    this.messages.push('2009-10-29 機関追加のお知らせ（大阪市役所、日本学術振興会）');
    this.messages.push('2009-10-22 機関追加のお知らせ（横浜市役所、千葉市役所）');
    this.messages.push('2009-10-16 「Internet Explorer 6」での表示高速化のお知らせ');
    this.messages.push('2009-10-15 機関追加のお知らせ（消費者庁）');
    this.messages.push('2009-10-15 「NJSS会員利用規約」一部変更のお知らせ');
    this.messages.push('2009-09-28 機関追加のお知らせ（川崎市役所、さいたま市役所）');
    this.messages.push('2009-09-11 新着案件メールに「CSVダウンロード」機能が追加されました。');
    this.messages.push('2009-09-09 新着案件メールに「条件の共有」機能が追加されました。');
    this.messages.push('2009-09-09 機関追加のお知らせ（酒田河川国道事務所）');
    this.messages.push('2009-08-24 機関追加のお知らせ（都道府県庁等16機関）');
    this.messages.push('2009-08-21 「NJSS会員利用規約」一部変更のお知らせ');
    this.messages.push('2009-08-10 機関追加のお知らせ（全国健康保険協会47機関）');
    this.messages.push('2009-07-31 機関追加のお知らせ（都道府県庁13機関）');
    this.messages.push('2009-03-26 ウェブページ表示遅延 解消のお知らせ');
    this.messages.push('2009-03-25 ウェブページ表示遅延のお知らせ');
    this.messages.push('2009-03-16 無料お試し期間変更のお知らせ');
    this.messages.push('2009-03-16 機能追加のお知らせ');
    this.messages.push('2009-02-18 リニューアル完了のお知らせ');
    this.messages.push('2009-02-16 システムメンテナンスのお知らせ');
}
ScrollMessage.prototype.scroll = function(element) {
    if (!this.child_element) {
        var linkObj = new Element('a', { href:'/notices/' });
        this.element.insert(linkObj);
        this.child_element = linkObj;
    }
    if (this.messages_key >= this.messages.length) {
        this.messages_key = 0;
    }
    this.scrolled_string = this.messages[this.messages_key].substring(0, this.num_scroll_string);
    this.child_element.innerHTML = this.scrolled_string;
    this.num_scroll_string++;
    
    if (this.num_scroll_string > this.messages[this.messages_key].length) {
        this.num_scroll_string = 0;
        this.messages_key++;
    }
    if (this.num_scroll_string == 0) {
        clearTimeout(this.tid_scroll);
        this.unscroll();
    } else {
        var _this = this;
        this.tid_scroll = setTimeout(function() { _this.scroll(); }, this.speed_scroll);
    }
}
ScrollMessage.prototype.unscroll = function() {
    this.child_element.innerHTML = this.scrolled_string.substring(this.num_unscroll_string, this.scrolled_string.length);
    this.num_unscroll_string = this.num_unscroll_string + 1;
    var _this = this;
    this.tid_unscroll = setTimeout(function(){ _this.unscroll(); }, this.speed_unscroll);
    if (this.num_unscroll_string > this.scrolled_string.length) {
        this.num_unscroll_string = 0;
        clearTimeout(this.tid_unscroll);
        //this.child_element = null;
        Element.remove(this.child_element);
        this.child_element = null;
        this.scroll();
    }
}


/**
 * Scroll to target.
 * Add check all checkbox to grouping checkboxes.
 *--------------------------------------------------------------------------*/
/**
 * Event observe function for Scroll to.
 */
function initScrollToTarget()
{
	Event.observe(window, 'load', scrollToTarget, false);
}

/**
 * Scroll to target.
 */
function scrollToTarget() {
    /*if (typeof scroll_flg != "undefined" && typeof scroll_to != "undefined") {
        if (scroll_flg == true) {
            Element.scrollTo(scroll_to);
        }
    }*/
	Element.scrollTo(scrollToElement);
}


/**
 * Search options function.
 * Toggle, Show search options
 *--------------------------------------------------------------------------*/
/**
 * Window onload function.
 */
function initSearchOptions()
{
	//Event.observe(window, 'load', observeSearchOptions, false);
	document.observe('dom:loaded', observeSearchOptions, false);
}

/**
 * Event observe function.
 */
function observeSearchOptions() {
    Event.observe('showSearchBoxOptions', 'click', showSearchOptions, false);
}

/**
 * Toggle search options
 * 
 * @param {Object} evt
 * @todo  Not use
 */
function toggleSearchOptions(evt) {
    Element.toggle('offerSearchBoxOptions');
}

/**
 * Show offer search options
 * 
 * @param {Object} evt
 */
function showSearchOptions(evt) {
    Element.show('offerSearchBoxOptions');
    Element.hide('showSearchBoxOptions');
    if ($('searchParamsTable')) {
    	Element.hide('searchParamsTable');
    }
}

function initTabMaker()
{
  document.observe('dom:loaded', function(){
    new TabMaker();
  });
}
var TabMaker = Class.create();
TabMaker.prototype = {
  initialize: function(){
    var tabs = $('tabIndex').getElementsByClassName('tab');
    var boxs = $('tabBoxIndex').getElementsByClassName('tabBox');
    this.openIdx = 0;
    for(var i=0, z=tabs.length; i<z; i++){
      tabs[i].id = 'tabIndex' + i;
      boxs[i].id = 'tabBoxIndex' + i;
      tabs[i].addClassName('close');
      boxs[i].hide();
      tabs[i].observe('click', function(ev){
        var el = Event.element(ev);
        $('tabIndex' + this.openIdx).removeClassName('open');
        $('tabIndex' + this.openIdx).addClassName('close');
        $('tabBoxIndex' + this.openIdx).hide();

        this.openIdx = parseInt(el.id.replace('tabIndex', ''), 10);

        $('tabIndex' + this.openIdx).removeClassName('close');
        $('tabIndex' + this.openIdx).addClassName('open');
        $('tabBoxIndex' + this.openIdx).show();
      }.bind(this), false);
    }
    tabs[0].removeClassName('close');
    tabs[0].addClassName('open');
    boxs[0].show();
  }
}
  

function __checkboxGroup(isOffer, isPref, form)
{
  if(!isOffer && !isPref)return;
  form = $(form || document.forms[0].id);

  form.observe('click', function(ev){
    var el = Event.element(ev);
    if(isPref){
      // 都道府県
      if(el.id.match(/^OfferPrefecture\d+$/)){
        var chkMyPrefecture = $('OfferFuncChkallPrefecture1');
        if (chkMyPrefecture != null) {
          chkMyPrefecture.checked = false;
        }
      }
      else if(el.id == 'OfferFuncChkallPrefecture1'){
        var checkboxes = Form.getInputs('target_chkall_prefecture', 'checkbox');
        for(var i=0, z=checkboxes.length; i<z; i++)
          checkboxes[i].checked = false;
      }
      else if(el.id.match(/^OfferFuncChkallArea\d+$/)){
        var fieldset = el.parentNode,
        checkboxes = Form.getInputs(fieldset, 'checkbox'),
        z = checkboxes.length,
        allchecked = true;

        for(var i=0; i<z; i++)
          if(!checkboxes[i].checked){allchecked=false;break}

        for(var i=0; i<z; i++)
          checkboxes[i].checked = !allchecked;

        var chkMyPrefecture = $('OfferFuncChkallPrefecture1');
        if (chkMyPrefecture != null) {
          chkMyPrefecture.checked = false;
        }
      }
    }
    if(isOffer){
      // 公示種類
      if(el.id.match(/^OfferOfferType\d+$/)){
        var chkMyOfferType = $('OfferFuncChkallOfferType1');
        if (chkMyOfferType != null) {
          chkMyOfferType.checked = false;
        }
      }
      else if(el.id == 'OfferFuncChkallOfferType1'){
        var checkboxes = Form.getInputs('target_chkall_offer_type', 'checkbox');
        for(var i=0, z=checkboxes.length; i<z; i++)
          checkboxes[i].checked = false;
      }
      // 業務種類
      else if(el.id.match(/^OfferOfferCategory\d+$/)){
        var chkMyOfferCategory = $('OfferFuncChkallOfferCategory1');
        if (chkMyOfferCategory != null) {
          chkMyOfferCategory.checked = false;
        }
      }
      else if(el.id == 'OfferFuncChkallOfferCategory1'){
        var checkboxes = Form.getInputs('target_chkall_offer_category', 'checkbox');
        for(var i=0, z=checkboxes.length; i<z; i++)
          checkboxes[i].checked = false;
      }
      // 入札資格
      else if(el.id.match(/^OfferQualification\d+$/)){
        checkOffer(el);
      }
      else if(el.id == 'OfferFuncChkallQualification1'){
        var checkboxes = Form.getInputs('target_chkall_qualification', 'checkbox');
        for(var i=0, z=checkboxes.length; i<z; i++)
          checkboxes[i].checked = false;

        // ２段フォーム
        //var checked = document.getElementsByClassName('checked');
        var checked = $$('.checked');
        checked.each(function(el) {
          el.removeClassName('checked');
        });

        var chkMyQualification = $('OfferFuncChkmyQualification1');
        if (chkMyQualification != null) {
          chkMyQualification.checked = false;
        }
      }
      // 入札資格 ２段フォーム
      else if(el.id.match(/^twoStepFormParent(\d+)$/)){
        $('twoStepFormParentIndex').hide();
        window['openBox'] = 'twoStepFormBox' + RegExp.$1;
        $(window['openBox']).show();
        $('twoStepFormBackToParent').show();
      }
      else if(el.id == 'twoStepFormBackToParent'){
        $('twoStepFormParentIndex').show();
        $(window['openBox']).hide();
        el.hide();
      }
    }
  });

  var MyConditionBtn = $('loadMyConditionBtn');
  if (MyConditionBtn != null) {
    MyConditionBtn.observe('click', function(ev) {
      Event.stop(ev);
      loadMyCondition();

      var elements = document.getElementsByClassName("twoStepFormBox");
      for(var i = 0; i < elements.length; i++) {
          checkOffer(elements[i]);
      };
    });
  }
}

function checkOffer(el) {
  // ２段フォーム
  if(el.id.match(/^twoStepFormBox(\d+)$/)){
    var checkboxes = Form.getInputs(el, 'checkbox');
    var flag = false;
    for(var i=0, z=checkboxes.length; i<z; i++){
      if(checkboxes[i].checked){
        flag = true;
        break;
      }
    }
    if(flag){
      $('twoStepFormParent' + RegExp.$1).addClassName('checked');
      var chkAllQualification = $('OfferFuncChkallQualification1');
      if(chkAllQualification != null) {
        chkAllQualification.checked = false;
      }
    }else{
      $('twoStepFormParent' + RegExp.$1).removeClassName('checked');
    }

    return true;
  }

  for(var p=el.parentNode; p.tagName != 'BODY'; p=p.parentNode){
    if(p.id.match(/^twoStepFormBox(\d+)$/)){
      checkOffer(p);
    }
  }
}

function loadMyCondition(checked) {

  // grayout page
    $("overlay").style.display="block";
    $("lightbox").style.display="block";

    if ($('NewArrivalConditionAddForm') != null) {
      var targetForm = $('NewArrivalConditionAddForm');
    } else if ($('NewArrivalConditionEditForm') != null) {
      var targetForm = $('NewArrivalConditionEditForm');
    } else if ($('OfferSearchForm') != null) {
      var targetForm = $('OfferSearchForm');
    }

    Form.getInputs(targetForm, 'checkbox').each(function(el) {
      if (el.id.match(/^OfferFuncChkall/)) {
        el.checked = true;
      } else {
        el.checked = false;
      }
    });

  // restore form value
    if ($("OfferMyCondition") != null) {
      $("OfferMyCondition").checked = checked;
    }

    var a = new Ajax.Request(
      "/users/getCondition",
      {
        "method": "post",
        onSuccess: function(request) {

          var ConditionJson;
          eval("ConditionJson="+request.responseText);

          if (ConditionJson['error'] != null) {
              alert(ConditionJson['error']);

              $("overlay").style.display="none";
              $("lightbox").style.display="none";

              return true;
          }

          for (var i in ConditionJson) {
            for (var j=0, z=ConditionJson[i].length; j<z; j++) {
              if($('OfferFuncChkall'+i+'1') != null) {
                $('OfferFuncChkall'+i+'1').checked = false;
              }

              if ($('Offer'+i+ConditionJson[i][j]) != null) {
                $('Offer'+i+ConditionJson[i][j]).checked = true;
              }
            }
          };

          var elements = document.getElementsByClassName("twoStepFormBox");
          for(var i = 0; i < elements.length; i++) {
            checkOffer(elements[i]);
          };

          $("overlay").style.display="none";
          $("lightbox").style.display="none";
        },
        onFailure: function(request) {
          $("overlay").style.display="none";
          $("lightbox").style.display="none";
          alert("読み込みに失敗しました");
        }
      });

}

