| function toggleHandlebarLink(openTitle, closeTitle) { | 
|     jQuery(escapeVfId('Page:rightBlock')).toggleClass('sidebarCollapsed'); | 
|     if (jQuery(escapeVfId('Page:rightBlock')).hasClass('sidebarCollapsed')) { | 
|         jQuery('#handlebarLink').attr('title', openTitle); | 
|         document.cookie = "peSidebar=0;"; | 
|     } else { | 
|         jQuery('#handlebarLink').attr('title', closeTitle); | 
|         document.cookie = "peSidebar=1;"; | 
|     } | 
| } | 
| function defaultSidebarToggle() { | 
|     if (document.cookie) { | 
|         var cookies = document.cookie.split("; "); | 
|         for (var i = 0; i < cookies.length; i++) { | 
|             var str = cookies[i].split("="); | 
|             // Page:rightBlockを制御、1:開、0:閉 | 
|             if (str[0] == "peSidebar" && str[1] == "0") { | 
|                 jQuery(escapeVfId('Page:rightBlock')).toggleClass('sidebarCollapsed'); | 
|                 jQuery('#handlebarLink').attr('title', '单击打开侧栏'); | 
|             } | 
|         } | 
|     } | 
| } | 
| function windowResize() { | 
|     blockHeight = jQuery(window).innerHeight() - jQuery(escapeVfId('Page:Form')).height() - jQuery('#tabCommentPop').height() - 50; | 
|     jQuery('#in_Tab').css('height', blockHeight + 'px'); | 
|     jQuery('#in_Tab_container').css('height', jQuery('#in_Tab').height() + 2 + 'px'); | 
|     jQuery(escapeVfId('Page:rightBlock')).css('max-height', (jQuery('#in_Tab_container').height() + 50) + 'px'); | 
| } | 
| function tabHighlight() { | 
|     if (peTabRange != "") { | 
|         var range = peTabRange.split(","); | 
|         for (var i = 0; i < range.length; i++) { | 
|             //jQuery(escapeVfId('Page:Form2:tab' + range[i] + '_lbl')).css('background-color', 'yellow'); | 
|             jQuery(escapeVfId('Page:Form2:tab' + range[i] + '_lbl')).css('color', 'red'); | 
|         } | 
|     } | 
| } | 
| /* | 
| http://www.mediacollege.com/internet/javascript/form/limit-characters.html | 
| */ | 
| function limitText(limitField, limitNum) { | 
|     var limitCount = jQuery(limitField).parent().children('input.countdown'); | 
|     limitCount = limitCount[0]; | 
|     if (limitField.value.length > limitNum) { | 
|         limitField.value = limitField.value.substring(0, limitNum); | 
|     } else { | 
|         limitCount.value = limitNum - limitField.value.length; | 
|     } | 
| } | 
|   | 
| function saveTabComment(pBtn) { | 
|     var jBtn = jQuery(pBtn); | 
|     var jPop = jBtn.parent(); | 
|     var pTab = jPop.attr("tab"); | 
|     jBtn.hide(); | 
|     var limitField = jPop.children('textarea.limitedtextarea'); | 
|     limitField = limitField[0]; | 
|     var limitFieldValue = limitField.value; | 
|     if (limitFieldValue.length > 0) { | 
|         var pUser = jQuery(escapeVfId('Page:Form:selectUser')).val(); | 
|         var pProvinceUser = jQuery(escapeVfId('Page:Form2:userForComment_lkid')).val(); | 
|         // 省チェック | 
|         var pProvince = ""; | 
|         if (pProvince != undefined && pProvince != "" && pProvinceUser == "000000000000000") { | 
|             alert("必须选择用户"); | 
|             jBtn.show(); | 
|             return; | 
|         } | 
|         limitField.value = "发送中..."; | 
|          | 
|         var oldScroll = jQuery("#in_Tab")[0].contentWindow.document.body.scrollTop; | 
|         // 上に移動 | 
|         jQuery("#in_Tab")[0].contentWindow.document.body.scrollTop = 0; | 
|         var body = jQuery("#in_Tab").contents().find('body'); | 
|         html2canvas(body, { onrendered: function(canvas) { | 
|             // キャプチャ取った後、Scrollを戻す | 
|             jQuery("#in_Tab")[0].contentWindow.document.body.scrollTop = oldScroll; | 
|             var imgData = canvas.toDataURL(); | 
|              | 
|             if (pProvince == "") { | 
|                 PersonalEvaluationController.saveComment(pUser, "01210000000RDua", pTab, limitFieldValue, imgData, pTab, "", "", function(res, event) { | 
|                 limitField.value = ""; | 
|                 jBtn.show(); | 
|                 if(event.status) { | 
|                     PersonalEvaluationController.sendPeEmail(res.Id, function(res2, event2) { | 
|                     if(event2.status) { | 
|                         alert("发送完毕"); | 
|                         var jTabF = jQuery("#tabComment"); | 
|                         jTabF[0].src = "/apex/PersonalEvaluationCommentList?user=" + pUser + "&tab=" + pTab + "&expand=1&t=" + (new Date()).getTime(); | 
|                     } else { | 
|                         alert(event2.message); | 
|                     }}, {buffer: false, escape: true, timeout: 20000}); | 
|                 } else { | 
|                     alert(event.message); | 
|                 }}, {buffer: false, escape: true, timeout: 20000}); | 
|             } | 
|             else { | 
|                 ProvinceEvaluationController.saveComment(pProvinceUser, "01210000000RDua", pTab, limitFieldValue, imgData, pTab, "", "", pProvince, function(res, event) { | 
|                 limitField.value = ""; | 
|                 jBtn.show(); | 
|                 if(event.status) { | 
|                     PersonalEvaluationController.sendPeEmail(res.Id, function(res2, event2) { | 
|                     if(event2.status) { | 
|                         alert("发送完毕"); | 
|                         var jTabF = jQuery("#tabComment"); | 
|                         jTabF[0].src = "/apex/PersonalEvaluationCommentList?user=" + pUser + "&tab=" + pTab + "&expand=1&t=" + (new Date()).getTime(); | 
|                     } else { | 
|                         alert(event2.message); | 
|                     }}, {buffer: false, escape: true, timeout: 20000}); | 
|                 } else { | 
|                     alert(event.message); | 
|                 }}, {buffer: false, escape: true, timeout: 20000}); | 
|             } | 
|         }, width: 1000}); | 
|     } else { | 
|         jBtn.show(); | 
|     } | 
| } | 
|   | 
| /*******************************************************************************/ | 
| // jqPlot にて グラフを描画 | 
| tick1KFmt = function (format, val) { | 
|     if (val == 0) return 0; | 
|     var num = val/1000; | 
|     var numStr = String(Math.round(num * 10) /10).replace( /(\d)(?=(\d\d\d)+(?!\d))/g, '$1,');  | 
|     if (numStr == "0") { | 
|         return Math.round(val * 10) /10; | 
|     } else { | 
|         return numStr + "K"; | 
|     } | 
| }; | 
| targetPercent2Fmt = function (val1, targetSum) { | 
|     if (targetSum == 0) return "0"; | 
|     return "" + (Math.round(val1 * 10000 / targetSum) / 100); | 
| }; | 
| targetPercentFmt = function (val1, targetSum) { | 
|     if (targetSum == 0) return "0"; | 
|     return "" + (Math.round(val1 * 100 / targetSum)); | 
| }; | 
| jQuery(document).ready(function() { | 
|     var selectedTab = jQuery('#selectedTab').val(); | 
|     if (selectedTab != 'TabNameJ') return; | 
|     var pUser = jQuery(escapeVfId('Page:Form:selectUser')).val(); | 
|     var currentfiscalyear = '{!$Label.Current_fiscalyear}'; | 
|     var loadError = null; | 
|     var jLoading = jQuery('div.jqplot-target > div.loadingMask'); | 
|     if (jLoading.size() == 0) return;           // 対象がありません | 
|     var sapMap = null; | 
|     PersonalEvaluationController.getJsonSAP('', pUser,currentfiscalyear, function(res, event) { | 
|         if(event.status) { | 
|             sapMap = eval("("+res+")"); | 
|         } else { | 
|             loadError = event.message; | 
|         } | 
|     }, {buffer: true, escape: false, timeout: 120000}); | 
|     var oppSumMap = null; | 
|     PersonalEvaluationController.getJsonOppSum('', pUser, function(res, event) { | 
|         if(event.status) { | 
|             oppSumMap = eval("("+res+")"); | 
|         } else { | 
|             loadError = event.message; | 
|         } | 
|     }, {buffer: true, escape: false, timeout: 120000}); | 
|     var saMap = null; | 
|     PersonalEvaluationController.getJsonMBSA('', pUser, function(res, event) { | 
|         if(event.status) { | 
|             saMap = eval("("+res+")"); | 
|         } else { | 
|             loadError = event.message; | 
|         } | 
|     }, {buffer: true, escape: false, timeout: 120000}); | 
|     var forcastList = null; | 
|     PersonalEvaluationController.getJsonForcast('', pUser, function(res, event) { | 
|         if(event.status) { | 
|             var forcastMapList = eval("("+res+")"); | 
|             forcastList = []; | 
|             for (var i = 0; i < forcastMapList.length; i++) { | 
|                 for (var k in forcastMapList[i]) { | 
|                     forcastList.push([k, forcastMapList[i][k]]); | 
|                 } | 
|             } | 
|         } else { | 
|             loadError = event.message; | 
|         } | 
|     }, {buffer: true, escape: false, timeout: 120000}); | 
|      | 
|     var check = function() { | 
|         if(loadError != null || (sapMap != null && oppSumMap != null && saMap != null && forcastList != null)) { | 
|             if (loadError == null) { | 
|                 var targetMap = sapMap.Target_wt; | 
|                 var shipMap = sapMap.Ship_wt; | 
|                 var bOrdMap = sapMap.BackOrder_wt; | 
|                 var targetNumMap = sapMap.Target_num; | 
|                 var shipNumMap = sapMap.Ship_num; | 
|                 var bOrdNumMap = sapMap.BackOrder_num; | 
|                 // 正常 | 
|                 jLoading.hide(); | 
|                 // run when condition is met | 
|                 var targetSum = 0; | 
|                 var targetNum = 0; | 
|                 for ( var key in targetMap) { | 
|                     targetSum += targetMap[key]; | 
|                     targetNum += targetNumMap[key]; | 
|                 } | 
|                 targetMap = jQuery.extend({GI:0,ET:0,BF:0,GS:0,URO:0,GYN:0,ENT:0,OTH:0}, targetMap); | 
|                 var shipSum = 0; | 
|                 var shipNum = 0; | 
|                 for ( var key in shipMap) { | 
|                     shipSum += shipMap[key]; | 
|                     shipNum += shipNumMap[key]; | 
|                 } | 
|                 shipMap = jQuery.extend({GI:0,ET:0,BF:0,GS:0,URO:0,GYN:0,ENT:0,OTH:0}, shipMap); | 
|                 var bOrdSum = 0; | 
|                 var bOrdNum = 0; | 
|                 for ( var key in bOrdMap) { | 
|                     bOrdSum += bOrdMap[key]; | 
|                     bOrdNum += bOrdNumMap[key]; | 
|                 } | 
|                 bOrdMap = jQuery.extend({GI:0,ET:0,BF:0,GS:0,URO:0,GYN:0,ENT:0,OTH:0}, bOrdMap); | 
|   | 
|                 // chart1 | 
|                 if (jQuery("#chart1").size() > 0) | 
|                 var plot1 = jQuery.jqplot('chart1', [[targetPercent2Fmt(shipSum, targetSum)]], { | 
|                     title: personalEvaluationMap[0]['Report1_1_Name__c'], | 
|                     grid: { | 
|                         drawGridLines:true, | 
|                         background: 'white', | 
|                         borderWidth: 2.0, | 
|                         borderColor: '#999999' | 
|                     }, | 
|                     seriesDefaults: { | 
|                         renderer: jQuery.jqplot.MeterGaugeRenderer, | 
|                         rendererOptions: { | 
|                             min: 0, | 
|                             max: 100, | 
|                             label: targetPercent2Fmt(shipSum, targetSum) + ' %', | 
|                             labelPosition: 'bottom', | 
|                             intervals:[50, 70, 100], | 
|                             intervalColors:['#cc6666', '#E7E658', '#66cc66'] | 
|                         } | 
|                     } | 
|                 }); | 
|                 // chart2 | 
|                 var oppBase = shipSum + bOrdSum; | 
|                 var oppBid = oppBase + oppSumMap.oppBid.wt; | 
|                 var oppAuth = oppBid + oppSumMap.oppAuth.wt; | 
|                 var oppA = oppAuth + oppSumMap.oppA.wt * 0.8; | 
|                 var oppB = oppA + oppSumMap.oppB.wt * 0.5; | 
|                 var oppC = oppB + oppSumMap.oppC.wt * 0.3; | 
|                 // Can specify a custom tick Array. | 
|                 var c2ticks = ['目标', '发货', '注残', '已中标', '已授权', 'A', 'B', 'C']; | 
|                 var plot2Data = [[targetSum,0,0,0,0,0,0,0], [0,shipSum,0,0,0,0,0,0], [0,0,oppBase,0,0,0,0,0], [0,0,0,oppBid,0,0,0,0], [0,0,0,0,oppAuth,0,0,0], [0,0,0,0,0,oppA,0,0], [0,0,0,0,0,0,oppB,0], [0,0,0,0,0,0,0,oppC]]; | 
|                 if (jQuery("#chart2").size() > 0) | 
|                 var plot2 = jQuery.jqplot('chart2', plot2Data, { | 
| //                    title: personalEvaluationMap[0]['Report1_2_Name__c'], | 
|                     grid: {shadow: false, background: 'white'}, | 
|                     stackSeries: true, | 
|                     seriesDefaults: { | 
|                         renderer: jQuery.jqplot.BarRenderer, | 
|                         rendererOptions: { | 
|                             // Put a 5 pixel margin between bars. | 
|                             barMargin: 10 | 
|                         }, | 
|                         pointLabels: {hideZeros: true, stackedValue: true} | 
|                     }, | 
|                     axes: { | 
|                         xaxis: { | 
|                             renderer: jQuery.jqplot.CategoryAxisRenderer, | 
|                             ticks: c2ticks | 
|                         }, | 
|                         yaxis: { | 
|                             // Don't pad out the bottom of the data range.  By default, | 
|                             // axes scaled as if data extended 10% above and below the | 
|                             // actual range to prevent data points right on grid boundaries. | 
|                             // Don't want to do that here. | 
|                             min: 0, | 
|                             tickOptions: {formatter: tick1KFmt} | 
|                         } | 
|                     }, | 
|                     legend: { | 
|                         labels: ['%', targetPercentFmt(shipSum,targetSum), targetPercentFmt(oppBase,targetSum), | 
|                                  targetPercentFmt(oppBid,targetSum), targetPercentFmt(oppAuth,targetSum), | 
|                                  targetPercentFmt(oppA,targetSum), targetPercentFmt(oppB,targetSum), | 
|                                  targetPercentFmt(oppC,targetSum)], | 
| //                        labels: ['-', ''+shipNum, ''+bOrdNum, ''+oppSumMap.oppBid.num, ''+oppSumMap.oppAuth.num, ''+oppSumMap.oppA.num, ''+oppSumMap.oppB.num, ''+oppSumMap.oppC.num], | 
|                         show: true, | 
|                         marginTop: 0, | 
|                         placement: 'outsideGrid', | 
|                         location: 'n', | 
|                         renderer: jQuery.jqplot.EnhancedLegendRenderer, | 
|                         rendererOptions: { | 
|                             numberColumns: 8, | 
|                             seriesToggle: false | 
|                         } | 
|                     } | 
|                 }); | 
|                  | 
|                 // chart3 | 
|                 // Can specify a custom tick Array. | 
|                 var c3ticks = ['GI', 'ET', 'BF', 'GS', 'URO', 'GYN', 'ENT', 'OTH']; | 
|                 var sumYP  = targetSum - shipSum - bOrdSum; if (sumYP < 0) sumYP = 0; | 
|                 var sumGI  = targetMap.GI  - shipMap.GI  - bOrdMap.GI;  if (sumGI < 0)  sumGI = 0; | 
|                 var sumET  = targetMap.ET  - shipMap.ET  - bOrdMap.ET;  if (sumET < 0)  sumET = 0; | 
|                 var sumBF  = targetMap.BF  - shipMap.BF  - bOrdMap.BF;  if (sumBF < 0)  sumBF = 0; | 
|                 var sumGS  = targetMap.GS  - shipMap.GS  - bOrdMap.GS;  if (sumGS < 0)  sumGS = 0; | 
|                 var sumURO = targetMap.URO - shipMap.URO - bOrdMap.URO; if (sumURO < 0) sumURO = 0; | 
|                 var sumGYN = targetMap.GYN - shipMap.GYN - bOrdMap.GYN; if (sumGYN < 0) sumGYN = 0; | 
|                 var sumENT = targetMap.ENT - shipMap.ENT - bOrdMap.ENT; if (sumENT < 0) sumENT = 0; | 
|                 var sumOTH = targetMap.OTH - shipMap.OTH - bOrdMap.OTH; if (sumOTH < 0) sumOTH = 0; | 
|                 var plot3Data = [[[1,shipMap.GI, 0], [2,shipMap.ET], [3,shipMap.BF], [4,shipMap.GS], [5,shipMap.URO], [6,shipMap.GYN], [7,shipMap.ENT], [8,shipMap.OTH]], | 
|                                  [[1,bOrdMap.GI, 0], [2,bOrdMap.ET], [3,bOrdMap.BF], [4,bOrdMap.GS], [5,bOrdMap.URO], [6,bOrdMap.GYN], [7,bOrdMap.ENT], [8,bOrdMap.OTH]], | 
|                                  [[1,sumGI,sumGI], [2,sumET,sumET], [3,sumBF,sumBF], [4,sumGS,sumGS], [5,sumURO,sumURO], [6,sumGYN,sumGYN], [7,sumENT,sumENT], [8,sumOTH,sumOTH]] | 
|                                 ]; | 
|                 if (jQuery("#chart3").size() > 0) | 
|                 var plot3 = jQuery.jqplot('chart3', plot3Data, { | 
|                     title: personalEvaluationMap[0]['Report1_3_Name__c'], | 
|                     grid: {shadow: false, background: 'white'}, | 
|                     stackSeries: true, | 
|                     series: [ | 
|                              {color: '#EAA228'}, | 
|                              {color: '#c5b47f'}, | 
|                              {color: 'white'}    // #fffdf6 | 
|                          ], | 
|                     seriesDefaults: { | 
|                         renderer: jQuery.jqplot.BarRenderer, | 
|                         rendererOptions: { | 
|                             // Put a 5 pixel margin between bars. | 
|                             barMargin: 10 | 
|                         }, | 
|                         pointLabels: { | 
|                             show: true, hideZeros: true, stackedValue: true, | 
|                             ypadding: -1, | 
|                             location: 'n' | 
|                         } | 
|                     }, | 
|                     axes: { | 
|                         xaxis: { | 
|                             renderer: jQuery.jqplot.CategoryAxisRenderer, | 
|                             ticks: c3ticks | 
|                         }, | 
|                         yaxis: { | 
|                             // Don't pad out the bottom of the data range.  By default, | 
|                             // axes scaled as if data extended 10% above and below the | 
|                             // actual range to prevent data points right on grid boundaries. | 
|                             // Don't want to do that here. | 
|                             min:0, | 
|                             tickOptions: {formatter: tick1KFmt} | 
|                         } | 
|                     }, | 
|                     legend: { | 
|                         show: false, | 
|                     } | 
|                 }); | 
|                  | 
|                 // chart4 | 
|                 if (jQuery("#chart4").size() > 0) | 
|                 var plot4 = jQuery.jqplot('chart4', | 
|                         [[['订单数', saMap.Order], ['未付款数', saMap.NClct], ['无用户合同书', saMap.NCtrc]]], | 
|                 { | 
|                     title: personalEvaluationMap[0]['Report5_1_Name__c'], | 
|                     grid: {shadow: false, background: 'white'}, | 
|                     axes: { | 
|                         xaxis: { | 
|                             renderer: jQuery.jqplot.CategoryAxisRenderer, | 
|                         } | 
|                     }, | 
|                     seriesDefaults: { | 
|                         renderer: jQuery.jqplot.BarRenderer, | 
|                         pointLabels: { | 
|                             show: true, hideZeros: true, | 
|                             ypadding: -1, | 
|                             location: 'n' | 
|                         }, | 
|                         rendererOptions: { | 
|                             barWidth: 40, | 
|                             varyBarColor: true | 
|                         } | 
|                     } | 
|                 }); | 
|                  | 
|                 // chart7 | 
|                 if (jQuery("#chart7").size() > 0) | 
|                 var plot7 = jQuery.jqplot('chart7', [forcastList], { | 
|                     title: personalEvaluationMap[0]['Report6_1_Name__c'], | 
|                     grid: {shadow: false, background: 'white'}, | 
|                     axes: { | 
|                         xaxis: { | 
|                             renderer: jQuery.jqplot.CategoryAxisRenderer, | 
|                         }, | 
|                         yaxis: { | 
|                             tickOptions: {formatString:'%d'} | 
|                         } | 
|                     }, | 
|                     seriesDefaults: { | 
|                         renderer: jQuery.jqplot.BarRenderer, | 
|                         pointLabels: { | 
|                             show: true, hideZeros: true, | 
|                             ypadding: -1, | 
|                             location: 'n' | 
|                         } | 
|                     } | 
|                 }); | 
|   | 
|                 // chart8 | 
|                 var c8ticks = ['已中标', '已授权', 'A', 'B', 'C', 'D', 'E']; | 
|                 var plot8Data = [[Math.floor(oppSumMap.oppBid.num),0,0,0,0,0,0], | 
|                         [0,Math.floor(oppSumMap.oppAuth.num),0,0,0,0,0], [0,0,Math.floor(oppSumMap.oppA.num),0,0,0,0], | 
|                         [0,0,0,Math.floor(oppSumMap.oppB.num),0,0,0],[0,0,0,0,Math.floor(oppSumMap.oppC.num),0,0], | 
|                         [0,0,0,0,0,Math.floor(oppSumMap.oppD.num),0], [0,0,0,0,0,0,Math.floor(oppSumMap.oppE.num)]]; | 
|                 if (jQuery("#chart8").size() > 0) | 
|                 var plot8 = jQuery.jqplot('chart8', plot8Data, { | 
|                     title: personalEvaluationMap[0]['Report6_2_Name__c'], | 
|                     grid: {shadow: false, background: 'white'}, | 
|                     stackSeries: true, | 
|                     series: [ | 
|                              {color: '#579575'}, | 
|                              {color: '#839557'}, | 
|                              {color: '#958c12'}, | 
|                              {color: '#953579'}, | 
|                              {color: '#4b5de4'}, | 
|                              {color: '#d8b83f'}, | 
|                              {color: '#ff5800'} | 
|                          ], | 
|                     seriesDefaults: { | 
|                         renderer: jQuery.jqplot.BarRenderer, | 
|                         rendererOptions: { | 
|                             // Put a 5 pixel margin between bars. | 
|                             barMargin: 10 | 
|                         }, | 
|                         pointLabels: {show: true, hideZeros: true, stackedValue: true} | 
|                     }, | 
|                     axes: { | 
|                         xaxis: { | 
|                             renderer: jQuery.jqplot.CategoryAxisRenderer, | 
|                             ticks: c8ticks | 
|                         }, | 
|                         yaxis: { | 
|                             // Don't pad out the bottom of the data range.  By default, | 
|                             // axes scaled as if data extended 10% above and below the | 
|                             // actual range to prevent data points right on grid boundaries. | 
|                             // Don't want to do that here. | 
|                             padMin: 0, | 
|                             tickOptions: {formatString:'%d'} | 
|                         } | 
|                     }, | 
|                 }); | 
|             } else { | 
|                 // Error | 
|                 jLoading.children('div.loadingPanel').hide(); | 
|                 jLoading.children('span.loadingMsg').text("报表未返回结果。"); | 
|                 if (loadError == 'Unable to connect to the server (communication failure).') { | 
|                     // なにもしない | 
|                 } else { | 
|                     alert(loadError); | 
|                 } | 
|             } | 
|         } | 
|         else { | 
|             setTimeout(check, 1000); // check again in a second | 
|         } | 
|     } | 
| // ここは最後 | 
|     check(); | 
| }); |