//*******************************************************************************
// BICV.js - Contacts Viewer Client JavaScript Methods.
//
// Author: Avi A. Elenko                 Company: Softwise Inc. Software Works ™
//*******************************************************************************
// Use of this software is subject to certain restrictions and limitations set
// forth in a license agreement entered into between Softwise Inc. Software 
// Works ™ and the licensee of this software.   Please refer to the license 
// agreement for license use rights and restrictions. 
//
// Softwise Inc. Software Works is a registered trademark, Softwise logo is also
// trademark of Softwise Inc. Software Works ™ in the United States and other
// countries. 
//
// Copyright © 1995-2006 Softwise Inc. Software Works ™      All Rights Reserved.
//
// 6 Whittier Place, Suite # 11N, Boston, MA 02114    http://www.SoftwiseUsa.com
//*******************************************************************************

//
// Button and Menu Option Handling Methods: BICVAddContact, BICVDelContacts, BICVSelectCG, BICVSave
//
function BICVAddContact() 
{
    var e='',v; if ((v=_webApp.Element('_textEmail')) && (v.value=='' || !_webApp.IsValidEmail(v.value)) ) e='Invalid or missing email address!';
    if (e!='') alert('Error: '+e+'\n\nPlease correct retry...' ); else this.BICVPost('AC');
}
function BICVDelContacts(o) 
{   // OBSOLETE Iterate through Checkboxes and find Selected: var rows=new Array(tc.rows.length),selected=0; for (var r=1; r<tc.rows.length; ++r) { var row=tc.rows[r],cb=row?row.cells[0].getElementsByTagName("input"):null; rows[r]=(cb && cb[0] && cb[0].checked ? row : null); } for (var sr=0; sr<rows.length; ++sr) if ( rows[sr] ) selected++;
    var d = this.BICVGetContactEmail(this.BICVGetCT(),true); // Get CSV email(s) string
    if (d!='')
    {
        if (window.confirm('Click OK to confirm deleting selected items?')) this.BICVPost('DSC,'+d); 
    }     
    else alert('No Selected Contacts to Delete!');
}
function BICVImport() { try { if(!_webApp.Element('_fileUpload1') || _webApp.Element('_fileUpload1').value=='') alert( 'Missing or Invalid Import File Name!' ); else this.BICVPost('IC'); } catch ( e  ) { alert( 'Missing or Invalid Import File Name: ' + e ); } }
function BICVDelCG(e,o) 
{ 
     if (this.BICVGetCGN()!='New Group')
    {
      if (window.confirm('Click OK to confirm deleting contact group: '+this.BICVGetCGN()+'?')) this.BICVPost('DCG'); 
    }
    else alert('You can not delete default group!');
}
function BICVSelCG(e,o) { this.BICVPost('SCG,'+o.value); }
function BICVSave(t) { if(this.BICVGetCGT()) this.BICVPost( (t=='A'?'SA,'+this.BICVGetContactEmail(this.BICVGetCGT()):'SC') ); }
//
// Move TO and FROM Contact Group Button Handling Methods: BICVMoveFromGroup, BICVMoveToGroup
// 
function BICVMoveFromGroup()
{
    var tgc=this.BICVGetCGT(),tc=this.BICVGetCT();
    if (tgc && tc)
    {
        var docFrag = document.createDocumentFragment(),rc=tgc.rows.length; 
        for (var r=rc-1; r>0; --r)
        {
           var row=tgc.rows[r],cb=row?row.cells[0].getElementsByTagName("input"):null; 
           if (cb && cb[0] && cb[0].checked) docFrag.appendChild( row );
        }
        if (docFrag.childNodes && docFrag.childNodes.length>0) tc.rows[0].parentNode.appendChild(docFrag);    
        else alert( 'No Selected Contact! Select Contact(s) to remove from Group and try again...');
    }
}
function BICVMoveToGroup()
{
    var tgc=this.BICVGetCGT(),tc=this.BICVGetCT();
    if (tgc && tc)
    {
        var docFrag = document.createDocumentFragment(),rc=tc.rows.length; tc.style.display='none';
        for (var r=rc-1; r>0; --r)
        {
           var row=tc.rows[r],cb=row?row.cells[0].getElementsByTagName("input"):null; 
           if (cb && cb[0] && cb[0].checked) docFrag.appendChild( row );
        }
        if (docFrag.childNodes && docFrag.childNodes.length>0) tgc.rows[0].parentNode.appendChild(docFrag);    
        else alert( 'No Selected Contact! Select Contact(s) to move to Group and try again...');
        setTimeout( "_webApp.Element('_tblContacts').style.display='';",2 );
    }
}
// 
// Contained Control Event Handling Methods
//
function BICVTR_MouseOut(e,o) 
{ 
    var s=(o.nextSibling && o.nextSibling.className.indexOf('BICVTRE')!=-1) ||
          (o.previousSibling && o.previousSibling.className.indexOf('BICVTRE')!=-1)?'BICVTR':'BICVTRE'; 
     cb=o.getElementsByTagName("input"); 
    o.className=s+(cb && cb[0] && cb[0].checked?'Sel':'');
}
function BICVCB_Click(e,o,t,h) // t=table code, h=heading checkbox
{
    if (h==undefined||!h)
    {
        var cbh=_webApp.Element('_checkboxC'+(t=='CG'?'G':'')); if (cbh && cbh.checked) cbh.checked=false;
    }
    else
    {
       this.BICVSetCheckboxes((t=='C'?this.BICVGetCT():this.BICVGetCGT()),o.checked);
    } 
}
//
// Utility Methods
//
function BICVGetCGN(){ return _bcvGroupName.value; }
function BICVGetCT() { return _webApp.Element('_tblContacts'); }
function BICVGetCGT(){ return _webApp.Element('_tblContactGroup'); }
function BICVPost(d) { if (_bcvHed) {_bcvHed.value=d; eval(_bcvPostBack); } }
function BICVGetContactEmail(t,s)
{
    var rc=t.rows.length,d='';
    for (var i=1; i<rc; ++i)
    {        
        var r=t.rows[i],cc=r.cells.length,cb=r.getElementsByTagName("input"); 
        if (s==undefined || !s || (cb && cb[0] && cb[0].checked)) d+=(cc>3&&r.cells[3]&&r.cells[3].innerHTML!='&nbsp'?r.cells[3].innerHTML.replace('<NOBR>','').replace('<nobr>','').replace('</NOBR>','').replace('</nobr>'):'')+',';
    }
    return d;
}
function BICVSetCheckboxes(t,c)
{
    var rc=t.rows.length;
    for (var i=1; i<rc; ++i)
    {        
        var r=t.rows[i],cb=r.getElementsByTagName("input");
        if (cb && cb[0]) { cb[0].checked=c; r.className='BICVTR'+((i%2)>0?'E':'')+(c?'Sel':''); }
    }
}
function GetObjectMethodRef(o,m,v) { return (function(e)	{e = e||window.event; return o[m](e,v); } ); }
function BICVDialogKeyDown(e,m)
{
    if (e==undefined||(e.keyCode<40&&e.keyCode!=27)||e.keyCode==190||((e.keyCode>47&&e.keyCode<58)||(e.keyCode>63&&e.keyCode<91)||(e.keyCode>96&&e.keyCode<123))) return;
    if ( _webApp.IsIE ) { e.returnValue = false; }
    else { e.stopPropagation(); e.preventDefault(); }

   if (e.keyCode==27&&m!=undefined) m();
}
//
// Import Contacts Dialog Methods
//
var _importDialogId='_divBicvImportDlg';
function BICVImportDialogShow(o)
{
    var idContainer=_webApp.Element(_importDialogId), w=600, h=124, z=1, ib=_webApp.Element('_divImportButton'),
        y=_webApp.ElementY( ib ), x=_webApp.ElementX( ib );
    
   if ( _importError!='' ) h+=20;
   if (!idContainer)
   {   // Create Import Dialog Container, and ID
      idContainer=_webApp.HtmlElement('div',w,h,(x-w>=0?x-w:0),y,null,null,(_webApp.IsIE?'7px #c0c0c0 outset':'5px black outset'),'white');  
      idContainer.id=_importDialogId;idContainer.style.color='#000000';
	  document.forms[0].insertBefore(idContainer,document.forms[0].firstChild);    // Make a child of Main Form 
      idContainer['onkeydown'] = this.GetObjectMethodRef( this, 'BICVDialogKeyDown', BICVImportDialogHide );
      idContainer.style.zIndex=z; idContainer.style.position='absolute';           // zIndex and position type 
      if(_webApp.IsIE) idContainer.style.filter='progid:DXImageTransform.Microsoft.Shadow(color=Gray,direction=135,strength=16);';

      var idInner=_webApp.HtmlElement('div',w,null); idContainer.appendChild(idInner);// Create and append Inner pane (div) to Container pane
                                                                                   // Create and append Title pane to Inner pane
      var idTitle=_webApp.HtmlElement('div',w,null,null,null,null,null,'1px solid gray','url(Images/Backgrounds/Tab.gif) no-repeat center top' );
	  idInner.appendChild( idTitle ); idTitle.innerHTML="<IMG STYLE='position:absolute;top:4px;left:3px;height:19px;with:33px' SRC='Images/Buttons/ContactsAdd.gif'><IMG STYLE='position:absolute;top:4px;left:"+(w-23)+"px;height:20px;with:20px' SRC='Images/Buttons/Close.gif' ONCLICK='BICVImportDialogHide();' TITLE='Click to close' BORDER=0><DIV ALIGN=CENTER STYLE='position:relative;top:5px;width:"+(w-22)+"px;height:24px;color:black;font-family:Arial;font-size:13px;' TITLE='Welcome to Upload and Import Contacts Dialog'><B>Upload and Import Contacts Dialog</B></DIV>";
		    
                                                                                   // Create and append Main pane to Inner pane
      var idMain=_webApp.HtmlElement('div',w,h-26,'100%',null,null,'13px Verdana',null,'#f2f2f2'); idInner.appendChild(idMain);
      var idFields=_webApp.HtmlElement('div',w-8,h-60); idMain.appendChild(idFields);
      var dStyle="style='font-family:Verdana;font-size:11px;width:"+(w-42)+"px;"+(_webApp.IsIE?"padding-top:3px;":"")+"height:20px;border:1px solid gray;",
	      bStyle="STYLE='width:90px;hight:22px;padding:5 4 4 0;background:url(Images/Backgrounds/Botton90x25.gif) no-repeat; font-family:Times New Roman;font-weight:norma;font-size:14px;'",
	      bOver="OnMouseOver=\"this.style.background='url(Images/Backgrounds/BottonSel90x25.gif) no-repeat'; this.style.fontWeight='bold';\" ",
	      bOut="OnMouseOut=\"this.style.background='url(Images/Backgrounds/Botton90x25.gif) no-repeat'; this.style.fontWeight='normal';\" ";
	  idFields.innerHTML= "<DIV STYLE='PADDING-TOP:6px;PADDING-RIGHT:0;MARGIN-LEFT:4px;'><NOBR>File:&nbsp;<INPUT ID=_fileUpload1 NAME=_fileUpload1 type=file "+ dStyle+"' size=93 TABINDEX=1></NOBR></DIV>" +
                          "<DIV STYLE='WIDTH:"+(w-18)+"px;height:22px;MARGIN-TOP:10px;MARGIN-LEFT:4px;'>File Format: " +
                              "<INPUT STYLE='vertical-align:text-top;MARGIN-LEFT:0;' TYPE=radio NAME=_radioFileType Value='E' TABINDEX=2 CHECKED>Excel (Comma Separated Value)" +
                              "<INPUT STYLE='vertical-align:text-top;MARGIN-LEFT:8px;' TYPE=radio NAME=_radioFileType Value='X' TABINDEX=2>XML</DIV>" +
	                      "<DIV STYLE='MARGIN:4px;display:none;color:red;' ID=_divImpDlgError>" + (_importError==''?"&nbsp;":"<B>Error: </B>"+_importError) + "</DIV>" +
	                      "<DIV STYLE='MARGIN-TOP:"+ (_webApp.IsIE?10:12) +"px;MARGIN-LEFT:2px;'><TABLE CELLPADDING=0 CELLSPACING=0 BORDER=0 WIDTH=100%><TR>" +
	                           "<TD ALIGN=left WIDTH=98%><DIV TABINDEX=4 ALIGN=CENTER "+bStyle+ bOver+ bOut+ "OnClick='BICVImport(); return false;' Title='Click to import your contacts file'>Import</DIV></TD>" + 
	                           "<TD ALIGN=right WIDTH=2%><DIV TABINDEX=5 ALIGN=CENTER "+bStyle+ bOver+ bOut+ "OnClick='BICVImportDialogHide(); return false;' Title='Click to cancel and close dialog'>Cancel</DIV></TD>" + 
                              "</TR></TABLE></DIV>";
   }
   else idContainer.style.left=(x-w>=0?x-w:0);       

   idContainer.style.display=''; idContainer.style.height=h;var ide=_webApp.Element('_fileUpload1');
   if ( ide ){ide.focus(); ide.select();}
   
   BICVCloseMenu(o); // Closes Pop Out Menu, if needed
}
function BICVImportDialogHide()
{
    var id=_webApp.Element(_importDialogId); if (id) {_webApp.Element('_divImpDlgError').style.display=id.style.display='none';}
}
//
// Add Conatct Diloag Methods
//
var _addDialogId='_divBicvAddDlg';
function BICVAddDialogShow(o)
{
    var adContainer=_webApp.Element(_addDialogId), w=460, h=157, z=1, ib=_webApp.Element('_divAddButton'),
        y=_webApp.ElementY( ib ), x=_webApp.ElementX( ib );
    
   if ( _addError!='' ) h+=20;
   if (!adContainer)
   {   // Create Import Dialog Container, and ID
      adContainer=_webApp.HtmlElement('div',w,h,(x-w>=0?x-w:0),y,null,null,(_webApp.IsIE?'7px #c0c0c0 outset':'5px black outset'),'white');  
      adContainer.id=_addDialogId;adContainer.style.color='#000000';
	  document.forms[0].insertBefore(adContainer,document.forms[0].firstChild);    // Make a child of Main Form 
      adContainer.style.zIndex=z; adContainer.style.position='absolute';           // zIndex and position type 
      adContainer['onkeydown'] = this.GetObjectMethodRef( this, 'BICVDialogKeyDown', BICVAddDialogHide );
      if(_webApp.IsIE) adContainer.style.filter='progid:DXImageTransform.Microsoft.Shadow(color=Gray,direction=135,strength=16);';

      var idInner=_webApp.HtmlElement('div',w,null); adContainer.appendChild(idInner);// Create and append Inner pane (div) to Container pane
                                                                                   // Create and append Title pane to Inner pane
      var idTitle=_webApp.HtmlElement('div',w,null,null,null,null,null,'1px solid gray','url(Images/Backgrounds/Tab.gif) no-repeat center top' );
	  idInner.appendChild( idTitle ); idTitle.innerHTML="<IMG STYLE='position:absolute;top:4px;left:3px;height:19px;with:33px' SRC='Images/Buttons/ContactAdd.gif'><IMG STYLE='position:absolute;top:4px;left:"+(w-23)+"px;height:20px;with:20px' SRC='Images/Buttons/Close.gif' ONCLICK='BICVAddDialogHide();' TITLE='Click to close' BORDER=0><DIV ALIGN=CENTER STYLE='position:relative;top:5px;width:"+(w-22)+"px;height:24px;color:black;font-family:Arial;font-size:13px;' TITLE='Welcome to Add a New Contact Dialog'><B>Add a New Contact Dialog</B></DIV>";
		    
                                                                                   // Create and append Main pane to Inner pane
      var idMain=_webApp.HtmlElement('div',w,h-26,'100%',null,null,'13px Verdana',null,'#f2f2f2'); idInner.appendChild(idMain);
      var idFields=_webApp.HtmlElement('div',w-8,h-60); idMain.appendChild(idFields);
      var dStyle="style='font-family:Verdana;font-size:11px;margin-left:2px;"+(_webApp.IsIE?"padding-top:2px;":"")+"height:18px;border:1px solid gray;padding-right:0;margin-right:0;",
	      bStyle="STYLE='width:90px;hight:22px;padding:5 4 4 0;background:url(Images/Backgrounds/Botton90x25.gif) no-repeat; font-family:Times New Roman;font-weight:norma;font-size:14px;",
	      bOver="OnMouseOver=\"this.style.background='url(Images/Backgrounds/BottonSel90x25.gif) no-repeat'; this.style.fontWeight='bold';\" ",
	      bOut="OnMouseOut=\"this.style.background='url(Images/Backgrounds/Botton90x25.gif) no-repeat'; this.style.fontWeight='normal';\" ";
	  idFields.innerHTML= "<DIV STYLE='PADDING-TOP:6px;PADDING-RIGHT:0;MARGIN-LEFT:4px;font-family:Verdana;font-size:12px;'><NOBR>" + 
	                        "First Name:<INPUT ID=_textFname NAME=_textFname type=text "+dStyle+"width:110px;margin-left:" + (_webApp.IsIE?10:8) + "px;margin-right:5px;' TABINDEX=1>" +
	                        "Middle:<INPUT ID=_textMname NAME=_textMname type=text "+dStyle+"width:58px;margin-right:5px;' TABINDEX=2>" +
	                        "Last:<INPUT ID=_textLname NAME=_textLname type=text "+dStyle+"width:110px;' TABINDEX=3></NOBR></DIV>" +
                          "<DIV STYLE='PADDING-TOP:6px;PADDING-RIGHT:0;MARGIN-LEFT:4px;MARGIN-RIGHT:0px;WIDTH:100%'><NOBR>" + 
	                        "Email:<INPUT ID=_textEmail NAME=_textEmail type=text "+dStyle+"width:370px;margin-left:" + (_webApp.IsIE?43:40) + "px;' TABINDEX=4></NOBR></DIV>" +
                          "<DIV STYLE='PADDING-TOP:6px;MARGIN-LEFT:4px;'><TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0 WIDTH=100%><TBODY><TR>"+
                            "<TD Width=100px VALIGN=TOP STYLE='font-family:Verdana;font-size:12px;'><NOBR>Your Notes:</NOBR></TD><TD><TEXTAREA ID=_textNotes NAME=_textNotes "+dStyle+"width:370px;height:32px;' wrap=soft TABINDEX=5></TEXTAREA><TD></TR></TBODY></TABLE></DIV>" +
	                      "<DIV STYLE='MARGIN:4px;display:none;color:red;' ID=_divAddDlgError>" + (_addError==''?"&nbsp;":"<B>Error: </B>"+_addError) + "</DIV>" +
	                      "<DIV STYLE='MARGIN-TOP:"+ (_webApp.IsIE?10:12) +"px;MARGIN-LEFT:2px;'><TABLE CELLPADDING=0 CELLSPACING=0 BORDER=0 WIDTH=100%><TR>" +
	                           "<TD ALIGN=left WIDTH=92%><DIV TABINDEX=6 ALIGN=CENTER " + bStyle+"' "+bOver + bOut + "OnClick='BICVAddContact(); return false;' Title='Click to Add new Contact'>Add</DIV></TD>" + 
	                           "<TD ALIGN=right WIDTH=8%><DIV TABINDEX=7 ALIGN=CENTER "+ bStyle+"' "+bOver+bOut+ "OnClick='BICVAddDialogHide(); return false;' Title='Click to cancel and close dialog'>Cancel</DIV></TD>" + 
                              "</TR></TABLE></DIV>";
   }
   else adContainer.style.left=(x-w>=0?x-w:0);       

   adContainer.style.display=''; adContainer.style.height=h;var eid=_webApp.Element('_textEmail');
   if ( eid )
   {
        var vs=_bcvHed.value.split(',',6); 
        if(vs.length>1) _webApp.Element('_textFname').value=vs[1]; if(vs.length>2) _webApp.Element('_textMname').value=vs[2];
        if(vs.length>3) _webApp.Element('_textLname').value=vs[3]; if(vs.length>4) _webApp.Element('_textEmail').value=vs[4];
        if(vs.length>5) _webApp.Element('_textNotes').value=vs[5]; eid.focus(); eid.select();
   }
   
   BICVCloseMenu(o); // Closes Pop Out Menu, if needed
}
function BICVAddDialogHide()
{
    var ad=_webApp.Element(_addDialogId); if (ad) {_webApp.Element('_divAddDlgError').style.display=ad.style.display='none';}
}
function BICVCloseMenu(o) { if (o&&_bcvEM!='') eval(_bcvEM).MIUnselect(o); eval(_bcvEM).MICloseAll(o); }


