/*============================================================================================================================ pesi_api.js 2015.07.14 built ============================================================================================================================*/ /* Index Function name Description Author Last updated 1 showMenu Dynamic change Menu bar webpage Roy 2015.07.15 2 setMenuAnchor Save menu point to cpe Roy 2015.08.19 3 showPage Dynamic change page Roy 2015.07.15 4 resize_Middle Dynamic calculations middle div height Roy 2015.07.15 5 getInitState Do, undo block with CPE State KEY Roy 2015.08.06 6 getInitStateHandle Response function of "getInitState()" Roy 2015.08.06 7 checkError Error msg controler Roy 2015.08.06 8 getProgressState Get & Set progress bar value Roy 2015.08.14 9 getProgressStateHandle Response function of "getProgressState()" Roy 2015.08.14 10 setMenuAnchorHandle Response function of "setMenuAnchor()" Roy 2015.08.18 11 getMenuAnchor Get menu saved point & set up box menu Roy 2015.08.18 12 getMenuAnchorHandle Response function of "getMenuAnchor()" Roy 2015.08.18 13 hiddenContent hidden content Roy 2015.08.20 14 showContent show content Roy 2015.08.20 15 documentTranslate Do document translate Roy 2016.02.17 16 TT Translate text by selected lanuage Roy 2015.08.24 17 getInitInfo Get InitInfo from cpe Roy 2015.10.12 18 getInitInfoHandle Response function of "getInitInfo()" Roy 2015.10.12 19 setLang Set language key to cpe Roy 2015.08.24 20 setLangHandle Response function of "setLang()" Roy 2015.08.24 21 IsReverse do check string is reverse string or not Roy 2015.09.09 22 getCheckLogin Check login state Roy 2015.09.22 23 getCheckLoginHandle Response function of "getCheckLogin()" Roy 2015.09.22 24 TextBlockInvalidChar block character by black list Roy 2015.10.02 25 BubbleText Text Bubble Roy 2015.10.02 26 HTML_Encode HTML character Encode (defense XSS) Roy 2015.10.05 27 HTML_Decode HTML character Decode Roy 2015.10.05 28 GoAccount redirect to account page Roy 2015.10.07 29 getVersionTypeHandle Response function of "getInitInfo()" Roy 2015.10.26 30 justOneClick Set Apply attr button one click one time only Roy 2015.11.03 31 LoadingInformation Trun on loading-gif before data load complete Roy 2015.11.09 32 LoadingInformation_Off Trun off loading-gif after data load complete Roy 2015.11.09 33 ChangeElementType Change element type when it read only in IE 7,8,9 Roy 2015.11.12 34 CleanCHANGEPWDFLAG Clean CHANGEPWDFLAG(CHANGEPWDFLAG=0) Sky 2015.11.27 35 WhoLogin What account logged in, do what Roy 2015.12.03 36 IsMatchString Check match string or reverse string Roy 2016.02.26 37 Interval_1s_getInitState Loop getInitState when state not zero Roy 2016.03.15 38 checkErrorAll Show all Error msg 39 ChkDoBlock check DoBlock litaotao 2016.04.12 40 ChkResetDoBlock check Reset DoBlock litaotao 2016.04.12 41 GetLogin Get logged user name Roy 2016.04.15 42 redirect_system_reboot Redirect page to system_reboot.html GeorgeP 2016.10.05 43 AvoidPWDStored Avoid browser store password of input Roy 2017.09.06 */ includeJS('js/jquery.blockUI.js'); includeJS('js/jquery-ui.js'); // Get browser type and version var WhatBrowser = GetBrowserType(); // Flag : Check InitState per second var checkState = null; // Flag : Check Login per second var checkLogin = null; // default var trans_str = null; var trans_xml = null; var trans_last_ele = null; var wkey_VersionType = null; var wkey_LoginName = null; var wkey_TopTitle = null; var page_load_checksum = 0; var fixed_12320 = false; var page_name = document.getElementsByName('page')[0].content; getInitInfo(); getCheckLogin(); GetLogin(); $(function(){ init_Page(); WhoLogin(); //if common user logged in, hidden element which class name include URH AvoidPWDStored(); }); $(window).resize( function(){ if(WhatBrowser == BrowserType.IE7) //#9689 { $('#top').removeClass('top_ie7'); $('#top').addClass('top_ie7'); if($('#menu').size() > 0) { $('#menu_div').removeClass('myMenuDiv'); $('#menu_div').addClass('myMenuDiv'); } $('#middle').removeClass('middle_ie7'); $('#middle').addClass('middle_ie7'); } resize_Middle(); blockSetCenter(); }); function init_Page(){ if(page_name != 'Login' && page_name != 'system_reboot') WaitForScriptLoad('$().progressbar',autoBlock()); if(page_name != 'Login') showPage('top','top.html'); else showPage('top','login_top.html'); // showPage('menu','menu.html'); showPage('footer','footer.html'); var check_page_load_complete = setInterval(function(){ if(page_load_checksum == 5) { clearInterval(check_page_load_complete); documentTranslate(); } },100); if(WhatBrowser == BrowserType.IE7) { if($('#left-side').size() > 0) { var n = 0; var cc = setInterval(function(){ if( ($('#middle').height() > 0) | (n >= 5) ) { clearInterval(cc); $('#left-side').height($('#middle').height()); } n++; },50); } } var temp_12320_page = ["Account", "NTP", "TR069", "IP Filtering", "IPv6 Filtering", "MAC Filtering", "URL Filtering", "System Security", "NAT Port Forwarding", "DMZ", "Route Settings", "Operation Mode", "APN Profile", "Internet Settings", "Network Selection", "PinManagement", "MTU", "LAN", "DHCP Static Leases", "WLAN", "WPS", "UPNP Setting", "Backup Settings", "System Log", "System Message", "Diagnostic", "system_reboot", "Wizard", "SIP Basic", "SIP Advanced", "Voice Advanced", "Speed Dial", "VoIP Status", "NAT Alg"]; if($.inArray(page_name, temp_12320_page) != -1) fixed_12320 = true; else fixed_12320 = false; function autoBlock(){ getInitState(); checkLogin = setInterval(function(){ getCheckLogin(); if(!fixed_12320) getInitState(); },3000); } } //1. Dynamic change #menu page function showMenu(URL){ $("#menu").load(URL,function (){ resize_Middle(); }); } //2. Save menu point to cpe function setMenuAnchor(str_type,str_name){ var param = "Command=SetMenuState&menu_anchor=" + str_type + "," + str_name; XHRPost(setMenuAnchorHandle, "./cgi-bin/common.cgi", param, true); } //3. Dynamic change page function showPage(Div_ID,URL){ Div_ID = '#' + Div_ID; $.get( URL, function(data){ $(Div_ID).html(data); resize_Middle(); }, 'html' ) .done(function(){ if(Div_ID == '#top') page_load_checksum = page_load_checksum + 1; // else if(Div_ID == '#menu') // page_load_checksum = page_load_checksum + 2; else if(Div_ID == '#footer') page_load_checksum = page_load_checksum + 4; }) .fail(function(){ showPage(Div_ID.replace('#',''),URL); }); return false; } //4. Dynamic calculations middle div height function resize_Middle(){ var hetght_middle = $(window).height() - $("#top").height() - $("#footer").height(); // var IE6_padding_size = 30; // // if(WhatBrowser == "IE6") // { // var temp = hetght_middle - IE6_padding_size; // // if (temp < $("#content").height()) // $("#middle").height($("#content").height()); // else // $("#middle").height(temp); // } if (WhatBrowser == "IE7") { if(hetght_middle < $("#content").height()) $("#middle").css({height: $("#content").height()}); } else $("#middle").css({height: hetght_middle}); } //5. Do, undo block with CPE State KEY function getInitState(){ if(fixed_12320) XHRGet(getInitStateHandle, "./cgi-bin/common.cgi?Command=GetInitState", true, true , 2, getInitState); else XHRGet(getInitStateHandle, "./cgi-bin/common.cgi?Command=GetInitState", true); } //6. Response function of "Do, unodo block with CPE State KEY" function getInitStateHandle(xmlDoc){ var state = getDataFromTag(xmlDoc,"state"); var state_msg = getDataFromTag(xmlDoc,"state_msg"); var state_ok = getDataFromTag(xmlDoc,"state_ok"); if(state != '') { if(state == '1') { if(state_ok == '') DoBlock(); else { if($('#customize_Block_no_auto_close').length != 0 | $('#customize_Block_auto_close').length != 0) { var temp_str = TT(state_msg); if($('.BlockTextArea').html() != temp_str) ResetDoBlock(temp_str, true); } else { if($('#Block').html() != null) ResetDoBlock(state_msg, false); else DoBlock(state_msg, true, state_ok); } } if(fixed_12320) Interval_1s_getInitState(); } else if(state == '2') { ProgressBlockStart(); getProgressState(); //set progress value if(fixed_12320) Interval_1s_getInitState(); } else if((state == '0') & ($('#Block').length != 0 | $('#customize_Block_no_auto_close').length != 0)) { var msgStr = null; if($('#customize_Block_no_auto_close').length != 0) if(state_msg != '') msgStr = TT(state_msg); ResetDoBlock(msgStr, true); } else if((state == '0') & ($('#customize_Block_auto_close').length != 0)) UndoBlock(); else if((state == '0') & ($('#progressbar').length != 0)) ProgressBlockSetValue(100); } } //7. Error msg controler function checkError(xmlDoc,func){ if(xmlDoc) { var errors = xmlDoc.getElementsByTagName("Error"); if (errors.length > 0) { var error_msg = getDataFromTag(xmlDoc,"Error"); if(func) ErrorBlock(error_msg, func); else ErrorBlock(error_msg); return 1; } } return 0; } //8. Get & Set progress bar value function getProgressState(){ var cmd = 'GetProgressState'; XHRGet(getProgressStateHandle, "./cgi-bin/common.cgi?Command=" + cmd , true); } //9. Response function of "getProgressState()" function getProgressStateHandle(xmlDoc){ var p_state = getDataFromTag(xmlDoc,"progress_state"); var p_str = getDataFromTag(xmlDoc,"progress_str"); var upg_type = getDataFromTag(xmlDoc,"update_type_3"); if(p_state != '') { var value = Number(p_state); if(value.toString() == "NaN") ErrorBlock('Progress value format error!'); else { if(value != -1) ProgressBlockSetValue(value); } } if(p_str != ''){ $(".progress-text").text( TT(p_str) ); if(typeof isuppage!="undefined" && isuppage==true){ if ( upg_type != 1 ) { if(p_str=="Upgrade Success") setStatusText(TT("Upgrade Success")); if(p_str=="Upgrading, please wait...") { if(p_state != '') { var value = Number(p_state); var str = TT("F/W file ")+ TT(" update..."); if(value >= 50) setStatusText(str); } } } } } } //10. Response function of "setMenuAnchor()" function setMenuAnchorHandle(xmlDoc){ if(checkError(xmlDoc)) return; } //11. Get menu saved point & set up box menu function getMenuAnchor(){ XHRGet(getMenuAnchorHandle, "./cgi-bin/common.cgi?Command=GetMenuState", true); } //12. Response function of "getMenuAnchor()" function getMenuAnchorHandle(xmlDoc){ if(checkError(xmlDoc)) return; else { var str_data = getDataFromTag(xmlDoc,"state"); if(str_data != '') box_menu_marker(str_data); } } //13. hidden content function hiddenContent(){ $('#middle').css('display','none'); $('#footer').css('display','none'); } //14. show content function showContent(){ $('#middle').css('display','table'); $('#footer').css('display','table'); } //15. Do document translate function documentTranslate(){ var wait_trans_xml_count = 0; //// 02.17 don't need do Display_box_menu again. var interval = setInterval(function() { if( (trans_xml != null) & ($('#footer_right')[0] != null) ) { if(typeof(Display_box_menu) == 'function') { if(box_menu_down) { clearInterval(interval); change_Image_By_Trans_Xml(); var ele = $('#frame')[0]; TransEleValue(ele); } } else { clearInterval(interval); change_Image_By_Trans_Xml(); var ele = $('#frame')[0]; TransEleValue(ele); } } else { wait_trans_xml_count++; if(wait_trans_xml_count > 10) { wait_trans_xml_count = 0; getInitInfo(); } } },50); //find element loop function TransEleValue(ele){ if(ele.children && ele.children.length > 0) { for(var i = 0 ; i < ele.children.length ; i++) TransEleValue(ele.children[i]); } else{ var CanTransEleList = ["button", "text", "reset", "submit"]; if($.inArray(ele.type,CanTransEleList) != -1) $(ele).val(TT($(ele).val())); else if($(ele).is('img')) $(ele).attr('title',TT($(ele).attr('title'))); else { if(GetBrowserType().indexOf('IE') >= 0) { var str = TT($(ele).text()); if($(ele).text() != str) $(ele).text(str); } else $(ele).html(TT($(ele).html())); } if(typeof($(ele).attr('title'))!='undefined') $(ele).attr('title',TT($(ele).attr('title'))); trans_last_ele = ele; if(trans_last_ele.id == 'footer_right') check_Trans_Complete(); } } function change_Image_By_Trans_Xml(){ if(trans_str != 'en.xml') { var s = trans_str.replace('.xml',''); if(page_name == 'Login') //if page is Login.html return ; } } //wait until translate end function check_Trans_Complete(){ var checkTopLangSelector = setInterval(function() { if ($('#lang_selector')[0]) { clearInterval(checkTopLangSelector); $('#lang_selector').val(trans_str); $('#frame').css('display','block'); resize_Middle(); } else showPage('top','top.html'); },50); } } //16. Translate text by selected lanuage function TT(ori_str){ if(!trans_xml) return ori_str; var StrangeIE_flg = false; var StrangeIE = [BrowserType.IE9, BrowserType.IE10, BrowserType.IE11, BrowserType.IE_Edge]; if($.inArray(WhatBrowser, StrangeIE) != -1) StrangeIE_flg = true; var PageName = window.location.pathname; var PageName_Start_Index = PageName.lastIndexOf("/", window.location.pathname.length - 1) + 1; var PageName_End_Index = PageName.lastIndexOf(".", window.location.pathname.length - 1); if(PageName_End_Index == -1) PageName = "LOGIN" ; else PageName = PageName.substring(PageName_Start_Index, PageName_End_Index).toUpperCase(); //Translation by page node if (trans_xml.getElementsByTagName(PageName)[0] != null) { var str_list = trans_xml.getElementsByTagName(PageName)[0].getElementsByTagName('str'); for(var i = 0 ; i < str_list.length ; i++) { if(StrangeIE_flg) { if(str_list[i].attributes[1].value == ori_str) return str_list[i].attributes[0].value; } else { if(str_list[i].attributes[0].value == ori_str) return str_list[i].attributes[1].value; } } } //Translation by COMMON node (when page node content no match) if (trans_xml.getElementsByTagName("COMMON")[0] != null) { str_list = trans_xml.getElementsByTagName("COMMON")[0].getElementsByTagName('str'); for(var i = 0 ; i < str_list.length ; i++) { if(StrangeIE_flg) { if(str_list[i].attributes[1].value == ori_str) return str_list[i].attributes[0].value; } else { if(str_list[i].attributes[0].value == ori_str) return str_list[i].attributes[1].value; } } } //Translation by all node (when page node and COMMON node content no match) var Step_Node = null; var xml_ChildCount = 0; xml_ChildCount = trans_xml.getElementsByTagName('translate')[0].childNodes.length; for(var n = 0 ; n < xml_ChildCount ; n++) { Step_Node = trans_xml.getElementsByTagName('translate')[0].childNodes[n]; if((Step_Node.tagName != PageName) & (Step_Node.tagName != "COMMON")) { if(Step_Node.nodeName == "#text") continue; else { str_list = Step_Node.getElementsByTagName('str'); for(var i = 0 ; i < str_list.length ; i++) { if(StrangeIE_flg) { if(str_list[i].attributes[1].value == ori_str) return str_list[i].attributes[0].value; } else { if(str_list[i].attributes[0].value == ori_str) return str_list[i].attributes[1].value; } } } } } return ori_str; } //17. Get InitInfo from cpe function getInitInfo(){ XHRGet(getInitInfoHandle, "./cgi-bin/common.cgi?Command=GetInitInfo", true); // XHRGet(getVersionTypeHandle, "./cgi-bin/common.cgi?Command=GetWebMode", true); } //18. Response function of "getInitInfo()" function getInitInfoHandle(xmlDoc){ if(checkError(xmlDoc)) return; else { //getLang var str_data = getDataFromTag(xmlDoc,"WEBLANGUAGE"); if(str_data == '') str_data = 'en.xml'; trans_str = str_data; var lang_path = 'lang/' $.get( lang_path + str_data, function(data){ if(data.getElementsByTagName('translate').length > 0) trans_xml = data; }, 'xml' ); var wait_Lang = setInterval(function() { if (trans_xml != null) { clearInterval(wait_Lang); //check password changed var changeFlag = parseInt(getDataFromTag(xmlDoc, "CHANGEPWDFLAG")); var forceChangePwd = parseInt(getDataFromTag(xmlDoc, "FORCE_CHANGE_PWD")); var ExcludePageTitle = ["Login", "account", "system_reboot"]; if(wk_User == "user") changeFlag = parseInt(getDataFromTag(xmlDoc, "CHANGEPWDFLAG_USER")); if($.inArray(page_name,ExcludePageTitle) == -1) { if(changeFlag != 0 && localStorage.getItem("level")=="02") { if(forceChangePwd == 1) { InfoBlock('Please modify the device default password and then change your password regularly.','GoAccount()'); } else { InfoBlock('Please modify the device default password and then change your password regularly.','CleanCHANGEPWDFLAG()'); } } } } },100); } } //19. Set language key to cpe function setLang(str){ var param = "Command=SetLangState&web_lang=" + str; XHRPost(setLangHandle, "./cgi-bin/common.cgi", param, true); } //20. Response function of "setLang()" function setLangHandle(xmlDoc){ if(checkError(xmlDoc)) return; else window.location.reload(); } //21. do check string is reverse string or not function IsReverse(check_str, compare_str){ if(check_str.length == compare_str.length) { var range = check_str.length; for(var i = 0 ; i < range ; i++) { if(check_str[i] != compare_str[range-1-i]) return false; } return true; } else return false; } //22. Check login state function getCheckLogin(){ if(page_name === 'Login') return; //XHRGet(getCheckLoginHandle, "./cgi-bin/common.cgi?Command=GetLoginState", true,false,2,loginstate_timeout_handler); XHRGet(getCheckLoginHandle, "./cgi-bin/common.cgi?Command=GetLoginState", true); } function loginstate_timeout_handler() {} //23. Response function of "getCheckLogin()" function getCheckLoginHandle(xmlDoc){ if(checkError(xmlDoc)) return; else { var str_data = getDataFromTag(xmlDoc, "Redirect"); if(str_data == '1') { if(page_name != 'Login') window.location.href = 'Login.html'; } else { var reboot = getDataFromTag(xmlDoc, "update_reboot"); if(reboot == '1') { var url="./system_reboot.html"; if(WhatBrowser.match("IE")!=null) { var referLink = document.createElement('a'); referLink.href = url; document.body.appendChild(referLink); referLink.click(); } else window.location.href = url; } var update_unlockUI = getDataFromTag(xmlDoc, "cpe_updateing"); if(update_unlockUI == '1') { if(page_name != 'update' && page_name != 'Login') { XHRGet(null, "./cgi-bin/update.cgi?Command=getupdate_init", true); setTimeout("UndoBlock()", 1000); } } wkey_LoginName = getDataFromTag(xmlDoc, "WhoLogin"); } } } //24. block character by black list var BlackListChar = ["&", "<", ">", "\"", " ", "'", "©", "®"]; function TextBlockInvalidChar(e, Obj){ var ListCode = []; for(var i = 0 ; i < BlackListChar.length ; i++) ListCode[i] = BlackListChar[i].charCodeAt(); if($.inArray(e.charCode, ListCode) != -1) { BubbleText(Obj.id, "Invaild character"); return false; } else return true; } //25. Text Bubble function BubbleText(Ele_id, msg_str, add_arrow){ if($('.Strength.' + Ele_id).size() == 0) { var aContent = document.createElement('div'); aContent.className = 'Strength ' + Ele_id; aContent.innerHTML = '