<html>
<head>
<link rel="stylesheet" href="/layout/dbros.css" type="text/css">
<meta http-equiv=Content-Type content="no-cache">
<meta http-equiv=Content-Type content="text/html; charset=utf-8">
<script>
var mn_wizard = "Wizard";
var mn_home = "Home";
var mn_wan = "WAN Setup";
var mn_ntwmap = "Network Map";
var mn_wlan = "Wireless 2.4G Setup";

var mn_wlan5g = "Wireless 5G Setup";

var mn_wps = "WPS";
var mn_lan = "LAN Setup";
var mn_vlan = "VLAN Setup";
var mn_time = "Time and Date";
var mn_ipv6 = "IPv6";

var m_mydlink_tm = "TM";
var mn_mydlink = "Mydlink"+ m_mydlink_tm.sup() +" Settings";

var mn_parent = "Parental Control";
var mn_dns = "DNS";
var mn_Dynamic_dns = "Dynamic DNS";
var mn_application = "Port Trigger";
var mn_filter = "IP & MAC Filtering";
var mn_parental_control = "Parental Control";
var mn_firewall = "Firewall";
var mn_dmz = "DMZ";
var mn_firewallandDMZ = "Firewall & DMZ";
var mn_rip = "RIP";
var mn_virtual_server = "Virtual Server";
var mn_provisioning = "Provisioning";
var mn_qos = "QoS";
var mn_igmp = "IGMP";
var mn_igmp2 = "IGMP2";
var mn_portmap = "PortMap";
var mn_voice = "Voice";
var mn_stun = "STUN";
var mn_dhcp = "DHCP Server";
var mn_wlan_advanced = "WLAN 2.4G Advanced Settings";
var mn_wlan_access = "WLAN 2.4G Access Rules";
var mn_multiple_wlan = "Multiple WLAN 2.4G SSIDs";
var mn_wlan_performance = "WLAN 2.4G Performance";
var mn_wlan_wds = "WLAN 2.4G WDS";

var mn_wlan5g_advanced = "WLAN 5G Advanced Settings";
var mn_wlan5g_access = "WLAN 5G Access Rules";
var mn_multiple_wlan5g = "Multiple WLAN 5G SSIDs";
var mn_wlan5g_performance = "WLAN 5G Performance";
var mn_wlan5g_wds = "WLAN 5G WDS";

var mn_routing = "Routing";


var mn_snmp = "SNMP";
var mn_tr069 = "TR069";
var mn_dsl = "DSL Line Settings";
var mn_session_reserve = "Session Reserve";
var mn_ipv6_firewall = "IPv6 Firewall";
var mn_ipv6_routing = "IPv6 Routing";
var mn_url_redirect = "URL Redirect";

var mn_samba = "Samba";


var mn_upnp = "UPnP";


var mn_alg = "ALG Setting";
var sa_access = "Storage Access";
var mn_admin = "Administration";
var mn_access = "Access Control";
var mn_system = "System Settings";
var mn_firmware = "Firmware Update";
var mn_test = "Diagnostics";
var mn_remotelog = "System Log";
var mn_reboot = "Reboot";
var mn_devinfo = "Device Info";
var mn_telephony = "Telephony Info";
var mn_arp = "ARP Table Info";
var mn_session = "Internet Sessions"
var mn_dhcp_client = "DHCP Clients";
var mn_wireless_client = "Wireless Table";
var mn_log = "System Log";

var mn_stats = "Statistics";
var mn_sw_module = "Software Modules";
var mn_adsl_state = "ADSL";
var mn_rtable = "Routing Table";
var mn_dhcptable = "DHCP Table";
var mn_wltable = "Wireless Table";
var mn_telephonyinfo = "Telephony Info";
var mn_physical_dht = "DHT QoS";
var mn_physical_app = "APP QoS";

var mn_storage_status = "Storage Status";

var mn_help = "HELP";
var mn_setup = "Setup";
var mn_adv = "Advanced";
var mn_storage = "Storage";

var mn_budget_quota = "Budget Quota";


var mn_maintenance = "Maintenance";
var mn_status = "Status";
var mn_help_menu = "Menu";
</script>

<script>
var filenameExp=/:\/\/\S*\/(\S*).htm\??/;
var result=document.location.href.match(filenameExp);
var xgiFilename=result[1]+".xgi?"; // we need the variable in all web pages;
var thisFilename=result[1]+".htm"; // we need the variable in all web pages;
var baseFilename=result[1]; // we need the variable in all web pages;
var folderExp=/:\/\/\S*\/(\S*)\/\S*.htm\??/;
var result2=document.location.href.match(folderExp);
var thisdirectory="";
if(result2)
thisdirectory=result2[1];
function NewMenuItem(cactory,thisname,thisURL,flag)
{
var theExp=/\S*\/(\S*).htm/;
var ssp=thisURL.match(theExp);
this.index=cactory;
this.name=thisname;
this.url=thisURL;
if(ssp)
this.basefile=ssp[1];
else
this.basefile=thisURL;
//this.show=ShowTag;
if(flag != "")
this.flag=flag;
else
this.flag=0;
}
var MenuList=new Array();
var TabStr=["SETUP","ADVANCED","MAINTENANCE","STATUS","HELP"];
var Idx_home=0;
var Idx_adv=1;
var Idx_tools=2;
var Idx_status=3;
var Idx_help=4;
var defaultMenuWidth="130px"; //set default menu width.
//var baseTop = 147;
//var top = 27;
var width = 127;
var linkset=new Array();
var linkset2=new Array();
var ie5=document.all && !window.opera;
var ns6=document.getElementById;
function clearhidemenu()
{
if (window.delayhide)
clearTimeout(delayhide);
}
if (ie5||ns6)
{
document.write('<IFRAME id="iframetemp" style="position:absolute; display:none; z-index:0; width:0; height:0" frameborder=0 scrolling=no marginwidth=0 src="" marginheight=0></iframe>');
document.write('<div id="popitmenu" onMouseover="clearhidemenu();" onMouseout="dynamichide(event)"></div>');
}
var frameTemp = ie5? document.all.iframetemp : document.getElementById("iframetemp");
var menuobj = ie5? document.all.popitmenu : document.getElementById("popitmenu");
function iecompattest()
{
return ((document.compatMode && document.compatMode.indexOf("CSS")!=-1)? document.documentElement : document.body);

}
function hidemenu(){
if (window.menuobj)
menuobj.style.visibility="hidden";
frameTemp.style.display="none";
}
function contains_ns6(a, b) {
while (b.parentNode)
{
if ((b = b.parentNode) == a)
return true;
}
return false;
}
function dynamichide(e){
if (ie5&&!menuobj.contains(e.toElement))
hidemenu();
else if (ns6&&e.currentTarget!= e.relatedTarget&& !contains_ns6(e.currentTarget, e.relatedTarget))
hidemenu();
}
function delayhidemenu(){
delayhide=setTimeout("hidemenu()",300);
}
function addMenuTab()//arguments=[cactory,thisname,thisURL,flag]
{
//MenuList[MenuList.length]=new NewMenuItem(cactory,thisname,thisURL,flag);
if(arguments.length == 4)
MenuList[MenuList.length]=new NewMenuItem(arguments[0],arguments[1],arguments[2],arguments[3]);
else if(arguments.length == 3)
MenuList[MenuList.length]=new NewMenuItem(arguments[0],arguments[1],arguments[2],"");
}
function findCactoryByUrl()
{
for(i=0;i<MenuList.length;i++)
{
if(MenuList[i].url.indexOf(baseFilename)==0 || baseFilename.indexOf(MenuList[i].basefile)==0)
return MenuList[i].index;
}
if(baseFilename.indexOf("sp_")!=-1)
return Idx_home;
else if(baseFilename.indexOf("ad_")!=-1)
return Idx_adv;
else if(baseFilename.indexOf("mt_")!=-1)
return Idx_tools;
else if(baseFilename.indexOf("st_")!=-1)
return Idx_status;
else if(baseFilename.indexOf("help_")!=-1)
return Idx_help;
alert("unknow file "+baseFilename);
}

function GenLeftMenuItem()
{
cat=findCactoryByUrl();
var matched=0;
var str="<ul>";
//initShowTag();
var str_start='<div id=sidenav><ul>';
var str_end='</li></ul></div>';
var k=0, i=0;
for(i=0;i<MenuList.length;i++)
{
if(MenuList[i].flag>0)
{
k=MenuList[i].flag;
linkset2[k-1]="";
}
else if(MenuList[i].flag<0 && MenuList[i].flag==-k)
{
linkset2[k-1]+='<li><div id=\'sidenavon\'><a href="'+MenuList[i].url+'">'+MenuList[i].name+'</a></div>';
}
}
for(i=0;i<linkset2.length;i++)
{
linkset[i] = str_start;
linkset[i] += linkset2[i];
linkset[i] += str_end;
}
for(i=0;i<MenuList.length;i++)
{
//if(MenuList[i].show != 0)
//{
if(MenuList[i].index!=cat)
continue;
if((MenuList[i].url.indexOf(baseFilename)==0 || baseFilename.indexOf(MenuList[i].basefile)==0) && !matched)//is myself and match first one
{
if(MenuList[i].flag > 0)
{
str+="<li><div id='sidenavoff' onmouseover='showmenu(event,linkset["+(MenuList[i].flag-1)+"],this)' onmouseout='delayhidemenu()'><a href='"+MenuList[i].url+"'>"+MenuList[i].name+"</a></div></li>";
}
else
{
if(MenuList[i].flag>=0)
str+="<li><div id='sidenavoff'><a href='"+MenuList[i].url+"'>"+MenuList[i].name+"</a></div></li>";
}
matched=1;
}
else
{
if(MenuList[i].flag > 0)
{
var j = i+1;
var if_off=0;
while(MenuList[j].flag<0)
{
if(MenuList[j].url.indexOf(baseFilename)==0 || baseFilename.indexOf(MenuList[j].basefile)==0)
{
str+="<li><div id='sidenavoff' onmouseover='showmenu(event,linkset["+(MenuList[i].flag-1)+"],this)' onmouseout='delayhidemenu()'><a href='"+MenuList[i].url+"'>"+MenuList[i].name+"</a></div></li>";
if_off++;
break;
}
j++;
}
if(if_off==0)
str+="<li><div id='sidenavon' onmouseover='showmenu(event,linkset["+(MenuList[i].flag-1)+"],this)' onmouseout='delayhidemenu()'><a href='"+MenuList[i].url+"'>"+MenuList[i].name+"</a></div></li>";
}
else
{
if(MenuList[i].flag>=0)
str+="<li><div id='sidenavon'><a href='"+MenuList[i].url+"'>"+MenuList[i].name+"</a></div></li>";
}
}
}
str+="</ul>";
document.write(str);
}
function GenTopMenuItem()
{
var cat=findCactoryByUrl();
var TabUrl=new Array();
var myindex=0;//home index start
var str="";
for(i=0;i<MenuList.length;i++)
{
if(myindex==MenuList[i].index)
TabUrl[myindex++]=MenuList[i].url;
}

for(i=0;i<TabUrl.length;i++)
{
if(cat==i)
tmp="topnavon";
else
tmp="topnavoff";
str+="<td id="+tmp+"><a href='"+TabUrl[i]+"'>"+TabStr[i]+"</a></td>";
}

document.write(str);
}
function showmenu(e,which,count)
{
if (!document.all&&!document.getElementById)
return;
clearhidemenu();
//menuobj = ie5? document.all.popitmenu : document.getElementById("popitmenu");
//alert("which = "+which);
menuobj.innerHTML = which;
menuobj.style.width = defaultMenuWidth;
menuobj.contentwidth = menuobj.offsetWidth;
menuobj.contentheight = menuobj.offsetHeight;
eventX=ie5? event.clientX : e.clientX;
eventY=ie5? event.clientY : e.clientY;
//Find out how close the mouse is to the corner of the window;
var rightedge=ie5? iecompattest().clientWidth-eventX : window.innerWidth-eventX;
var bottomedge=ie5? iecompattest().clientHeight-eventY : window.innerHeight-eventY;
var tempEl = count;
var baseLeft = 0;
var tempTop =0;
while (tempEl != null){
baseLeft += tempEl.offsetLeft;
tempTop += tempEl.offsetTop;
tempEl = tempEl.offsetParent;
}
if (rightedge<menuobj.contentwidth)
menuobj.style.left=baseLeft+width;
else
menuobj.style.left=baseLeft+width;
if (bottomedge<menuobj.contentheight)
menuobj.style.top= tempTop;
else
menuobj.style.top=tempTop;
frameTemp.style.display="block";
frameTemp.style.left=menuobj.style.left;
frameTemp.style.top=menuobj.style.top;
frameTemp.style.width=menuobj.contentwidth;
frameTemp.style.height=menuobj.contentheight;
menuobj.style.visibility="visible";
//alert("frameTemp.style.left = "+menuobj.style.left + "***frameTemp.style.top = " + menuobj.style.top + "***menuobj.style.left = "+menuobj.style.left + "***menuobj.style.top = "+menuobj.style.top);
//return false;
}

