/*******************************************************************************
 * Filename    : plib.js
 * Description : Javascript functions
 * Created on  : 07/18/03
 * CVS Version : $Id: plib.js,v 1.49.6.2 2009/05/14 06:43:48 JudithLi Exp $
 *
 * (C) Copyright Promise Technology Inc., 2003
 * All Rights Reserved
 ******************************************************************************/

// Browser object
function ylib_getBrowserVersion()
{   
    
    switch(navigator.family){
        case 'ie4':
          browserVersion=1 //IE4
          break;
        case 'nn4':
          browserVersion=2 //NS4
          break;
        case 'gecko':
          browserVersion=3 //NS6
          break;
        case 'nn5':
          browserVersion=4 //safari
          break;
        default:
          browserVersion=0 //other
          break;
    }
    return browserVersion;

}
function ylib_Browser()
{
  d=document;
  this.agt=navigator.userAgent.toLowerCase();
  this.major = parseInt(navigator.appVersion);
  this.dom=(d.getElementById)?1:0; // true for ie6, ns6
  this.ns=(d.layers);
  this.ns4up=(this.ns && this.major >=4);
  this.ns6=(this.dom&&navigator.appName=="Netscape");
  this.op=this.agt.indexOf('opera')!=-1;
  this.ie=(d.all);
  this.ie4=(d.all&&!this.dom)?1:0;
  this.ie4up=(this.ie && this.major >= 4);
  this.ie5=(d.all&&this.dom);
  this.win=((this.agt.indexOf("win")!=-1) || (this.agt.indexOf("16bit")!=-1));
  this.mac=(this.agt.indexOf("mac")!=-1);
}
var oBw = new ylib_Browser();

// like to optimize this further
function ylib_getObj(id,d)
{
  var i,x;  if(!d) d=document;
  if(!(x=d[id])&&d.all) x=d.all[id];
  for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][id];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=ylib_getObj(id,d.layers[i].document);
  if(!x && document.getElementById) x=document.getElementById(id);
  return x;
}

function ylib_show(o,disp)
{
  (oBw.ns)? '':(!disp)? o.style.display="":o.style.display=disp;
  (oBw.ns)? o.visibility='show':o.style.visibility='visible';
}
function ylib_hide(o,disp)
{
  (oBw.ns)? '':(arguments.length!=2)? o.style.display="none":'';
  (oBw.ns)? o.visibility='hide':o.style.visibility='hidden';
}

function ylib_addEvt(o,e,f)
{
    if (!o)
        return;
    if (o.addEventListener)
        o.addEventListener(e,f,false);  // does not handle return value for Gecko
    else if(o.attachEvent)
        o.attachEvent("on"+e,f);
    else
        eval("o.on"+e+"="+f)
}
function ylib_addOption(object, text,value)
{
    var browserVersion = ylib_getBrowserVersion();
    if(browserVersion==4)
    {
        var option = new Option(text, value);
        object.add(option);
    }
    else
    {
        var option=document.createElement('option');
        option.text=text;
        option.value=value;
        object.options.add(option);
    }
}
var gi_ypim_hideTimerID = null;
var gi_ypim_hideTimerID2 = null;
var gi_ypim_menuOnID = 0;
var gb_ypim_isMenuOn = 0;
var gb_ypim_isButOut = 0;
var go_ypim_css = {
  btnOn : "tablob",
  btnOff : "tabloa",
  btnDn : "tabloc",
  curBtnOn : "tabhib",
  curBtnOff : "tabhia"
}

// set the css for current button
function ypim_setCurBtn(id,on)
{
    var oTab1 = ylib_getObj(id+'1');
    var oTab2 = ylib_getObj(id+'Btn');
    if (on)
    {
        if (oTab1)
            oTab1.className = go_ypim_css.curBtnOn;
        if (oTab2)
            oTab2.className = go_ypim_css.curBtnOn;
    }
    else
    {
        if (oTab1)
            oTab1.className = go_ypim_css.curBtnOff;
        if (oTab2)
            oTab2.className = go_ypim_css.curBtnOff;
    }
}

// set the css for other buttons
function ypim_setBtn(id,on)
{
    var oTab1 = ylib_getObj(id+'1');
    var oTab2 = ylib_getObj(id+'Btn');
    if (on)
    {
        if (oTab1)
            oTab1.className = go_ypim_css.btnOn;
        if (oTab2)
            oTab2.className = go_ypim_css.btnOn;
    }
    else
    {
        if (oTab1)
            oTab1.className = go_ypim_css.btnOff;
        if (oTab2)
            oTab2.className = go_ypim_css.btnOff;
    }
}

