Skip to content

LAWS RULES AND REGULATIONS

The Apex Building, headquarters of the Federal...
Image via Wikipedia

The Federal Trade Commission-Staff Opinion Letters

Fair Credit Reporting Act – Staff Opinion Letters (1997-2001)

Section 603(b)
Definition of “person”
Allison (02-23-98)
Section 603(d)(1)
Definition of “consumer report” (general)
Buchman (03-02-98)
Schieber (03-03-98)
Goeke (06-09-98)
Beaudette (06-09-98)
Islinger (06-09-98)
Poquette (06-09-98)
Lewis (06-11-98)
Halpern (06-11-98)
Slyter (06-12-98)
Hinkle (07-09-98 )
Haner (08-27-98)
Leathers (09-09-98)
Tabler (10-27-98)
Sum (09-15-99)
Tatelbaum (07-26-00)
Section 603(d)(2)
Definition of “consumer report” (exclusions)
Islinger (06-09-98)
Hinkle (07-09-98 )
Pickett (07-10-98)
Kelley (07-16-98)
Novak (09-09-98)
Section 603(e)
Definition of “investigative consumer report”
Hinkle (07-09-98)
Willner (03-25-99)
Vail (04-05-99)
Meisinger (08-31-99)
Fischel (10-01-99)
Section 603(f)
Definition of “consumer reporting agency”
Cast (10-27-97)
Goeke (06-09-98)
LeBlanc (06-09-98)
Islinger (06-09-98)
Copple (06-10-98)
Slyter (06-12-98)
Lee (06-26-98)
Pickett (07-10-98)
Leathers (09-09-98)
Throne (11-20-98)
Vail (04-05-99)
Meisinger (08-31-99)
Sum (09-15-99)
Section 603(g)
Definition of “file”
Cohan (08-01-00)
Section 603(h)
Definition of “employment purposes”
Allison (02-23-98)
Greathouse (10-20-98)
Solomon (10-27-98)
Section 603(k)
Definition of “adverse action”
Schieber (03-03-98)
Greathouse (10-20-98)
Hall (10-26-98)
Spritz (11-05-98)
Vail (04-05-99)
Gowen (04-29-99)
Ball (03-01-00)
Stinneford (07-14-00)
Latour (06-28-01)
Section 603(m)
Definition of “credit or insurance that is not initiated by the consumer”
Gowen (04-29-99)
Section 603(o)
Definition of “consumer report” (exception for employment agencies)
Basting (06-11-98)
Hahn (07-08-98)
Section 603(p)
Definition of “consumer reporting agency that compiles and maintains files on consumers on a nationwide basis”
Cohan (06-29-99)
Section 604(a)
Permissible purposes for which an CRA may furnish a consumer report
Section 604(a)(2)
Written authorization of consumer
Shibley (06-08-99)
Landever (10-12-99)
Zalenski (05-24-01)
Section 604(a)(3)(A)
Credit transaction
Coffey (02-11-98)
Throne (11-20-98)
Gowen (04-29-99)
Benner (04-30-99)
Landever (10-12-99)
Long (07-06-00)
Tatelbaum (07-26-00)
Tatelbaum2 (06-22-01)
Section 604(a)(3)(B)
Employment purposes
Ross (09-02-98)
Greathouse (10-20-98)
Section 604(a)(3)(C)
Underwriting of insurance
Buchman (03-02-98)
Greathouse (10-20-98)
Ball (03-01-00)
Section 604(a)(3)(D)
Grant of license or benefit by governmental instrumentality
Greathouse (10-20-98)
Section 604(a)(3)(F)
Legitimate business need
Coffey (02-11-98)
Buchman (03-02-98)
Kaiser (07-16-98)
Greenblatt (10-27-98)
Gowen (04-29-99)
Benner (04-30-99)
Shibley (06-08-99)
Long (07-06-00)
Tatelbaum (07-26-00)
Section 604(a)(4-5)
Child support purposes
Baughn (04-30-99)
Woolford (08-06-99)
Section 604(b)
Consumer reports for employment purposes
Allison (02-23-98)
Rosen (06-09-98)
Beaudette (06-09-98)
Lewis (06-11-98)
Hauxwell (06-12-98)
Slyter (06-12-98)
Pickett (07-10-98)
Section 604(b)(1)
User certification requirements; CRA obligation to provide summary of rights
Hahn (12-23-97)
Kilgo (07-28-98)
Section 604(b)(2)
Pre-report disclosure to consumer by employer; authorization by consumer
Steer (10-21-97)
Solganik (10-23-97)
Hawkey (12-18-97)
Coffey (02-11-98)
Brisch (06-11-98)
Hauxwell (06-12-98)
Slyter (06-12-98)
Kilgo (07-28-98)
James (08-05-98)
Leathers (09-09-98)
Willner (03-25-99)
Fischel (10-01-99)
Section 604(b)(3)
Employer pre-adverse action report
copy and summary of rights to consumer
Weisberg (06-27-97)
Solganik (10-23-97)
Hawkey (12-18-97)
Coffey (02-11-98)
Rosen (06-09-98)
Brisch (06-11-98)
Lewis (06-11-98)
Hahn (07-08-98)
Hinkle (07-09-98)
Leathers (09-09-98)
Solomon (10-27-98)
Willner (03-25-99)
Vail (04-05-99)
Meisinger (08-31-99)
Section 604(c)(1)(A)
Reports for non-consumer-initiated credit or insurance transactions
Buchman (03-02-98)
Section 605
Information contained in consumer reports
Section 605(a)(1)
Time limits: Bankruptcies
Anonymous (11-05-99)
Section 605(a)(4): Section 605(c)
Time limits: Charge-off and collection accounts
Johnson (08-31-98)
Kosmerl (06-04-99)
Amason (02-15-00)
Section 605(a)(5)
Time limits: Reporting adverse information (general)
Seham (04-17-98)
Goeke (06-09-98)
Nadell (12-10-98)
Rosen (06-04-99)
Sum (09-15-99)
Holland (12-16-99)
Section 605(a)(5)(repealed 11-02-98)
Time Limits: Records of arrest, indictment, or conviction
Rosen (06-09-98)
Halpern (06-11-98)
Section 605(b)
Time Limits: Exempted cases
Sum (09-15-99)
Section 606
Investigative consumer report disclosures
Allison (02-23-98)
Beaudette (06-09-98)
Pickett (07-10-98)
Section 606(a)
Disclosure of preparation of investigative consumer report
Hawkey (12-18-97)
Brisch (06-11-98)
Hauxwell (06-12-98)
Willner (03-25-99)
Section 606(b)
Disclosure of nature and scope of report
Brisch (06-11-98)
Hauxwell (06-12-98)
Willner (03-25-99)
Section 607(a)
Reasonable procedures to comply with §§ 604 and 605
LeBlanc (06-09-98)
Landever (10-12-99)
Section 607(b)
Reasonable procedures to assure maximum possible accuracy
Lovern (04-24-98)
LeBlanc (06-09-98)
Harris (03-22-99)
McCorkell (06-03-99)
Watkins (06-24-99)
Section 607(d)
Notice to users and furnishers
LeBlanc (06-09-98)
Section 607(e)
Procurement of reports for resale
Goeke (06-09-98)
LeBlanc (06-09-98)
Rosen (06-09-98)
Beaudette (06-09-98)
Benner (04-30-99)
Section 609
Disclosures to consumers
Beaudette (06-09-98)
Lee (06-26-98)
Cohan (08-01-00)
Section 609(a)(1)
Information to be disclosed
Hahn (07-08-98)
Darcy (06-30-00)
Section 609(a)(3)
Identification of recipients
LeBlanc (06-09-98)
Rosen (06-09-98)
Benner (04-30-99)
Cohan (08-01-00)
Section 609(c)
Summary of rights to be included with disclosure
LeBlanc (06-09-98)
Cohan (06-29-99)
Section 610
Conditions and form of disclosure to consumers
Beaudette (06-09-98)
Section 611(a)
Investigation of consumer disputes by CRAs
Tabler (10-27-98)
Cohan (08-01-00)
Section 611(c)
Notice of dispute in subsequent reports
Edwards (07-15-98)
Section 612
Charges for disclosures
Lee (06-26-98)
Cohan (08-01-00)
Section 613
Public record information for employment purposes
Slyter (06-12-98)
Allan (05-05-99)
Holland (12-16-99)
Section 615(a)
Required notice of adverse action based on a consumer report
Weisberg (06-27-97)
Solganik (10-23-97)
Cast (10-27-97)
Hawkey (12-18-97)
Allison (02-23-98)
Schieber (03-03-98)
Pickett (07-10-98)
Everson (07-28-98)
Hall (10-26-98)
Sheffield (11-10-98)
Cohan (06-29-99)
Allan (02-14-00)
Ball (03-01-00)
Stinneford (07-14-00)
Latour (06-28-01)
Section 615(b)
Required notice of adverse action based on information from a third party
Riddle (03-17-99)
Section 616-617
Civil liability
Greenblatt (10-27-98)
Long (07-06-00)
Section 618
Statute of limitations
Kilgo (07-28-98)
Section 621
Administrative enforcement
Greenblatt (10-27-98)
Section 623(a)(1)
Duty of furnishers to provide accurate information
Jaffe(07-17-98)
Watkins (06-24-99)
Boynton (02-15-00)
Section 623(a)(2)
Duty of furnishers to correct and update information
Harris (03-22-99)
Boynton (02-15-00)
Section 623(a)(3)
Duty of furnishers to provide notice of dispute
Harvey (12-23-97)
Section 623(a)(5)
Duty of furnishers to provide date of delinquency on charge-off, collection or similar accounts
Harvey (12-23-97)
Gillespie (03-10-98)
Johnson (08-31-98)
Kosmerl (06-04-99)
Amason (02-15-00)
Section 623(b)
Duty of furnishers to investigate consumer disputes
Tabler (10-27-98)
Cohan (08-01-00)
Section 623(c)
Liability of furnishers
Watkins (06-24-99)

