/** GLOBAL VARIABLES **/ var groups ; //セレクタ群 var tableContents; //カラムソートの為 var gStatus = { // 主にlocation.hashに保存して状態保持に使う extra: false, //拡張ボタンが押されているか否か hash: {}, //セレクタ選択値 old: false //旧モデル選択 } var limit = 25; var offset = 0; var count = -1; var codes = []; //表示されているモデルの全本体型番 var ExceptSeries = ["600シリーズ","50シリーズ","増設ユニット","NXサーバ","ストレージ","InterSec"]; // var timeout_id = 0; // var console = { // debug: function() {} // } function go_select(link, xmlId) { // if( xmlId.match(/sigma-024/) ) { // document.select.action = "/UDMZ/ToExternalConfig.action?config=sigma"; // log2(document.select.submit(), link,'sigma'); if( xmlId.match(/tahiti/) ) { document.select.action = "/UDMZ/ToExternalConfig.action?config=tahiti"; log2(document.select.submit(), link,'tahiti'); } else if ( "kona" == xmlId ) { document.select.action = "/UDMZ/ToExternalConfig.action?config=kona"; log2(document.select.submit(), link,'kona'); } else if (xmlId.match(/^base=/)) { document.select.action = "/UDMZ/servlet/bto.neo.SelectFromOptionListServlet?" +xmlId.replace(/;/g,"&"); document.select.referer.value = document.location.href; document.select.submit(); } else { // console.log(link.href) // if(link.href.indexOf("/UDMZ/VSelect")>=0) // document.select.action = link.href; // else // document.select.action = "/UDMZ/Select.action?id="+xmlId; //// document.select.id.value = xmlId; document.select.action = "/UDMZ/Select.action?id="+xmlId; document.select.referer.value = document.location.href; // location.hashの値を渡すため document.select.submit(); } } function to_optioninfo(url) { window.open(url ,'_blank' ,'width=800,height=500,resizable=yes,directories=no,scrollbars=yes'); } window.onload = function() { var j = jQuery.noConflict(); if (!Array.prototype.indexOf) { Array.prototype.indexOf = function(elt /*, from*/) { var len = this.length; var from = Number(arguments[1]) || 0; from = (from < 0) ? Math.ceil(from) : Math.floor(from); if (from < 0) from += len; for (; from < len; from++) { if (from in this && this[from] === elt) return from; } return -1; }; } var re = /([^&=]+)=?([^&]*)/g; var decodeRE = /\+/g; // Regex for replacing addition symbol with a space var decode = function (str) {return decodeURIComponent( str.replace(decodeRE, " ") );}; j.parseParams = function(query) { var params = {}; var e; while ( e = re.exec(query) ) { var k = decode( e[1] ), v = decode( e[2] ); if (k.substring(k.length - 2) === '[]') { k = k.substring(0, k.length - 2); (params[k] || (params[k] = [])).push(v); } else params[k] = v; } return params; }; /* Effects */ DWRUtil.useLoadingMessage(); /* コンボボックス制御用 */ window.dhx_globalImgPath="dhtmlxCombo/imgs/"; //var topMenu = new YAHOO.widget.TabView("topMenu"); /* セレクタの初期化 */ groups = new SelGroups( j("#mandatory")[0], j("#optional")[0] ); var exchangeSearchHandler = function() { groups.exchangeSearchHandler(); } var allTagClearHandler = function() { groups.allTagClearHandler(); } var exchange_search = j('#exchange_search')[0]; var clear_link = j('#clear')[0]; var e_mouseOverHandler = function() { exchange_search.style.textDecoration = 'underline'; exchange_search.style.color = '#ff7f50'; } var c_mouseOverHandler = function() { clear_link.style.textDecoration = 'underline'; clear_link.style.color = '#ff7f50'; } var e_mouseOutHandler = function() { exchange_search.style.textDecoration = ''; exchange_search.style.color = '#3673ac'; } var c_mouseOutHandler = function() { clear_link.style.textDecoration = ''; clear_link.style.color = '#3673ac'; } // var destroyHandler = function() { // Event.stopObserving(exchange_search, "mouseover", e_mouseOverHandler, false); // Event.stopObserving(exchange_search, "mouseout", e_mouseOutHandler, false); // Event.stopObserving(clear_link, "mouseover", c_mouseOverHandler, false); // Event.stopObserving(clear_link, "mouseout", c_mouseOutHandler, false); // Event.stopObserving(exchange_search, "click", exchangeSearchHandler, false); // Event.stopObserving(clear_link, "click", allTagClearHandler, false); // Event.stopObserving(window, "unload", destroyHandler, false); // } exchange_search.onmouseover = e_mouseOverHandler; exchange_search.onmouseout = e_mouseOutHandler; clear_link.onmouseover = c_mouseOverHandler; clear_link.onmouseout = c_mouseOutHandler; exchange_search.onclick = exchangeSearchHandler; clear_link.onclick = allTagClearHandler; exchange_search.style.display="none"; //location.hashを使ったquery文字列取得テスト // if(location.hash) { // var hash = location.hash.substring(1).toQueryParams(); // console.debug("hash:", hash); // } //if(false) // 詳細選択を別ウィンドウで開くテスト // 以下はダメ。直接submit functionを呼び出して使っているので、 // イベントとして発生しない? // var submitHandler = function(e) { // console.debug(e); // Event.stop(e); // return false; // } // Event.observe(document.select, "submit", // submitHandler.bindAsEventListener(submitHandler)); // DebugSelectForm = Class.create(); // DebugSelectForm.prototype = { // initialize: function(form) { // console.debug("form: ", form); // Event.observe(form, 'submit', // this.submit.bindAsEventListener(this)); // this.form = form; // }, // submit: function(e) { // console.debug(e.ctrlKey()); // Event.stop(e); // return false; // } // } // debugSelect = new DebugSelectForm(document.select); //end } function setLocationHash() { var hash = gStatus.hash; if( gStatus["extra"] ) hash["extra"] = true; var q = []; for(var k in hash) q.push( k+"="+hash[k] ); if( q.length>0 ) location.hash = encodeURI(q.join('&')) else location.hash = "#"; } function intoOld() { var j = jQuery; gStatus.old = true; var sts = j('#status')[0]; var link = j('#intoLink')[0]; sts.innerHTML = '現行モデル'; link.href = "javascript:backFromOld();"; j('#old_message')[0].style.display=""; offset = 0; tagSet(); //console.debug("series: ", gStatus.hash['series']); var series = gStatus.hash['series']; if(!((series.length == 1) && (series.indexOf('50シリーズ') == 0))) j('#oldold_link')[0].style.display=""; } function backFromOld() { var j = jQuery; gStatus.old = false; var sts = j('#status')[0]; var link = j('#intoLink')[0]; sts.innerHTML = '旧モデル'; link.href = "javascript:intoOld();"; j('#old_message')[0].style.display="none"; offset = 0; tagSet(); j('#oldold_link')[0].style.display="none"; } function test() { //var groups = new SelGroups(j('#mandatory') ); //var tags = []; //tags.push( groups.sels.series[0].tag.id ); //100シリーズ //tags.push( groups.sels.way[0].tag.id ); // 1Way //tagSet(tags); /** * location.hashを使った戻りURL作成テスト **/ // var hash = $H(); // hash["series"] = groups.sels.series[0].tag.name; // hash["way"] = groups.sels.way[0].tag.name; // location.hash = hash.toQueryString(); /** * tableのカラム列のクリックイベントを登録 **/ var header = j('#serversList').getElementsByTagName("tr")[0].getElementsByTagName("th"); //console.debug(header); for(i=0,len=header.length; i0; i--) parent.removeChild(rows[i]); var template = j("#slrTemplate")[0]; var titleStr = "${title}{if ncodes}[${ncodes}]{/if} ${status} {if hippakuInfo}  ${hippakuInfo} の型番があります{/if}{if orderEndInfo}${orderEndInfo} の型番があります{else}{if orderWarningInfo}${orderWarningInfo} の型番があります{/if}{/if}{if orderStartInfo}${orderStartInfo}{/if}{if orders} ... ${orders}{/if}
${description}"; // {if newUrl}test{/if} を削除 // var titleStr = "${title}[${ncodes}] ${status} {if hippakuInfo}  ${hippakuInfo}{/if}
${description}"; var data = {} // if(false) // var infoStr = "{if price}${price}円〜
{/if}詳細情報"; // else // var infoStr = "詳細情報"; // end // var infoStr = ""; var infoStr = "価格・スペック情報確認" var prevModelName = ""; var prevBColor = ""; //var prevBg = ""; var tags = []; var tagNames = []; codes.length = 0; for( i=0, len=contents.length; i" : ""; data.description = contents[i].description; data.orderEndInfo = contents[i].orderEndInfo; if(data.orderEndInfo) data.orderWarningInfo = null; else data.orderWarningInfo = contents[i].orderWarningInfo; data.orderStartInfo = contents[i].orderStartInfo; data.hippakuInfo = null; data.orders = null; td[1].innerHTML = TrimPath.parseTemplate(titleStr).process(data); // if (false) // 詳細選択を別ウィンドウで開くテスト // xmlIdの値がうまく取れていない。失敗 // --> クラスにすればうまくいく? var link = td[1].getElementsByTagName("a")[0]; var xmlId = contents[i].xmlId; new ModelLink(link, xmlId); //イベントハンドラの登録 // if('newUrl' in data) { // link = td[1].getElementsByTagName("a")[1]; // new ModelLink(link, xmlId); //イベントハンドラの登録 // } // end var price = contents[i].price; if( contents[i].xmlId.match(/tahiti/) || ("kona"==contents[i].xmlId) ) td[2].innerHTML = " "; else if(price) td[2].innerHTML = contents[i].price+"円~"; else td[2].innerHTML = " "; // td[2].innerHTML = contents[i].series; // td[3].innerHTML = contents[i].bodyType; // td[4].innerHTML = contents[i].way; // --- 詳細情報リンク ---- data.ncodes = contents[i].codes.join(","); // if( contents[i].xmlId.match(/sigma-024A/) ) // data.ncodes = 'N8405-024A,N8405-034A'; // if( contents[i].xmlId.match(/sigma-024/) ) // data.ncodes = 'N8405-024'; if( contents[i].xmlId.match(/tahiti/) || ("kona"==contents[i].xmlId) || (!contents[i].enableOptionInfo) ) td[4].innerHTML = " "; else { data.price = contents[i].price; td[4].innerHTML = TrimPath.parseTemplate(infoStr).process(data); } // elseif (false) // td[4].innerHTML = contents[i].price+"円〜"; // --- 公開日その他 --- // tagNames.push( ""+contents[i].series+" "+contents[i].bodyType+"
" ); // tagNames.push( contents[i].way ); tagNames.push( ""+contents[i].series+" "+"
" ); //tagNames.push( contents[i].way ); jQuery.each(contents[i].tags, function(i,tag) { // if( tag.group.selectable ) // tags.push( tag ); if( (("DISK種別"==tag.group.groupKey) || (""==tag.group.groupKey) ) && (tag.seq >= 0) ) tags.push( tag ); }); tags.sort(function(a,b) { var res = a.group.seq - b.group.seq; res = (res==0)? (a.group.id - b.group.id) : res; res = (res==0)? (a.seq - b.seq) : res; return (res==0)? (a.id - b.id) : res; }); for(j=0, len2=tags.length; j0) && (prevModelName!=contents[i].model)) { //prevBColor = (""==prevBColor)? "#f5fffa" : ""; prevBColor = (""==prevBColor)? "#fff3df" : ""; //prevBg = (""==prevBg)? "#fefefe url(images2/bg_th2.gif) repeat-x bottom" : ""; for(j=0; j<5; j++) { td[j].style.borderTop = "2px solid #ccc"; } } prevModelName = contents[i].model; for(j=0; j<5; j++) { td[j].style.backgroundColor = prevBColor; //td[j].style.background = prevBg; } parent.appendChild(tr); } var pagerStr = "${count}件中 ${begin}-${end}件目 {if begin>1}[<< <]{/if}{if end> >>]{/if}"; data = {}; data.count = count; data.begin = offset + 1; var end = offset+limit; data.end = (end > count)? count: end; jQuery("#pager1")[0].innerHTML = TrimPath.parseTemplate(pagerStr).process(data); if( (data.begin>1)||(data.end=0; j--) { if(exceptSeries.indexOf(tag[j].name)<0) tag.splice(j,1); } } else { for(l2=tag.length,j=(l2-1); j>=0; j--) { if(ExceptSeries.indexOf(tag[j].name)>=0) tag.splice(j,1); } } } if( "CPU"==gk ) selector = AutocompleteSelector; else selector = TagsSelector; if(tag.length > 0) self.push( ((""==gk)? "_" : gk) , new selector(tag) ); }); // var keys = $H(tags).keys(); // for(var i=0, len=keys.length; i=0; j--) { // if(exceptSeries.indexOf(tag[j].name)<0) // tag.splice(j,1); // } // } else { // for(l2=tag.length,j=(l2-1); j>=0; j--) { // if(ExceptSeries.indexOf(tag[j].name)>=0) // tag.splice(j,1); // } // } // } // // if( "CPU"==gk ) // if(/MSIE/.test(navigator.userAgent)) // selector = ComboSelector; // else selector = DatalistSelector; // else selector = TagsSelector; // if(tag.length > 0) // self.push( ((""==gk)? "_" : gk) , new selector(tag) ); // } // --- for(var gk in self.sels) { // grp = self.sels[gk][0].tag.group; var sel = self.sels[gk]; grp = sel.group; if(grp) { if(grp.selectable) { if('title'==gk) continue; if(grp.mandatory) { self.mandatories[gk] = sel; } else { self.optionals[gk] = sel; } } } } // console.debugにバグある模様。注意! // console.debug("sels", $H(self.sels).keys()); // console.debug("mandatory", self.getKeys(true)); // console.debug("mandatory", self.mandatories); // console.debug("optional", self.getKeys(false)); // console.debug("optional", self.optionals); //FireBugバグ? 全て表示されない // console.debug("optional", $H(self.optionals).keys()); /* for Search View */ // if(exceptSeries) // var m_simples = ["CPU", "max_CPU_num", "max_HDD_num"]; // else var m_simples = ["series", "CPU", "max_CPU_num", "max_HDD_num"]; //var o_simples = ["_"]; var o_simples = []; DWRUtil.removeAllRows(self.mbody); DWRUtil.removeAllRows(self.obody); /* タグセレクタ行の追加 */ self.addTagRows(true, self.mbody, m_simples); self.addTagRows(false, self.obody, o_simples); // self.getKeys(true) // .each(function(gk) { // var tr = document.createElement("tr"); // var th = document.createElement("th"); // var td = document.createElement("td"); // var sel = self.sels[gk]; // th.innerHTML = sel[0].tag.group.groupName; // for(i=0; iタグをテキストとしてしか挿入できない */ // DWRUtil.addRows("search", // [self.sels["series"], self.sels["bodyType"], self.sels["way"]], // [ // /* th */ // function(data) { return data[0].tag.group.groupName; }, // /* td */ // function(data) { // for(i=0; i= 0 ) { // // td.appendChild(sel[i].el); // td.appendChild(document.createTextNode(" ")); // // } // // } if( simples.indexOf(gk) < 0 ) { tr.setAttribute("class", "extra"); // IEではだめ? tr.setAttribute("className", "extra"); } tr.appendChild(td); tbody.appendChild(tr); sel.dhtmlX(); }); }, /** * コードがdocumentに依存しているので注意? 気にしなくてよい? **/ exchangeSearchHandler: function() { // var ex = document.getElementsByClassName("extra"); var ex = jQuery(".extra"); //console.debug("ex.length", ex.length); if(ex.length>0) var disp = ex[0].style.display; disp = ('none'==disp)? '' : 'none'; for( i=0, len=ex.length; i=0) { // groups.selected[index] = null; // } }, select: function() { var self = this; self.bgColor = self.el.style.backgroundColor = Selector.SelectedColor; self.selected = true; } } function pushStatus(status, list) { // var status = this.sel; for(var i=0, len=status.length; i 没 // if( ("series"==tags[j].group.groupKey) && (ExceptSeries.indexOf(tags[j].name)>=0) ) // selector.el.setAttribute("style","display:none;"); } this.group = this.sel[0].tag.group; } TagsSelector.prototype = { appendEls: function(parent) { var sel = this.sel; for(i=0,len=sel.length; i= 0 ) { parent.appendChild(sel[i].el); parent.appendChild(document.createTextNode(" ")); } } }, dhtmlX: function() {}, select: function(tagNames) { var sels = this.sel; jQuery.each(sels, function(i,sel) { jQuery.each(tagNames, function(j,tagName) { if( sel.tag.name == tagName ) sel.select(); }); }); }, pushSelected: function(selected,hash) { var sels = this.sel; var gk = this.group.groupKey; for(i=0, len=sels.length; i= 0) selected[gk].push( tag.id ); }); } }, clear: function() { this.z.setComboText(""); } } /** * HTML5 datalist **/ function DatalistSelector(tags) { var self = this; jQuery.extend(self, DatalistSelector.prototype); this.tags = tags; this.group = tags[0].group; this.eli = document.createElement("input"); this.eld = document.createElement("datalist"); var group = this.group; var eli = this.eli; var eld = this.eld; eli.setAttribute("type","search"); eli.setAttribute("value",""); eli.setAttribute("autocomplete","on"); eli.setAttribute("style", "width:600px;"); // eli.setAttribute("name",group.groupKey+"j_select"); eli.setAttribute("list",group.groupKey+"_list"); eld.setAttribute("id",group.groupKey+"_list"); jQuery.each(tags, function(i,tag) { opt = document.createElement("option"); opt.setAttribute("value",tag.name); // opt.appendChild(document.createTextNode(tag.name)); eld.appendChild(opt); }); // tags.each(function(tag) { // opt = document.createElement("option"); // opt.setAttribute("value",tag.name); // // opt.appendChild(document.createTextNode(tag.name)); // eld.appendChild(opt); // }); // Event.observe(eli, "input", function(){ // if(timeout_id) { // clearTimeout(timeout_id); // timeout_id = 0; // } // setTimeout(tagSet, 1000); // }, false); eli.onchange = function(){ tagSet(); }; } DatalistSelector.prototype = { appendEls: function(parent) { parent.appendChild(this.eli); parent.appendChild(this.eld); }, dhtmlX: function() {}, select: function(tagNames) { this.eli.setAttribute("value",tagNames.join(" or ")); }, pushSelected: function(selected,hash) { var tags = this.tags; var gk = this.group.groupKey; combo_txt = this.eli.value.replace(/(^\s+)|(\s+$)/g, ""); // console.debug("combo_txt: "+combo_txt); if(""==combo_txt) return; if( hash[gk] == null ) hash[gk] = []; selected[gk] = []; hash[gk].push( combo_txt ); var txt = combo_txt.split(/\s+or\s+/); for(i=0,len=txt.length; i= 0) selected[gk].push( tag.id ); }); } }, clear: function(){ this.eli.value = ""; } } function AutocompleteSelector(tags) { var self = this; jQuery.extend(self, AutocompleteSelector.prototype); self.tags = tags; self.group = tags[0].group; self.eli = document.createElement("input"); self.eli.setAttribute("type","search"); self.eli.setAttribute("value",""); self.eli.setAttribute("style","width:600px;"); self.eli.setAttribute("id",self.group.groupKey+"_list"); var btn = document.createElement("input"); btn.setAttribute("type","button"); btn.setAttribute("value","▼"); self.btn = btn; var list = []; jQuery.each(tags, function(i,tag) { list.push(tag.name); }); var jeli = jQuery(self.eli); jeli.autocomplete({ minLength: 0, source: list }); self.eli.onclick = function() { jeli.autocomplete("search",self.eli.value); } self.eli.onchange = function() { tagSet(); if(/MSIE/.test(navigator.userAgent)) // IEだと動きが異なる為 self.eli.blur(); }; jeli.on("autocompleteselect", function(event,ui) { self.eli.value = ui.item.value; tagSet(); // eli.blur(); }); btn.onclick = function() { // jeli.focus(); self.eli.value = ""; jeli.autocomplete("search",""); self.eli.focus(); } } AutocompleteSelector.prototype = { appendEls: function(parent) { parent.appendChild(this.eli); parent.appendChild(this.btn); }, dhtmlX: function() {}, select: function(tagNames) { this.eli.setAttribute("value",tagNames.join(" or ")); }, pushSelected: function(selected,hash) { var gk = this.group.groupKey; var tags = this.tags; var combo_txt = this.eli.value.replace(/(^\s+)|(\s+$)/g, ""); if(""==combo_txt) return; if( hash[gk] == null ) hash[gk] = []; selected[gk] = []; hash[gk].push( combo_txt ); var txt = combo_txt.split(/\s+or\s+/); for(i=0,len=txt.length; i