| function Music() { | 
|     this.init(); | 
| } | 
| (function () { | 
|     var pages = [], | 
|         panels = [], | 
|         selectedItem = null; | 
|     Music.prototype = { | 
|         total:70, | 
|         pageSize:10, | 
|         dataUrl:"http://tingapi.ting.baidu.com/v1/restserver/ting?method=baidu.ting.search.common", | 
|         playerUrl:"http://box.baidu.com/widget/flash/bdspacesong.swf", | 
|   | 
|         init:function () { | 
|             var me = this; | 
|             domUtils.on($G("J_searchName"), "keyup", function (event) { | 
|                 var e = window.event || event; | 
|                 if (e.keyCode == 13) { | 
|                     me.dosearch(); | 
|                 } | 
|             }); | 
|             domUtils.on($G("J_searchBtn"), "click", function () { | 
|                 me.dosearch(); | 
|             }); | 
|         }, | 
|         callback:function (data) { | 
|             var me = this; | 
|             me.data = data.song_list; | 
|             setTimeout(function () { | 
|                 $G('J_resultBar').innerHTML = me._renderTemplate(data.song_list); | 
|             }, 300); | 
|         }, | 
|         dosearch:function () { | 
|             var me = this; | 
|             selectedItem = null; | 
|             var key = $G('J_searchName').value; | 
|             if (utils.trim(key) == "")return false; | 
|             key = encodeURIComponent(key); | 
|             me._sent(key); | 
|         }, | 
|         doselect:function (i) { | 
|             var me = this; | 
|             if (typeof i == 'object') { | 
|                 selectedItem = i; | 
|             } else if (typeof i == 'number') { | 
|                 selectedItem = me.data[i]; | 
|             } | 
|         }, | 
|         onpageclick:function (id) { | 
|             var me = this; | 
|             for (var i = 0; i < pages.length; i++) { | 
|                 $G(pages[i]).className = 'pageoff'; | 
|                 $G(panels[i]).className = 'paneloff'; | 
|             } | 
|             $G('page' + id).className = 'pageon'; | 
|             $G('panel' + id).className = 'panelon'; | 
|         }, | 
|         listenTest:function (elem) { | 
|             var me = this, | 
|                 view = $G('J_preview'), | 
|                 is_play_action = (elem.className == 'm-try'), | 
|                 old_trying = me._getTryingElem(); | 
|   | 
|             if (old_trying) { | 
|                 old_trying.className = 'm-try'; | 
|                 view.innerHTML = ''; | 
|             } | 
|             if (is_play_action) { | 
|                 elem.className = 'm-trying'; | 
|                 view.innerHTML = me._buildMusicHtml(me._getUrl(true)); | 
|             } | 
|         }, | 
|         _sent:function (param) { | 
|             var me = this; | 
|             $G('J_resultBar').innerHTML = '<div class="loading"></div>'; | 
|   | 
|             utils.loadFile(document, { | 
|                 src:me.dataUrl + '&query=' + param + '&page_size=' + me.total + '&callback=music.callback&.r=' + Math.random(), | 
|                 tag:"script", | 
|                 type:"text/javascript", | 
|                 defer:"defer" | 
|             }); | 
|         }, | 
|         _removeHtml:function (str) { | 
|             var reg = /<\s*\/?\s*[^>]*\s*>/gi; | 
|             return str.replace(reg, ""); | 
|         }, | 
|         _getUrl:function (isTryListen) { | 
|             var me = this; | 
|             var param = 'from=tiebasongwidget&url=&name=' + encodeURIComponent(me._removeHtml(selectedItem.title)) + '&artist=' | 
|                 + encodeURIComponent(me._removeHtml(selectedItem.author)) + '&extra=' | 
|                 + encodeURIComponent(me._removeHtml(selectedItem.album_title)) | 
|                 + '&autoPlay='+isTryListen+'' + '&loop=true'; | 
|             return  me.playerUrl + "?" + param; | 
|         }, | 
|         _getTryingElem:function () { | 
|             var s = $G('J_listPanel').getElementsByTagName('span'); | 
|   | 
|             for (var i = 0; i < s.length; i++) { | 
|                 if (s[i].className == 'm-trying') | 
|                     return s[i]; | 
|             } | 
|             return null; | 
|         }, | 
|         _buildMusicHtml:function (playerUrl) { | 
|             var html = '<embed class="BDE_try_Music" allowfullscreen="false" pluginspage="http://www.macromedia.com/go/getflashplayer"'; | 
|             html += ' src="' + playerUrl + '"'; | 
|             html += ' width="1" height="1" style="position:absolute;left:-2000px;"'; | 
|             html += ' type="application/x-shockwave-flash" wmode="transparent" play="true" loop="false"'; | 
|             html += ' menu="false" allowscriptaccess="never" scale="noborder">'; | 
|             return html; | 
|         }, | 
|         _byteLength:function (str) { | 
|             return str.replace(/[^\u0000-\u007f]/g, "\u0061\u0061").length; | 
|         }, | 
|         _getMaxText:function (s) { | 
|             var me = this; | 
|             s = me._removeHtml(s); | 
|             if (me._byteLength(s) > 12) | 
|                 return s.substring(0, 5) + '...'; | 
|             if (!s) s = " "; | 
|             return s; | 
|         }, | 
|         _rebuildData:function (data) { | 
|             var me = this, | 
|                 newData = [], | 
|                 d = me.pageSize, | 
|                 itembox; | 
|             for (var i = 0; i < data.length; i++) { | 
|                 if ((i + d) % d == 0) { | 
|                     itembox = []; | 
|                     newData.push(itembox) | 
|                 } | 
|                 itembox.push(data[i]); | 
|             } | 
|             return newData; | 
|         }, | 
|         _renderTemplate:function (data) { | 
|             var me = this; | 
|             if (data.length == 0)return '<div class="empty">' + lang.emptyTxt + '</div>'; | 
|             data = me._rebuildData(data); | 
|             var s = [], p = [], t = []; | 
|             s.push('<div id="J_listPanel" class="listPanel">'); | 
|             p.push('<div class="page">'); | 
|             for (var i = 0, tmpList; tmpList = data[i++];) { | 
|                 panels.push('panel' + i); | 
|                 pages.push('page' + i); | 
|                 if (i == 1) { | 
|                     s.push('<div id="panel' + i + '" class="panelon">'); | 
|                     if (data.length != 1) { | 
|                         t.push('<div id="page' + i + '" onclick="music.onpageclick(' + i + ')" class="pageon">' + (i ) + '</div>'); | 
|                     } | 
|                 } else { | 
|                     s.push('<div id="panel' + i + '" class="paneloff">'); | 
|                     t.push('<div id="page' + i + '" onclick="music.onpageclick(' + i + ')" class="pageoff">' + (i ) + '</div>'); | 
|                 } | 
|                 s.push('<div class="m-box">'); | 
|                 s.push('<div class="m-h"><span class="m-t">' + lang.chapter + '</span><span class="m-s">' + lang.singer | 
|                     + '</span><span class="m-z">' + lang.special + '</span><span class="m-try-t">' + lang.listenTest + '</span></div>'); | 
|                 for (var j = 0, tmpObj; tmpObj = tmpList[j++];) { | 
|                     s.push('<label for="radio-' + i + '-' + j + '" class="m-m">'); | 
|                     s.push('<input type="radio" id="radio-' + i + '-' + j + '" name="musicId" class="m-l" onclick="music.doselect(' + (me.pageSize * (i-1) + (j-1)) + ')"/>'); | 
|                     s.push('<span class="m-t">' + me._getMaxText(tmpObj.title) + '</span>'); | 
|                     s.push('<span class="m-s">' + me._getMaxText(tmpObj.author) + '</span>'); | 
|                     s.push('<span class="m-z">' + me._getMaxText(tmpObj.album_title) + '</span>'); | 
|                     s.push('<span class="m-try" onclick="music.doselect(' + (me.pageSize * (i-1) + (j-1)) + ');music.listenTest(this)"></span>'); | 
|                     s.push('</label>'); | 
|                 } | 
|                 s.push('</div>'); | 
|                 s.push('</div>'); | 
|             } | 
|             t.reverse(); | 
|             p.push(t.join('')); | 
|             s.push('</div>'); | 
|             p.push('</div>'); | 
|             return s.join('') + p.join(''); | 
|         }, | 
|         exec:function () { | 
|             var me = this; | 
|             if (selectedItem == null)   return; | 
|             $G('J_preview').innerHTML = ""; | 
|             editor.execCommand('music', { | 
|                 url:me._getUrl(false), | 
|                 width:400, | 
|                 height:95 | 
|             }); | 
|         } | 
|     }; | 
| })(); |