</script>
<script>
var submenuflag=0;

addMenuTab(Idx_home,mn_wizard,"/SETUP/sp_wizard_setup.htm");
addMenuTab(Idx_home,mn_wan,"/SETUP/sp_wan.htm");

addMenuTab(Idx_home,mn_ntwmap,"/SETUP/sp_network_map.htm");


addMenuTab(Idx_home,mn_wlan,"/SETUP/sp_wireless_auth.htm?0");

addMenuTab(Idx_home,mn_wlan5g,"/SETUP/sp_wireless5g_auth.htm?0");


addMenuTab(Idx_home,mn_lan,"/SETUP/sp_lan.htm");
addMenuTab(Idx_home,mn_time,"/SETUP/sp_time.htm");

addMenuTab(Idx_home,mn_ipv6,"/SETUP/sp_ipv6.htm");


addMenuTab(Idx_home,mn_mydlink,"/SETUP/sp_mydlink.htm");

addMenuTab(Idx_adv,mn_virtual_server,"/ADVANCED/ad_virtual_server.htm");
addMenuTab(Idx_adv,mn_dns,"/ADVANCED/ad_dns.htm");
addMenuTab(Idx_adv,mn_Dynamic_dns,"/ADVANCED/ad_dynamic_dns.htm");
addMenuTab(Idx_adv,mn_application,"/ADVANCED/ad_applications.htm");
addMenuTab(Idx_adv,mn_filter,"/ADVANCED/ad_filter.htm");
addMenuTab(Idx_adv,mn_parental_control,"/ADVANCED/ad_parental_control.htm");
addMenuTab(Idx_adv,mn_firewall,"/ADVANCED/ad_firewall.htm");
addMenuTab(Idx_adv,mn_dmz,"/ADVANCED/ad_dmz.htm");

addMenuTab(Idx_adv,mn_rip,"/ADVANCED/ad_rip.htm?0");


addMenuTab(Idx_adv,mn_igmp,"/ADVANCED/ad_igmp.htm");


addMenuTab(Idx_adv,mn_qos,"/ADVANCED/ad_qos_queue.htm");



addMenuTab(Idx_adv,mn_wlan_advanced,"/ADVANCED/ad_wlan_access.htm?0",++submenuflag);
addMenuTab(Idx_adv,mn_wlan_access,"/ADVANCED/ad_wlan_access.htm?0",-submenuflag);
addMenuTab(Idx_adv,mn_multiple_wlan,"/ADVANCED/ad_multiple_wlan.htm",-submenuflag);
addMenuTab(Idx_adv,mn_wlan_performance,"/ADVANCED/ad_wlan_performance.htm",-submenuflag);


addMenuTab(Idx_adv,mn_wlan5g_advanced,"/ADVANCED/ad_wlan5g_access.htm?0",++submenuflag);
addMenuTab(Idx_adv,mn_wlan5g_access,"/ADVANCED/ad_wlan5g_access.htm?0",-submenuflag);
addMenuTab(Idx_adv,mn_multiple_wlan5g,"/ADVANCED/ad_multiple5g_wlan.htm",-submenuflag);
addMenuTab(Idx_adv,mn_wlan5g_performance,"/ADVANCED/ad_wlan5g_performance.htm",-submenuflag);


addMenuTab(Idx_adv,mn_routing,"/ADVANCED/ad_routing.htm");



addMenuTab(Idx_adv,mn_snmp,"/ADVANCED/ad_snmp.htm");


addMenuTab(Idx_adv,mn_upnp,"/ADVANCED/ad_upnp.htm");


addMenuTab(Idx_adv, mn_samba, "/ADVANCED/ad_samba.htm");



addMenuTab(Idx_adv,mn_dsl,"/ADVANCED/ad_dsl.htm");





addMenuTab(Idx_adv,mn_url_redirect,"/ADVANCED/ad_url_redirect.htm");

addMenuTab(Idx_adv,mn_alg,"/ADVANCED/ad_alg.htm");

addMenuTab(Idx_adv,mn_budget_quota,"/ADVANCED/ad_budget_quota.htm");



//addMenuTab(Idx_sa,sa_access,"/STORAGE/sa_access.htm");
addMenuTab(Idx_tools,mn_admin,"/MAINTENANCE/mt_admin.htm");
addMenuTab(Idx_tools,mn_access,"/MAINTENANCE/mt_access_control.htm");
addMenuTab(Idx_tools,mn_system,"/MAINTENANCE/mt_system.htm");
addMenuTab(Idx_tools,mn_firmware,"/MAINTENANCE/mt_firmware.htm");
addMenuTab(Idx_tools,mn_test,"/MAINTENANCE/mt_test.htm?5,0");
addMenuTab(Idx_tools,mn_remotelog,"/MAINTENANCE/mt_remotelog.htm");
addMenuTab(Idx_status,mn_devinfo,"/STATUS/st_deviceinfo.htm");
addMenuTab(Idx_status,mn_log,"/STATUS/st_log.htm");

addMenuTab(Idx_status,mn_stats,"/STATUS/st_stat.htm?0");

addMenuTab(Idx_status, mn_arp, "/STATUS/st_arp.htm");
addMenuTab(Idx_status, mn_rtable, "/STATUS/st_route.htm");
addMenuTab(Idx_status, mn_dhcptable, "/STATUS/st_dhcp.htm");
addMenuTab(Idx_status, mn_wltable, "/STATUS/st_wireless_assoclist.htm");

if("" == "1")
{
addMenuTab(Idx_status, mn_physical_dht, "/STATUS/st_physical_dht.htm");
addMenuTab(Idx_status, mn_physical_app, "/STATUS/st_physical_port.htm");
}
addMenuTab(Idx_status, mn_session, "/STATUS/st_session.htm");



addMenuTab(Idx_status, mn_storage_status, "/STATUS/st_storage.htm");


addMenuTab(Idx_help,mn_help_menu,"/HELP/help_menu.htm");
addMenuTab(Idx_help,mn_setup,"/HELP/help_setup.htm");
addMenuTab(Idx_help,mn_adv,"/HELP/help_adv.htm");

addMenuTab(Idx_help,mn_maintenance,"/HELP/help_tools.htm");
addMenuTab(Idx_help,mn_status,"/HELP/help_status.htm");

</script>


<script>
function prints(context)
{
document.write(context);
}
function $() {
var elements = new Array();
for (var i = 0; i < arguments.length; i++) {
var element = arguments[i];
if (typeof element == 'string')
element = document.getElementById(element);
if (arguments.length == 1)
return element;
elements.push(element);
}
return elements;
}
</script>
<script>

</script>

</head>

<script>
function apply(fn)
{
if(fn=="")
document.write("<input type='submit' name='apply' value=\""+m_save_settings+"\">");
else
document.write("<input type='button' name='apply' value=\""+m_save_settings+"\" onClick='"+fn+"'>");
}
function cancel(fn)
{
//if(fn=="") fn="do_cancel()";
//if(fn=="") fn="self.location.reload();";
//document.write("<input type='button' name='cancel' value=\""+m_no_save_settings+"\" onClick='"+fn+"'>");
}
function remove(fn)
{
if(fn=="")
document.write("<input type='submit' name='apply' value=\""+m_rm_button+"\">");
else
document.write("<input type='button' name='apply' value=\""+m_rm_button+"\" onClick='"+fn+"'>");
}
// button for wizard ---------------------------------------------------------
function prev(fn)
{
if(fn=="") fn="go_prev()";
document.write("<input type='button' name='prev' value=\""+m_prev+"\" onClick='"+fn+"'>&nbsp;");
}
function skip(fn)
{
if(fn=="") fn="go_skip()";
document.write("<input type='button' name='skip' value=\""+m_skip+"\" onClick='"+fn+"'>&nbsp;");
}
function next(fn)
{
if(fn=="")
document.write("<input type='submit' name='next' value=\""+m_next+"\">&nbsp;");
else
document.write("<input type='button' name='next' value=\""+m_next+"\" onClick='return "+fn+"'>&nbsp;");
}
function finish(fn)
{
if(fn=="")
document.write("<input type='submit' name='finish' value=\""+m_finish+"\">&nbsp;");
else
document.write("<input type='button' name='finish' value=\""+m_finish+"\" onClick='return "+fn+"'>&nbsp;");
}
function exit()
{
document.write("<input type='button' name='exit' value=\""+m_cancel+"\" onClick='exit_confirm()'>&nbsp;");
}
function exit_confirm2()
{
if(confirm(a_quit_wiz)==true)
top.location.href="/";
}
function exit_confirm()
{
var redirectto = "0";
var str="";
if(confirm(a_quit_wiz)==true){
str+="/SETUP/sp_wan.xgi?";
if (redirectto == 1)
str+="set/sys/login/show_wizard_ui=0";
str += "&CMT=0";
self.location.href=str;
}
}
function wiz_save(fn)
{
if(fn=="") fn="do_save()";
document.write("<input type='submit' name='save' value=\""+ m_save+"\" onClick='"+fn+"'>&nbsp;");
}
function wiz_connect(fn)
{
if(fn=="") fn="do_save()";
document.write("<input type='button' name='save' value=\""+m_connect+"\" onClick='"+fn+"'>&nbsp;");
}
function bt_continue(fn)
{
if(fn=="") fn="do_continue()";
document.write("<input type='button' name='ct' value=\""+m_continue+"\" onClick='"+fn+"'>&nbsp;");
}
function bt_gen(name,value,fn)
{
if(fn=="")
document.write("<input type='submit' name='"+name+"'value=\""+value+"\">");
else
document.write("<input type='button' name='"+name+"' value=\""+value+"\" onClick='"+fn+"'>");
}
function bt_gen_str(name,value,fn)
{
var str="";
if(fn=="")
str+="<input type='submit' name='"+name+"'value=\""+value+"\">";
else
str+="<input type='button' name='"+name+"' value=\""+value+"\" onClick='"+fn+"'>";
return str;
}
// --------------------------------------------------------------------------