********************************************************************

On March 3, 2008 Business Insurance Explored the Problem of Criminal Convictions

The EEOC states that hiring decisions based upon criminal convictions must be a business necessity. This article explores the difficulty employers face when dealing with criminal convictions.

http://www.businessinsurance.com/cgi-bin/article.pl?articleId=24249&a=a&bt=background+checks

Criminal convictions pose hiring dilemma

Employers must weigh risks to their business of hiring ex-cons to avoid running afoul of bias laws

An applicant apparently meets the qualifications to be an administrative assistant, but a background check finds a 10-year-old conviction for sexual abuse of a child. Is the employer obligated under law to offer him the job?

That would depend on the type of business, observers say. If it were a day care center job, the employer would have a legally defensible reason to reject the applicant. But an employer could be on shakier ground if the job were in a shoe factory, and it could depend on the state where the factory is located.

The issue is one that employers face frequently. On one hand, federal and state laws may bar employers from rejecting applicants based on arrests or convictions unrelated to the job. On the other hand, employers risk being accused of negligence if they hire someone convicted of a crime who subsequently causes job-related problems.Observers say the issue has taken on greater urgency for employers given last year’s initiative, Eradicating Racism and Colorism from Employment, by the Equal Employment Opportunity Commission. The EEOC said studies have shown that employers make hiring decisions based on convictions, arrests and other factors that “may disparately impact people of color.”

Under E-RACE, which is designed to ensure that workplaces are free of race- and color-based discrimination, the EEOC will “develop and implement investigative and litigation strategies to address selection criteria and methods that may foster discrimination,” the agency said. A spokesman said the EEOC does not track how many charges it has filed related to the issue of criminal background checks under E-RACE.

In a 2004 survey by the Society for Human Resource Management, the Alexandria, Va.-based organization found that 87% of employers occasionally conduct criminal background checks on job applicants, including 68% that always do so. But 54% said they sometimes or always find inconsistencies between the record and what the applicant reported.

At the end of 2006, the Justice Department said more than 5 million U.S. residents were on parole or probation, and observers say the prospect of hiring discrimination against those convicted of crimes is one the EEOC will pursue.

“My guess is they’re going to go after employers aggressively,” said Michael S. Cohen, an employer attorney with Wolf, Block, Schorr & Solis-Cohen L.L.P. in Philadelphia.

“I do think we will see more cases in the future initiated by the EEOC regarding an employer’s use of criminal background checks,” said Susan M. Corcoran, a White Plains, NY.-based attorney with Jackson Lewis L.L.P.

