/* Cookie でフォームデータを制御 (c)Sapphirus.Biz */ var SfmCookie = function() { // Cookie 用の Key を設定 var key = 'SFMSetData'; // textarea を Cookie で処理 [yes:1/no:0] // Cookie は保存容量が少ないので textarea での使用は非推奨です var useTA = 0; // GetElement 〜を短縮 var GetElem = new (function() { this.Tag = function(e) { return document.getElementsByTagName(e); } }); // Form 情報を取得 var d1, d2, d3; d1 = GetElem.Tag('input'); d2 = GetElem.Tag('select'); d3 = GetElem.Tag('textarea'); // Cookie へ書き込み this.set = function() { var p = new Array(); // text, radio, checkbox for (var i = 0; i < d1.length; i++) { if (d1[i].checked) { p.push(d1[i].type+'&'+i); } else if (d1[i].type == 'text' && d1[i].value) { p.push(d1[i].type+'&'+i+'&'+escape(d1[i].value)); } } // select for (var i = 0; i < d2.length; i++) { for ( var n = 0; n < d2[i].options.length; n++) { if (d2[i].options[n].selected == true) { p.push(d2[i].type.substring(0, d2[i].type.indexOf('-', 0))+'&'+i+'&'+n); } } } // textarea if (useTA == 1) { for (var i = 0; i < d3.length; i++) { p.push(d3[i].type+'&'+i+'&'+escape(d3[i].value)); } } var ssl = (document.location.protocol == 'https:') ? 'secure' : ''; document.cookie = key + '=' + p.join('|') + ';' + ssl; } // Cookie を元に戻す this.get = function() { if (document.cookie) { var p = new Array(); var k = key + '='; var c = document.cookie; var st = c.indexOf(k, 0); var ed = c.indexOf(';', st); var d = c.substring(st + k.length, ed); p = d.split('|'); for (var i = 0; i < p.length; i++) { var v = p[i].split('&'); switch (v[0]) { case 'checkbox': d1[v[1]].checked = true; break; case 'radio': d1[v[1]].checked = true; break; case 'text': d1[v[1]].value = unescape(v[2]); break; case 'select': d2[v[1]].options[v[2]].selected = true; break; case 'textarea': try { d3[v[1]].firstChild.nodeValue = unescape(v[2]); } catch(e) {} break; } } } } // Cookie を消去 this.reset = function() { document.cookie = key + '=;'; // + SfmFormObj.expDate(-1); this.clearTextArea(); } // textarea の表示をクリア this.clearTextArea = function() { for (var i = 0; i < d3.length; i++) { try { d3[i].firstChild.nodeValue = ''; } catch(e) {} } } // Cookie の有効期限を設定 this.expDate = function(t) { exp = new Date(); exp.setTime(exp.getTime() + 1000 * t); return 'expires=' + exp.toGMTString(); } // Onload 処理用 this.onLoad = function() { SfmFormObj.get(); for (var i = 0; i < d1.length; i++) { if(d1[i].type == 'submit') { d1[i].disabled = false; d1[i].onclick = function() { SfmFormObj.set(); } } if(d1[i].type == 'reset') { d1[i].onclick = function() { SfmFormObj.reset(); } } } } } var SfmFormObj = new SfmCookie(); window.onunload = function() { return false; } history.forward(); if (window.addEventListener) window.addEventListener('load', SfmFormObj.onLoad, false); if (window.attachEvent) window.attachEvent('onload', SfmFormObj.onLoad);