//
// Web-page Utility Methods: BICVLockPage, BICVUnlockPage
//
function ZeroPrefix(n,l,r) { var s=n.toString(); if ( s.length<3 ) { s='000'+s; s=s.substring(s.length-l,s.length); } return (r==undefined||!r?s:(s=s+'000000', s.substring(0,l))); }
function FormatTime( d,l ) { return ZeroPrefix(d.getHours(),2) + ':' + ZeroPrefix(d.getMinutes(),2) + ':' + ZeroPrefix(d.getSeconds(),2) + '.' + ZeroPrefix(d.getMilliseconds(),(l==undefined?3:l),true); }

var _divLockPage=null, _divLockPageSavedCursor=null;
function BICVLockPage()
{
	if(!_divLockPage)
	{
		_divLockPage=document.createElement("div");
		document.body.insertBefore(_divLockPage,document.body.firstChild);
		_divLockPage.style.zIndex=10000;
		_divLockPage.style.position="absolute";
		_divLockPage.style.left=0;
		_divLockPage.style.top=0;
		_divLockPage.style.backgroundColor="transparent";
	}
	_divLockPage.style.display="";
	_divLockPage.style.width=document.body.clientWidth;
	_divLockPage.style.height=document.body.clientHeight;
	if(!_divLockPageSavedCursor)_divLockPageSavedCursor=document.body.style.cursor;		
	_divLockPage.style.cursor=document.body.style.cursor='wait';
}
function BICVUnlockPage() { if(_divLockPage) {_divLockPage.style.cursor='';_divLockPage.style.display='none'; document.body.style.cursor=_divLockPageSavedCursor; _divLockPageSavedCursor=null;} }