var formItemList=new Array();
function formItem(itemobj,formname)
{
switch(itemobj.type)
{
case "radio":
this.type=itemobj.type;
this.name=itemobj.name+itemobj.value;
this.value=itemobj.checked;
break;
case "checkbox":
this.type=itemobj.type;
this.name=itemobj.name;
this.value=itemobj.checked;
break;
case "hidden":
this.type=itemobj.type;
this.name=itemobj.name;
this.value="ignore";
break;
default:
this.type=itemobj.type;
this.name=itemobj.name;
this.value=itemobj.value;
break;
}
//alert(this.type+"=="+this.name+"=="+this.value);
this.frm=formname;
//nameing rules
if(this.name.indexOf("igrnc_")==0)
this.value="ignore";
}
function dumpformItemList()
{
for(var i=0;i<formItemList.length;i++)
alert(formItemList[i].name+"=="+formItemList[i].value);
}
function isChanged(item)
{
for(var i=0;i<formItemList.length;i++)
{
if(item.type==formItemList[i].type && item.name==formItemList[i].name && item.frm==formItemList[i].frm)
{
//alert(formItemList[i].value+"=="+item.value+","+formItemList[i].name);
if(item.value==formItemList[i].value)
return false;
else
return true;
}
}
}
function nc_changed(thisform)
{
var item;
for(var i=0;i<thisform.length;i++)
{
Item=new formItem(thisform[i],thisform.name);
if(isChanged(Item))
{
delete Item;
return true;
}
delete Item;
}
return false;
}
function nc_clear()
{
delete formItemList;
formItemList = new Array();
}
function nc_clear_form(delform)
{
var tmpformItemList = new Array();
for(var i=0;i<formItemList.length;i++)
{
if(formItemList[i].frm!=delform.name)
{
tmpformItemList[tmpformItemList.length]=formItemList[i];
}
}
delete formItemList;
formItemList = new Array();
formItemList = tmpformItemList;
delete tmpformItemList;
}
function nc_init(thisform)
{
for(var i=0;i<thisform.length;i++)
{
formItemList[formItemList.length]=new formItem(thisform[i],thisform.name);
}
}
function nc_redirect()
{
self.location.href="/gen_noChange.htm?location=/"+thisdirectory+"/"+thisFilename;
return false;
}


var physical_type="0";
var LayoutLists=["4","8","60","80","90","3","100","999"];
var LayoutObj = new LayoutApp(LayoutLists);
function LayoutApp(List)
{

var alert_msg = ["eth_lanif_max","system_wanif_max","eth_lanif_index_base","wlan_index_base","vlan_index_base","v_wanif_max"];
for(var i=0; i< List.length; i++)
{
if(List[i] == "")
{
alert("Note: Please check S12setnodes.php because the "+alert_msg[i]+" is null.");
break;
}
}
if (List[5] == "")
{
if(physical_type == 1)
{
List[5] = 8;
}
else
{
List[5] = 3;
}
}
if (List[2] == "")
{
if (physical_type == 0)
{
List[2] = 8;
}
else if (physical_type == 1)
{
List[2] = 1;
}
else if (physical_type == 2)
{
List[2] = 1;
}
else if (physical_type == 3)
{
List[2] = 8 + 1;
}
else
{
List[2] = 8;
}
}
this.eth_lanif_max			= parseInt(List[0]==""? 4: List[0]);
this.system_wanif_max		= parseInt(List[1]==""? 1: List[1]);
this.eth_lanif_index_base	= parseInt(List[2]);
this.wlan_index_base		= parseInt(List[3]==""?60: List[3]);
this.vlan_index_base		= parseInt(List[4]==""?90: List[4]);
this.v_wanif_max			= parseInt(List[5]);
this.eth_wan_index_base		= parseInt(List[6]==""?100:List[6]);
this.eth_all_index_base     = parseInt(List[7]==""?999:List[7]);
}

