 function getSpinnerHTML (swidth, sheight, styling) {

  if (!swidth) swidth = 85;
  if (!sheight) sheight = 85;

  spinner = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" width="'+swidth+'" height="'+sheight+'" wmode="transparent" style="'+styling+'"> <param name="movie" value="/v2008/moliSpinner08.swf"> <param name="quality" value="high"> <param name="wmode" value="transparent"> <param name="loop" value="true"> <embed src="/v2008/moliSpinner08.swf" quality="high" bgcolor="#FFFFFF" wmode="transparent" width="'+swidth+'" height="'+sheight+'" loop="true" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"> </embed> </object>';

  return spinner;

}

function setWaiterGen(waiter_id,content_id,width, height){

  if (!width) width = 125;

  if (!height) height = 125;

  var waiter = $(waiter_id);

  waiter.innerHTML = getSpinnerHTML(width, height);

  var ypos = parseInt($(content_id).offsetTop + ( $(content_id).offsetHeight - height )/2);

  waiter.style.top = ypos+"px";

  waiter.style.visibility='visible';

}

function sendFeedback ( ) {

  setWaiter('feedback_div');

  setWaiterGen('feedback_div_waiter','feedback_div');

  var params = "post_name=" + urlencode($('post_name').value) + '&post_email=' + urlencode($('post_email').value) + '&post_comment=' + urlencode($('post_comment').value);

  var url = '/v2008/feedback.php';

  jQuery.post(url,{ 
    post_name : $('post_name').value, 
    post_email : $('post_email').value,
    post_comment : $('post_comment').value 
  }, function ( data ) {

    $('feedback_div').innerHTML = data;

  } );

  setTimeout("clearWaiter('feedback_div')",1000);

}

function reloadFeedback ( page ) {

  if ( page < 1 ) {

    page = 1;

  }

  setWaiter('feedback_div');

  setWaiterGen('feedback_div_waiter','feedback_div');

  var url = '/v2008/feedback.php';

  jQuery.post(url,{

    page : page

  }, function ( data ) {

    $('feedback_div').innerHTML = data;

  } );

  setTimeout("clearWaiter('feedback_div')",1000);

}

function setWaiter ( id ) {

  $(id).setAttribute('class','halfopaque');

}

function clearWaiter ( id ) {

  $(id).setAttribute('class','');

  $(id+'_waiter').style.visibility = 'hidden';

}

function opacityGlide(id, opacStart, opacEnd, millisec) {

    //speed for each frame
    var speed = Math.round(millisec / 100);
    var timer = 0;

    //determine the direction for the blending, if start and end are the same nothing happens
    if(opacStart > opacEnd) {
        for(i = opacStart; i >= opacEnd; i--) {
            setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed));
            timer++;
        }
    } else if(opacStart < opacEnd) {
        for(i = opacStart; i <= opacEnd; i++)
            {
            setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed));
            timer++;
        }
    }

}
//change the opacity for different browsers
function changeOpac(opacity, id) {

    if ($(id).style.display == 'none'){
      $(id).style.display = 'block';
    }

    var object = document.getElementById(id).style;
    object.opacity = (opacity / 100);
    object.MozOpacity = (opacity / 100);
    object.KhtmlOpacity = (opacity / 100);
    object.filter = "alpha(opacity=" + opacity + ")";
}

function smoothShow ( id ) {

  opacityGlide( id, 0, 100, 1000 );

}

function smoothHide( id, opacity, showBody ){

  var newClass = ' ' + opacity + 'op';

  opacityGlide( id, 100, 0, 1000 );

  setTimeout('doHide(\''+id+'\',\''+showBody+'\')', 3005);

}

function doHide( id, showBody ) {

  $(id).style.display = 'none';

  if ( showBody ) {

    $('body').style.display = 'block';

  }

}


function $( id ) {

  return document.getElementById( id );

}