var _qsTable, _qsSortedColInx, _qsSortDir, _qsSavedRows, _qsTotalStarttime, _qsTotalEndtime;
function BICVTblHrClick(e,r)
{
    var s=_webApp.GetEventSource(e),td; while (s && s.tagName!='TH') s=s.parentNode;
    if (s && s.tagName=='TH' && s.getAttribute('Sortable') == 'True')
    {
        var ci=s.getAttribute('ColInx'), sortDir=s.getAttribute('Sorted');
        if (sortDir=='A' || sortDir=='D') // Present sorted-by coldumn
        {
            sortDir=(sortDir=='A'?'D':'A');
        } 
        else for (var c=0; c<r.cells.length; ++c)
        {
            td=r.cells[c],sortDirX=td.getAttribute('Sorted');
            if (sortDirX=='A'||sortDirX=='D') {sortDir=sortDirX; td.setAttribute('Sorted','U'); imgs=td.getElementsByTagName("img"); if(imgs[0])imgs[0].src='Images/Buttons/SortInd13x15.gif'; }
        }
        if ((td=r.cells[ci])) 
        {
            if (sortDir!='A' && sortDir!='D') sortDir='A'; td.setAttribute('Sorted', sortDir);
            var table = r.parentNode; while (table && table.tagName!='TABLE') table=table.parentNode;
            if (table && table.tagName=='TABLE')
            { // Fire-off quick sorts, _sswSortTable aborts if table rows < 2 (1 TH + 1 TR, only one data row)
               table.style.cursor='wait'; BICVLockPage(); _qsTable=table; _qsSortedColInx=ci; _qsSortDir=(sortDir=='A'); window.setTimeout('_sswSortTable()',1);
            }
        }
    }
}
function _sswSortTable()
{
    if (_qsTable.rows.length>2) 
    {   // ARRAYS QUICK SORT
        _qsTotalStarttime=new Date(); var av=new Array(_qsTable.rows.length), at=new Array(_qsTable.rows.length); 
        _sswAqsPre(_qsTable,_qsSortedColInx,av,at);
        _sswAqsSort(av,at,1,_qsTable.rows.length-1,_qsSortDir);
        _sswAqsPost(_qsTable,at,av); 
        for (var i=1; i<_qsTable.rows.length; ++i)
        { 
           var r=_qsTable.rows[i],cb=r.getElementsByTagName("input");
           r.className='BICVTR'+((i%2)>0?'E':'')+(cb[0].checked?'Sel':'');
        }
        _qsTotalEndtime=new Date(); // Done
     }
     var imgs=_qsTable.rows[0].cells[_qsSortedColInx].getElementsByTagName("img"); if(imgs[0]){imgs[0].src='Images/Buttons/'+(_qsSortDir?'SortAsc.gif':'SortDsc.gif');}
    _qsTable.style.cursor='wait'; window.setTimeout('_sswSortTableCompleted()',1);
}
function _sswSortTableCompleted()
{
    _qsTable.style.cursor='default'; BICVUnlockPage(); 
    if (_qsTable.rows.length>2) window.setTimeout( eval("\"var et1=new Date(_qsTotalEndtime-_qsTotalStarttime); et1.setHours(0); window.status='Sort elapsed time: '+FormatTime(et1,7);\""),1 );
}
//
// Arrays Quick Sort Methods: _sswAqsPre, _sswAqsSort, _sswAqsPost
//
function _sswAqsPre(t,ci,av,at)
{
    _qsSavedRows = new Array(t.rows.length); _qsSavedRows[0]=t.rows[0];
    for (var r=1; r<t.rows.length; ++r)
    {
       var row=t.rows[r],v=row?row.cells[ci].innerHTML:'',i; _qsSavedRows[r]=row;
       if ( (i=v.indexOf('<a')) != -1 || (i=v.indexOf('<A')) != -1)
       {
           v=v.substring( (i=v.indexOf('>',i)+1),v.indexOf('</',i)-1);
       } 
       else
       {
           if ( v.indexOf('<NOBR>')==0 ||v.indexOf('<nobr>')==0   ) {v=v.substr(6); v=v.replace('</NOBR>','').replace('</nobr>','');}
           v=v.replace('&nbsp;','').toLowerCase();
       }
       av[r]=v; at[r]=r; // Set value and tag
   }
}
function _sswAqsPost(t,at,av)
{
    var docFrag = document.createDocumentFragment(),parentNode=_qsSavedRows[0].parentNode; 
    docFrag.appendChild(_qsSavedRows[0]); for (var r=1;r<_qsSavedRows.length; ++r) docFrag.appendChild(_qsSavedRows[at[r]]);  
    parentNode.innetHTML=''; parentNode.appendChild(docFrag);    
}
function _sswAqsSort(av, at, left, right, asc)
{
    var pivot=av[left],pivotTag=at[left],l_hold=left, r_hold=right;
    while (left < right)
    {
        if (asc) 
           while ((av[right]>=pivot) && (left<right)) right--; 
        else
           while ((av[right]<=pivot) && (left<right)) right--; 

        if (left != right)
        {
            av[left]=av[right]; at[left]=at[right]; left++;
        }

        if (asc)
            while ((av[left]<=pivot) && (left<right)) left++;
        else
            while ((av[left]>=pivot) && (left<right)) left++;

        if (left != right)
        {
           av[right]=av[left]; at[right]=at[left];  right--;
        }
    }
    av[left]=pivot; at[left]=pivotTag; var t=left; left=l_hold; right=r_hold;

    if (left <t) _sswAqsSort(av,at,left,t-1, asc );
    if (right>t) _sswAqsSort(av,at,t+1, right,asc);
    
}
    // End of script file: BICV.js