function jslSetValue(variable,value)
{
//alert(variable);
$(variable).value=$(value).value;
}
function jslDisable(id)
{
$(id).disabled=true;
}
function jslEnable(id)
{
$(id).disabled=false;
}
function jslPostToViewCheckBox(ViewId,PostId)
{
if($(PostId).value=="1")
{
$(ViewId).value="on";
$(ViewId).checked=true;
}
else
{
$(ViewId).value="off";
$(ViewId).checked=false;
}
}
function jslFormSubmit(id)
{
$(id).submit();
}
function isAsciiString(s)
{
var len= s.length;
var ch;
for( i=0; i< len; i++)
{
ch= s.charCodeAt(i);
//    if( ch > 0x7f || ch < 0x20 || ch == 0x23)//0x23:#
if( ch > 0x7f || ch < 0x20)
{
return false;
}
}
return true;
}
function valDoValidateUsrPwd(Name)
{
if((Name.length == 0) || (Name.length > 64))
return false;
return true;
}
function isSameSubNet(lan1Ip, lan1Mask, lan2Ip, lan2Mask) {
var count = 0;
lan1a = lan1Ip.split('.');
lan1m = lan1Mask.split('.');
lan2a = lan2Ip.split('.');
lan2m = lan2Mask.split('.');
for (i = 0; i < 4; i++) {
l1a_n = parseInt(lan1a[i]);
l1m_n = parseInt(lan1m[i]);
l2a_n = parseInt(lan2a[i]);
l2m_n = parseInt(lan2m[i]);
if ((l1a_n & l1m_n) == (l2a_n & l2m_n))
count++;
}
if (count == 4)
return true;
else
return false;
}
function isNumber(n)
{
if (n.length==0) return false;
for (var i=0;i < n.length;i++)
{
if (n.charAt(i) < '0' || n.charAt(i) > '9') return false;
}
return true;
}
function isIP(ip)
{
var sIP=ip.split(".");
if (sIP.length!=4) return false;
for(var i=0; i< sIP.length; i++)
{
if (!isNumber(sIP[i])) return false;
if(i == 3)
if (parseInt(sIP[i]) < 1 || parseInt(sIP[i]) > 254) return false;
else
if (parseInt(sIP[i]) < 0 || parseInt(sIP[i]) > 255) return false;
}
if(parseInt(sIP[0])==0) return false;
return true;
}
function isIPForAdsl(ipAddr)
{
var netWorkIp = new Array("11.0.0.0","129.1.0.0","193.1.1.0");
var broadcastIp = new Array("11.255.255.255","129.1.255.255","193.1.1.255","11.127.255.255");
var classDIp = new Array("224.0.0.1","239.0.0.1");
var classEIp = new Array("240.0.0.1","254.0.0.10");
var lookBackIp = "127.0.0.1";
if(isIP(ipAddr) == false)
return false;
var ipParts = ipAddr.split(".");
var ipAdsl = parseInt(ipParts[0])+"."+parseInt(ipParts[1])+"."+parseInt(ipParts[2])+"."+parseInt(ipParts[3]);
for (i=0; i<netWorkIp.length; i++)
{
if(ipAdsl == netWorkIp[i])
return false;
}
for (j=0; j<broadcastIp.length; j++)
{
if(ipAdsl == broadcastIp[j])
return false;
}
for (k=0; k<classDIp.length; k++)
{
if(ipAdsl == classDIp[k])
return false;
}
for (q=0; q<classEIp.length; q++)
{
if(ipAdsl == classEIp[q])
return false;
}
if (ipAdsl == lookBackIp)
return false;
return true;
}
function isSpeciStaticIpMask(ip,mask)
{
var classBIp = new Array("128.0.0.1","128.255.255.254","136.16.0.1","136.32.255.254","142.64.0.1","142.64.255.255");
var classCIp = new Array("192.0.0.1","192.255.255.254","200.16.32.1");
var subnetMask1 = "255.255.0.0";
var subnetMask2 = "255.255.255.0";
if(isIP(ip) == false)
return false;
var ipParts = ip.split(".");
var ipStic = parseInt(ipParts[0])+"."+parseInt(ipParts[1])+"."+parseInt(ipParts[2])+"."+parseInt(ipParts[3]);
var maskParts = mask.split(".");
var maskStic = parseInt(maskParts[0])+"."+parseInt(maskParts[1])+"."+parseInt(maskParts[2])+"."+parseInt(maskParts[3]);
for (i=0; i<classBIp.length; i++)
{
if(ipStic == classBIp[i])
if(maskStic != subnetMask1)
return false;
}
for (j=0; j<classCIp.length; j++)
{
if(ipStic == classCIp[j])
if(maskStic != subnetMask2)
return false;
}
return true;
}
function isValidIpAddr(ip1,ip2,ip3,ip4)
{
if(ip1==0 || ip4==0 || ip4==255 || ip1==127)
return false;
return true;
}
function isBlank(s)
{
var i=0;
for (i=0; i < s.length;i++)
{
if (s.charCodeAt(i)!=32) break;
}
if (i==s.length) return true;
return false;
}
var ascTable=new Array();
function isHttpChar(a, h)
{
this.a = a;
this.h = h;
}
ascTable[0] = new isHttpChar("#", "%23");
ascTable[1] = new isHttpChar("%", "%25");
ascTable[2] = new isHttpChar("&", "%26");
ascTable[3] = new isHttpChar("+", "%2b");
ascTable[4] = new isHttpChar("/", "%2f");
ascTable[5] = new isHttpChar(":", "%3a");
ascTable[6] = new isHttpChar(";", "%3b");
ascTable[7] = new isHttpChar("<", "%3c");
ascTable[8] = new isHttpChar("=", "%3d");
ascTable[9] = new isHttpChar(">", "%3e");
ascTable[10] = new isHttpChar("?", "%3f");
ascTable[11] = new isHttpChar("@", "%40");
ascTable[12] = new isHttpChar(" ", "%20");
function checkHtmChar(c)
{
for(var i=0; i< ascTable.length; i++)
{
if (c == ascTable[i].a)
return ascTable[i].h;
}
return c;
}
function subHtmAsc(str)
{
var regStr=/(#|%|&|\+|\/|:|;|<|=|>|\?|@|\ )+/;
var rntStr="";
if (str.search(regStr) == -1)
return str;
for(var i=0; i<str.length; i++)
{
rntStr+=checkHtmChar(str.charAt(i))
}
return rntStr;
}
function isHex(cmpStr)
{
var regStr=/[a-fA-F0-9]/;
for(i=0;i<cmpStr.length;i++)
{
if (cmpStr.charAt(i).search(regStr)==-1)
return false;
}
return true;
}
//function valDoValidateIP(Address)
function validIP(Address)
{
var address = Address.match("^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$");
var digits;
var i;
var error=null;
if(Address == "*")
return true;
if(address == null) {
return false;
}
else
{
digits = address[0].split(".");
for(i=0; i < 4; i++)
{
if((Number(digits[i]) > 255 ) || (Number(digits[i]) < 0 ) || (Number(digits[0]) > 223))
{
return false;
break;
}
}
if(!isValidIpAddr(digits[0],digits[1],digits[2],digits[3],false))
{
return false;
}
}
return true;
}
function isInteger(Integer)
{
if(Integer.match("^[0-9]+$"))
{
return true;
}
return false;
}
function isValidRange(ctrl,start,end)
{
if(ctrl.value.charAt(0) == "0" && ctrl.value.length > 1)
return false;
else if( ctrl.value <start || ctrl.value >end)
return false;
else
return true;
}
function CheckNumericRange(ctrl,start,end, msg)
{
var bNumeric;
var bRange;
var sMsg=msg;
if(ctrl.disabled == true)
return true;
bNumeric = isInteger(ctrl.value);
bRange = isValidRange(ctrl,start,end);
if(!bNumeric || !bRange)
{
if(!bNumeric)
{
sMsg += m_numeric;
}else if(!bRange)
{
sMsg += m_out_of_range;
sMsg += m_range+start+" - "+end+".";
}
dx_alert_error_message( ctrl, sMsg);
return false;
}
return true;
}
////////////////////////////////////////////////////////////////////
// function dx_alert_error_message( ctrl, msg)
// input:  ctrl: name of the control item
//         msg: error message.
// return: none.
// remark: alert the error message and set the focus to the specified
//         control item.
function dx_alert_error_message( ctrl, msg)
{
alert( msg);
ctrl.focus();
ctrl.select();
}
var hexVals = new Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
"A", "B", "C", "D", "E", "F");
var unsafeString = "\"<>%\\^[]`\+\$\,'#&";
function isUnsafe(compareChar)
// this function checks to see if a char is URL unsafe.
// Returns bool result. True = unsafe, False = safe
{
if ( unsafeString.indexOf(compareChar) == -1 && compareChar.charCodeAt(0) > 32
&& compareChar.charCodeAt(0) < 123 )
return false; // found no unsafe chars, return false
else
return true;
}
function reversal(s)
// part of the hex-ifying functionality
{
var len = s.length;
var trans = "";
for (i = 0; i < len; i++)
trans = trans + s.substring(len-i-1, len-i);
s = trans;
return s;
}
function decToHex(num, radix)
// part of the hex-ifying functionality
{
var hexString = "";
while ( num >= radix ) {
temp = num % radix;
num = Math.floor(num / radix);
hexString += hexVals[temp];
}
hexString += hexVals[num];
return reversal(hexString);
}
function convert(val)
// this converts a given char to url hex form
{
return  "%" + decToHex(val.charCodeAt(0), 16);
}
function encodeUrl(val)
{
var len     = val.length;
var i       = 0;
var newStr  = "";
var original = val;
for ( i = 0; i < len; i++ ) {
if ( val.substring(i,i+1).charCodeAt(0) < 255 ) {
// hack to eliminate the rest of unicode from this
if (isUnsafe(val.substring(i,i+1)) == false)
newStr = newStr + val.substring(i,i+1);
else
newStr = newStr + convert(val.substring(i,i+1));
} else {
// woopsie! restore.
alert (m_not_ios_8859_1 + (i+1) + m_not_ios_8859_2);
newStr = original;
// short-circuit the loop and exit
i = len;
}
}
return newStr;
}
function get_obj(name)
{
if ($)	return $(name);//.style;
if (document.all)				return document.all[name].style;
if (document.layers)			return document.layers[name];
}
function is_valid_ip(ipaddr, optional)
{
var ip = get_ip(ipaddr);
if (optional!=0 && is_blank(ipaddr)) return true;
if (is_in_range(ip[1], 1, 223)==false) return false;
if (decstr2int(ip[1]) == 127) return false;
if (is_in_range(ip[2], 0, 255)==false) return false;
if (is_in_range(ip[3], 0, 255)==false) return false;
if (is_in_range2(ip[4], 1, 255)==false) return false;
ip[0] = parseInt(ip[1],[10])+"."+parseInt(ip[2],[10])+"."+parseInt(ip[3],[10])+"."+parseInt(ip[4],[10]);
if (ip[0] != ipaddr) return false;
return true;
}
function get_ip(str_ip)
{
var myIP=new Array();
myIP[0] = myIP[1] = myIP[2] = myIP[3] = myIP[4] = "";
if (str_ip != "")
{
var tmp=str_ip.split(".");
for (var i=1;i <= tmp.length;i++) myIP[i]=tmp[i-1];
myIP[0]=str_ip;
}
else
{
for (var i=0; i <= 4;i++) myIP[i]="";
}
return myIP;
}
function is_host_ip(dest)
{
var addrParts = dest.split(".");
if(addrParts[3] != 0)
return true;
}
function is_network_ip(dest)
{
var addrParts = dest.split(".");
if(addrParts[3] == 0)
return true;
}
function is_valid_mask(mask)
{
var sMask=mask.split(".");
if (sMask.length!=4) return false;
for(var i=0; i< sMask.length; i++)
{
if (!is_digit(sMask[i])) return false;
if (parseInt(sMask[i],10) < 0 || parseInt(sMask[i],10) > 255) return false;
}
for (var i =0 ; i< sMask.length; i++)
sMask[i] = parseInt(sMask[i], 10);
U32ip = sMask[0]*0x1000000+sMask[1]*0x10000+sMask[2]*0x100+sMask[3];
if(U32ip==0) return false;
for(var i=0; i<32;i++)
{
if(U32ip & (0x1<<i))
{
var myvalue = Math.pow(2,i)-1;
myvalue = Math.pow(2,32) -1 -myvalue;
if (myvalue == U32ip)
return true;
else
return false;
}
}
return false;
}
function is_valid_ip2(ipaddr, netmask)
{
var ip_broadcast = get_broadcast_ip(ipaddr, netmask);
if(ip_broadcast[0] == ipaddr) return false;
return true;
}
function get_broadcast_ip(ip, mask)
{
var id = new Array();
var ipaddr = get_ip(ip);
var subnet = get_ip(mask);
id[1] = ipaddr[1] | (subnet[1] ^ 255);
id[2] = ipaddr[2] | (subnet[2] ^ 255);
id[3] = ipaddr[3] | (subnet[3] ^ 255);
id[4] = ipaddr[4] | (subnet[4] ^ 255);
id[0] = id[1]+"."+id[2]+"."+id[3]+"."+id[4];
return id;
}
function is_valid_gateway(ipaddr, netmask, gateway, optional)
{
var ip = get_ip(gateway);
var ip_broadcast = get_broadcast_ip(ipaddr, netmask);
var ip_networkid = get_network_id(ipaddr, netmask);
if (optional!=0 && is_blank(gateway)) return true;
if (is_in_range(ip[1], 1, 223)==false) return false;
if (decstr2int(ip[1]) == 127) return false;
if (is_in_range(ip[2], 0, 255)==false) return false;
if (is_in_range(ip[3], 0, 255)==false) return false;
if (is_in_range2(ip[4], 1, 255)==false) return false;
ip[0] = parseInt(ip[1],[10])+"."+parseInt(ip[2],[10])+"."+parseInt(ip[3],[10])+"."+parseInt(ip[4],[10]);
if (ip[0] != gateway) return false;
if(ip_networkid[0] == gateway) return false;
if(ip_broadcast[0] == gateway) return false;
return true;
}
function get_network_id(ip, mask)
{
var id = new Array();
var ipaddr = get_ip(ip);
var subnet = get_ip(mask);
id[1] = ipaddr[1] & subnet[1];
id[2] = ipaddr[2] & subnet[2];
id[3] = ipaddr[3] & subnet[3];
id[4] = ipaddr[4] & subnet[4];
id[0] = id[1]+"."+id[2]+"."+id[3]+"."+id[4];
return id;
}
function is_valid_network(ipaddr, mask)
{
var ip = get_network_id(ipaddr, mask);
if (ip[0] != ipaddr)	return false;
return true;
}
function isValidIPv6Address(ipaddr)
{
//This will handle this case and return faluse  --> 1:1:1:1:1:1:1:1::
var cqparts = ipaddr.split(":");
if (cqparts.length>9)
{
////alert("isValidIPv6Address : 1111");
return false;
}
var i=0;
var first_two_char = ipaddr.substring(0,2);
if (first_two_char == "fe" || first_two_char == "FE" || first_two_char == "Fe" || first_two_char == "fE")
{
////alert("isValidIPv6Address : 2222");
return false;
}

// check if there is a '::' in the field
var parts = ipaddr.split("::");
////alert('ipaddr= ' + ipaddr);
////alert('parts[0]= ' + parts[0]);
////alert('parts[1]= ' + parts[1]);
if(parts.length == 1) {
////alert("parts.length == 1");
var cqv1 = parts[0].split(":");
for( i=0;i<cqv1.length;i++)
{
if (cqv1[i].length > 4) { //this mean 11111:2001:380:4812:0::  for this case 11111 is wrong, we only accept 4 char len.
////alert("isValidIPv6Address : 3333");
return false;
}
}
// there is NO occurence of '::'
var re11 = /^([0]\:){6}\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(\/\d{1,2})?$/;
if (re11.test(ipaddr)) {
// IPv4 address in IPv6 address 0:0:0:0:0:0:n.n.n.n/nn e.g. 0:0:0:0:0:0:10.10.10.10/24
var ipv4parts = ipaddr.split(":");
return isValidIPv4Address(ipv4parts[6]);
}
// Pure IPv6 address
var re12 = /^[A-Fa-f0-9]{1,4}\:[A-Fa-f0-9]{1,4}\:[A-Fa-f0-9]{1,4}\:[A-Fa-f0-9]{1,4}\:[A-Fa-f0-9]{1,4}\:[A-Fa-f0-9]{1,4}\:[A-Fa-f0-9]{1,4}\:[A-Fa-f0-9]{1,4}(\/\d{1,2})?$/;
if (re12.test(ipaddr)) {
////alert("isValidIPv6Address : 4444");
return true;
}
else {
////alert("isValidIPv6Address : 5555");
return false;
}
}
if(parts.length == 2) {
////alert("parts.length == 2");
var cqnotail = parts[0].split(":");
////alert(cqnotail);
if (cqnotail.length == 1 && cqnotail[0].length >5 )
{
//if (cqnotail[0].length >5 ){
////alert("isValidIPv6Address : 6666");
return false;
}
var cq = parts[0].split(":");
if ( cq.length >8 && parts[1] == "")
{
////alert("isValidIPv6Address : 7777");
return false;
}
if(parts[1] == "")
{
for( i=0;i<cq.length;i++)
{
if (cq[i].length > 4) { //this mean 11111:2001:380:4812:0::  for this case 11111 is wrong, we only accept 4 char len.
////alert("isValidIPv6Address : 8888");
return false;
}
}
}
// there is one occurence of '::'
if (parts[0] == "" && parts[1] == "") {
// only :: IPv6 address
////alert("isValidIPv6Address : 9999");
return true;
}
// there is one occurence of '::'
if (parts[0] == "") {
// IPv4 address in IPv6 address ::n.n.n.n/nn e.g. :10.10.27.127/24
//////alert("isValidIPv6Address : 10 10 10 ");
return isValidIPv4Address(parts[1]);
}
else {
if (parts[0] == "0" || parts[0] == "0:0" || parts[0] == "0:0:0" || parts[0] == "0:0:0:0" || parts[0] == "0:0:0:0:0")
return isValidIPv4Address(parts[1]);
}
if (parts[1] == "") {
////alert('part[1] is empty');
// This is for  AAA:: IPv6 address   case
// When  there is nothing followint :: but  the part[0] has the value,  it is OK.
// check second part
// Pure IPv6 address
var cqcqre12 = /^[A-Fa-f0-9]{1,4}\:[A-Fa-f0-9]{1,4}\:[A-Fa-f0-9]{1,4}\:[A-Fa-f0-9]{1,4}\:[A-Fa-f0-9]{1,4}\:[A-Fa-f0-9]{1,4}\:[A-Fa-f0-9]{1,4}$/;
if (cqcqre12.test(parts[0])) {
////alert("isValidIPv6Address : L7");
return true;
}
}
// Pure IPv6 address
var v1 = parts[0].split(":");
var v2 = parts[1].split(":");
for( i=0;i<v1.length;i++)
{
if (v1[i].length > 4) { //this mean 11111:2001:380:4812:0::  for this case 11111 is wrong, we only accept 4 char len.
////alert("isValidIPv6Address : 11 11 11");
return false;
}
}
for( i=0;i<v2.length;i++)
{
if (v2[i].length > 4) { //this mean 11111:2001:380:4812:0::  for this case 11111 is wrong, we only accept 4 char len.
////alert("isValidIPv6Address : 12 12 12");
return false;
}
}
if ((v1.length -1) + (v2.length-1) + 1 >= 7) { //this mean 2001:380:4812:0::280:45ff:fe13:9e49
////alert("isValidIPv6Address : 13 13 13");
return false;
}
// check first part
var re21 = /^[A-Fa-f0-9]{1,4}(\:[A-Fa-f0-9]{1,4}){0,5}$/;
if(!re21.test(parts[0])) {
////alert("isValidIPv6Address : 14 14 14");
return false
}
if(parts[1] != "") {
// check second part
var re22 = /^([A-Fa-f0-9]{1,4}\:){0,5}[A-Fa-f0-9]{1,4}$/
if(!re22.test(parts[1])) {
////alert("isValidIPv6Address : 15 15 15");
return false;
}
}
////alert("77777");
return true;
}
// there is more that one occurence of '::'
////alert("88888");
return false;
} // end function
function isValidIPv4Address(ipaddr) {
var re = /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/;
if (re.test(ipaddr)) {
var parts = ipaddr.split(".");
if (parseInt(parseFloat(parts[0])) == 0) { return false; }
for (var i=0; i<parts.length; i++) {
if (parseInt(parseFloat(parts[i])) > 255) { return false; }
}
//alert("isValidIPv4Address 11111");
return true;
}
else {
//alert("isValidIPv4Address 22222");
return false;
}
}
function MathandAbs(ip)
{
var sIP=ip.split(".");
absip = Math.abs(sIP[0])+"."+Math.abs(sIP[1])+"."+Math.abs(sIP[2])+"."+Math.abs(sIP[3]);
return absip;
}
function checkIP(ip)
{
var sIP=MathandAbs(ip).split(".");
if (sIP.length!=4) return false;
for(var i=0; i< sIP.length; i++)
{
if (!isNumber(sIP[i])) return false;
if(i == 0)
{
if (parseInt(sIP[i]) < 1 || parseInt(sIP[i]) > 223 ||parseInt(sIP[i]) == 127)
return false;
}
if(i == 1 ||i == 2)
{
if (parseInt(sIP[i]) < 0 || parseInt(sIP[i]) > 255)
return false;
}
if(i == 3)
{
if (parseInt(sIP[i]) < 1 || parseInt(sIP[i]) > 254)
return false;
}
}
return true;
}
function checkMask(a,b)
{
var ipchk = MathandAbs(a).split(".");
var maskchk = MathandAbs(b).split(".");
if (maskchk.length!=4) return false;
for(var i=0; i< maskchk.length; i++)
{
if (!isNumber(maskchk[i])) return false;
if (parseInt(maskchk[i]) < 0 || parseInt(maskchk[i]) > 255) return false;
}
var yuip = ((parseInt(ipchk[0]) & parseInt(maskchk[0]))+"."+(parseInt(ipchk[1]) & parseInt(maskchk[1]))+"."+(parseInt(ipchk[2]) & parseInt(maskchk[2]))+"."+(parseInt(ipchk[3]) & parseInt(maskchk[3])));
if(yuip == MathandAbs(a))
return false;
else
return true;
}
function checkMAC(m)
{
var allowChar="01234567890ABCEDF";
if(m==null)
return false;
if(m.length!=2)
return false;
m=m.toUpperCase();
for (var i=0; i < m.length; i++)
{
if (allowChar.indexOf(m.charAt(i)) == -1) return false;
}
if (m.length==0) return false;
return true;
}
function validPort(port)
{
var tmp_port = parseInt(port);
if (tmp_port <= 65535 && tmp_port > 0) return true;
//alert("Port number must be between 1 and 65535 !!!");
return false;
}