function show_balloon(X,Y,url,params, offset_x, offset_y, flyoutsize, contentElementID,fullscreen){

    if ( $('reports_form_extras') ) {
    
      $('reports_form_extras').style.display='none';

    }

    //evalFlyoutList( 'show' ); // NEW FUNCTION  
    
    var balloon = $("DESC_POPUP");

    var pagewidth = $('wrapper').offsetWidth + $('wrapper').offsetLeft;

    var crossoverWidth = Math.round( ($('wrapper').offsetWidth/7*4) + $('wrapper').offsetLeft);
    
    params = 'eventX='+X+'&eventY='+Y+'&'+params;  // pass position for a second flyout like friends request when trying to leave a comment.
    
    params = 'eventX='+X+'&eventY='+Y+'&'+params;  // pass position for a second flyout like friends request when trying to leave a comment.

    if( ! flyoutsize ) flyoutsize = 500;    
    
    // Set the pixel offset between left and right column

    pic_offset_X = (X < crossoverWidth )? -35 : -1*(flyoutsize-90) ;

    pic_offset_Y = 5;                

    if ( fullscreen ) {

      pic_offset_X = 0;

      pic_ofsset_Y = -20;

    }

    // get the scrolling off sets

    MA = getScrollXY();

    // This has to be tested before final X calc, or offset causes error.
    balloon.style.backgroundPosition = (X < crossoverWidth )? "20px 0" : flyoutsize-105+"px 0";

    balloon.style.width = flyoutsize + "px";

    balloon.style.display='block';

    if ( fullscreen ) {

      balloon.style.backgroundImage = 'none';

    } else {

      balloon.style.backgroundImage = 'url(images/bg_popup_triangle.png)';

    }

    // calculate final
    Y = Y + pic_offset_Y + MA[1];

    X = X + pic_offset_X + MA[0];
    
    if ( offset_x > 0 ) X = X + offset_x;

    if ( offset_y > 0 ) Y = Y + offset_y;
    
    // Move the Ballon to the new mouse coords

    balloon.style.top = Y + 'px';

    balloon.style.left = X + 'px' ;

    if ( fullscreen ) {

      flyoutsize = flyoutsize - 2;

    }

    balloon.innerHTML='<div id="loading_balloon" style="width:'+flyoutsize+'px">' + 'Please wait'  + '...</div>';

    if ( fullscreen ) {

      $('body').style.display='none';

    }

    appear();

    // Make the ajax request
    if ( url.length ) {

      var myAjax = new Ajax.Updater("DESC_POPUP", url, { evalScripts:true,method:'post',onSuccess:'appear',postBody: params });
 
    } else if (contentElementID) {

      if ( fullscreen ) {

        $('DESC_POPUP').style.paddingTop = winH / 2 - 100 + 'px';

        $('DESC_POPUP').innerHTML = $(contentElementID).innerHTML;

      } else {

        $('DESC_POPUP').style.paddingTop = '0px';

        $('DESC_POPUP').innerHTML = '<div id="tool_settings_bg"><div id="tool_settings" style="width:'+flyoutsize+'px" class="settings_popup '+contentElementID+'">'+$(contentElementID).innerHTML+'<br /><br /><div align="center">[<a href="javascript:void(null);" onclick="hide_balloon(true);">close</a>]</div></div></div>';

      }


    }

}

function appear(objID, time) {

  var params = 1.0;

  if (!objID) objID = 'DESC_POPUP';

  if (time) params = parseFloat(time);

  //new Effect.Appear(objID, { duration: params });

  //new Effect.Fade(objID, { from: 0.0, to: 1.0, duration: params });

  //smoothShow('DESC_POPUP');

  $('DESC_POPUP').style.display = 'block';

}

function fadeout(objID) {
  if (!objID) objID = 'DESC_POPUP';
  new Effect.Fade(objID, { from: 0.5, to: 0.0 });
}

function hide_balloon(fade,shrink) {

  if ( fade ) {

    $('body').style.display = 'block';

    if ( shrink > 0 ) {

      $('DESC_POPUP').style.width = winW-shrink+'px';

    }

    //smoothHide('DESC_POPUP',0);

    $('DESC_POPUP').style.display = 'none';

  } else {

    evalFlyoutList('hide'); // NEW FUNCTION
    $('DESC_POPUP').innerHTML = '';
    $('DESC_POPUP').style.display = "none";
    if ( $('reports_form_extras') ) {
      $('reports_form_extras').style.display='block';
    }
    $('body').style.display='block';

  }



}

var globalFlyoutID; 
var globalFlyoutList = new Array();

function addToFlyoutList(param1, param2, param3) {
  this.flyout = param1;
  this.state = param2;
  this.call = param3;
  globalFlyoutList.push(this);
}

function evalFlyoutList (currentstate) {
  for(i=0;i < globalFlyoutList.length; i++ ) {
    obj = globalFlyoutList[i];
    if ( obj.flyout == globalFlyoutID && obj.state.indexOf(currentstate) > -1 ) {
      eval(obj.call);
    }
  };
}
function getScrollXY() {

  var scrOfX = 0, scrOfY = 0;

  if( typeof( window.pageYOffset ) == 'number' ) {

    if (browser_type == "Safari"){

                // Safari
                scrOfY = 0;
                scrOfX = 0;

            }else{

                // Netscape
                scrOfY = window.pageYOffset;
                scrOfX = window.pageXOffset;
            }


          } else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {

            // DOM compliant
            scrOfY = document.body.scrollTop;
            scrOfX = document.body.scrollLeft;

          } else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {

            // IE6 standards compliant mode
            scrOfY = document.documentElement.scrollTop;
            scrOfX = document.documentElement.scrollLeft;

          }

          return [ scrOfX, scrOfY ];

}

