//
// Some Common Functions
// 

var DEBUG          = false,
    canToggleColor = true,
    NaviClickLast  = '', 
    NaviDisabled   = new Object(),
    showAlert      = false,
    lastTab        = '',
    IE4, NS4, NS6, OPA;

function init() {

  IE4 = (document.all) ? 1 : 0;
  NS4 = (document.layers) ? 1 : 0;
  NS6 = (document.getElementById) ? 1:0;
  if ( navigator ){
    var agt = navigator.userAgent.toLowerCase();
    OPA = (agt.indexOf("opera") != -1) || (agt.indexOf("opera") != -1);
  } else {
    OPA = false;
  }
}

init();

function getElem( id ) {
  var elem;
  try {
    if (OPA) {
      elem = document.all[id];
    } else if (NS6) {
      elem = document.getElementById(id);
    } else if (IE4) {
      elem = document.all[id];
    }
  } catch( e ){
    if ( DEBUG )
      alert( 'getElem-Error: ' + e );
  }
  return elem;
}

function getStyle( id ) {
  var style;
  try {
    style = getElem( id ).style;
  } catch( e ){
    if ( DEBUG )
      alert( 'getStyle-Error: ' + e );
  }
  return style;
}

function fillElem( id, value ){
  var elem = getElem( id );

  if ( ! elem ){
    var radioElem = id + "." + value,
        elem      = getElem( radioElem );
    if ( elem && elem.type == 'radio' ){
      elem.checked = true;
    }
  } else {
    if ( elem.type == 'radio' ) {
      var elem = getElem( id + "." + value );
      if ( elem )
        elem.checked = true;
    } else if ( elem.type == 'textarea' ){
      elem.value = value;
    } else if ( elem.type == 'text' ){
      elem.value = value;
    } else {
      elem.innerHTML = value;
    }
  }
}

function getValue( id ){
  try {
    var elem = getElem( id ),
        rv;
    if ( ! elem ){
      var radioElem = id + "." + value,
          elem      = getElem( radioElem );
      if ( elem && elem.type == 'radio' ){
        rv = elem.checked ? true : false;
      }
    } else if ( elem.type == 'radio' ) {
      var elem = getElem( id + "." + value );
      if ( elem )
        rv = elem.checked ? true : false;
    } else if ( elem.type == 'textarea' ){
      rv = elem.value;
    } else if ( elem.type == 'text' ){
      rv = elem.value;
    } else if ( elem.type == 'select-one' ){
      rv = elem.options[elem.selectedIndex].value;
    } else {
      rv = elem.innerHTML || '';
    }
    return rv;
  } catch ( e ) {
    return undefined;
  }
}