// ********************************* commjs start *****************************************************
// if the characters of "char_code" is in following ones: 0~9, A~Z, a~z, some control key and TAB.
function __is_comm_chars(char_code)
{
if (char_code == 0)  return true;						
if (char_code == 8)  return true;						
if (char_code >= 48 && char_code <= 57)  return true;	
if (char_code >= 65 && char_code <= 90)  return true;	
if (char_code >= 97 && char_code <= 122) return true;	
return false;
}
function __is_char_in_string(target, pattern)
{
var len = pattern.length;
var i;
for (i=0; i<len; i++)
{
if (target == pattern.charCodeAt(i)) return true;
}
return false;
}
//if the evt is in the allowed characters.
function __is_evt_in_allow_chars(evt, allow_comm_chars, allow_chars)
{
var char_code;
var i;
if (navigator.appName == 'Netscape'){char_code=evt.which;	}
else								{char_code=evt.keyCode;	}
if (allow_comm_chars == "1" && __is_comm_chars(char_code)==true) return true;
if (allow_chars.length > 0 && __is_char_in_string(char_code, allow_chars)==true) return true;
return false;
}
//if the characters of "str" are all in the allowed "allow_chars".
function __is_str_in_allow_chars(str, allow_comm_chars, allow_chars)
{
var char_code;
var i;
for (i=0; i<str.length; i++)
{
char_code=str.charCodeAt(i);
if (allow_comm_chars == "1" && __is_comm_chars(char_code) == true) continue;
if (allow_chars.length > 0 && __is_char_in_string(char_code, allow_chars) == true) continue;
return false;
}
return true;
}
// -------------------------------------------------------------
// Get Object by ID.
function get_obj(name)
{
if ($)	return $(name);//.style;
if (document.all)				return document.all[name].style;
if (document.layers)			return document.layers[name];
}
// generate the radmon str by date.
function generate_random_str()
{
var d = new Date();
var str=d.getFullYear()+"."+(d.getMonth()+1)+"."+d.getDate()+"."+d.getHours()+"."+d.getMinutes()+"."+d.getSeconds();
return str;
}
// this function is used to check if the inputted string is blank or not.
function is_blank(s)
{
var i=0;
for(i=0;i<s.length;i++)
{
c=s.charAt(i);
if((c!=' ')&&(c!='\n')&&(c!='\t'))return false;
}
return true;
}
// this function is used to check if the string is blank or zero.
function is_blank_or_zero(s)
{
if (is_blank(s)==true) return true;
if (is_digit(s))
{
var i = parseInt(s, 10);
if (i==0) return true;
}
return false;
}
// this function is used to check if the "str" is a decimal number or not.
function is_digit(str)
{
if (str.length==0) return false;
for (var i=0;i < str.length;i++)
{
if (str.charAt(i) < '0' || str.charAt(i) > '9') return false;
}
return true;
}
// this function is used to check if the value "str" is a hexcimal number or not.
function is_hexdigit(str)
{
if (str.length==0) return false;
for (var i=0;i < str.length;i++)
{
if (str.charAt(i) <= '9' && str.charAt(i) >= '0') continue;
if (str.charAt(i) <= 'F' && str.charAt(i) >= 'A') continue;
if (str.charAt(i) <= 'f' && str.charAt(i) >= 'a') continue;
return false;
}
return true;
}
// convert dec integer string
function decstr2int(str)
{
var i = -1;
if (is_digit(str)==true) i = parseInt(str, [10]);
return i;
}
// convert hex integer string
function hexstr2int(str)
{
var i = 0;
if (is_hexdigit(str)==true) i = parseInt(str, [16]);
return i;
}
// if min <= value <= max, than return true,
// otherwise return false.
function is_in_range(str_val, min, max)
{
var d = decstr2int(str_val);
if ( d > max || d < min ) return false;
return true;
}
function is_in_range2(str_val, min, max)
{
var d = decstr2int(str_val);
if ( d >= max || d < min ) return false;
return true;
}
// this function convert second to day/hour/min/sec
function second_to_daytime(str_second)
{
var result = new Array();
var t;
result[0] = result[1] = result[2] = result[3] = 0;
if (is_digit(str_second)==true)
{
t = parseInt(str_second, [10]);
result[0] = parseInt(t/(60*60*24), [10]);	// day
result[1] = parseInt(t/(60*60), [10]) % 24; // hr
result[2] = parseInt(t/60, [10]) % 60;		// min
result[3] = t % 60;							// sec
}
return result;
}
// construct xgi string for doSubmit()
function exe_str(str_shellPath)
{
var str="";
myShell = str_shellPath.split(";");
for(i=0; i<myShell.length; i++)
{
str+="&"+"exeshell="+myShell[i];
}
return str;
}
// return true is brower is IE.
function is_IE()
{
if (navigator.userAgent.indexOf("MSIE")>-1) return true;
return false
}
// make docuement.write shorter
function echo(str)
{
document.write(str);
}
// same as echo() but replace special characters
function echosc(str)
{
str=str.replace(/&/g,"&amp;");
str=str.replace(/</g,"&lt;");
str=str.replace(/>/g,"&gt;");
str=str.replace(/"/g,"&quot;");
str=str.replace(/'/g,"\'");
str=str.replace(/ /g,"&nbsp;");
document.write(str);
}
// return false if keybaord event is not decimal number.
function dec_num_only(evt)
{
if (navigator.appName == 'Netscape')
{
if (evt.which == 8) return true;	
if (evt.which == 0) return true;
if (evt.which >= 48 && evt.which <= 57) return true;
}
else
{
if (evt.keyCode == 8) return true;
if (evt.keyCode == 0) return true;
if (evt.keyCode >= 48 && evt.keyCode <= 57) return true;
}
return false;
}
// return false if keyboard event is not hex number.
function hex_num_only(evt)
{
if (navigator.appName == 'Netscape')
{
if (evt.which == 8) return true;	
if (evt.which == 0) return true;
if (evt.which >= 48 && evt.which <= 57) return true;
if (evt.which > 64 && evt.which < 71) return true;
if (evt.which > 96 && evt.which < 103) return true;
}
else
{
if (evt.keyCode == 8) return true;	
if (evt.keyCode == 0) return true;
if (evt.keyCode >= 48 && evt.keyCode <= 57) return true;
if (evt.keyCode > 64 && evt.keyCode < 71) return true;
if (evt.keyCode > 96 && evt.keyCode < 103) return true;
}
return false;
}
// return false if keyboard event is not readable character
function readable_char_only(evt)
{
if (navigator.appName == 'Netscape')
{
if (evt.which == 8) return true;	
if (evt.which == 0) return true;
if (evt.which < 33 || evt.which > 126) return false;
}
else
{
if (evt.keyCode == 8) return true;	
if (evt.keyCode == 0) return true;
if (evt.keyCode < 33 || evt.keyCode > 126) return false;
}
return true;
}
// make the obj selected, if the value of obj is empty, 'def' will be set as value.
function field_select(obj, def)
{
if (obj.value == '') obj.value = def;
obj.select();
}
// make the object be focused, and set the value to 'val'.
function field_focus(obj, val)
{
if (val != '**') obj.value = val;
obj.focus();
obj.select();
}
// for safari select loop
function select_index(obj, val)
{
var i=0;
for(i=0; i<obj.length;i++)
{
if(eval("obj["+i+"].value")==val)
{
obj.selectedIndex=i;
break;
}
}
}
// check if any unicode characters in the string.
function strchk_unicode(str)
{
var strlen=str.length;
if(strlen>0)
{
var c = '';
for(var i=0;i<strlen;i++)
{
c = escape(str.charAt(i));
if(c.charAt(0) == '%' && c.charAt(1)=='u')
return true;
}
}
return false;
}
function strchk_url(str)
{
if (__is_str_in_allow_chars(str, 1, "/.:_-?&=")) return true;
return false;
}
function strchk_hostname(str)
{
if (__is_str_in_allow_chars(str, 1, "._-")) return true;
return false;
}
function strchk_email(str)
{
if (__is_str_in_allow_chars(str, 1, "._-@")) return true;
return false;
}
function evtchk_url(evt)
{
if (__is_evt_in_allow_chars(str, 1, "/.:_-?&=")) return true;
return false;
}
function evtchk_hostname(evt)
{
if (__is_evt_in_allow_chars(str, 1, "._-")) return true;
return false;
}
function evtchk_email(evt)
{
if (__is_evt_in_allow_chars(str, 1, "._-@")) return true;
return false;
}


function StrtoUtf8(wide)
{
var narrow= encUtf8(wide);
var enc= '';
for (var i= 0; i<narrow.length; i++)
{
if (encPar_OK.indexOf(narrow.charAt(i))==-1)
enc= enc+encHex2(narrow.charCodeAt(i));
else
enc= enc+narrow.charAt(i);
}
return enc;
}
var encPar_OK= 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'+'0123456789*@-_./';
function encHex2(v)
{
return '%'+encHex2_DIGITS.charAt(v>>>4)+encHex2_DIGITS.charAt(v&0xF);
}
var encHex2_DIGITS= '0123456789ABCDEF';
function encUtf8(wide)
{
var c, s;
var enc= '';
var i= 0;
while(i<wide.length)
{
c= wide.charCodeAt(i++);
// handle UTF-16 surrogates
if (c>=0xDC00 && c<0xE000)
continue;
if (c>=0xD800 && c<0xDC00)
{
if (i>=wide.length)
continue;
s= wide.charCodeAt(i++);
if (s<0xDC00 || c>=0xDE00)
continue;
c= ((c-0xD800)<<10)+(s-0xDC00)+0x10000;
}
// output value
if (c<0x80)
enc+=String.fromCharCode(c);
else if (c<0x800)
enc+=String.fromCharCode(0xC0+(c>>6),0x80+(c&0x3F));
else if (c<0x10000)
enc+=String.fromCharCode(0xE0+(c>>12),0x80+(c>>6&0x3F),0x80+(c&0x3F));
else
enc+=String.fromCharCode(0xF0+(c>>18),0x80+(c>>12&0x3F), 0x80+(c>>6&0x3F),0x80+(c&0x3F));
}
return enc;
}
function toUTF8(str)
{
return StrtoUtf8(str);
}
function reloadInSec(time)
{
if(time < 1) alert("reloadInSec error");
setTimeout("self.location.reload();",time*1000);
}
function isIE()
{
if (navigator.userAgent.indexOf("MSIE")>-1) return true;
return false
}

// *********************************** commjs end *****************************************************

function getIP(ip)
{
var myIP=new Array();
if ( ip != "")
{
var tmp=ip.split(".");
for (var i=1;i <= tmp.length;i++)
{
myIP[i]=tmp[i-1];
}
myIP[0]=ip;
}
else
{
for (var i=1;i <= 4;i++)
{
myIP[i]="";
}
myIP[0]="";
}
return myIP;
}
function doValidateDomain(domain)
{
var intflag = 0;
var dianflag = 0;
var InValidIp=new Array("999.999.999.999","11.0.0.0","129.1.0.0","193.1.1.0","11.255.255.255","129.1.255.255","193.1.1.255","11.127.255.255","224.0.0.1","239.0.0.1","240.0.0.1","254.0.0.1","127.0.0.1");
for(var i=0;i<InValidIp.length;i++)
{
if(domain.value == InValidIp[i])
return false;
}
for (i=0;i<domain.value.length;i++)
{
if(domain.value.charAt(i) == ".")
{
dianflag++;
continue;
}
else
{
if (domain.value.charAt(i) < '0' || domain.value.charAt(i) > '9')
intflag++;
}
}
if((dianflag == 3)&&(intflag == 0))//if the string only include number and the number of "." is 3,check it as ip.
{
if(!valDoValidateIP(domain))
return false;
}
return true;
}
function isValidIpAddr(ip1,ip2,ip3,ip4)
{
if(ip1==0 || ip4==0 || ip4==255 || ip1==127)
return false;
return true;
}
function valDoValidateIP(ctrl)
{
var Address = ctrl.value;
if(Address=="")
{
return false;
}
var address = Address.match("^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$");
var digits;
if(address == null)
{
return false;
}
else
{
digits = address[0].split(".");
if(digits.length != 4)
return false;
for(var i=0; i < 4; i++)
{
if((Number(digits[i]) > 255 ) || (Number(digits[i]) < 0 ) || (Number(digits[0]) > 223))
{
return false;
break;
}
}
if(!isValidIpAddr(digits[0],digits[1],digits[2],digits[3]))
{
return false;
}
}
return true;
}
function IpBetween(Address, ip1start, ip1end, ip2start, ip2end)
{
var inrange=1,inrange1=1,inrange2=1;
var digits=ip1start.split(".");
var digite=ip1end.split(".");
var digit=Address.split(".");
if(ip2start == "" || ip2end == "")
{
for ( var i=0;i<4;i++)
{
if( ( parseInt(digit[i]) < parseInt(digits[i]) ) || ( parseInt(digit[i]) > parseInt(digite[i]) ) )
{
inrange=0;
break;
}
}
}
else
{
var tmpdigits=ip2start.split(".");
var tmpdigite=ip2end.split(".");
for ( var i=0;i<4;i++)
{
if( ( parseInt(digit[i]) < parseInt(digits[i]) ) || ( parseInt(digit[i]) > parseInt(tmpdigits[i]) ) )
{
inrange1=0;
break;
}
}
for ( var i=0;i<4;i++)
{
if( ( parseInt(digit[i]) < parseInt(digite[i]) ) || ( parseInt(digit[i]) > parseInt(tmpdigite[i]) ) )
{
inrange2=0;
break;
}
}
if(inrange1 == 0 && inrange2 == 0)
inrange = 0;
}
if( inrange==0 )
return false;
else
return true;
}
function doValidateIpBetween(ctrl, ipstart, ipend, lanip)
{
var Address=ctrl.value;
var tmpIPEnd = "";
var tmpIPStart = "";
var tmp = lanip.split(".");
var msg1="";
var msg2="";
if(lanip == ipstart)
{
ipstart=tmp[0]+"."+tmp[1]+"."+tmp[2]+"."+(parseInt(tmp[3])+1);
if( IpBetween(Address, ipstart, ipend, tmpIPStart, tmpIPEnd) ==false)
{
msg1 = m_ip_range +ipstart+" - "+ipend;
dx_alert_error_message( ctrl, msg1);
return false;
}
}
else if(lanip == ipend)
{
ipend=tmp[0]+"."+tmp[1]+"."+tmp[2]+"."+(parseInt(tmp[3])-1);
if (IpBetween(Address, ipstart, ipend, tmpIPStart, tmpIPEnd) ==false)
{
msg1 = m_ip_range +ipstart+" - "+ipend;
dx_alert_error_message( ctrl, msg1);
return false;
}
}
else if(Address == lanip)
{
dx_alert_error_message( ctrl, "The Address can't equal lan ip");
return false;
}
else
{
tmpIPEnd = tmp[0]+"."+tmp[1]+"."+tmp[2]+"."+(parseInt(tmp[3])+1);
tmpIPStart = tmp[0]+"."+tmp[1]+"."+tmp[2]+"."+(parseInt(tmp[3])-1);
if (IpBetween(Address, ipstart, tmpIPStart,tmpIPEnd,ipend) ==false)
{
if(ipstart == tmpIPStart)
msg1 = m_ip_range +ipstart;
else
msg1 = m_ip_range +ipstart+" - "+tmpIPStart;
if(tmpIPEnd == ipend)
msg2 = m_or +tmpIPEnd;
else
msg2 = m_or +tmpIPEnd+" - "+ipend;
dx_alert_error_message( ctrl, msg1+msg2);
return false;
}
}
}
function Isnumber(ctrl, item)
{
var Arg=ctrl.value;
var msg;
if (Arg=="")
{
msg=item+ m_numeric;
dx_alert_error_message( ctrl, msg);
return false;
}
var len=Arg.length;
var re = new RegExp("^[0-9]{1,"+Arg.length+"}$", "g");
if (!re.test(Arg))
{
msg=item+ m_numeric;
dx_alert_error_message( ctrl, msg);
return false;
}
else
{
return true;
}
}
function doValidateMac(Address)
{
var address=Address.match("^[0-9,a-f,A-F]{2}\:[0-9,a-f,A-F]{2}\:[0-9,a-f,A-F]{2}\:[0-9,a-f,A-F]{2}\:[0-9,a-f,A-F]{2}\:[0-9,a-f,A-F]{2}$");
var digits;
var i;
if(address == null)
{
return false;
}
digits=address[0].split(":");
if(digits.length != 6)
{
return false;
}
return true;
}
function doValidateMask(ctrl)
{
var mask = ctrl.value.match("^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$");
var digits;
var bMask = 0;
var watch = false;
var i;
if(mask == null)
{
return false;
}
if(ctrl.value == "255.255.255.253" || ctrl.value == "0.0.0.0")
return false;
digits = mask[0].split(".");
if(digits.length != 4)
return false;
for(i=0; i < 4; i++)
{
if((Number(digits[i]) > 255 ) || (Number(digits[i]) < 0 ) ||  (Number(digits[i]) == 1 ))
{
return false;
}
bMask = (bMask << 8) | Number(digits[i]);
}
bMask = bMask & 0x0FFFFFFFF;
for(i=0; i<32; i++)
{
if((watch==true) && ((bMask & 0x1)==0))
{
return false;
}
bMask = bMask >> 1;
if((bMask & 0x01) == 1)
watch=true;
}
return true;
}
function doValidateRange(startCtrl,endCtrl)
{
var startIP=startCtrl.value;
var endIP=endCtrl.value;
var staddress;
var edaddress;
var cnt;
staddress=startIP.split(".");
edaddress=endIP.split(".");
for(cnt=0; cnt < 4; cnt++)
{
if(Number(staddress[cnt])<Number(edaddress[cnt]))
return true;
if(Number(edaddress[cnt])<Number(staddress[cnt]))
{
dx_alert_error_message(startCtrl, m_end_less_start);
return false;
}
}
return true;
}
function dx_alert_error_message( ctrl, msg)
{
alert( msg);
ctrl.focus();
ctrl.select();
}
function dx_alert_error_message2( ctrl, msg)
{
alert( msg);
ctrl.focus();
}
function getLeftMostZeroBitPos(num) {
var i = 0;
var numArr = [128, 64, 32, 16, 8, 4, 2, 1];
for ( i = 0; i < numArr.length; i++ )
if ( (num & numArr[i]) == 0 )
return i;
return numArr.length;
}
function getRightMostOneBitPos(num) {
var i = 0;
var numArr = [1, 2, 4, 8, 16, 32, 64, 128];
for ( i = 0; i < numArr.length; i++ )
if ( ((num & numArr[i]) >> i) == 1 )
return (numArr.length - i - 1);
return -1;
}
function isValidMacMask(mask) {
var c = '';
var num = 0;
var i = 0, j = 0;
var zeros = 0;
var zeroBitPos = 0, oneBitPos = 0;
var zeroBitExisted = false;
maskParts = mask.split(':');
if ( maskParts.length != 6 ) return false;
for (i = 0; i < 6; i++) {
if ( maskParts[i] == '' )
return false;
for ( j = 0; j < maskParts[i].length; j++ ) {
c = maskParts[i].toLowerCase().charAt(j);
if ( (c >= '0' && c <= '9') ||
(c >= 'a' && c <= 'f') )
continue;
else
return false;
}
num = parseInt(maskParts[i], 16);
if ( num == NaN || num < 0 || num > 255 )
return false;
if ( zeroBitExisted == true && num != 0 )
return false;
if ( num == 0 )
zeros++;
zeroBitPos = getLeftMostZeroBitPos(num);
oneBitPos = getRightMostOneBitPos(num);
if ( zeroBitPos < oneBitPos )
return false;
if ( zeroBitPos < 8 )
zeroBitExisted = true;
}
if (zeros == 6)
return false;
return true;
}

function BrowserCheck() {
var b = navigator.appName
if (b=="Netscape") this.b = "ns"
else if (b=="Microsoft Internet Explorer") this.b = "ie"
else if (b=="Opera") this.b = "opera"
else this.b = b
//if(navigator.userAgent.indexOf("Firefox",0) != "-1")
//this.firefox = true;
this.version = navigator.appVersion
this.v = parseInt(this.version)
this.ns = (this.b=="ns" && this.v>=4)
this.ns4 = (this.b=="ns" && this.v==4)
this.ns5 = (this.b=="ns" && this.v==5)
this.ie = (this.b=="ie" && this.v>=4)
this.opera = (this.b=="opera")
this.ie4 = (this.version.indexOf('MSIE 4')>0)
this.ie5 = (this.version.indexOf('MSIE 5')>0)
this.ie6 = (this.version.indexOf('MSIE 6')>0)//joe add
this.mac = (this.version.indexOf('Macintosh')>0)
this.min = (this.ns||this.ie ||this.opera)
//alert("navigator.appName="+b+"  navigator.appVersion="+navigator.appVersion);
}
is = new BrowserCheck();
function showhide(element, sh, arg)
{
if (sh == 1)
DisplayShow(element, arg);
else
DisplayHide(element);
}
function DisplayShow(element, arg)
{
if(is.firefox || is.ns ||is.opera)
{
if ($)// standard
{
if(arg == "tr")
$(element).style.display="table-row";
if(arg == "td")
$(element).style.display="table-cell";
if(arg == "table" ||arg == "div")
$(element).style.display="table";
if(arg == "box")
$(element).style.display="block";
}
}
//else if(document.all)
//{
//    document.all[element].style.display = "block";
//}
else
{
$(element).style.display="block";
//document.layers[element].display = "block";
}
}
function DisplayHide(element)
{
if ($)
{
$(element).style.display="none";
}
else if(document.all)
{
document.all[element].style.display = "none";
}
else
{
document.layers[element].display = "none";
}
}
function displayLang(){
var currentlang="en";
var supportlang="en";
var languagelist=supportlang.split(",");
var langselect=document.getElementById("Langsel");
for( var i=0;i<languagelist.length;i++ ){
langselect.options[i] = new Option(languagelist[i],languagelist[i],false,false);
}
for( var i=0;i<languagelist.length;i++ ){
if(langselect.options[i].value == currentlang){
langselect.options[i].selected = true;
break;
}
}
}
function ChgLang(){
var str=xgiFilename;
str+="&"+"set/sys/language="+document.getElementById("Langsel").value;
str+="&"+"CMT=0"
location.href=str;
}

</script>

<script>

var m_login = "LOGIN";
var m_login_in = "Login in to the router";
var m_user = "User Name";
var m_pwd = "Password";
var m_display = "Display";
var m_capt = "Captcha";
var m_capt_error = "ERROR: Certification code is wrong.";
var m_error = "ERROR: The login account is error.";
</script>

<script language="JavaScript">


var hexcase = 0;  
var b64pad  = ""; 
var chrsz   = 8;  

function hex_sha1(s){return binb2hex(core_sha1(str2binb(s),s.length * chrsz));}
function b64_sha1(s){return binb2b64(core_sha1(str2binb(s),s.length * chrsz));}
function str_sha1(s){return binb2str(core_sha1(str2binb(s),s.length * chrsz));}
function hex_hmac_sha1(key, data){ return binb2hex(core_hmac_sha1(key, data));}
function b64_hmac_sha1(key, data){ return binb2b64(core_hmac_sha1(key, data));}
function str_hmac_sha1(key, data){ return binb2str(core_hmac_sha1(key, data));}

function sha1_vm_test()
{
return hex_sha1("abc") == "a9993e364706816aba3e25717850c26c9cd0d89d";
}

function core_sha1(x, len)
{

x[len >> 5] |= 0x80 << (24 - len % 32);
x[((len + 64 >> 9) << 4) + 15] = len;
var w = Array(80);
var a =  1732584193;
var b = -271733879;
var c = -1732584194;
var d =  271733878;
var e = -1009589776;
for(var i = 0; i < x.length; i += 16)
{
var olda = a;
var oldb = b;
var oldc = c;
var oldd = d;
var olde = e;
for(var j = 0; j < 80; j++)
{
if(j < 16) w[j] = x[i + j];
else w[j] = rol(w[j-3] ^ w[j-8] ^ w[j-14] ^ w[j-16], 1);
var t = safe_add(safe_add(rol(a, 5), sha1_ft(j, b, c, d)),
safe_add(safe_add(e, w[j]), sha1_kt(j)));
e = d;
d = c;
c = rol(b, 30);
b = a;
a = t;
}
a = safe_add(a, olda);
b = safe_add(b, oldb);
c = safe_add(c, oldc);
d = safe_add(d, oldd);
e = safe_add(e, olde);
}
return Array(a, b, c, d, e);
}

function sha1_ft(t, b, c, d)
{
if(t < 20) return (b & c) | ((~b) & d);
if(t < 40) return b ^ c ^ d;
if(t < 60) return (b & c) | (b & d) | (c & d);
return b ^ c ^ d;
}

function sha1_kt(t)
{
return (t < 20) ?  1518500249 : (t < 40) ?  1859775393 :
(t < 60) ? -1894007588 : -899497514;
}

function core_hmac_sha1(key, data)
{
var bkey = str2binb(key);
if(bkey.length > 16) bkey = core_sha1(bkey, key.length * chrsz);
var ipad = Array(16), opad = Array(16);
for(var i = 0; i < 16; i++)
{
ipad[i] = bkey[i] ^ 0x36363636;
opad[i] = bkey[i] ^ 0x5C5C5C5C;
}
var hash = core_sha1(ipad.concat(str2binb(data)), 512 + data.length * chrsz);
return core_sha1(opad.concat(hash), 512 + 160);
}

function safe_add(x, y)
{
var lsw = (x & 0xFFFF) + (y & 0xFFFF);
var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
return (msw << 16) | (lsw & 0xFFFF);
}

function rol(num, cnt)
{
return (num << cnt) | (num >>> (32 - cnt));
}

function str2binb(str)
{
var bin = Array();
var mask = (1 << chrsz) - 1;
for(var i = 0; i < str.length * chrsz; i += chrsz)
bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (32 - chrsz - i%32);
return bin;
}

function binb2str(bin)
{
var str = "";
var mask = (1 << chrsz) - 1;
for(var i = 0; i < bin.length * 32; i += chrsz)
str += String.fromCharCode((bin[i>>5] >>> (32 - chrsz - i%32)) & mask);
return str;
}

function binb2hex(binarray)
{
var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
var str = "";
for(var i = 0; i < binarray.length * 4; i++)
{
str += hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8+4)) & 0xF) +
hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8  )) & 0xF);
}
return str;
}

