// common functions

// _mWN = makeWindowName( raw string ) for #$#$% IE8 (not allowed a dot in window's title)
function _mWN ( s ) {
  if( s != null && s != '' ) {
    return String( s ).match( /([\w\d])/g ).join( '' );
  }
  return '';
}

// _oW = openWindow( element )
function _oW ( uri ) {
  if( uri != null ) {
    window.open( uri, _mWN( uri ) );
    return false;
  }
}

function getTopLeftWidthHeightForCenteredWindow(width,height) {
  var width = width;
  var height = height;
  var screenWidth = screen.availWidth;
  var screenHeight = screen.availHeight;
  //console.log( 'width:',width,'height:',height,'screenWidth:',screenWidth,'screenHeight:',screenHeight );
  if( width > screenWidth ) width = screenWidth;
  if( height > screenHeight ) height = screenHeight;
  var top = Math.round( ( screenHeight - height ) / 2 );
  var left = Math.round( ( screenWidth - width ) / 2 );
  //console.log( 'top:',top,'left:',left,'width:',width,'height:',height );
  return { top: top, left: left, width: width, height: height };
}


function getServiceWindowDimensionsByURI( uri ) {
  var uri = uri;
  if( uri == null || uri == "" ) return null;
  uri = uri.replace( /^http(s)?\:\/\/[^\/]+/,'');
  if( uri.match( /^\/services\/request/ ) ) return { width:617, height:600 };
  if( uri.match( /^\/services\/feedback/ ) ) return { width:617, height:600 };
  if( uri.match( /^\/services\/calculator/ ) ) return { width:617, height:660 };
  if( uri.match( /^\/services\/pifs-yield/ ) ) return { width:718, height:620 };
  if( uri.match( /^\/services\/faq/ ) ) return { width:617, height:620 };
  if( uri.match( /^\/services\/dictionary/ ) ) return { width:617, height:620 };
  if( uri.match( /^\/services\/subscribe/ ) || uri.match( /^\/services\/unsubscribe/ ) ) return { width:617, height:550 };
  return { width: 617, height: 620 };
};


function isServiceWindow() {
  // try detect via window.name
  var w = window.top || window;
  if( w.name != undefined && w.name != null && w.name == 'ak_services' ) return true;
  if( w.name != undefined && w.name != null && w.name == 'ak_main' ) return false;
  
  return false; // disable detect via uri
  
  // try detect via window.location.href
  var uri = w.location.href;
  if( uri == null || uri == "" ) return null;
  uri = uri.replace( /^http(s)?\:\/\/[^\/]+/,'');
  if( uri.match( /^\/services\// ) ) return true;
  
  return false;
};


function ServiceWindow(uri) {
  var width = 617;
  var height = 620;
  var predefinedDimensions = getServiceWindowDimensionsByURI( uri );
  if( predefinedDimensions != null && predefinedDimensions.width > 0 && predefinedDimensions.height > 0 ) {
    width = predefinedDimensions.width;
    height = predefinedDimensions.height;
  }
  var sizes = getTopLeftWidthHeightForCenteredWindow(width,height);
  if( isServiceWindow() ) {
    var w = window.top || window;
    w.resizeTo( sizes.width, sizes.height );
    w.moveTo( sizes.left, sizes.top );
    w.location.href = uri;
  }
  else {
    var win = window.open(uri, 'ak_services','width='+sizes.width+',height='+sizes.height+',left='+sizes.left+',top='+sizes.top+',screenX='+sizes.left+',screenY='+sizes.top+',resizable=no,status=yes,location=yes,scrollbars=yes');
    if( win != null ) {
      //win.moveTo( sizes.left, sizes.top );
      //win.resizeTo( sizes.width, sizes.height );
    }
  }
  return false;
}


function PrintWindow(uri) {
  var width = 685;
  var height = 800;
  var sizes = getTopLeftWidthHeightForCenteredWindow(width,height);
  if( isServiceWindow() ) {
    var w = window.top || window;
    w.resizeTo( sizes.width, sizes.height );
    w.moveTo( sizes.left, sizes.top );
    w.location.href = uri;
  }
  else {
    window.open(uri, 'ak_services','width='+sizes.width+',height='+sizes.height+',left='+sizes.left+',top='+sizes.top+',screenX='+sizes.left+',screenY='+sizes.top+',resizable=no,status=yes,location=yes,scrollbars=yes');
  }
  return false;
}


function MainWindow(uri) {
  if( window && window.opener ) {
    window.opener.location.href = uri;
  }
  else if( isServiceWindow() ) {
    window.open(uri, 'ak_main');
  }
  else {
    var w = window.top || window;
    w.location.href = uri;
  }
  return false;
}


function ServiceFlashJsAdapter(args) {
  var args = args || {};
  if( args.action != null ) {
    switch( args.action ) {
      case 'goto':
        if( args.uri != null && args.uri != "" ) {
          MainWindow( args.uri );
        }
        break;
      case 'gotoPifPage':
        if( args.pif != null && args.pif != "" ) {
          MainWindow( '/individual/pifs/'+args.pif+'/' );
          if( isServiceWindow() ) {
            window.close();
          }
        }
        break;
      case 'gotoRequestPif':
        if( args.pif != null && args.pif != "" ) {
          if( window.top
            && window.top.opener
            && window.top.opener.wh
            && window.top.opener.webhelper_banner_showed === true
          ) {
            window.top.opener.document.getElementById('itl_show_hide')
            && window.top.opener.document.getElementById('itl_show_hide').onclick
            && window.top.opener.document.getElementById('itl_show_hide').onclick();
          }
          else {
            ServiceWindow( '/services/request/pif/' );
          }
        }
        break;
      case 'gotoPifCalculator':
        if( args.pif != null && args.pif != "" ) {
          ServiceWindow( '/services/calculator/'+'?pif-alias='+args.pif );
        }
        else {
          ServiceWindow( '/services/calculator/' );
        }
        break;
      default:
        throw new Error("unknown action");
    }
  }
  return undefined;
};