function getBrowserType(){

  var browser_id;

  if (document.all && window.XMLHttpRequest) {

     browser_id = "IE 7";

  } else if (document.all && !window.XMLHttpRequest) {

     browser_id = "IE6";

  } else {

    if (typeof addEventListener != "undefined" && typeof stop == "undefined") {

      browser_id = "Safari 2";

    } else if (!crypto) {

      browser_id = "Safari 3";

    } else {

        browser_id = "NN";
    }

  return(browser_id);

  }

}

function getCheckedValue(radioObj) {
  if(!radioObj)
    return "";
  var radioLength = radioObj.length;
  if(radioLength == undefined)
    if(radioObj.checked)
      return radioObj.value;
    else
      return "";
  for(var i = 0; i < radioLength; i++) {
    if(radioObj[i].checked) {
      return radioObj[i].value;
    }
  }
  return "";
}

function setCheckedValue(radioObj, newValue) {
  if(!radioObj)
    return;
  var radioLength = radioObj.length;
  if(radioLength == undefined) {
    radioObj.checked = (radioObj.value == newValue.toString());
    return;
  }
  for(var i = 0; i < radioLength; i++) {
    radioObj[i].checked = false;
    if(radioObj[i].value == newValue.toString()) {
      radioObj[i].checked = true;
    }
  }
}

function saveFeedback ( url ) {

  params = "sentiment=" + $('fb_sentiment').value + "&relevance=" + $('fb_relevance').value + "&influence=" + $('fb_influence').value + "&reason=" + $('fb_reason').value;

  if ( $('fb_false_positive').checked ) {

    params += "&false_positive=true";

  }
  
  var ajaxobj = new Ajax.Request (
          url,
          {
              method: 'post',
              asynchronous: false,
              parameters: params,
              onComplete: saveFeedbackComplete
          }
    )

}

function saveFeedbackComplete ( obj ) {

  show_balloon(parseInt($('mouse_click_x').value),parseInt($('mouse_click_y').value),'/a/ajax//feedback_complete/');

}


function saveNotification ( url ) {

  params = "format=" + $('format').value+"&send_to="+$('send_to').value;

  if ( $('daily_summary').checked ) {

    params+= "&daily_summary=true";

  }

  if ( $('weekly_summary').checked ) {

    params+= "&weekly_summary=true";

  }

  if ( $('monthly_summary').checked ) {

    params+= "&monthly_summary=true";

  }

  if ( $('realtime').checked ) {

    params+= "&realtime=true&speaker_influence=" + $('speaker_influence').value + "&relevance=" + $('relevance').value + "&sentiment=" + getCheckedValue(document.forms['email_report'].elements['sentiment']) + "&send_to_realtime=" + $('send_to_realtime').value;

  }

  var ajaxobj = new Ajax.Request (
          url,
          {
              method: 'post',
              asynchronous: false,
              parameters: params,
              onComplete: saveNotificationComplete
          }
    )

}

function saveNotificationComplete ( obj ) {

  show_balloon(parseInt($('mouse_click_x').value),parseInt($('mouse_click_y').value),'/a/ajax//save_complete/');

}

function checkNotification ( url ) {

 params = "email_csv=" + $('send_to').value + "&email_csv2=" + $('send_to_realtime').value;

  var ajaxobj = new Ajax.Request (
          url,
          {
              method: 'post',
              asynchronous: false,
              parameters: params,
              onComplete: checkNotificationComplete
          }
    )


}

function checkNotificationComplete ( obj ) {

  
  if ( obj.responseText.indexOf('[0001]') == -1 ) {

    alert(obj.responseText);

    return false;

  }

  $('save_email_report').value='true';

  saveNotification($('save_email_report_url').value);

}

function urlencode(str) {
return escape(str).replace('+', '%2B').replace('%20', '+').replace('*', '%2A').replace('/', '%2F').replace('@', '%40');
}

function urldecode(str) {
return unescape(str.replace('+', ' '));
}

function checkRSSURL ( url, urlRSS ) {

  params = "url=" + urlencode(urlRSS);

  var passed = false;

  var ajaxobj = new Ajax.Request (
          url,
          {
              method: 'post',
              asynchronous: false,
              parameters: params,
              onComplete: function (obj) {

                if ( obj.responseText.indexOf('[0001]') == -1 ) {

                  passed = false;

                } else { passed = true; }


              }
          }
    )

  return passed;

}

function mentionFeedback ( url, id ) {


  params = "citation_id=" + id;

  var ajaxobj = new Ajax.Request (
          url,
          {
              method: 'post',
              asynchronous: false,
              parameters: params,
              onComplete: mentionFeedbackComplete
          }
    )


}