function binb2b64(binarray)
{
var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
var str = "";
for(var i = 0; i < binarray.length * 4; i += 3)
{
var triplet = (((binarray[i   >> 2] >> 8 * (3 -  i   %4)) & 0xFF) << 16)
| (((binarray[i+1 >> 2] >> 8 * (3 - (i+1)%4)) & 0xFF) << 8 )
|  ((binarray[i+2 >> 2] >> 8 * (3 - (i+2)%4)) & 0xFF);
for(var j = 0; j < 4; j++)
{
if(i * 8 + j * 6 > binarray.length * 32) str += b64pad;
else str += tab.charAt((triplet >> 6*(3-j)) & 0x3F);
}
}
return str;
}


var hexcase = 0;  
var b64pad  = ""; 
var chrsz   = 8;  

function hex_md5(s){ return binl2hex(core_md5(str2binl(s), s.length * chrsz));}
function b64_md5(s){ return binl2b64(core_md5(str2binl(s), s.length * chrsz));}
function str_md5(s){ return binl2str(core_md5(str2binl(s), s.length * chrsz));}
function hex_hmac_md5(key, data) { return binl2hex(core_hmac_md5(key, data)); }
function b64_hmac_md5(key, data) { return binl2b64(core_hmac_md5(key, data)); }
function str_hmac_md5(key, data) { return binl2str(core_hmac_md5(key, data)); }