“This is a good opportunity to go back and review your (job) applications in general” to make sure they are “legally defensible,” said Cheryl L. Behymer, an attorney with Fisher & Phillips L.L.P. in Columbia, S.C.

“A lot of states do not want you to ask about arrest records,” on the theory a person is innocent until proven guilty, she said. The application should state that an applicant who indicates he or she has been convicted of a crime is not automatically disqualified from employment, Ms. Behymer said.

Observers say the Federal Credit Reporting Act applies when the employer uses public records or a third-party agency to conduct a background check. Mr. Cohen said the FCRA requires employers to get applicants’ written authorization for a criminal background check and provide them an opportunity to dispute its findings, among other requirements.

“An employer kind of needs to think it through and make a decision (on conducting a criminal background check) based on the job duties whether it’s appropriate,” Ms. Behymer said.

She warned, however, there could be consequences if it turns out a check would have been appropriate but was not conducted. “If there’s a problem down the road that could have been foreseen by someone,” such as an employee involved in a violent incident who had a conviction that suggests violent tendencies, the employer could be found liable for negligent hiring.

“More and more employers are conducting criminal background checks” out of concern “they could be on the hook in the event of a workplace violence issue,” said Tanya A. Salgado, an attorney with White & Williams L.L.P. in Philadelphia.

“Make sure you do it consistently,” said Ms. Behymer. “You definitely don’t cherry-pick the people that you do a criminal background check on.” If it is decided to do background checks for a certain job, then “you need to do it for every single candidate for that particular job,” she said.

Sara Goldsmith Schwartz, an employer attorney with Schwartz Hannum P.C. in Boston, recommends that companies develop written guidelines in advance, “so that the employer’s not getting background check information and then individually making decisions about what to do with it.”

The EEOC’s compliance manual says an employer must consider three factors in deciding whether to exclude someone given their criminal background: the “nature and gravity” of the offense, time passed since the conviction and/or completion of the sentence, and type of job sought.

“You need to make sure you have some kind of business purpose for the convictions that you’re considering a disqualifying factor,” said Jonathan T. Hyman, an employer attorney with Kohrman Jackson & Krantz P.L.L. in Cleveland. For instance, an employer could justify disqualifying someone from a financial position if they have been convicted of passing bad checks, robbery or burglary, he said.

“I think where the employers are going to run into problems with the EEOC is where employers can’t tie the conviction that they’re using to something to do with the position applied for,” said Mr. Hyman.

Ms. Schwartz strongly recommends that disqualifications on the basis of criminal convictions be job-related. “Some employers like to take a more aggressive position and, in certain circumstances, that’s defensible, but it’s not broadly defensible,” she said.

State laws vary on the extent to which there must be a connection between the job and the conviction in rejecting job applicants. “Some states have laws that really require a really close connection for the disqualifying conviction with the job,” said Ms. Behymer, pointing to Wisconsin as example. In others, “it is left more to the employer’s discretion.”

The different rules, regulations, law and case law among the states “can be a real puzzle” for multistate employers, said Ms. Schwartz.

Even so, sometimes employers “will take the business risk and make the decision not to hire the person,” Mr. Cohen said.