// set the css for current button with the arrow image
//   this is for the button down state
function ypim_setBtnDown(id)
{
    var oBut = ylib_getObj(id);
    oBut.className = go_ypim_css.btnDn;
    gb_ypim_isMenuOn = 1;
    gb_ypim_isButOut = 0;
    if (gi_ypim_hideTimerID2!=null)
        clearTimeout(gi_ypim_hideTimerID2);
    pim_showMenu(id+'M');
}

// show the dropdown menu
function pim_showMenu(id)
{
    if (gi_ypim_menuOnID!=0)
        ypim_hideMenu();
    var oMenu = ylib_getObj(id);
    ylib_show(oMenu);
    ylib_hide(oMenu);
    ylib_show(oMenu);
    gi_ypim_menuOnID = id;
    gb_ypim_isMenuOn = 1;
    if(oBw.ie) hideCombos(oMenu);
    return false;
}

function ypim_over()
{
    gb_ypim_isButOut=0;
    if (gi_ypim_hideTimerID!=null)
        clearTimeout(gi_ypim_hideTimerID);
    if (gi_ypim_hideTimerID2!=null)
        clearTimeout(gi_ypim_hideTimerID2);
}

function ypim_hide()
{
    gi_ypim_hideTimerID = setTimeout("ypim_hideMenu()",500);
}

function ypim_btnOut()
{
    gi_ypim_hideTimerID2 = setTimeout("ypim_doHide()",2000);
    gb_ypim_isButOut = 1;
}

// not the best way to handle the button out even
//  should be able to just clearout gi_ypim_hideTimerID2
//  not working b/c the timer is not getting cleared out
function ypim_doHide()
{
    if (gb_ypim_isButOut)
        ypim_hideMenu();
}

function ypim_hideMenu()
{
    if (gi_ypim_menuOnID == 0 || gb_ypim_isMenuOn == 0)
        return false;
    var oMenu = ylib_getObj(gi_ypim_menuOnID);
    ylib_hide(oMenu);
    gi_ypim_menuOnID = 0;
    gb_ypim_isMenuOn = 0;
    gb_ypim_isButOut=0;
    if(oBw.ie) showCombos();
}

function plib_initTab(count, current)
{
    for (var i = 0; i < count; i++)
    {
        id = 't' + i;

        oTb = ylib_getObj(id+"Tb");
        oa = ylib_getObj(id+"a");
        if (current == i)
        {
            ypim_setCurBtn(id, 0);
            ylib_addEvt(oTb, "mouseover", new Function("ypim_setCurBtn('"+id+"',1)"));
            ylib_addEvt(oTb, "mouseout", new Function("ypim_setCurBtn('"+id+"',0)"));
            if (oa)
                oa.className = 'tab0';

            ol = ylib_getObj(id+"l");
            ol.src = "images/tabl0.gif";
            or = ylib_getObj(id+"r");
            or.src = "images/tabr0.gif";
        }
        else
        {
            ypim_setBtn(id, 0);
            ylib_addEvt(oTb, "mouseover", new Function("ypim_setBtn('"+id+"',1)"));
            ylib_addEvt(oTb, "mouseout", new Function("ypim_setBtn('"+id+"',0)"));
            if (oa)
                oa.className = 'tab1';
        }

        oTb2 = ylib_getObj(id+"Btn");
        if (oTb2)
        {
            ylib_addEvt(oTb2, "mousedown", new Function("ypim_setBtnDown('"+id+"Btn')"));
            ylib_addEvt(oTb2, "mouseout", new Function("ypim_btnOut()"));
        }

        oTb3 = ylib_getObj(id+"BtnM");
        if (oTb3)
        {
            ylib_addEvt(oTb3, "mouseover", new Function("ypim_over()"));
            ylib_addEvt(oTb3, "mouseout", new Function("ypim_hide()"));
        }
    }
}

function selectAll()
{
    form = document.forms[0];
    // the first element might be selectall
    for (i = 1; i < form.elements.length; i++)
    {
        if (form.elements[i].name == "items[]")
            form.elements[i].checked = form.selectall.checked;
    }
}

function checkAll()
{
    form = document.forms[0];
    // the first element might be selectall
    for (i = 1; i < form.elements.length; i++)
    {
        if (form.elements[i].name == "items[]")
        {
            if (form.elements[i].checked == false)
            {
                form.selectall.checked = false;
                return;
            }
        }
    }
    // all items are checked
    form.selectall.checked = true;
}