function md5_vm_test()
{
return hex_md5("abc") == "900150983cd24fb0d6963f7d28e17f72";
}

function core_md5(x, len)
{

x[len >> 5] |= 0x80 << ((len) % 32);
x[(((len + 64) >>> 9) << 4) + 14] = len;
var a =  1732584193;
var b = -271733879;
var c = -1732584194;
var d =  271733878;
for(var i = 0; i < x.length; i += 16)
{
var olda = a;
var oldb = b;
var oldc = c;
var oldd = d;
a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
c = md5_ff(c, d, a, b, x[i+ 2], 17,  606105819);
b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
d = md5_ff(d, a, b, c, x[i+ 5], 12,  1200080426);
c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
a = md5_ff(a, b, c, d, x[i+ 8], 7 ,  1770035416);
d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
a = md5_ff(a, b, c, d, x[i+12], 7 ,  1804603682);
d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
b = md5_ff(b, c, d, a, x[i+15], 22,  1236535329);
a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
c = md5_gg(c, d, a, b, x[i+11], 14,  643717713);
b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
d = md5_gg(d, a, b, c, x[i+10], 9 ,  38016083);
c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
a = md5_gg(a, b, c, d, x[i+ 9], 5 ,  568446438);
d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
b = md5_gg(b, c, d, a, x[i+ 8], 20,  1163531501);
a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
c = md5_gg(c, d, a, b, x[i+ 7], 14,  1735328473);
b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
c = md5_hh(c, d, a, b, x[i+11], 16,  1839030562);
b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
d = md5_hh(d, a, b, c, x[i+ 4], 11,  1272893353);
c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
a = md5_hh(a, b, c, d, x[i+13], 4 ,  681279174);
d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
b = md5_hh(b, c, d, a, x[i+ 6], 23,  76029189);
a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
c = md5_hh(c, d, a, b, x[i+15], 16,  530742520);
b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
d = md5_ii(d, a, b, c, x[i+ 7], 10,  1126891415);
c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
a = md5_ii(a, b, c, d, x[i+12], 6 ,  1700485571);
d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
a = md5_ii(a, b, c, d, x[i+ 8], 6 ,  1873313359);
d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
b = md5_ii(b, c, d, a, x[i+13], 21,  1309151649);
a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
c = md5_ii(c, d, a, b, x[i+ 2], 15,  718787259);
b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
a = safe_add(a, olda);
b = safe_add(b, oldb);
c = safe_add(c, oldc);
d = safe_add(d, oldd);
}
return Array(a, b, c, d);
}

function md5_cmn(q, a, b, x, s, t)
{
return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
}
function md5_ff(a, b, c, d, x, s, t)
{
return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
}
function md5_gg(a, b, c, d, x, s, t)
{
return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
}
function md5_hh(a, b, c, d, x, s, t)
{
return md5_cmn(b ^ c ^ d, a, b, x, s, t);
}
function md5_ii(a, b, c, d, x, s, t)
{
return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
}

function core_hmac_md5(key, data)
{
var bkey = str2binl(key);
if(bkey.length > 16) bkey = core_md5(bkey, key.length * chrsz);
var ipad = Array(16), opad = Array(16);
for(var i = 0; i < 16; i++)
{
ipad[i] = bkey[i] ^ 0x36363636;
opad[i] = bkey[i] ^ 0x5C5C5C5C;
}
var hash = core_md5(ipad.concat(str2binl(data)), 512 + data.length * chrsz);
return core_md5(opad.concat(hash), 512 + 128);
}

function safe_add(x, y)
{
var lsw = (x & 0xFFFF) + (y & 0xFFFF);
var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
return (msw << 16) | (lsw & 0xFFFF);
}

