/**
 * <br> $Header: /home/sclark/cvs2svn/cvsroot/website/scripts/siras.widgets.imagebutton.js,v 1.2 2010-05-04 19:56:01 doconnor Exp $
 *
 * Author: J. Myron Smith
 *
 * <br> Copyright 1999-2010 by SiRAS.com.
 * <br> All rights reserved. "SIRAS' technology is protected by one or more of U.S. Patents."
 *
 * This is the 'Gallery of Retail Fraud' StoryViewer Panel compositing javascript code.
 */
siras.widgets.ImageButton = function(config) {
  var mCfg;
  var mHtml;
  var mMouseupFunc;
  var mMousedownFunc;
  var mInitialized = false;
  var mMarginLeftUp;
  var mMarginLeftDn;
  var mMarginRightUp;
  var mMarginRightDn;
  var mMarginTopUp;
  var mMarginTopDn;
  var mMarginBottomUp;
  var mMarginBottomDn;

  if (config) {
    configure(config);
  }

  function initialized() {
    if (!mInitialized) {
      alert('siras.widgets.ImageButton object instance not initialized!');
    }
    return mInitialized;
  }

  function configure(config) {
    if (config) {
      mCfg = config;
    }
    else {
      alert('no configuration object for siras.widgets.ImageButton');
      return;
    }

    if (mCfg.id == null) {
      alert('no id provided for siras.widgets.ImageButton');
      return;
    }

    if (mCfg.enabledImageUrl == null) {
      alert('required siras.widgets.ImageButton confuration parameter: enabledImageUrl not provided');
      return;
    }

    if (mCfg.hasDisabledState != null && mCfg.hasDisabledState == true) {
      if (mCfg.disabledImageUrl == null) {
        alert('required siras.widgets.ImageButton confuration parameter: disabledImageUrl not provided');
      }
    }
    else {
      mCfg.hasDisabledState = false;
    }

    // set the public properties
    mCfg.onClickHandler =     mCfg.onClickHandler ||  null;
    //mCfg.onKeypressHandler =  mCfg.onKeypressHandler ||   null;

    mCfg.enabled =        mCfg.enabled != null ? mCfg.enabled : true;
    // set the optional cofigurables
    mCfg.marginRight =      mCfg.marginRight ||   0;
    mCfg.marginBottom =     mCfg.marginBottom ||  0;
    mCfg.marginLeft =       mCfg.marginLeft ||    0;
    mCfg.marginTop =      mCfg.marginTop ||   0;
    mCfg.horzTravel =     mCfg.horzTravel ||    0;
    mCfg.vertTravel =     mCfg.vertTravel ||    0;
    mCfg.animatePress =     mCfg.animatePress != null ? mCfg.animatePress : false;
    switch (mCfg.animatePress) {

      case 'N':
        mMarginLeftUp = mCfg.marginLeft;
        mMarginLeftDn = mCfg.marginLeft;
        mMarginRightUp  = mCfg.marginRight;
        mMarginRightDn  = mCfg.marginRight;
        mMarginTopUp  = mCfg.marginTop + mCfg.vertTravel;
        mMarginTopDn  = mCfg.marginTop;
        mMarginBottomUp = mCfg.marginBottom;
        mMarginBottomDn = mCfg.marginBottom + mCfg.vertTravel;
        break;

      case 'NE':
        mMarginLeftUp = mCfg.marginLeft;
        mMarginLeftDn = mCfg.marginLeft + mCfg.horzTravel;
        mMarginRightUp  = mCfg.marginRight + mCfg.horzTravel;
        mMarginRightDn  = mCfg.marginRight;
        mMarginTopUp  = mCfg.marginTop + mCfg.vertTravel;
        mMarginTopDn  = mCfg.marginTop;
        mMarginBottomUp = mCfg.marginBottom;
        mMarginBottomDn = mCfg.marginBottom + mCfg.vertTravel;
        break;

      case 'E':
        mMarginLeftUp = mCfg.marginLeft;
        mMarginLeftDn = mCfg.marginLeft + mCfg.horzTravel;
        mMarginRightUp  = mCfg.marginRight + mCfg.horzTravel;
        mMarginRightDn  = mCfg.marginRight;
        mMarginTopUp  = mCfg.marginTop;
        mMarginTopDn  = mCfg.marginTop;
        mMarginBottomUp = mCfg.marginBottom;
        mMarginBottomDn = mCfg.marginBottom;
        break;

      case 'SE':
        mMarginLeftUp = mCfg.marginLeft;
        mMarginLeftDn = mCfg.marginLeft + mCfg.horzTravel;
        mMarginRightUp  = mCfg.marginRight + mCfg.horzTravel;
        mMarginRightDn  = mCfg.marginRight;
        mMarginTopUp  = mCfg.marginTop;
        mMarginTopDn  = mCfg.marginTop + mCfg.vertTravel;
        mMarginBottomUp = mCfg.marginBottom + mCfg.vertTravel;
        mMarginBottomDn = mCfg.marginBottom;
        break;

      case 'S':
        mMarginLeftUp = mCfg.marginLeft;
        mMarginLeftDn = mCfg.marginLeft;
        mMarginRightUp  = mCfg.marginRight;
        mMarginRightDn  = mCfg.marginRight;
        mMarginTopUp  = mCfg.marginTop;
        mMarginTopDn  = mCfg.marginTop + mCfg.vertTravel;
        mMarginBottomUp = mCfg.marginBottom + mCfg.vertTravel;
        mMarginBottomDn = mCfg.marginBottom;
        break;

      case 'SW':
        mMarginLeftUp = mCfg.marginLeft + mCfg.horzTravel;
        mMarginLeftDn = mCfg.marginLeft;
        mMarginRightUp  = mCfg.marginRight;
        mMarginRightDn  = mCfg.marginRight + mCfg.horzTravel;
        mMarginTopUp  = mCfg.marginTop;
        mMarginTopDn  = mCfg.marginTop + mCfg.vertTravel;
        mMarginBottomUp = mCfg.marginBottom + mCfg.vertTravel;
        mMarginBottomDn = mCfg.marginBottom;
        break;

      case 'W':
        mMarginLeftUp = mCfg.marginLeft + mCfg.horzTravel;
        mMarginLeftDn = mCfg.marginLeft;
        mMarginRightUp  = mCfg.marginRight;
        mMarginRightDn  = mCfg.marginRight + mCfg.horzTravel;
        mMarginTopUp  = mCfg.marginTop;
        mMarginTopDn  = mCfg.marginTop;
        mMarginBottomUp = mCfg.marginBottom;
        mMarginBottomDn = mCfg.marginBottom;
        break;
      case 'NW':
        mMarginLeftUp = mCfg.marginLeft + mCfg.horzTravel;
        mMarginLeftDn = mCfg.marginLeft;
        mMarginRightUp  = mCfg.marginRight;
        mMarginRightDn  = mCfg.marginRight + mCfg.horzTravel;
        mMarginTopUp  = mCfg.marginTop + mCfg.vertTravel;
        mMarginTopDn  = mCfg.marginTop;
        mMarginBottomUp = mCfg.marginBottom;
        mMarginBottomDn = mCfg.marginBottom + mCfg.vertTravel;
        break;

      case false:
      default:
        mMarginLeftUp = mCfg.marginLeft;
        mMarginLeftDn = mCfg.marginLeft;
        mMarginRightUp  = mCfg.marginRight;
        mMarginRightDn  = mCfg.marginRight;
        mMarginTopUp  = mCfg.marginTop;
        mMarginTopDn  = mCfg.marginTop;
        mMarginBottomUp = mCfg.marginBottom;
        mMarginBottomDn = mCfg.marginBottom;
        break;
    }


    mCfg.width =        mCfg.width ||       null;
    mCfg.height =         mCfg.height ||      null;
    mCfg.paddingLeft =      mCfg.paddingLeft ||   '12px';
    mCfg.paddingTop =     mCfg.paddingTop ||    '0px';
    mCfg.paddingRight =     mCfg.paddingRight ||  '12px';
    mCfg.paddingBottom =    mCfg.paddingBottom || '0px';

    mCfg.extStyle =       mCfg.extStyle ||    '';

    if (mCfg.animatePress) {
      mMouseupFunc = ['(function(){',
                      'style.margin = {', mMarginTopUp, ' ', mMarginLeftUp, ' ', mMarginBottomUp, ' ', mMarginRightUp, '}',
        //'{style.marginTop=', mMarginTopUp,'px}',
        //'{style.marginLeft=', mMarginLeftUp,'px}',
        //'{style.marginBottom=', mMarginBottomUp,'px}',
        //'{style.marginRight=', mMarginRightUp,'px}',
      '})(); '].join('');
      mMousedownFunc = ['(function(){',
                        'style.margin = {', mMarginTopDn, ' ', mMarginLeftDn, ' ', mMarginBottomDn, ' ', mMarginRightDn, '}',
        //'{style.marginTop', mMarginTopDn,'px}',
        //'{style.marginLeft=', mMarginLeftDn,'px}',
        //'{style.marginBottom=', mMarginBottomDn,'px}',
        //'{style.marginRight=', mMarginRightDn,'px}',
      '})(); '].join('');
    }
    else {
      mMouseupFunc = null;
      mMousedownFunc = null;
    }

    mInitialized = true;
  }

  /*
  function onClick() {
    eval(mCfg.onClickHandler);
  }

  function onKeypress(event) {
    eval(mCfg.onKeypressHandler);
  }
  */

  function onMousedown() {
    if (mCfg.animatePress) {
      this.style.marginTop = mMarginTopDn + 'px';
      this.style.marginLeft = mMarginLeftDn + 'px';
      this.style.marginBottom = mMarginBottomDn + 'px';
      this.style.marginRight = mMarginRightDn + 'px';
    }
  }

  function onMouseup() {
    if (mCfg.animatePress) {
      this.style.marginTop = mMarginTopUp + 'px';
      this.style.marginLeft = mMarginLeftUp + 'px';
      this.style.marginBottom = mMarginBottomUp + 'px';
      this.style.marginRight = mMarginRightUp + 'px';
    }
  }

  function update() {

    var elem =  document.getElementById(mCfg.id);

    // set attributes
    elem.onclick = mCfg.enabled ? mCfg.onClickHandler : null;
    //buttonElem.onkeypress = mCfg.enabled ? onKeypress : null;
    elem.onmouseup = mCfg.enabled ? onMouseup : null;
    elem.onmousedown = mCfg.enabled ? onMousedown : null;

    //elem.tabIndex = mCfg.enabled && mCfg.tabIndex != null ? mCfg.tabIndex : -1;

    // set style
    elem.style.cursor = mCfg.enabled ? 'pointer' : 'default';

    elem.style.filter = mCfg.enabled ? 'alpha(opacity=100)' : 'alpha(opacity=30)'; // IE's opacity
      elem.style.opacity = mCfg.enabled ? '1.0' : '0.30'; // Firefox's opacity
  }

  function createHtml() {
    var allArray = new Array(0);

    allArray.push('<img id="');
    allArray.push(mCfg.id);
    allArray.push('" ');

    /*
    if (mCfg.enabled && mCfg.tabIndex) {
      allArray.push(' tabIndex=');
      allArray.push(mCfg.tabIndex);
    }
    */

    if (mCfg.enabled && mCfg.onClickHandler) {
      allArray.push([' onclick="',mCfg.onClickHandler, '" '].join(''));
    }

    /*
    if (mCfg.enabled && mCfg.onKeypressHandler) {
      allArray.push([' onkeypress="',mCfg.onKeypressHandler, '" '].join(''));
    }
    */

    if (mCfg.enabled ) {
      if (mCfg.animatePress == true) {
        allArray.push(' onmousedown='+mMousedownFunc);
        allArray.push(' onmouseup='+mMouseupFunc);
        allArray.push(' ');
      }
    }

    allArray.push(' src= "');
    allArray.push(mCfg.enabledImageUrl);
    allArray.push('"');

    var eStyle = new Array(0);
    eStyle.push(' style="');
    eStyle.push('cursor:', mCfg.enabled ? 'pointer' : 'default', '; ');
    eStyle.push('margin-left:', mMarginLeftUp,'; margin-top:',mMarginTopUp,'; margin-right:', mMarginRightUp, '; margin-bottom:', mMarginBottomUp, ';');

    if (!mCfg.enabled) {
      if (siras.env.getBrowser() === 'IE') {
        eStyle.push('filter:alpha(opacity=30);'); //IE's opacity
      }
      else {
          eStyle.push('opacity: 0.30'); // Firefox's opacity
      }
    }

    eStyle.push(mCfg.extStyle);
    eStyle.push('" ');

    allArray.push(eStyle.join(''));
    allArray.push('>');
    //allArray.push('</span>');

    mHtml = allArray.join('');
  }

  return {
    initialize : function(config) {
      configure(config);
    },
    getId : function() {
      if (initialized()) {
        return mCfg.mId;
      }
    },
    getHtml : function() {
      if (initialized()) {
        createHtml();
        return mHtml;
      }
    },
    setEnabled : function(enable) {
      if (initialized()) {
        mCfg.enabled = enable;
        update();
      }
    },
    isEnabled : function() {
      if (initialized()) {
        return mCfg.enabled;
      }
    },
    setOnClickHandler : function(func) {
      mCfg.onClickHandler = func;
    }
  }
}