function mentionFeedbackComplete ( ) {

  show_balloon(parseInt($('mouse_click_x').value),parseInt($('mouse_click_y').value),'/a/ajax//feedback_complete/');

}

function sendContactForm ( url ) {

  params = "contact_name=" + escape ( $('contact_name').value ) + "&contact_email=" + escape ( $('contact_email').value ) + "&contact_category=" + escape ( $('contact_category').value ) + "&contact_msg=" + $('contact_msg').value;

  var ajaxobj = new Ajax.Request (
          url,
          {
              method: 'post',
              asynchronous: false,
              parameters: params,
              onComplete: sendContactComplete
          }
    )

}

function sendContactComplete ( obj ) {

  show_balloon(parseInt($('mouse_click_x').value),parseInt($('mouse_click_y').value),'/a/ajax//save_complete/');

}


function checkContactForm ( err1, err2, err3, err4 ) {

  if ( $('contact_name').value.length < 3 ) {

    alert(err1);

    return false;

  }

  if ( $('contact_email').value.length < 5 ) {

    alert(err2);

    return false;

  }

  if ( $('contact_category').value == "0" ) {

    alert(err3);

    return false;

  }

  if ( $('contact_msg').value.length < 5 ) {

    alert(err4);

    return false;

  }

  return true;

}

    function checkFormWithLabels(id,errMsg){

      var errors = Array();

      var error_counter = 0;

      var inputFields = $(id).getElementsByTagName('input');

      var textFields = $(id).getElementsByTagName('textarea');

      if ( textFields.length > 0 ) {

      }

      var inputLabels = $(id).getElementsByTagName('label');

      for ( var i = 0; i < inputFields.length ; ++i ) {

        var fieldType = inputFields[i].getAttribute('type');

        switch ( fieldType ) {

          case 'text','':

          if ( inputFields[i].value.length < 1 && inputLabels[i].offsetWidth > 0 ) {

            errors[error_counter] = inputLabels[i].innerHTML;

            ++error_counter;

          }

          break;

        }

      }

      if ( errors.length == 0 ) { return true; } else {

        var strError = '';

        for (j=0;j<errors.length;++j){

          strError += '\\n'+errors[j];

          strError = strError.substr(0,strError.length-1);

        }

        alert(errMsg + '\\n' + strError);

        return false;

      }

    }

    
    function getFormContents ( id ) {

      var keys = new Array();

      var values = new Array();

      var inputFields = $(id).getElementsByTagName('input');

      var textFields = $(id).getElementsByTagName('textarea');

      if ( textFields.length > 0 ) {

      }

      for ( var i = 0; i < inputFields.length ; ++i ) {

        var fieldType = inputFields[i].getAttribute('type');

        var fieldName = inputFields[i].getAttribute('name');

        switch ( fieldType ) {

          case 'text','':

          if ( inputFields[i].value.length > 1 && inputFields[i].offsetWidth > 0 ) {

            keys[counter] = fieldName;

            values[counter] = inputFields[i].value;

            ++counter;

          }

          break;

        }

      }

      return [keys,values];

    }

function selAll(form, name, triggerObj, state) {

  var el = form.elements;

  for (i = 0; i < el.length; i++){

    var splits = new Array();

    var elname = el.item(i).name;
    if(elname) {
      splits = elname.split('[');
  
      elname = splits[0];
  
      if (!name || (name && elname == name)){
  
        if(state != null){

          el.item(i).checked = state;
        
        } else if (triggerObj){ 
      
          el.item(i).checked = triggerObj.checked;
  
        } else { 
    
          if (!el.item(i).checked)  el.item(i).checked = true;
          
          else  el.item(i).checked = false;
      
        }
      }
    }
    
  }

}

function flipDisp(e, dispStyle){

        if (!dispStyle) dispStyle = 'block';

        var currvisi;

        var thise = document.getElementById(e);

        currvisi = thise.style.display;


        if (currvisi != 'none')
          newvisi = 'none';
        else
          newvisi = dispStyle;


        document.getElementById(e).style.display = newvisi;

}

function isdefined( variable)
{
    return (typeof(window[variable]) == "undefined")?  false: true;
}

function checkEnter(e){ //e is event object passed from function invocation
        var characterCode; //literal character code will be stored in this variable

        if(e && e.which){ //if which property of event object is supported (NN4)
                e = e;
                characterCode = e.which; //character code is contained in NN4's which property
        }
        else{

              if ( !isdefined('event') ) {

                return false;

              }
              
                e = event;
                characterCode = e.keyCode; //character code is contained in IE's keyCode property
        }

        if(characterCode == 13){ //if generated character code is equal to ascii 13 (if enter key)
                //document.forms[0].submit(); //submit the form
                return true;
        }
        else{
                return false;
        }

}