function sprintf(fstring) {
    var pad = function(str,ch,len)
      { var ps='';
        for(var i=0; i<Math.abs(len); i++) ps+=ch;
        return len>0?str+ps:ps+str;
      }
    var processFlags = function(flags,width,rs,arg)
      { var pn = function(flags,arg,rs)
          { if(arg>=0)
              { if(flags.indexOf(' ')>=0) rs = ' ' + rs;
                else if(flags.indexOf('+')>=0) rs = '+' + rs;
              }
            else
                rs = '-' + rs;
            return rs;
          }
        var iWidth = parseInt(width,10);
        if(width.charAt(0) == '0')
          { var ec=0;
            if(flags.indexOf(' ')>=0 || flags.indexOf('+')>=0) ec++;
            if(rs.length<(iWidth-ec)) rs = pad(rs,'0',rs.length-(iWidth-ec));
            return pn(flags,arg,rs);
          }
        rs = pn(flags,arg,rs);
        if(rs.length<iWidth)
          { if(flags.indexOf('-')<0) rs = pad(rs,' ',rs.length-iWidth);
            else rs = pad(rs,' ',iWidth - rs.length);
          }
        return rs;
      }
    var converters = new Array();
    converters['c'] = function(flags,width,precision,arg)
      { if(typeof(arg) == 'number') return String.fromCharCode(arg);
        if(typeof(arg) == 'string') return arg.charAt(0);
        return '';
      }
    converters['d'] = function(flags,width,precision,arg)
      { return converters['i'](flags,width,precision,arg);
      }
    converters['u'] = function(flags,width,precision,arg)
      { return converters['i'](flags,width,precision,Math.abs(arg));
      }
    converters['i'] =  function(flags,width,precision,arg)
      { var iPrecision=parseInt(precision);
        var rs = ((Math.abs(arg)).toString().split('.'))[0];
        if(rs.length<iPrecision) rs=pad(rs,' ',iPrecision - rs.length);
        return processFlags(flags,width,rs,arg);
      }
    converters['E'] = function(flags,width,precision,arg)
      { return (converters['e'](flags,width,precision,arg)).toUpperCase();
      }
    converters['e'] =  function(flags,width,precision,arg)
      { iPrecision = parseInt(precision);
        if(isNaN(iPrecision)) iPrecision = 6;
        rs = (Math.abs(arg)).toExponential(iPrecision);
        if(rs.indexOf('.')<0 && flags.indexOf('#')>=0) rs = rs.replace(/^(.*)(e.*)$/,'$1.$2');
        return processFlags(flags,width,rs,arg);
      }
    converters['f'] = function(flags,width,precision,arg)
      { iPrecision = parseInt(precision);
        if(isNaN(iPrecision)) iPrecision = 6;
        rs = (Math.abs(arg)).toFixed(iPrecision);
        if(rs.indexOf('.')<0 && flags.indexOf('#')>=0) rs = rs + '.';
        return processFlags(flags,width,rs,arg);
      }
    converters['G'] = function(flags,width,precision,arg)
      { return (converters['g'](flags,width,precision,arg)).toUpperCase();
      }
    converters['g'] = function(flags,width,precision,arg)
      { iPrecision = parseInt(precision);
        absArg = Math.abs(arg);
        rse = absArg.toExponential();
        rsf = absArg.toFixed(6);
        if(!isNaN(iPrecision))
          { rsep = absArg.toExponential(iPrecision);
            rse = rsep.length < rse.length ? rsep : rse;
            rsfp = absArg.toFixed(iPrecision);
            rsf = rsfp.length < rsf.length ? rsfp : rsf;
          }
        if(rse.indexOf('.')<0 && flags.indexOf('#')>=0) rse = rse.replace(/^(.*)(e.*)$/,'$1.$2');
        if(rsf.indexOf('.')<0 && flags.indexOf('#')>=0) rsf = rsf + '.';
        rs = rse.length<rsf.length ? rse : rsf;
        return processFlags(flags,width,rs,arg);
      }
    converters['o'] = function(flags,width,precision,arg)
      { var iPrecision=parseInt(precision);
        var rs = Math.round(Math.abs(arg)).toString(8);
        if(rs.length<iPrecision) rs=pad(rs,' ',iPrecision - rs.length);
        if(flags.indexOf('#')>=0) rs='0'+rs;
        return processFlags(flags,width,rs,arg);
      }
    converters['X'] = function(flags,width,precision,arg)
      { return (converters['x'](flags,width,precision,arg)).toUpperCase();
      }
    converters['x'] = function(flags,width,precision,arg)
      { var iPrecision=parseInt(precision);
        arg = Math.abs(arg);
        var rs = Math.round(arg).toString(16);
        if(rs.length<iPrecision) rs=pad(rs,' ',iPrecision - rs.length);
        if(flags.indexOf('#')>=0) rs='0x'+rs;
        return processFlags(flags,width,rs,arg);
      }
    converters['s'] = function(flags,width,precision,arg)
      { var iPrecision=parseInt(precision);
        var rs = arg;
        if(rs.length > iPrecision) rs = rs.substring(0,iPrecision);
        return processFlags(flags,width,rs,0);
      }
    farr = fstring.split('%');
    retstr = farr[0];
    fpRE = /^([-+ #]*)(\d*)\.?(\d*)([cdieEfFgGosuxX])(.*)$/;
    for(var i=1; i<farr.length; i++)
      { fps=fpRE.exec(farr[i]);
        if(!fps) continue;
        if(arguments[i]!=null) retstr+=converters[fps[4]](fps[1],fps[2],fps[3],arguments[i]);
        retstr += fps[5];
      }
    return retstr;
}

/* Notice */

function Notice( title, text, alert ) { 
  if ( ! top.notice ){
    // do nothing unless top.notice exists
  } else {
    if ( alert )
      top.notice.showAlert = false;
    if ( top.notice.showAlert ) {
      // do nothing if showAlert is set
    } else if ( top.notice ) {
      var elemTitle = top.notice.getElem( 'noticeTitle' );
      var elemText  = top.notice.getElem( 'noticeText' );
      // elemTitle.innerHTML = ( title ? title + ':' : '' );
      elemText.innerHTML  = text;
    }
    if ( alert ){
      top.notice.showAlert = true;
      top.setTimeout( "top.notice.showAlert = false;", 5000 );
    }
  }
}

function ShowHelp( capt )    { Notice( 'Help', capt ) }
function HideHelp()          { Notice( '', '' ) }
function ShowDisplay( capt ) { Notice( 'Display', capt ) }
function HideDisplay()       { Notice( '', '' ) }
function ShowNotice( capt )  { Notice( '', '<b>Notice:</b><br />'+ capt ) }
function HideNotice()        { Notice( '', '' ) }
function ShowAlert( capt )   { Notice( '', '<span style="padding-left: 10px; padding-right: 10px; background-color: red;">Alert</span><br />' + capt, true ) }
function HideAlert()         { Notice( '', '' );
                               top.notice.showAlert = false;
                             }


/* Loading Image */

function Loading( mode, count ){
  var imageSrc = "/images/logo/loading-" + mode + ".gif";
  try {
    if ( top.title && top.title.document.loading )
      if ( top.title.document.loading.src != imageSrc )
        top.title.document.loading.src = imageSrc;
  } catch( e ) {
    if ( count < 5 )
      Loading( mode, ++count );
  }
}

function LoadingOn() {
  Loading( 'on', 1 );
}

function LoadingOff() {
  Loading( 'off', 1 );
}

/* Helper */

function OpenWindow( url, width, height ) {
  var win = window.open( url,
                   'PopUp_' + getUnique(),
                   'width=' + width + ',height=' + height + ',' +
                   'top=50,left=50,location=no,toolbar=no,' +
                   'scrollbars=yes,resizable=yes' );
  if ( ! win ){
    alert( "Seems you're using a popup-blocker\nPlease disable it!" );
  } else {
    win.opener = top;
    win.focus();
  }
}

function getUnique() {
  var now = new Date();
  return now.getTime() + now.getMilliseconds();
}

function OpenCalendar( field, append ) {
  win = window.open( '/Tools/Calendar?InputField=' + field + 
                                    ';Append='     + append,
                     'Calendar',
                     'left=300,top=50,width=230,height=180,' +
                     'location=no,toolbar=no' );
  win.opener = self;
  win.focus();
}

function OpenReference( field, what, value, append, mode ) {
  var win = window.open( '/Tools/Reference?InputField=' + field +
                                         ';DBField='    + what +
                                         ';Values='     + value +
                                         ';Append='     + append +
                                         ';Mode='       + mode,
                     'Reference',
                     'left=300,top=50,width=270,height=200,' +
                     'location=no,toolbar=no,scrollbars=yes' );
  getElem( field ).focus();
  win.field = getElem( field );
  win.focus();
}

function CurrentTime( id, field ) {
  var date = new Date();

  fillElem( 'date.' + id, 
            sprintf( "%02d.%02d.%04d", date.getDate(), 
                                       date.getMonth() + 1, 
                                       date.getFullYear() ));
  fillElem( 'time.' + id, 
            sprintf( "%02d:%02d:%02d", date.getHours(), 
                                       date.getMinutes(), 
                                       date.getSeconds() ));
  fillElem( 'tz.'   + id, '' );
}



/* List Functions */

function OrderLink( field, order ) {
  LoadingOn();
  if ( OrderBaseURI.indexOf( '?' ) == -1 ){
    location.href = OrderBaseURI + '?__order=' + field + '%3A' + order;
  } else {
    location.href = OrderBaseURI + ';__order=' + field + '%3A' + order;
  }
}

function toggleColor( tr, e, on, off, single, table ){
  var event   = e || window.event,
      tagname = EventTagname( event ),
      i, datasetlast, tr;

  if ( ! canToggleColor ){

  } else if ( tagname != 'TD' && tagname != 'DIV' ){

  } else {
    if ( single != true ){
      if ( tr.className == '' || tr.className == off )
        tr.className = on
      else
        tr.className = off;
    } else {
      var dataset   = Dataset[table],
          together  = Together[table],
          id        = tr.id, 
          switchoff = false;

      if ( dataset["Last"] ){
        if ( ! together[dataset["Last"]] ){
          getElem( dataset["Last"] ).className = off
          if ( dataset["Last"] == id )
            switchoff = true;
        } else {
          for ( i = 0; i < together[dataset["Last"]].length; i++ ){
            getElem( together[dataset["Last"]][i] ).className = off;
            if ( together[dataset["Last"]][i] == id )
              switchoff = true;
          }
        }
      }

      if ( switchoff == true ){
        dataset["Last"] = '';
      } else {
        dataset["Last"] = id;
        datasetlast     = dataset[id];
        if ( ! together[id] ){
          getElem( id ).className = on
        } else {
          for ( i = 0; i < together[id].length; i++ ) {
            tr = getElem( together[id][i] );
            if ( tr.className == '' || tr.className == off )
              tr.className = on
            else
              tr.className = off;
          }
        }
      }

    }
    if ( window.toggleFunc ){
      window.toggleFunc( datasetlast );
    }
  }
}

function EventElem( event ){
  if ( event.target )
    return event.target
  else if ( event.srcElement )
    return event.srcElement
  else
    return undefined;
}

function EventTagname( event ){
  if ( event.target )
    return event.target.nodeName.toUpperCase()
  else if ( event.srcElement )
    return event.srcElement.tagName.toUpperCase()
  else
    return '';
}

/* User Functions */

function UserSettings() {
  top.location.href = 'https://profile.europenet24.com/?sect=user';
}

function UserLogout() {
  top.location.href = '/LOGOUT';
}

/* For Navigation in left Frame */

function naviOver( id ) {
  var nav = getElem( 'nav.'+id ),
      but = getElem( 'but.'+id );

  if ( NaviDisabled[id] == 'Y' ){
    nav.className = 'naviSubDisabled';
  } else if ( NaviDisabled[id] == 'L' ){

  } else if ( NaviClickLast == id ){

  } else {
    nav.className = 'naviSubOver';
  }
}

function naviOut( id ) {
  var nav = getElem( 'nav.'+id ),
      but = getElem( 'but.'+id );

  if ( NaviDisabled[id] == 'Y' ){
    nav.className = 'naviSubDisabled';
  } else if ( NaviDisabled[id] == 'L' ){

  } else if ( NaviClickLast == id ){

  } else {
    nav.className = 'naviSub';
  }
}

function naviClick( id, func ) {
  var nav = getElem( 'nav.'+id ),
      but = getElem( 'but.'+id );

  if ( NaviDisabled[id] == 'Y' ||
       NaviDisabled[id] == 'L' ){
    return;
  } else {
    if ( func )
      rc = eval( func );

    if ( ! func ||
         ( func && rc == true ) ){
      if ( NaviClickLast ){
        var navL = getElem( 'nav.'+NaviClickLast );
        if ( NaviDisabled[NaviClickLast] == 'Y' ){
        } else if ( navL ) {
          navL.className = 'naviSub';
        }
      }

      if ( NaviDisabled[id] == 'Y' ){

      } else if ( nav ){
        nav.className   = 'naviSubClick';
      }
    }
    NaviClickLast = id;
  }
}

/* Tabs */

function tabOver( id ) {
  var tab = getElem( 'tab'+id );
  if ( lastTab && lastTab == id ){
  } else {
    tab.className = 'tabOver';
  }
}

function tabOut( id ) {
  var tab = getElem( 'tab'+id );
  if ( lastTab && lastTab == id ){
  } else {
    tab.className = 'tabOff';
  }
}


function tabClick( id ){
  var last   = getElem( lastTab ),
      curr   = getElem( id ),
      lastTd = getElem( 'tab' + lastTab ),
      currTd = getElem( 'tab' + id );

  if ( ! currTd ) return;

  lastTab = id;

  if ( last ){
    last.style.display = 'none';
    lastTd.className   = 'tabOff';
  }
  if ( curr ){
    curr.style.display = 'block';
    currTd.className   = 'tabOn';
  }
}

/* Title Function */
/* Var "dataFrame" must be set in HTML */

function reloadData() {
  if ( dataFrame )
    dataFrame.location.reload()
  else
    document.location.reload();
}
function saveData() {
  if ( dataFrame )
    if ( dataFrame.storeData )
      dataFrame.storeData();
}
function printData() {
  if ( dataFrame ){
    dataFrame.focus();
    dataFrame.print();
  }
}
function showDataFrame() {
  alert( dataFrame );
}
function PageLink( page ){
  if ( dataFrame ){
    LoadingOn();
    if ( dataFrame.PageBaseURI.indexOf( '?' ) == -1 ){
      dataFrame.location.href = dataFrame.PageBaseURI + '?__page=' + page;
    } else {
      dataFrame.location.href = dataFrame.PageBaseURI + ';__page=' + page;
    }
  }
}

function deleteItems() {
  if ( dataFrame &&
       dataFrame.deleteItems )
    dataFrame.deleteItems();
}

/*  */

function ReloadFrame( loc, uri ){
  if ( loc.pathname != uri )
    loc.pathname = uri;
}

function resetForm( form ){
  if ( form ){
    var i, elem;
    for ( i = 0; i < form.elements.length; i++ ){
      elem = form.elements[i];
      if ( elem.type == 'radio' ){
        if ( elem.getAttribute( 'default' ) )
          elem.checked = true
        else
          elem.checked = false;
      } else if ( elem.type == 'check' ){
        elem.checked = false
      } else if ( elem.type == 'hidden' ){
        // Not sure to delete value???
      } else if ( elem.type == 'select-one' ){
        var def = elem.getAttribute( 'default' ),
            j, defItem;
        for ( j = 0; j < elem.options.length; j++ ){
          var opt = elem.options[j];
          opt.selected = false;
          if ( opt.value == def )
            defItem = j;
        }
        elem.selectedIndex = defItem;
      } else if ( elem.type == 'text' ){
        elem.value = '';
      } else if ( elem.type == 'textarea' ){
        elem.value = '';
      } else {
        if ( DEBUG )
          alert( "Unknown form type: " + elem.type );
      }
    }
  } else {
    alert( "No Form" );
  }
}