function updateEnableItemBgColor(o)
{
    if (!o)
        return;

    o.style.backgroundColor = o.disabled ? '#F0F0F0' : '#FFFFFF';
    o.style.color = o.disabled ? '#888888' : '#000000';
}

function showConfirm(string)
{
    var retStr;

    if (navigator.family == 'ie4')
        retStr = window.showModalDialog("confirm.php?str=" + escape(string.replace('\n','<br>')), "",
            "dialogHeight:240px;dialogWidth:360px;help:0;scroll:0;status:0;");
    else
        retStr = prompt(string.replace(/&#39;/g,"'").replace(/&#34;/g,'"'), '');
	if(navigator.family == 'ie4')
	{
		if ( retStr == '')
			return false;
        if(retStr == 'cancelled' || retStr == undefined  || retStr == null)
		    return 'cancelled';
       return (retStr.toLowerCase() == 'confirm');
	}
	else
	{
		if ( retStr == '')
        return false;
        if(retStr == null )
		return 'cancelled';
    return (retStr.toLowerCase() == 'confirm');
}
}

function changeImage(id, src)
{
    obj = ylib_getObj(id);
    if (obj)
        obj.src = src;
}

function foldTable(id)
{
    src = document.images[id+"i"].src;
    if (src.search("ball-dn.gif") != -1)
    {
        ylib_hide(ylib_getObj(id));
        ylib_getObj(id+"i").src = "images/ball-rt.gif";
    }
    else
    {
        ylib_show(ylib_getObj(id));
        ylib_getObj(id+"i").src = "images/ball-dn.gif";
    }
}

function adjustListCellWidth(headID, listID)
{
    o1 = ylib_getObj(listID);
    o2 = ylib_getObj('listDiv');
    if (o1 && o2 && (o2.scrollHeight > o2.offsetHeight))
    {
        h = ylib_getObj(headID);

        for (i = 0; i < h.cells.length; i++)
            h.cells[i].style.width = o1.cells[i].offsetWidth - 4;

        h.insertCell(i);
        h.cells[i].style.width = h.offsetWidth - o1.offsetWidth - 5;
    }
}
function adjustListCellWidthMulti(headID, listID, DivID)
{
    o1 = ylib_getObj(listID);
    o2 = ylib_getObj(DivID);
    if (o1 && o2 && (o2.scrollHeight > o2.offsetHeight))
    {
        h = ylib_getObj(headID);

        for (i = 0; i < h.cells.length; i++)
            h.cells[i].style.width = o1.cells[i].offsetWidth - 4;

        h.insertCell(i);
        h.cells[i].style.width = h.offsetWidth - o1.offsetWidth - 5;
    }
}
function adjustListDivHeight(h)
{
    obj = ylib_getObj('listDiv');
    if (!obj)
        return;
    if (document.body.clientHeight)
    {
      height = document.body.clientHeight - h;
    }
    else if(document.body.offsetHeight){
        height = document.body.offsetHeight - h;
    } 
    else
    { // in Mozila b.clientHeight=0, but b.offsetHeight is html doc height
        height = 530 - h;  
    }
    if (obj.offsetHeight < height) 
    { 
       height = obj.offsetHeight;
    }
    if (height < 20)
    { 
       height = 70;    
    }
    
    obj.style.height = height;
}   
function adjustListDivHeightMulti(listDivId,h)
{ 
    obj = ylib_getObj(listDivId);
    if (!obj)
        return;
    if (document.body.clientHeight)
        height = document.body.clientHeight - h;
    else
        // in Mozila b.clientHeight=0, but b.offsetHeight is html doc height
        height = 530 - h;
    if (height < 0) height = 0;
    if (obj.offsetHeight < height)
        height = obj.offsetHeight;
    obj.style.height = height;
}
function isExistOption(list, value)
{
    for (var i = 0; i < list.length; i++)
    {
        if (list.options[i].value == value)
            return true;
    }
    return false;
}

function fromListToList(srcList, destList)
{
    for (var i = (srcList.length - 1); i >= 0; i--)
    {
        if (srcList.options[i].selected)
        {
            if (isExistOption(destList, srcList.options[i].value) == false)
            {
                opt = new Option(srcList.options[i].text);
                opt.value = srcList.options[i].value;
                if (srcList.options[i].psize)
                    opt.psize = srcList.options[i].psize;
                if (srcList.options[i].className)
                    opt.className = srcList.options[i].className;

                if (oBw.ie)
                    destList.add(opt);
                else
                    destList.appendChild(opt);
            }
            srcList.remove(i);
        }
        srcList.scrollTop=0;
    }
    handleSelectIssueXX(srcList);
    handleSelectIssueXX(destList);
}

function handleSelectIssueXX(selectobj)
{
   if(selectobj.length==0)
   {
     selectobj.style.color='white';
   }
   else
   {
     selectobj.style.color=selectobj.disabled?'#888888':'#000000';
   }
}

function focusSubmit()
{
    if (document.forms[0].elements.length &&
        document.forms[0].elements["submit"] &&
        (document.forms[0].elements["submit"].name == 'Submit'))
        document.forms[0].elements["submit"].focus();
}

function changeImages(className)
{
    
    HELP_01.className = className;
}

function openHelpWindow(file)
{
    w = window.open(file, "help_window",
        "height=600, width=600, resizable=1, status=0, toolbar=0, scrollbars=1");
    w.focus();
}

function treeClickOnTreeId(treeId)
{
    if (top.treefrm)
        top.treefrm.clickOnTreeId(treeId);
}

function isVisible(o) {
  if (o.style && o.style.visibility=="hidden") return false;
  else return true;
}

function getPosTop(o) {
  if(o.tagName=='FORM') return 0;
  if(o.tagName=='TD' && o.parentElement.tagName=='TR')
    return getPosTop(o.parentElement);
  else return o.offsetTop+o.clientTop+getPosTop(o.parentElement);
}

function hideCombos(oMenu) {
  var elements=document.forms[0].elements;
  for (i=0; i<elements.length; i++) {
    var o=elements[i];
    if (o.type.substr(0,6)=='select' && isVisible(o) && getPosTop(o)<(oMenu.offsetTop+oMenu.offsetHeight)) {
      o.tmpHide=1;
      var h=o.parentElement.clientHeight;
      ylib_hide(o);
      o.parentElement.height=h;
    }
  }
}

function showCombos() {
  var elements=document.forms[0].elements;
  for (i=0; i<elements.length; i++) {
    var o=elements[i];
    if (o.type.substr(0,6)=='select' && o.tmpHide && o.tmpHide==1) {
      ylib_show(o);
      o.tmpHide=0;
    }
  }
}

function showTooltip(id,str)
{
  o=ylib_getObj(id);
  ylib_addEvt(o,'mouseover',new Function("return overlib('"+str+"',HAUTO)"));
  ylib_addEvt(o,'mouseout',new Function("return nd()"));
}

function validateAlias(str)
{
  var illegalChars=/[^A-Za-z0-9_ ]/;
  if (illegalChars.test(str) ||
    str.charAt(0) == ' ' ||
    str.charAt(str.length-1) == ' ')
    return false;
  else
    return true;
}
 
function validateHostname(str)
{
  var illegalChars=/[^A-Za-z0-9_]/;
  if (illegalChars.test(str))
    return false;

  return true;
}
 
function validateEmailAlias(str)
{ 
  var illegalChars=/[^A-Za-z0-9_. @]/;
  if (illegalChars.test(str) ||
    str.charAt(0) == ' ' || 
    str.charAt(str.length-1) == ' ')
    return false;
  else 
    return true;
}


function validateEmailAddress(str)
{
  var correctChars=/^\s*([A-Za-z0-9_-]+(\.\w+)*@([A-Za-z0-9_-]+\.)+\w{2,3})\s*$/;
  if (correctChars.test(str)) 
	  return true;
  else
	  return false;
}
function validateNumber(str)
{
  var illegalChars=/\D/;
  var signChars=/[+-]/g;
  var pointChars=/\./g;
  if (str.search(signChars) == 0)
    str=str.substring(1,str.length);
  if ((pointPos = str.search(pointChars)) != -1)
    str=str.substring(0,pointPos)+str.substring(pointPos+1,str.length);
  if (illegalChars.test(str) ||
    str.charAt(0) == ' ' ||
    str.charAt(str.length-1) == ' ')
    return false;
  else
    return true;
}

function validateHex(str)
{
  var illegalChars=/[^A-Fa-f0-9]/;
  if (illegalChars.test(str) ||
    str.charAt(0) == ' ' ||
    str.charAt(str.length-1) == ' ')
    return false;
  else
    return true;
}

function validateIP(str)
{
  var ipPattern=/^(\d{1,2}|1\d{2}|2([0-4]\d|5[0-5]))\.(\d{1,2}|1\d{2}|2([0-4]\d|5[0-5]))\.(\d{1,2}|1\d{2}|2([0-4]\d|5[0-5]))\.(\d{1,2}|1\d{2}|2([0-4]\d|5[0-5]))$/;
  if (ipPattern.test(str))
    return true;
  else
    return false;
}

function adjDateObj(oY,oM,oD)
{
  vY=oY.value;
  if(vY<100){
    if(vY>=70)
      vY=vY-0+1900;
    else
      vY=vY-0+2000;
  }
  if(vY<1970)
    vY=1970;
  else if(vY>2038)
    vY=2038;
  if(oY.type=='text')
    oY.value=vY;
  md=new Array(12);
  md[0]=md[2]=md[4]=md[6]=md[7]=md[9]=md[11]=31;
  md[3]=md[5]=md[8]=md[10]=30;
  if(vY%4==0&&vY%100!=0||vY%400==0)
    md[1]=29;
  else
    md[1]=28;
  dMax=md[oM.selectedIndex];
  dIdx=oD.selectedIndex;
  oD.length=dMax;
  for(i=28;i<dMax;i++)
      oD.options[i]=new Option(i+1);
  if(dIdx<dMax)
    oD.selectedIndex=dIdx;
  else
    oD.selectedIndex=dMax-1;
  if(vY==2038&&(oM.selectedIndex>0||oD.selectedIndex>17)){
      oM.selectedIndex=0;
      oD.selectedIndex=17;
  }
}

function refresh(frame){
    if(frame)
    {
        top.basefrm.location.href=top.basefrm.location.href ;
    }
}

function isRefreshfile(frame,url,fileNameArray){
    for(var i=0;i<fileNameArray.length;i++){
        var fileName = fileNameArray[i];
        if(url.search(fileName)!=-1){
            setTimeout("refresh(frame)",1000);
            return;
        }
    }
    refresh(frame);
}   

function isEnableRefresh (frame,url,fileNameArray){
    for(var i=0;i<fileNameArray.length;i++){
        var fileName = fileNameArray[i];
        if(url.search(fileName)!=-1){
          return ;
        }
    }
  
    if(frame)
        top.basefrm.location.href=top.basefrm.location.href ;
}   
function check_range(obj,istart,iend) { 
   if(isSpace(obj)){
        return false ;
    } 
    trim(obj) ; 
    if(!isNumber(obj)){
        return false ;
    }
    if(obj.value<istart||obj.value>iend) {
        return false ;
    }        
    return true ; 
}  
function isSpace(obj){
    if(obj.value==null){
        return false ;
    }  
    for(i=0;i<obj.value.length;i++) {
        if(obj.value.charAt(i)!=" "){
            return false;
        }
        continue ; 
    }
    return true ;
} 
function isNumber(obj){            
    if (/^\d+$/.test(obj.value)){   
       return true;   
    }      
    else{      
       return false;     
    }     
}   
function trim(obj){  
    obj.value = String(obj.value).replace(/^[\s]+|[\s]+$/g,'');  
    return obj;      
}  
function strTrim(str){  
    str = str.replace(/^[\s]+|[\s]+$/g,'');  
    return str;      
}

function getCookie( name ) {
    var start = document.cookie.indexOf( name + "=" );
    var len = start + name.length + 1;
    if ( ( !start ) && ( name != document.cookie.substring( 0, name.length ) ) ) {
        return null;
    }
    if ( start == -1 ) return null;
    var end = document.cookie.indexOf( ";", len );
    if ( end == -1 ) end = document.cookie.length;
    return unescape( document.cookie.substring( len, end ) );
}
 
function setCookie( name, value, expires, path, domain, secure ) {
    var today = new Date();
    today.setTime( today.getTime() );
    var defaultExpires = 180 * 1000 * 60 * 60 * 24;
    if ( expires ) {
        expires = expires * 1000 * 60 * 60 * 24;
    }
    var expires_date = new Date( today.getTime() + ((expires) ? expires : defaultExpires));
    document.cookie = name+"="+escape( value ) 
        + ( ";expires="+expires_date.toGMTString() ) 
        + ( ( path ) ? ";path=" + path : "" ) 
        + ( ( domain ) ? ";domain=" + domain : "" ) 
        + ( ( secure ) ? ";secure=" : "" );
}
 
function deleteCookie( name, path, domain ) {
    if ( getCookie( name ) ) {
        document.cookie = name + "=" + ( ( path ) ? ";path=" + path : "") 
            + ( ( domain ) ? ";domain=" + domain : "" ) + ";expires=Thu, 01-Jan-1970 00:00:01 GMT";
    }
} 
   