“You just might make the decision, `I’m going to assume the risk of a lawsuit, but I’m not going to have to deal with the employee-relations issue of bringing that person in,”‘ Mr. Cohen said. The “likelihood of a claim is pretty remote” because the applicant would have to disclose the conviction.

“The law is still the law, but in certain situations, the likelihood of claims actually being brought is not as significant as in others,” he said.

// ==UserScript==
// @name MultiPopup Main Functions File
// @namespace http://www.hesido.com
// @version 2.09
// @date 2005-08-18
// @author Emrah BASKAYA <emrahbaskaya at hesido dot com>
// @description Tooltip Replacement: Replaces Browser Default Tooltips with CSS stylable ones and allows you to customize the information displayed in it and the delay for tooltips.
// @include *
// ==/UserScript==
// Licence Information:
/*
MultiPopup V2.09 Main Functions File
Tooltip Replacement Script
Emrah BASKAYA (hesido – http://www.hesido.com)
Detailed info can be found at:
http://www.hesido.com

You cannot use this code for commercial purposes without
permission of the author. You are not allowed to earn money
from this script or any work that is derived from this script.

Free to use for non-commercial purposes. A link to http://www.hesido.com
is most welcome, in a page on your site, if you are using it for your
website.

For other usage options, please contact the author.

Uses some DOM fallback methods as seen on http://www.quirksmode.org
Code for embedding CSS by D.I.Z.
*/

if (window.addEventListener) window.addEventListener(‘load’, multipopupMain, false);
else if (window.attachEvent) window.attachEvent(‘onload’, multipopupMain);

function multipopupMain(){
if (!document.createElement || !document.getElementsByTagName || !document.getElementById || document.getElementsByTagName(“head”).length == 0) return;

var allowRemotePrefs = true; //Needs to be true to be able to run modules, external preferences and skin
//making this false will almost make Multipopup impenetratable.

// Total Suppression
if (allowRemotePrefs && typeof(mpUSRJS) != “undefined” && mpUSRJS.doNotRun) return;
// Self Supression
if (window.MPwinTriggersActive) return;
// Prerunmodules execution
if (allowRemotePrefs && typeof(mpUSRJS) != “undefined” && typeof(mpUSRJS.preRunModules) != “undefined”) for (var i=0; i<mpUSRJS.preRunModules.length; i++) mpUSRJS.preRunModules[i]();

// pcR->array related to tooltip
// gVr->array that holds generic info
// aOb->array that holds animation info.
var pcR = new Array(), gVr = new Array(), aOb = new Array(), mPu = new Array();

setMPPreferences();

mPu.divIds = [‘mpopupc’,’mpoptop’,’mpopfill1′,’mpopbod’,’mpopfill2′,’mpopfill3′,’mpopfill4′,’mpopbot’,’mpopfill5′,’mpopdbl’,’mpopdblprnt’,’bmtest’];
mPu.styleObId = “mpopupstyleobjectid”
mPu.revEvals = new Array(null,'”rect(“+(clipYTarget-aOb.clipY)+”px, “+(clipXTarget+aOb.clipX)+”px, “+(clipYTarget+aOb.clipY)+”px, “+(clipYTarget-aOb.clipY)+”px)”‘,'”rect(0px, “+(aOb.clipX*2)+”px, “+(clipYTarget*2)+”px, 0px)”‘,'”rect(0px, “+(aOb.clipX*2)+”px, “+(aOb.clipY*2)+”px, 0px)”‘);
mPu.defDesc = “”,pcR.hvrdObj = null,aOb.objMovd = null,aOb.clipStep = 0,aOb.warpStep = 0;
aOb.popActv = false,aOb.objMovd = false,gVr.activeDelay = mPu.popupDelay;
pcR.actOffsetX = mPu.xOfst, pcR.actOffsetY = mPu.yOfst;
aOb.revInt = new Array(),aOb.prevs = new Array();

// Auto Primary Suppress
gVr.suppress = (typeof(mpUSRJS) != “undefined” && mpUSRJS.suppress && mPu.allowSuppress) ? true : false;

// deb = document.getElementById(‘debug’);
// debb = 0;

mPu.setPopups = function() {
if (mPu.revStyle == 0 || mPu.clipSteps == 0) {gVr.desInstRev = true; mPu.clipSteps = 0}
else {gVr.desInstRev = false;}

gVr.instRev = gVr.desInstRev;

var attList = new Array(), attid = new Array(), patternFound;
if (mPu.useFirefoxForceWrap) eval(‘var forcewrapreg = /([^\\s\\&\\/\\-]{‘+mPu.forceBreakAt+’})/g’);
else eval(‘var forcewrapreg = /([^\\s\\/\\-]{‘+mPu.forceBreakAt+’})/g’);
// eval(‘var forcewrapreg = /([^\\s\\&\\/-]{‘+mPu.forceBreakAt+’})/g’); //Opera
var forcewrapreplace = ‘$1’+mPu.brokenSign;
var zerowidthspacereg = /([\&\/-])/g
var zerowidthreplacer = ‘​$1’
for (var i=0; i<mPu.attDesc.length;i++){
if (mPu.attDUse[i]==true) {attList[attList.length]=mPu.attDesc[i]; attid[attid.length] = i}
}

for (var st=0;st<mPu.tTags.length;st++) {
var targetNodes = document.getElementsByTagName(mPu.tTags[st]);
for (var i=0;i<targetNodes.length;i++) {
var toinsert =”, toaltinsrt = ”, loi, inserter = new Array(), instId = new Array(), iclass = new Array(); altinsertr = new Array(), ainsId = new Array(), iaclass = new Array();
for (var mt=0; mt<attList.length;mt++){
loi = targetNodes[i].getAttribute(attList[mt]);
if ((loi == ” || loi == null) && mPu.attDInhrt[attid[mt]] && targetNodes[i].parentNode && targetNodes[i].parentNode.getAttribute) loi = targetNodes[i].parentNode.getAttribute(attList[mt]);
if (loi == null) loi = ”;
if (loi != ”) {
patternFound = mPu.alertPattern[attid[mt]]!=” && loi.match(mPu.alertPattern[attid[mt]]) != null;
if (mPu.forceWordWrap[attid[mt]]) loi = loi.replace(zerowidthspacereg,zerowidthreplacer).replace(forcewrapreg,forcewrapreplace);
// if (mPu.forceWordWrap[attid[mt]]) loi = loi.replace(forcewrapreg,forcewrapreplace); //Opera
if (mPu.attDPri[attid[mt]] || (patternFound && mPu.alertToPri)) { inserter[inserter.length] = loi; instId[instId.length] = attid[mt]; iclass[iclass.length] = (patternFound) ? mPu.alrtClass : mPu.stnClass;}
if (mPu.attDSec[attid[mt]]) {altinsertr[altinsertr.length] = loi; ainsId[ainsId.length] = attid[mt]; iaclass[iaclass.length] = (patternFound) ? mPu.alrtClass : mPu.stnClass;}
if (mPu.setAttNull[attid[mt]]) targetNodes[i].removeAttribute(attList[mt]);
if (patternFound && mPu.alertToPri && mPu.alertInstant) targetNodes[i].instAlert = true;
}
}
if (inserter.length == 1 && mPu.attDNAWA[instId[0]]) toinsert = ‘<div class=”‘+iclass[0]+’ ‘+mPu.spcClass[instId[0]]+'”>’+inserter[0]+'</div>’;
else for (var kt=0; kt<inserter.length; kt++)
{toinsert += ‘<div class=”‘+iclass[kt]+’ ‘+mPu.spcClass[instId[kt]]+'”><span class=”‘+iclass[kt]+’ ‘+mPu.spcClass[instId[kt]]+'”>’+mPu.attDTitle[instId[kt]]+'</span>’+inserter[kt]+'</div>’;}
if (altinsertr.length == 1 && mPu.attDNAWA[ainsId[0]]) toaltinsrt = ‘<div class=”‘+ iaclass[0]+’ ‘+mPu.spcClass[ainsId[0]]+'”>’+altinsertr[0]+'</div>’;
else for (var kt=0; kt<altinsertr.length; kt++)
{toaltinsrt += ‘<div class=”‘+iaclass[kt]+’ ‘+mPu.spcClass[ainsId[kt]]+'”><span class=”‘+iaclass[kt]+’ ‘+mPu.spcClass[ainsId[kt]]+'”>’+mPu.attDTitle[ainsId[kt]]+'</span>’+altinsertr[kt]+'</div>’;}
if (toinsert !=”” || toaltinsrt !=””) {
if (toinsert !=””) {targetNodes[i].primaryView = toinsert; targetNodes[i].primDpresent = true;}
if (toaltinsrt !=””) {targetNodes[i].secondaryView = toaltinsrt; targetNodes[i].altDpresent = true;}
if (!targetNodes[i].triggersActive) {
if (!addCheckTrigger(targetNodes[i],’mouseover’,writeDescription)) targetNodes[i].onmouseover = writeDescription;
if (!addCheckTrigger(targetNodes[i],’mouseout’,clearDescription)) targetNodes[i].onmouseout = clearDescription;
targetNodes[i].triggersActive = true;
}
}
}
}
}

// Embed Internal Style
if (mPu.useDefStyle) {
if (document.getElementById(mPu.styleObId) != null) document.getElementById(mPu.styleObId).parentNode.removeChild(document.getElementById(mPu.styleObId));
var head = document.getElementsByTagName(“head”)[0];
var CSSstyleObj = document.createElement(“style”);
CSSstyleObj.setAttribute(“type”, ‘text/css’);
CSSstyleObj.id = mPu.styleObId;
CSSstyleObj.innerHTML = mPu.defCSS;
head.appendChild(CSSstyleObj);
}

addTrigger(window,’resize’, sizeUpdate);
addTrigger(window,’keydown’, mpopupKeyReceive);
addTrigger(window,’keyup’, mpopupKeyUpreceive);

window.MPwinTriggersActive = true;

mPu.addPopupDiv = addPopupDiv;
addPopupDiv();
sizeUpdate();
mPu.setPopups();

// Postrun modules execution
if (typeof(mPu.postRunModules) != “undefined”) for (var i=0; i<mPu.postRunModules.length; i++) mPu.postRunModules[i]();

function fixPopupPos() {
pcR.scrolledX = (window.pageXOffset) ? window.pageXOffset : (document.documentElement && document.documentElement.scrollLeft) ? document.documentElement.scrollLeft : 0;
pcR.scrolledY = (window.pageYOffset) ? window.pageYOffset : (document.documentElement && document.documentElement.scrollTop) ? document.documentElement.scrollTop : 0;
if (!doFixPopupPos()) doFixPopupPos();
}

function doFixPopupPos() {
var yiPos = pcR.ygPos + pcR.actOffsetY; var xiPos = pcR.xgPos + pcR.actOffsetX;
pcR.divHeight = aOb.dHght + pcR.TDdifX; pcR.divWidth = aOb.dWdth + pcR.TDdifX;
var sxEdge = (pcR.actOffsetX>0) ? pcR.width – mPu.edgeBufferZone : xiPos;
var syEdge = (pcR.actOffsetY>0) ? pcR.height – mPu.edgeBufferZone : yiPos;
yiPos = Math.max(Math.min(yiPos, syEdge – pcR.divHeight),0);
xiPos = Math.max(Math.min(xiPos, sxEdge – pcR.divWidth),0);
aOb.yPos = yiPos; aOb.xPos = xiPos;
if (pointColDetect(pcR.xgPos,pcR.ygPos,yiPos,xiPos+pcR.divWidth,yiPos+pcR.divHeight,xiPos,3)) {
pcR.actOffsetX = -pcR.actOffsetX; pcR.actOffsetY = -pcR.actOffsetY;
return false;
} else {
pcR.tDiv.style.top = (aOb.yPos + pcR.scrolledY – gVr.bRCompY) + “px”;
pcR.tDiv.style.left = (aOb.xPos + pcR.scrolledX – gVr.bRCompX) + “px”;
} return true; //Modify Ian
}

function pointColDetect(x,y,top,right,bottom,left,boundary) {
top -= boundary; bottom += boundary; left -= boundary; right += boundary;
if ((x>left&&x<right)&&(y>top&&y<bottom)) return true;
return false;
}

function clrIntrvls() {
for (i=0;i<aOb.revInt.length;i++){window.clearInterval(aOb.revInt[i]);}
aOb.revInt = new Array();
}

function easeInOut(minValue,maxValue,totalSteps,actualStep,powr) {
var delta = maxValue – minValue;
var stepp = minValue+(Math.pow(((1 / totalSteps)*actualStep),powr)*delta);
return Math.ceil(stepp)
}

function mpopupKeyReceive(e) {
if (!e) e = window.event; //Modify Ian
if (pcR.hvrdObj != null && e.ctrlKey && pcR.hvrdObj.altDpresent) {
var hovered = pcR.hvrdObj; doClearDescription(); doWriteDescription(hovered,e.ctrlKey,e.altKey);
}
if (pcR.hvrdObj != null && e.shiftKey) doClearDescription();
}

function mpopupKeyUpreceive(e) {
if (!e) e = window.event; //Modify Ian
if (pcR.hvrdObj != null) {
var hovered = pcR.hvrdObj; doClearDescription(); doWriteDescription(hovered,e.ctrlKey,e.altKey,true);
}
}

function doWriteDescription(elem,ctrlK,altK,nosuppress) {
var tagDescriptPri = ”, tagDescriptAlt = ”

if (elem.primDpresent) tagDescriptPri = elem.primaryView;
if (elem.altDpresent) tagDescriptAlt = elem.secondaryView;

if (altK || elem.instAlert) {gVr.activeDelay = 0;gVr.activeRevStyle = ‘mPu.instRev()’;gVr.instRev = true;}
if (ctrlK) {var tagDescription = tagDescriptAlt; gVr.activeDelay = 0;}
else {var tagDescription = tagDescriptPri;}
if (!gVr.moveTrigger) {addTrigger(document,’mousemove’, movePopup); gVr.moveTrigger = true;}

pcR.hvrdObj = elem;
pcR.reqDesc = (tagDescription != “” && tagDescription != null);

var wpt = mPu.warpSteps > 0;
pcR.bDiv.style.display = ‘none’; pcR.bDiv.style.display = ‘block’;
pcR.hvrdCh = true; pcR.hvrdFirst = true;

if (pcR.reqDesc) {
pcR.cDiv.innerHTML = tagDescription;
pcR.mDiv.innerHTML = tagDescription;
}

aOb.tWidth = pcR.mDiv.offsetWidth;
aOb.tHeight = pcR.mDiv.offsetHeight;

if (!wpt && pcR.reqDesc) {
mPu.setDdivTargetSize(); fixPopupPos();
}

if (aOb.popActv != true) {
if (wpt) pcR.cDiv.style.left = pcR.padComp+’px’;
aOb.revealTimer = window.setTimeout(
function() {
if (pcR.hvrdObj != null) {
if (pcR.hvrdFirst == true && mPu.warpSteps > 0) {
aOb.tPrevHeight = aOb.tHeight; aOb.tPrevWidth = aOb.tWidth;
mPu.setDdivTargetSize(); fixPopupPos();
}
aOb.revealTimer = 0;
if (gVr.suppress && !ctrlK && !altK && !nosuppress) return;
if (gVr.instRev) aOb.revInt[aOb.revInt.length] = window.setInterval(
function() { //Instant Reveal Function
if (aOb.objMovd == true) {
pcR.cDiv.style.width = aOb.tWidth + ‘px’;
pcR.cDiv.style.height = aOb.tHeight + ‘px’;
fixPopupPos();
if (pcR.reqDesc) pcR.tDiv.style.visibility = ‘visible’;
aOb.popActv = true; aOb.clipAnimDone = true; clrIntrvls();
}
},mPu.revInt);
else aOb.revInt[aOb.revInt.length] = window.setInterval(
function() { //Clip Reveal Function
if (aOb.objMovd == true && aOb.clipStep<mPu.clipSteps) {
pcR.divHeight = pcR.tDiv.offsetHeight; pcR.divWidth = pcR.tDiv.offsetWidth;
aOb.clipStep++;
if (aOb.clipStep<mPu.clipSteps) {
var clipYTarget = Math.ceil(pcR.divHeight / 2); var clipXTarget = Math.ceil(pcR.divWidth / 2);
aOb.clipX = easeInOut(0,clipXTarget,mPu.clipSteps,aOb.clipStep,0.333);
aOb.clipY = easeInOut(0,clipYTarget,mPu.clipSteps,aOb.clipStep,0.333);
pcR.tDiv.style.clip = eval(mPu.revEvals[mPu.revStyle]);
}
else pcR.tDiv.style.clip = “rect(auto auto auto auto)”;
if (pcR.reqDesc) pcR.tDiv.style.visibility = ‘visible’;
aOb.popActv = true;
if (pcR.hvrdCh) {
mPu.setDdivTargetSize(); fixPopupPos();
pcR.hvrdCh = false;
}
} else if (aOb.objMovd == true) {aOb.clipAnimDone = true; gVr.instRev = true; clrIntrvls();}
},mPu.revInt)
}
},gVr.activeDelay);
} else if (aOb.clipAnimDone) {
pcR.tDiv.style.clip = “rect(auto auto auto auto)”;
if (pcR.reqDesc) pcR.tDiv.style.visibility = ‘visible’;
else {pcR.tDiv.style.visibility = ‘hidden’; aOb.popActv = false;}
pcR.hvrdFirst = false;
clrIntrvls();

if (wpt) aOb.revInt[aOb.revInt.length] = window.setInterval(
function() { //Warp Animation Function
if (pcR.hvrdCh) {
pcR.cDiv.style.width = aOb.tWidth + ‘px’;
pcR.cDiv.style.height = aOb.tHeight + ‘px’;
pcR.hvrdCh = false;
}
if (aOb.warpStep < mPu.warpSteps) {
aOb.warpStep++;
aOb.heightSet = easeInOut(aOb.tPrevHeight,aOb.tHeight,mPu.warpSteps,aOb.warpStep,0.333)
aOb.widthSet = easeInOut(aOb.tPrevWidth,aOb.tWidth,mPu.warpSteps,aOb.warpStep,0.333)

mPu.setDdivWarpSize();

pcR.cDiv.style.left = aOb.widthSet-aOb.tWidth+pcR.padComp+”px”;
fixPopupPos();
} else clrIntrvls();
},mPu.revInt);
}

window.clearTimeout(aOb.resetDelayTimer); window.clearTimeout(aOb.hidePopupTimer);

}

function doClearDescription() {
window.clearTimeout(aOb.revealTimer);
aOb.hidePopupTimer = window.setTimeout(
function() { //Hide Popup Function
clrIntrvls();
aOb.warpStep = 0;
pcR.tDiv.style.visibility = ‘hidden’;
aOb.objMovd = false; aOb.popActv = false;aOb.clipStep = 0;
removeTrigger(document,’mousemove’, movePopup);
pcR.tDiv.style.top = “0px”;
pcR.tDiv.style.left = “0px”;
pcR.tDiv.style.clip = “rect(auto auto auto auto)”;
aOb.clipAnimDone = false;
gVr.moveTrigger = false;
pcR.actOffsetX = mPu.xOfst, pcR.actOffsetY = mPu.yOfst;
},mPu.hideDelay);
if (aOb.revealTimer == 0) gVr.activeDelay = 0;
pcR.hvrdObj = null;
aOb.resetDelayTimer = window.setTimeout(
function (){ //Reset Delay To Original Values
gVr.activeDelay = mPu.popupDelay;
gVr.instRev = gVr.desInstRev;
},mPu.instPopDur);
aOb.tPrevHeight = aOb.tHeight;
aOb.tPrevWidth = aOb.tWidth;
aOb.prevs[aOb.prevs.length] = aOb.tHeight
if (aOb.warpStep != mPu.warpSteps && aOb.warpStep > 0) {
aOb.tPrevHeight = aOb.heightSet; aOb.tPrevWidth = aOb.widthSet;
}
aOb.warpStep = 0;
}

function movePopup(e) {
if (pcR.hvrdObj != null || aOb.popActv == true) {
if (!e) {e = window.event;} //Modify Ian
pcR.ygPos = e.clientY; pcR.xgPos = e.clientX;
fixPopupPos();
aOb.objMovd = true;
}
}

function sizeUpdate() {
if (self.innerWidth) {
pcR.width = self.innerWidth; pcR.height = self.innerHeight;}
else if (document.documentElement && document.documentElement.clientWidth) {
pcR.width = document.documentElement.clientWidth; pcR.height = document.documentElement.clientHeight;}
else if (document.body) {
pcR.width = document.body.clientWidth; pcR.height = document.body.clientHeight;}
gVr.bRCompX = 0; gVr.bRCompY = 0;
if (document.body.activeStyle(‘position’,’position’) == ‘relative’) {gVr.bRCompX = document.body.offsetLeft; gVr.bRCompY = document.body.offsetTop}
}

function getElementsByClass(targetTag,tagClass) {
var elementList = document.getElementsByTagName(targetTag); var classTag = new Array();
for (var i=0;i<elementList.length;i++) {
if (elementList[i].className == tagClass) classTag[classTag.length] = elementList[i];
}
return classTag;
}

function addPopupDiv() {
tDv = new Array()
var prefix = “”;
var divlen = mPu.divIds.length;
document.body.activeStyle = getActiveStyle;
if (mPu.useDefStyle==true) prefix = “”;
for (var i=0;i<mPu.divIds.length;i++) {
if (document.getElementById(mPu.divIds[i]) != null) document.getElementById(mPu.divIds[i]).parentNode.removeChild(document.getElementById(mPu.divIds[i]));
tDv[i]=document.createElement(‘div’);
if (mPu.divIds[i] != ”) tDv[i].id = prefix + mPu.divIds[i];
tDv[i].activeStyle = getActiveStyle;
}

tDv[0].style.position = ‘absolute’; tDv[10].style.position = ‘absolute’;
tDv[9].style.position = ‘relative’; tDv[0].style.visibility = ‘hidden’;
tDv[10].style.visibility = ‘hidden’; tDv[5].style.overflow = “hidden”;
tDv[6].style.overflow = “hidden”; tDv[10].style.overflow = “hidden”;
tDv[5].style.position = ‘relative’; tDv[6].style.position = ‘absolute’;
tDv[0].style.zIndex = mPu.ttipZIndex;
tDv[1].appendChild(tDv[2]); tDv[3].appendChild(tDv[4]); tDv[4].appendChild(tDv[5]);
tDv[5].appendChild(tDv[6]); tDv[7].appendChild(tDv[8]); tDv[0].appendChild(tDv[1]);
tDv[0].appendChild(tDv[3]); tDv[0].appendChild(tDv[7]); tDv[10].appendChild(tDv[9]);
/* test the box model for compliance */
pcR.bxMcompX = 0; pcR.bxMcompY = 0;
document.body.appendChild(tDv[divlen-1])
tDv[divlen-1].style.padding = “2px”; tDv[divlen-1].style.height = “50px”;
if (tDv[divlen-1].offsetHeight == 50) {
// mPu.warpSteps = 0;
pcR.bxMcompX = parseInt(tDv[5].activeStyle(‘padding-right’,’paddingRight’))+parseInt(tDv[5].activeStyle(‘padding-left’,’paddingLeft’));
pcR.bxMcompY = parseInt(tDv[5].activeStyle(‘padding-top’,’paddingTop’))+parseInt(tDv[5].activeStyle(‘padding-bottom’,’paddingBottom’));
}

document.body.removeChild(tDv[divlen-1]);
document.body.appendChild(tDv[10])
document.body.appendChild(tDv[0]);

for (var i=0;i<divlen-1;i++) {
var bgIm = tDv[i].activeStyle(“background-image”,”backgroundImage”);
if (bgIm.indexOf(“url”) > -1 && mPu.preload == true) preLoadImage(stripURL(bgIm))
}
pcR.cDiv = tDv[6]; pcR.tDiv = tDv[0]; pcR.dDiv = tDv[5];
pcR.mDiv = tDv[9]; pcR.bDiv = tDv[10];

pcR.padComp = parseInt(tDv[5].activeStyle(‘padding-left’,’paddingLeft’));
tDv[6].style.left = pcR.padComp + ‘px’;

// detect firefox bug and set functions accordingly
tDv[5].style.width = “50px”;
tDv[5].style.height = “50px”;
mPu.setDdivWarpSize = (tDv[5].offsetWidth > tDv[1].offsetWidth && tDv[1].activeStyle(‘display’,’display’) != ‘none’ && tDv[7].activeStyle(‘display’,’display’) != ‘none’) ?
function() {
aOb.dHght = aOb.heightSet + pcR.bxMcompY;
aOb.dWdth = aOb.widthSet + pcR.bxMcompX;
pcR.dDiv.style.height = aOb.dHght + “px”;
pcR.dDiv.style.width = aOb.dWdth + “px”;
tDv[1].style.display = ‘none’;tDv[1].style.display = ‘block’;
tDv[7].style.display = ‘none’;tDv[7].style.display = ‘block’;
} :
function() {
aOb.dHght = aOb.heightSet + pcR.bxMcompY;
aOb.dWdth = aOb.widthSet + pcR.bxMcompX;
pcR.dDiv.style.height = aOb.dHght + “px”;
pcR.dDiv.style.width = aOb.dWdth + “px”;
}

mPu.setDdivTargetSize = (tDv[5].offsetWidth > tDv[1].offsetWidth) ?
function() {
pcR.cDiv.style.height = aOb.tHeight + ‘px’;
pcR.cDiv.style.width = aOb.tWidth + ‘px’;
aOb.dHght = aOb.tHeight + pcR.bxMcompY;
aOb.dWdth = aOb.tWidth + pcR.bxMcompX;
pcR.dDiv.style.height = aOb.dHght + “px”;
pcR.dDiv.style.width = aOb.dWdth + “px”;
tDv[1].style.display = ‘none’;tDv[1].style.display = ‘block’;
tDv[7].style.display = ‘none’;tDv[7].style.display = ‘block’;
} :
function() {
pcR.cDiv.style.height = aOb.tHeight + ‘px’;
pcR.cDiv.style.width = aOb.tWidth + ‘px’;
aOb.dHght = aOb.tHeight + pcR.bxMcompY;
aOb.dWdth = aOb.tWidth + pcR.bxMcompX;
pcR.dDiv.style.height = aOb.dHght + “px”;
pcR.dDiv.style.width = aOb.dWdth + “px”;
}

pcR.TDdifX = tDv[0].offsetWidth – tDv[5].offsetWidth;
pcR.TDdifY = tDv[0].offsetHeight – tDv[5].offsetHeight;

}

function getActiveStyle(style,stylecc) {
if (window.getComputedStyle) return window.getComputedStyle(this,null).getPropertyValue(style)
if (this.currentStyle) return eval(“this.currentStyle.”+stylecc)
}

function preLoadImage(imageurl) {var img = new Image();img.src = imageurl;return img;}

function stripURL(s) {
// I’ll later replace this with proper regex.
s = s.substring(s.indexOf(“url(“)+4,s.lastIndexOf(“)”));if (s.indexOf(‘”‘)>-1) s = s.substring(s.indexOf(‘”‘)+1,s.lastIndexOf(‘”‘));return s;
}

function writeDescription(e) {
if (!e) {e = window.event;} //Modify Ian
if (this != e.target) return;
if (!e.shiftKey) doWriteDescription(this,e.ctrlKey,e.altKey,false)
}

function clearDescription(e) {
if (!e) {e = window.event;} //Modify Ian
if (this != e.target) return;
doClearDescription();
}

function addTrigger(elm,eventname,func) {
if (!addCheckTrigger(elm,eventname,func) && elm.attachEvent) elm.attachEvent(‘on’+eventname, func);
}
function addCheckTrigger(elm,eventname,func) {
if (elm.addEventListener) {elm.addEventListener(eventname, func, false); return true;} else return false;
}
function removeTrigger(elm,eventname,func) {
if (!removeCheckTrigger(elm,eventname,func) && elm.detachEvent) elm.detachEvent(‘on’+eventname, func);
}
function removeCheckTrigger(elm,eventname,func) {
if (elm.removeEventListener) {elm.removeEventListener(eventname, func, false); return true;} else return false;
}

//Embedded preferences
function setMPPreferences() {
if (typeof(mpUSRJS) != “undefined” && allowRemotePrefs) mPu = mpUSRJS;
if (typeof(mPu.prefsVersion) == “undefined”) {mPu.noExtPrefs=true;}
mPu.useDefStyle = true;
mPu.popupDelay = 650;
mPu.hideDelay = 85;
mPu.instPopDur = 370;
mPu.attDesc = [‘htitle’,’alt’,’href’,’src’];
mPu.attDUse = [true,true,true,true];
mPu.attDPri = [true,false,false,false];
mPu.attDSec = [false,true,true,true];
mPu.setAttNull = [false,false,false,false];
mPu.attDInhrt = [true,false,true,false];
mPu.forceWordWrap = [false, false, true, true];
mPu.stnClass = ‘mpop_cl’;
mPu.alrtClass = ‘mpop_al’;
mPu.spcClass = [‘mpop_title’,’mpop_alt’,’mpop_href’,’mpop_src’];
mPu.attDTitle = [‘Title:’,’Alt:’,’Address:’,’Source:’]
mPu.alertPattern = [”,”,/^(\s*javascript\:)/i,”]
mPu.alertToPri = false;
mPu.alertInstant = false;
mPu.attDNAWA = [true,true,false,false];
mPu.xOfst = 15;
mPu.yOfst = 15;
mPu.clipSteps = 3;
mPu.revStyle = 0;
mPu.revInt = 10;
mPu.warpSteps = 10;
mPu.preload = true;
mPu.edgeBufferZone = 32;
mPu.tTags = [“*”];
mPu.ttipZIndex = “9999”;
mPu.autoSelfFocus = true;
mPu.forceBreakAt = 29; //minimum number of chars needed to force a break, is applied to attributes with ‘forcewordwrap’ on.
mPu.brokenSign = ‘<span class=”mpopbrspan”>&raquo;</span><br />’
//new with 2001
mPu.allowSuppress = true;
//version
mPu.embeddedPrefsVersion = 2004;

mPu.defCSS = ‘/* embedded css version 2.02 Skin Name: Minimal Transparent */’
+’#mpopupc, #mpopdblprnt, #mpopupdbl {‘
+’ color: black !important; width: auto !important; height: auto !important;’
+’ padding: 0 !important; margin: 0 !important; position: absolute; top: 0; left: 0;’
+’ background: #EEE none !important; text-align: left !important}’
+’#mpopdblprnt {padding:1px !important; max-width:80% !important;}’
+’#mpopdbl {position: relative;}’
+’#mpopupc, #mpopdbl, #mpopdbl div, #mpopupc div, #mpopbod div, #mpopbod>div>div>div {‘
+’ font: 12px “Trebuchet MS”, Trebuchet, Verdana, Sans-Serif !important;’
+’ border-width: 0 !important; margin: 0; padding: 0; }’
+’#mpopupc {‘
+’background: transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEIAAABCCAYAAADjVADoAAAABGdBTUEAAK%2FINwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAABuSURBVHja7NAxDQAwCAAwwL%2FGedhPAj5IK6E5%2FV8QpUCECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChIgLVgABBgDHFAROmd3kzgAAAABJRU5ErkJggg%3D%3D) !important;’
+’border: 2px solid #222 !important; opacity: 0.9; padding: 0.2em 0.3em !important;}’
+’#mpoptop {display:none}’
+’#mpopbot {display:none}’
+’#mpopbod {‘
+’ padding:0 !important; margin: 0 !important; border-width: 0 !important;}’
+’#mpopbod>div {‘
+’ padding:0 !important; margin: 0 !important; border-width: 0 !important;}’
+’#mpopbod>div>div {‘
+’ position:relative;’
+’ padding:1px !important; margin: 0 !important; border-width: 0 !important;}’
+’#mpopbod>div>div>div { margin:0 !important; word-wrap: break-word;}’
+’#mpopdbl { max-width: 320px !important; margin: 0 !important; padding: 0 1px !important; word-wrap: break-word;}’
+’#bmtest { top: 0; left: 0; position: absolute; border-width: 0 !important; margin: 0 !important; }’
+’span.mpop_cl, span.mpop_al {‘
+’ font-weight: bold; background-color: #1F2C2F; color: #EAE9DA; font-style: italic;’
+’ font-variant: small-caps; font-size: 90%; padding: 0 0.6em 0 0.3em; margin-right: 0.3em;}’
+’span.mpop_al {background-color: red}’
+’span.mpopbrspan {color: red;}’

;

//not for modification.
mPu.minimumReqPrefsV = 2002;

if (allowRemotePrefs && mPu.setMPPrefsExternal && mPu.minimumReqPrefsV <= mPu.prefsVersion) mPu.setMPPrefsExternal();
else if (!mPu.noExtPrefs) {
if (window.opera&&opera.postError) opera.postError (“Multipopup Error:\nMinimum required prefs version is:”+mPu.minimumReqPrefsV+”\nExternal prefs version installed:”+mPu.prefsVersion+’\n Using internal preferences instead.\nIf you delete the external prefs or update it to the latest, this warning will not be displayed.’);
}

if (allowRemotePrefs && mPu.setRemotePrefs) mPu.setRemotePrefs();

if (typeof(mPu.appendToExistingCSS) != ‘undefined’) {
if (mPu.appendToExistingCSS) mPu.defCSS += mPu.setMPSkinExternal();
else mPu.defCSS = mPu.setMPSkinExternal();
}

}

}

Reblog this post [with Zemanta]
No comments yet

Leave a comment