function bit_rol(num, cnt)
{
return (num << cnt) | (num >>> (32 - cnt));
}

function str2binl(str)
{
var bin = Array();
var mask = (1 << chrsz) - 1;
for(var i = 0; i < str.length * chrsz; i += chrsz)
bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (i%32);
return bin;
}

function binl2str(bin)
{
var str = "";
var mask = (1 << chrsz) - 1;
for(var i = 0; i < bin.length * 32; i += chrsz)
str += String.fromCharCode((bin[i>>5] >>> (i % 32)) & mask);
return str;
}

function binl2hex(binarray)
{
var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
var str = "";
for(var i = 0; i < binarray.length * 4; i++)
{
str += hex_tab.charAt((binarray[i>>2] >> ((i%4)*8+4)) & 0xF) +
hex_tab.charAt((binarray[i>>2] >> ((i%4)*8  )) & 0xF);
}
return str;
}

function binl2b64(binarray)
{
var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
var str = "";
for(var i = 0; i < binarray.length * 4; i += 3)
{
var triplet = (((binarray[i   >> 2] >> 8 * ( i   %4)) & 0xFF) << 16)
| (((binarray[i+1 >> 2] >> 8 * ((i+1)%4)) & 0xFF) << 8 )
|  ((binarray[i+2 >> 2] >> 8 * ((i+2)%4)) & 0xFF);
for(var j = 0; j < 4; j++)
{
if(i * 8 + j * 6 > binarray.length * 32) str += b64pad;
else str += tab.charAt((triplet >> 6*(3-j)) & 0x3F);
}
}
return str;
}


var sys_captcha="0";

function display_show(){
var f = document.getElementById("form1");
if(f.display.checked){
document.all('f_password2').outerHTML="<input type=text name='"+document.all('f_password2').name+"' value='"+document.all('f_password2').value+"'>"
}else{
document.all('f_password2').outerHTML="<input type=password name='"+document.all('f_password2').name+"' value='"+document.all('f_password2').value+"'>"
//document.all('f_password').outerHTML="<input type=password name='"+document.all('f_password').name+"' value='"+document.all('f_password').value+"'>"
}
}
function JumpByEnter(e)
{
if(window.event) // IE
{
keynum = e.keyCode
}
else if(e.which) // Netscape/Firefox/Opera
{
keynum = e.which
}
if ( keynum == 13 )
{
document.getElementById('login').click();
}
}
function btnApply()
{
var f = document.getElementById("form1");
var ff = document.getElementById("form2");
ff.f_username.value = hex_md5(f.f_username.value);
ff.f_password.value = hex_md5(f.f_password2.value);

if(sys_captcha == 1)
ff.f_captcha.value = f.captcha.value;

with ( document.forms[1] ) {
document.forms[1].submit();
return true;
}
}
function cimg()
{
changetime =new Date().getTime();
document.getElementById('chkimg').src='/tmp/captcha.gif?'+changetime;
}
</script>

<script>
var str="";
if(sys_captcha == 1)
str += "<body class=\"mybody\" topmargin=\"1\" leftmargin=\"0\" rightmargin=\"0\" bgcolor=\"#757575\" onload=\"cimg()\" onkeydown=\"JumpByEnter(event)\">";
else
str += "<body class=\"mybody\" topmargin=\"1\" leftmargin=\"0\" rightmargin=\"0\" bgcolor=\"#757575\" onkeydown=\"JumpByEnter(event)\">";
document.write(str);
</script>

<script>
var m_html_title = "Logout";
var m_context = "This session has been automatically logged out for security reasons due to inactivity, please login again.";
var m_button_dsc = "Login Again";
</script>

<script>
var a_quit_wiz		="Quit Setup Wizard and discard settings?";

var m_pre_title		="D-LINK SYSTEMS, INC | WIRELESS ROUTER | ";

var m_product_page		="Product Page";
var m_hw_ver		="Hardware Version";
var m_fw_ver		="Firmware Version";
var m_fw_language	="Language";
var m_fw_builddate	="Build Timestamp";

var m_copyright		="Copyright &copy; 2004-2007 D-Link Systems, Inc.";

var m_nochg_title		="No Changed";
var m_nochg_dsc		="Settings is not changed.";
var m_saving_title		="Saving";
var m_saving_dsc		="The settings are saving and taking effect. <br><br> Please wait ...";
var m_back			="Back";
var m_continue		="Continue";
var m_save_settings	="Apply";
var m_rm_button	="Remove Selected";
var m_no_save_settings	="Cancel";
var m_ipaddr		="IP Address";
var m_netmask		="Subnet Mask";
//start of __comm.js
var m_range         =" Range between ";
var m_numeric       ="value must be numeric!";
var m_out_of_range  ="value out of range!";
var m_not_ios_8859_1  ="Found a non-ISO-8859-1 character at position: "
var m_not_ios_8859_2  =",\nPlease eliminate before continuing."
//end of __comm.js
//start of __ip.js
var m_ip_range         ="IP Range: ";
var m_or         =" or ";
var m_end_less_start         ="End IP address is less than Start IP address.";
//end of __ip.js
var m_prev			="Prev";
var m_next			="Next";
var m_finish			="Finish";
var m_cancel		="Cancel";
var m_save			="Save";
var m_connect		="Connect";
var m_clear		="Clear";
var m_skip		="Skip";
var m_name			="Name";
var m_user_name		="User Name";
var m_password		="Password";
var m_curpassword       ="Confirm Password"
var m_port			="Port";
var m_schedule		="Schedule";
var m_traffic_type		="Traffic Type";
var m_macaddr		="MAC Address";
var m_always		="Always";
var m_never		="Never";
var m_auto			="Auto";
var m_none			="None";
var m_disable		="Disable";
var m_enable		="Enable";
var m_disabled		="Disabled";
var m_enabled		="Enabled";
var m_off		    ="Off";
var m_on		    ="On";
var m_edit			="Edit";
var m_del			="Delete";
var m_restart			="Restart";
//var m_reboot        ="Please apply Save Settings and reboot the device to take effect !";
var m_reboot        ="Setting changes may require a reboot to take effect.";
var m_note_reboot = "<strong><font color=red>Note:</font></strong> "+m_reboot;
var a_sure_to_reboot	="Reboot the device ?";
var a_sure_to_logout	="Logout the device ?";
var m_del_msg = "Are you sure you want to delete this entry?";
var m_b_refresh = "Refresh";
var m_remove = "Remove";
var m_rm_sel = "Remove Selected";
var _wiz_1wan3_text_general_dynamicIPAddress="Dynamic IP Address";
var _wiz_1wan3_text_general_StaticIPAddress="Static IP Address";
var _wiz_1wan3_text_general_PPPoE="PPPoE";
var _wiz_1wan3_text_general_PPPoA="PPPoA";
var _wiz_1wan3_text_general_Bridge="Bridge";
var _wiz_1wan5_status_not_connected_text="The <em>DSL-2870B</em> is offline (not connected to the Internet).";
var _wiz_1wan5_status_connectet_text="The <em>DSL-2870B</em> is online (connected to the Internet).";
var _wiz_1wan5_status_waiting_text="Trying to connect to the Internet, please hold on a few seconds.";
var e_invalid_ascii = "The value must be ASCII character!";
</script>

<table id=header_container cellSpacing="0" cellPadding="5" width=838 align="center" border="0">
<tr>
<td width="100%"><script>prints(m_product_page);</script>&nbsp;:&nbsp;Dualband Wireless N750 Modem Router&nbsp;&nbsp;&nbsp;
<td noWrap align="right">
<script>prints(m_fw_ver);</script>&nbsp;:&nbsp;2.01.01&nbsp;&nbsp;&nbsp;
<script>prints(m_fw_builddate);</script>&nbsp;:&nbsp;03112014&nbsp;&nbsp;&nbsp;
<script>prints(m_fw_language);</script>&nbsp;:&nbsp;
<select size="1" id="Langsel" name="Langsel" style="font-family: verdana,arial,sans-serif; font-size:8 pt" onChange="ChgLang()">
</select>
<script>
displayLang();
</script>
</td>
</tr>
</table>

<table cellSpacing="0" cellPadding="0" width=838 align="center" border="0">
<tr>
<td width="30" id="topnav_container_r" background="/graphic/head_02.gif"><img border=0 src="/graphic/head_02.gif"></td>

<td id="topnav_container_m"><a href="http://www.dlink.com.au/"><img border=0 src="/graphic/head_01.gif"></a></td>

<td width="580" id="topnav_container_m" background="/graphic/head_02.gif"></td>
<td id="topnav_container_l"><img src="/graphic/head_03.gif"></td>
</tr>
</table>

<table border=0 cellspacing=0 cellpadding=0 align=center width="838">
<!--table class="mytable" align=center-->
<tr valign=top>
<td id="maincontent">
<div>
<table border=0 cellspacing=0 cellpadding=0 align=center height=100 id="box_header" width="650">
<tr><td>
<h1 align="left"><script>prints(m_login);</script></h1>
<div align="left"><script>prints(m_login_in);</script>
<form name="form1" id="form1" action="login.htm" method="post">
<table width="311" border="0" align="center">
<tr>
<td width="102"><strong><script>prints(m_user);</script>&nbsp;:</strong>
</td>
<td width="193"><input name="f_username" type="text" id="f_username" size="20" maxlength="15" value="admin">
</td>
</tr>
<tr>
<td width="102"><strong><script>prints(m_pwd);</script>&nbsp;:</strong>
</td>
<td width="193"><input type="password" name="f_password2" id="f_password2" size="20" maxlength="15">
<!--<input type="checkbox" name="display" id="display" onclick="display_show()">&nbsp;<script>prints(m_display);</script>-->
</td>
</tr>
<!--For captcha-->

<script>
var str="";
if(sys_captcha == 1)
{
str += "<tr>";
str += "<td width=\"102\">";
str += "<strong>"+m_capt+"&nbsp;:</strong>";
str += "</td>";
str += "<td width=\"193\">";
str += "<input name=\"captcha\" type=\"text\" id=\"captcha\" size=\"20\" maxlength=\"15\" value=\"\">";
str += "</td>";
str += "</tr>";
str += "<tr>";
str += "<td width=\"102\"></td>";
str += "<td width=\"193\"><img id=\"chkimg\" src=\"/var/captcha.gif\" width=\"123\" height=\"55\">";
str += "<input type=\"button\" name=\"refresh\" id=\"refresh\" value=\"refresh\" onClick=\"cimg()\">";
str + "</td>";
str += "</tr>";
}
document.write(str);
</script>

<!--End-->
<tr>
<td width="102"></td>
<td><input type="hidden" value="/index.htm" name="submit-url"><input type="button" name="login" id="login" value="Login" onclick="btnApply()">
</td>
</tr>
</table>
</form>
<form name="form2" id="form2" method="post">
<input type="hidden" name="f_username" id="f_username"><input type="hidden" name="f_password" id="f_password">

<script>
var str="";
if(sys_captcha == 1)
{
str += "<input type=\"hidden\" name=\"f_captcha\" id=\"f_captcha\">";
}
document.write(str);
</script>

<input type="hidden" value="/index.htm" name="submit-url">
</form>
</div>
</td></tr>
</table>
</div>
</td>
</tr>
</table>
<table id=footer_container cellSpacing="0" cellPadding="5" width="838" align="center" border="0">
<tr>
<td align=middle width=125>&nbsp;&nbsp;<img src="/graphic/tail.gif" width="114" height="35"></td>
<td width=10>&nbsp;</td>
<td>&nbsp;</td>
</tr>
</table>
<br>

<div align="center">Copyright &copy; 2012-2013 D-Link Systems, Inc.</div>

<br><br>

</body>
</html>
