text: {
  	"translatorID": "57a00950-f0d1-4b41-b6ba-44ff0fc30289",
  	"translatorType": 4,
  	"label": "Google Scholar",
  	"creator": "Simon Kornblith, Frank Bennett, Aurimas Vinckevicius",
  	"target": "^https?://scholar[-.]google[-.](com|cat|(com?[-.])?[a-z]{2})(\\.[^/]+)?/(scholar(_case)?\\?|citations\\?)",
  	"minVersion": "3.0",
  	"maxVersion": null,
  	"priority": 100,
  	"inRepository": true,
  	"browserSupport": "gcsibv",
  	"lastUpdated": "2018-02-12 05:20:00"
  }
  
  // attr()/text() v2
  function attr(docOrElem,selector,attr,index){var elem=index?docOrElem.querySelectorAll(selector).item(index):docOrElem.querySelector(selector);return elem?elem.getAttribute(attr):null;}function text(docOrElem,selector,index){var elem=index?docOrElem.querySelectorAll(selector).item(index):docOrElem.querySelector(selector);return elem?elem.textContent:null;}
  
  
  function detectWeb(doc, url) {
  	/* Detection for law cases, but not "How cited" pages,
  	 * e.g. url of "how cited" page:
  	 *   http://scholar.google.co.jp/scholar_case?about=1101424605047973909&q=kelo&hl=en&as_sdt=2002
  	 */
  	if (url.indexOf('/scholar_case?') != -1
  		&& url.indexOf('about=') == -1
  	) {
  		return "case";
  	} else if (url.indexOf('/citations?') != -1) {
  		if (getProfileResults(doc, true)) {
  			return "multiple";
  		}
  		
  		//individual saved citation
  		var link = ZU.xpathText(doc, '//a[@class="gsc_vcd_title_link"]/@href');
  		if(!link) return;
  		if (link.indexOf('/scholar_case?') != -1) {
  			return 'case';
  		} else {
  			//Can't distinguish book from journalArticle
  			//Both have "Journal" fields
  			return 'journalArticle';
  		}
  	} else if (getSearchResults(doc, true)) {
  		return "multiple";
  	}
  }
  
  
  function getSearchResults(doc, checkOnly) {
  	var items = {};
  	var found = false;
  	var rows = doc.querySelectorAll('.gs_r[data-cid]');
  	for (var i=0; i<rows.length; i++) {
  		var href = rows[i].dataset.cid;
  		var title = text(rows[i], '.gs_rt');
  		if (!href || !title) continue;
  		if (checkOnly) return true;
  		found = true;
  		items[href] = title;
  	}
  	return found ? items : false;
  }
  
  
  function getProfileResults(doc, checkOnly) {
  	var items = {};
  	var found = false;
  	var rows = doc.querySelectorAll('a.gsc_a_at');
  	for (var i=0; i<rows.length; i++) {
  		var href = rows[i].dataset.href;
  		var title = rows[i].textContent;
  		if (!href || !title) continue;
  		if (checkOnly) return true;
  		found = true;
  		items[href] = title;
  	}
  	return found ? items : false;
  }
  
  
  function doWeb(doc, url) {
  	var type = detectWeb(doc, url);
  	if (type == "multiple") {
  		if (getSearchResults(doc, true)) {
  			Zotero.selectItems(getSearchResults(doc, false), function (items) {
  				if (!items) {
  					return true;
  				}
  				var ids = [];
  				for (var i in items) {
  					ids.push(i);
  				}
  				//here it is enough to know the ids and we can call scrape directly
  				scrape(doc, ids);
  			});
  		} else if (getProfileResults(doc, true)) {
  			Zotero.selectItems(getProfileResults(doc, false), function (items) {
  				if (!items) {
  					return true;
  				}
  				var articles  = [];
  				for (var i in items) {
  					articles.push(i);
  				}
  				//here we need open these pages before calling scrape
  				ZU.processDocuments(articles, scrape);
  			});
  		}
  	} else {
  		//e.g. https://scholar.google.de/citations?view_op=view_citation&hl=de&user=INQwsQkAAAAJ&citation_for_view=INQwsQkAAAAJ:u5HHmVD_uO8C
  		scrape(doc, url, type);
  	}
  }
  
  
  function scrape(doc, idsOrUrl, type) {
  	if (Array.isArray(idsOrUrl)) {
  		scrapeIds(doc, idsOrUrl);
  	} else {
  		if (type && type=="case") {
  			scrapeCase(doc, idsOrUrl);
  		} else {
  			var related = ZU.xpathText(doc, '//a[contains(@href, "q=related:")]/@href');
  			if (!related) {
  				throw new Error("Could not locate related URL");
  			}
  			var itemID = related.match(/=related:([^:]+):/);
  			if (itemID) {
  				scrapeIds(doc, [itemID[1]]);
  			} else {
  				Z.debug("Can't find itemID. related URL is " + related);
  				throw new Error("Cannot extract itemID from related link");
  			}
  		}
  	}
  	
  }
  
  
  function scrapeIds(doc, ids) {
  	for (let i=0; i<ids.length; i++) {
  		// We need here 'let' to access ids[i] later in the nested functions
  		let context = doc.querySelector('.gs_r[data-cid="' + ids[i] + '"]');
  		if (!context && ids.length==1) context = doc;
  		var citeUrl = '/scholar?q=info:' + ids[i] + ':scholar.google.com/&output=cite&scirp=1';
  		// For 'My Library' we check the search field at the top
  		// and then in these cases change the citeUrl accordingly.
  		var scilib = attr(doc, '#gs_hdr_frm input[name="scilib"]', 'value')
  		if (scilib && scilib==1) {
  			var citeUrl = '/scholar?scila=' + ids[i] + '&output=cite&scirp=1';
  		}
  		ZU.doGet(citeUrl, function(citePage) {
  			var m = citePage.match(/href="((https?:\/\/[a-z\.]*)?\/scholar.bib\?[^"]+)/);
  			if (!m) {
  				//Saved lists and possibly other places have different formats for BibTeX URLs
  				//Trying to catch them here (can't add test bc lists are tied to google accounts)
  				m = citePage.match(/href="(.+?)">BibTeX<\/a>/);
  			}
  			if (!m) {
  				var msg = "Could not find BibTeX URL";
  				var title = citePage.match(/<title>(.*?)<\/title>/i);
  				if (title) {
  					if (title) msg += ' Got page with title "' + title[1] +'"';
  				}
  				throw new Error(msg);
  			}
  			var bibUrl = ZU.unescapeHTML(m[1]);
  			ZU.doGet(bibUrl, function(bibtex) {
  				
  				var translator = Zotero.loadTranslator("import");
  				translator.setTranslator("9cb70025-a888-4a29-a210-93ec52da40d4");
  				translator.setString(bibtex);
  				translator.setHandler("itemDone", function(obj, item) {
  					//these two variables are extracted from the context
  					var titleLink = attr(context, 'h3 a, #gsc_vcd_title a', 'href');
  					var secondLine = text(context, '.gs_a') || '';
  					//case are not recognized and can be characterized by the
  					//titleLink, or that the second line starts with a number
  					//e.g. 1 Cr. 137 - Supreme Court, 1803
  					if ((titleLink && titleLink.indexOf('/scholar_case?')>-1) || 
  						secondLine && ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'].indexOf(secondLine[0])>-1) {
  						item.itemType = "case";
  						item.caseName = item.title;
  						item.reporter = item.publicationTitle;
  						item.reporterVolume = item.volume;
  						item.dateDecided = item.date;
  						item.court = item.publisher;
  					}
  					//patents are not recognized but are easily detected
  					//by the titleLink or second line
  					if ((titleLink && titleLink.indexOf('google.com/patents/')>-1) || secondLine.indexOf('Google Patents')>-1) {
  						item.itemType = "patent";
  						//authors are inventors
  						for(var i=0, n=item.creators.length; i<n; i++) {
  							item.creators[i].creatorType = 'inventor';
  						}
  						//country and patent number
  						if (titleLink) {
  							let m = titleLink.match(/\/patents\/([A-Za-z]+)(.*)$/);
  							if (m) {
  								item.country = m[1];
  								item.patentNumber = m[2];
  							}
  						}
  					}
  					
  					//fix titles in all upper case, e.g. some patents in search results
  					if(item.title.toUpperCase() == item.title) {
  						item.title = ZU.capitalizeTitle(item.title);
  					}
  					
  					//delete "others" as author
  					if (item.creators.length) {
  						var lastCreatorIndex = item.creators.length-1,
  							lastCreator = item.creators[lastCreatorIndex];
  						if (lastCreator.lastName === "others" && (lastCreator.fieldMode === 1 ||lastCreator.firstName === "")) {
  							item.creators.splice(lastCreatorIndex, 1);
  						}
  					}
  					
  					//clean author names
  					for (var j=0, m=item.creators.length; j<m; j++) {
  						if (!item.creators[j].firstName) continue;
  			
  						item.creators[j] = ZU.cleanAuthor(
  							item.creators[j].lastName + ', ' +
  								item.creators[j].firstName,
  							item.creators[j].creatorType,
  							true);
  					}
  					
  					//attach linked page as snapshot if available
  					if (titleLink) {
  						item.attachments.push({
  							url: titleLink,
  							title: "Snapshot"
  						});
  					}
  					//attach linked document as attachment if available
  					var documentLinkTarget = attr(context, '.gs_or_ggsm a, #gsc_vcd_title_gg a', 'href');
  					var documentLinkTitle = text(context, '.gs_or_ggsm a, #gsc_vcd_title_gg a');
  					if (documentLinkTarget) {
  						//Z.debug(documentLinkTarget);
  						attachment = {
  							title: "Fulltext",
  							url: documentLinkTarget
  						};
  						var m = documentLinkTitle.match(/^\[(\w+)\]/);
  						if (m) {
  							var mimeTypes = {
  								'PDF': 'application/pdf',
  								'DOC': 'application/msword',
  								'HTML': 'text/html'
  							};
  							if (Object.keys(mimeTypes).indexOf(m[1].toUpperCase())>-1) {
  								attachment.mimeType = mimeTypes[m[1]];
  							}
  						}
  						item.attachments.push(attachment);
  					}
  
  					item.complete();
  				});
  				translator.translate();
  			});
  		});
  	}
  }
  
  
  /*
   * #########################
   * ### Scraper Functions ###
   * #########################
   */
   
  var bogusItemID = 1;
  
  var scrapeCase = function (doc, url) {
  	// Citelet is identified by
  	// id="gsl_reference"
  	var refFrag = doc.evaluate('//div[@id="gsl_reference"] | //div[@id="gs_reference"]',
  					doc, null, XPathResult.ANY_TYPE, null).iterateNext();
  	if (refFrag) {
  		// citelet looks kind of like this
  		// Powell v. McCormack, 395 US 486 - Supreme Court 1969
  		var item = new Zotero.Item("case");
  		var attachmentPointer = url;
  		if (Zotero.isMLZ) {
  			var block = doc.getElementById("gs_opinion_wrapper");
  			if (block) {
  				attachmentPointer = block;
  			}
  		}
  		var factory = new ItemFactory(doc, refFrag.textContent, [attachmentPointer]);
  		factory.repairCitelet();
  		factory.getDate();
  		factory.getCourt();
  		factory.getVolRepPag();
  		if (!factory.hasReporter()) {
  			// Look for docket number in the current document
  			factory.getDocketNumber(doc);
  		}
  		factory.getTitle();
  		factory.saveItem();
  	}
  };
  
  
  /*
   * ####################
   * ### Item Factory ###
   * ####################
   */
  
  var ItemFactory = function (doc, citeletString, attachmentLinks, titleString /*, bibtexLink*/) {
  	// var strings
  	this.v = {};
  	this.v.title = titleString;
  	this.v.number = false;
  	this.v.court = false;
  	this.v.extra = false;
  	this.v.date = undefined;
  	this.v.jurisdiction = false;
  	this.v.docketNumber = false;
  	this.vv = {};
  	this.vv.volRepPag = [];
  	// portable array
  	this.attachmentLinks = attachmentLinks;
  	this.doc = doc;
  	// working strings
  	this.citelet = citeletString;
  /** handled outside of item factory
  	this.bibtexLink = bibtexLink;
  	this.bibtexData = undefined;
  */
  	this.trailingInfo = false;
  	// simple arrays of strings
  	this.hyphenSplit = false;
  	this.commaSplit = false;
  };
  
  
  ItemFactory.prototype.repairCitelet = function () {
  	if (!this.citelet.match(/\s+-\s+/)) {
  		this.citelet = this.citelet.replace(/,\s+([A-Z][a-z]+:)/, " - $1");
  	}
  };
  
  
  ItemFactory.prototype.repairTitle = function () {
  	// All-caps words of four or more characters probably need fixing.
  	if (this.v.title.match(/(?:[^a-z]|^)[A-Z]{4,}(?:[^a-z]|$)/)) {
  		this.v.title = ZU.capitalizeTitle(this.v.title.toLowerCase(), true)
  								.replace(/([^0-9a-z])V([^0-9a-z])/, "$1v$2");	
  	}
  };
  
  
  ItemFactory.prototype.hasUsefulData = function () {
  	if (this.getDate()) {
  		return true;
  	}
  	if (this.hasInitials()) {
  		return true;
  	}
  	return false;
  };
  
  
  ItemFactory.prototype.hasInitials = function () {
  	if (this.hyphenSplit.length && this.hyphenSplit[0].match(/[A-Z] /)) {
  		return true;
  	}
  	return false;
  };
  
  
  ItemFactory.prototype.hasReporter = function () {
  	if (this.vv.volRepPag.length > 0) {
  		return true;
  	}
  	return false;
  };
  
  
  ItemFactory.prototype.getDate = function () {
  	var i, m;
  	// Citelet parsing, step (1)
  	if (!this.hyphenSplit) {
  		if (this.citelet.match(/\s+-\s+/)) {
  			this.hyphenSplit = this.citelet.split(/\s+-\s+/);
  		} else {
  			m = this.citelet.match(/^(.*),\s+([^,]+Court,\s+[^,]+)$/);
  			if (m) {
  				this.hyphenSplit = [m[1], m[2]];
  			} else {
  				this.hyphenSplit = [this.citelet];
  			}
  		}
  		this.trailingInfo = this.hyphenSplit.slice(-1);
  	}
  	if (!this.v.date && this.v.date !== false) {
  		this.v.date = false;
  		for (i = this.hyphenSplit.length - 1; i > -1; i += -1) {
  			m = this.hyphenSplit[i].match(/(?:(.*)\s+)*([0-9]{4})$/);
  			if (m) {
  				this.v.date = m[2];
  				if (m[1]) {
  					this.hyphenSplit[i] = m[1];
  				} else {
  					this.hyphenSplit[i] = "";
  				}
  				this.hyphenSplit = this.hyphenSplit.slice(0, i + 1);
  				break;
  			}
  		}
  	}
  	// If we can find a more specific date in the case's centered text then use it
  	var nodesSnapshot = this.doc.evaluate('//div[@id="gs_opinion"]/center', this.doc, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null );
  	for( var iNode = 0; iNode < nodesSnapshot.snapshotLength; iNode++ ) {
  		var specificDate = nodesSnapshot.snapshotItem(iNode).textContent.trim();
  		// Remove the first word through the first space 
  		//  if it starts with "Deci" or it doesn't start with the first three letters of a month
  		//  and if it doesn't start with Submitted or Argued
  		// (So, words like "Decided", "Dated", and "Released" will be removed)
  		specificDate = specificDate.replace(/^(?:Deci|(?!Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec|Submitted|Argued))[a-z]+[.:]?\s*/i,"")
  		// Remove the trailing period, if it is there
  			.replace(/\.$/,"");
  		// If the remaining text is a valid date...
  		if (!isNaN(Date.parse(specificDate))) {
  			// ...then use it
  			this.v.date = specificDate;
  			break;
  		}
  	}
  	return this.v.date;
  };
  
  
  ItemFactory.prototype.getCourt = function () {
  	var s, m;
  	// Citelet parsing, step (2)
  	s = this.hyphenSplit.pop().replace(/,\s*$/, "").replace(/\u2026\s*$/, "Court");
  	var court = null;
  	var jurisdiction = null;
  	m = s.match(/(.* Court),\s+(.*)/);
  	if (m) {
  		court = m[1];
  		jurisdiction = m[2];
  	}
  	if (!court) {
  		m = s.match(/(?:([a-zA-Z]+):\s*)*(.*)/);
  		if (m) {
  			court = m[2].replace(/_/g, " ");
  			jurisdiction = m[1];
  		}
  	}
  	if (court) {
  		this.v.court = court;
  	}
  	if (jurisdiction) {
  		this.v.extra = "{:jurisdiction: " + jurisdiction + "}";
  	}
  };
  
  
  ItemFactory.prototype.getVolRepPag = function () {
  	var i, m;
  	// Citelet parsing, step (3)
  	if (this.hyphenSplit.length) {
  		this.commaSplit = this.hyphenSplit.slice(-1)[0].split(/\s*,\s+/);
  		var gotOne = false;
  		for (i = this.commaSplit.length - 1; i > -1; i += -1) {
  			m = this.commaSplit[i].match(/^([0-9]+)\s+(.*)\s+(.*)/);
  			if (m) {
  				var volRepPag = {};
  				volRepPag.volume = m[1];
  				volRepPag.reporter = m[2];
  				volRepPag.pages = m[3].replace(/\s*$/, "");
  				this.commaSplit.pop();
  				if (!volRepPag.pages.match(/[0-9]$/) && (i > 0 || gotOne)) {
  					continue;
  				}
  				gotOne = true;
  				this.vv.volRepPag.push(volRepPag);
  			} else {
  				break;
  			}
  		}
  	}
  };
  
  
  ItemFactory.prototype.getTitle = function () {
  	// Citelet parsing, step (4) [optional]
  	if (this.commaSplit) {
  		this.v.title = this.commaSplit.join(", ");
  	}
  };
  
  
  ItemFactory.prototype.getDocketNumber = function (doc) {
  	var docNumFrag = doc.evaluate(
  		'//center[preceding-sibling::center//h3[@id="gsl_case_name"]]\
  		| //div[@class="gsc_value" and preceding-sibling::div[text()="Docket id"]]',
  		doc, null, XPathResult.ANY_TYPE, null).iterateNext();
  	if (docNumFrag) {
  		this.v.docketNumber = docNumFrag.textContent
  								.replace(/^\s*[Nn][Oo](?:.|\s+)\s*/, "")
  								.replace(/\.\s*$/, "");
  	}
  };
  
  ItemFactory.prototype.getAttachments = function (doctype) {
  	var i, ilen, attachments;
  	var attachmentTitle = "Google Scholar " + doctype;
  	attachments = [];
  	for (i = 0, ilen = this.attachmentLinks.length; i < ilen; i += 1) {
  		if (!this.attachmentLinks[i]) continue;
  		if ("string" === typeof this.attachmentLinks[i]) {
  			attachments.push({
  				title: attachmentTitle,
  				url:this.attachmentLinks[i],
  				type:"text/html"
  			});
  		} else {
  			// DOM fragment and parent doc
  			var block = this.attachmentLinks[i];
  			var doc = block.ownerDocument;
  
  			// String content (title, url, css)
  			var title = doc.getElementsByTagName("title")[0].textContent;
  			var url = doc.documentURI;
  			var css = "*{margin:0;padding:0;}div.mlz-outer{width: 60em;margin:0 auto;text-align:left;}body{text-align:center;}p{margin-top:0.75em;margin-bottom:0.75em;}div.mlz-link-button a{text-decoration:none;background:#cccccc;color:white;border-radius:1em;font-family:sans;padding:0.2em 0.8em 0.2em 0.8em;}div.mlz-link-button a:hover{background:#bbbbbb;}div.mlz-link-button{margin: 0.7em 0 0.8em 0;}";
  
  			// head element
  			var head = doc.createElement("head");
  			head.innerHTML = '<title>' + title + '</title>';
  			head.innerHTML += '<style type="text/css">' + css + '</style>'; 
  
  			var attachmentdoc = Zotero.Utilities.composeDoc(doc, head, block);
  			attachments.push({
  				title: attachmentTitle,
  				document:attachmentdoc
  			});
  
  			// URL for this item
  			this.item.url = url;
  		}
  	}
  	return attachments;
  };
  
  
  ItemFactory.prototype.pushAttachments = function (doctype) {
  	this.item.attachments = this.getAttachments(doctype);
  };
  
  /*
  ItemFactory.prototype.getBibtexData = function (callback) {
  	if (!this.bibtexData) {
  		if (this.bibtexData !== false) {
  			Zotero.Utilities.doGet(this.bibtexLink, function(bibtexData) {
  				if (!bibtexData.match(/title={{}}/)) {
  					this.bibtexData = bibtexData;
  				} else {
  					this.bibtexData = false;
  				}
  				callback(this.bibtexData);
  			});
  			return;
  		}
  	}
  	callback(this.bibtexData);
  };
  */
  
  ItemFactory.prototype.saveItem = function () {
  	var i, ilen, key;
  	if (this.v.title) {
  		this.repairTitle();
  		if (this.vv.volRepPag.length) {
  			var completed_items = [];
  			for (i = 0, ilen = this.vv.volRepPag.length; i < ilen; i += 1) {
  				this.item = new Zotero.Item("case");
  				for (key in this.vv.volRepPag[i]) {
  					if (this.vv.volRepPag[i][key]) {
  						this.item[key] = this.vv.volRepPag[i][key];
  					}
  				}
  				this.saveItemCommonVars();
  				if (i === (this.vv.volRepPag.length - 1)) {
  					this.pushAttachments("Judgement");
  				}
  				this.item.itemID = "" + bogusItemID;
  				bogusItemID += 1;
  				completed_items.push(this.item);
  			}
  			if (completed_items.length === 0) {
  				throw new Error("Failed to parse \"" + this.citelet + "\"");
  			}
  			for (i = 0, ilen = completed_items.length; i < ilen; i += 1) {
  				for (j = 0, jlen = completed_items.length; j < jlen; j += 1) {
  					if (i === j) {
  						continue;
  					}
  					completed_items[i].seeAlso.push(completed_items[j].itemID);
  				}
  				completed_items[i].complete();
  			}
  		} else {
  			this.item = new Zotero.Item("case");
  			this.saveItemCommonVars();
  			this.pushAttachments("Judgement");
  			this.item.complete();
  		}
  	} else {
  		throw new Error("Failed to find title in \"" + this.citelet + "\"");
  	}
  };
  
  
  ItemFactory.prototype.saveItemCommonVars = function () {
  	for (key in this.v) {
  		if (this.v[key]) {
  			this.item[key] = this.v[key];
  		}
  	}
  };
  
  /*
    Test Case Descriptions:  (these have not been included in the test case JSON below as per 
  							aurimasv's comment on https://github.com/zotero/translators/pull/833)
  
  		"description": "Legacy test case",
  	"url": "http://scholar.google.com/scholar?q=marbury&hl=en&btnG=Search&as_sdt=1%2C22&as_sdtp=on",
  	
  		"description": "Legacy test case",
  		"url": "http://scholar.google.com/scholar?hl=en&q=kelo&btnG=Search&as_sdt=0%2C22&as_ylo=&as_vis=0",
  	
  		"description": "Legacy test case",
  		"url": "http://scholar.google.com/scholar?hl=en&q=smith&btnG=Search&as_sdt=0%2C22&as_ylo=&as_vis=0",
  	
  		"description": "Legacy test case",
  		"url": "http://scholar.google.com/scholar?hl=en&q=view+of+the+cathedral&btnG=Search&as_sdt=0%2C22&as_ylo=&as_vis=0",
  
  		"description": "Legacy test case",
  		"url": "http://scholar.google.com/scholar?hl=en&q=clifford&btnG=Search&as_sdt=0%2C22&as_ylo=&as_vis=0",
  
  		"description": "Legacy test case",
  		"url": "http://scholar.google.com/scholar_case?case=9834052745083343188&q=marbury+v+madison&hl=en&as_sdt=2,5",
  
  		"description": "Decided date not preceded by any word or any other date line",
  		"url": "http://scholar.google.com/scholar_case?case=11350538941232186766",
  
  		"description": "Decided date preceded by 'Dated'",
  		"url": "http://scholar.google.com/scholar_case?case=4250138655935640563",
  
  		"description": "Decided date preceded by 'Released'",
  		"url": "http://scholar.google.com/scholar_case?case=8121501341214166807",
  
  		"description": "Decided date preceded by 'Decided' and also by a 'Submitted' date line",
  		"url": "http://scholar.google.com/scholar_case?case=834584264358299037",
  
  		"description": "Decided date preceded by 'Decided' and also by an 'Argued' date line",
  		"url": "http://scholar.google.com/scholar_case?case=15235797139493194004",
  
  		"description": "Decided date preceded by 'Decided' and also by an 'Argued' date line and followed by an 'As Modified' line; most citers of this case appear to use the Decided date, not the As Modified date",
  		"url": "http://scholar.google.com/scholar_case?case=163483131267446711",
  	
  */
  
  /** BEGIN TEST CASES **/
  var testCases = [
  	{
  		"type": "web",
  		"url": "http://scholar.google.com/scholar?q=marbury&hl=en&btnG=Search&as_sdt=1%2C22&as_sdtp=on",
  		"items": "multiple"
  	},
  	{
  		"type": "web",
  		"url": "http://scholar.google.com/scholar?hl=en&q=kelo&btnG=Search&as_sdt=0%2C22&as_ylo=&as_vis=0",
  		"items": "multiple"
  	},
  	{
  		"type": "web",
  		"url": "http://scholar.google.com/scholar?hl=en&q=smith&btnG=Search&as_sdt=0%2C22&as_ylo=&as_vis=0",
  		"items": "multiple"
  	},
  	{
  		"type": "web",
  		"url": "http://scholar.google.com/scholar?hl=en&q=view+of+the+cathedral&btnG=Search&as_sdt=0%2C22&as_ylo=&as_vis=0",
  		"items": "multiple"
  	},
  	{
  		"type": "web",
  		"url": "http://scholar.google.com/scholar?hl=en&q=clifford&btnG=Search&as_sdt=0%2C22&as_ylo=&as_vis=0",
  		"items": "multiple"
  	},
  	{
  		"type": "web",
  		"url": "http://scholar.google.com/scholar_case?case=9834052745083343188&q=marbury+v+madison&hl=en&as_sdt=2,5",
  		"items": [
  			{
  				"itemType": "case",
  				"caseName": "Marbury v. Madison",
  				"creators": [],
  				"dateDecided": "1803",
  				"court": "Supreme Court",
  				"firstPage": "137",
  				"itemID": "1",
  				"reporter": "US",
  				"reporterVolume": "5",
  				"attachments": [
  					{
  						"title": "Google Scholar Judgement",
  						"type": "text/html"
  					}
  				],
  				"tags": [],
  				"notes": [],
  				"seeAlso": []
  			}
  		]
  	},
  	{
  		"type": "web",
  		"url": "http://scholar.google.com/scholar_case?case=11350538941232186766",
  		"items": [
  			{
  				"itemType": "case",
  				"caseName": "Meier ex rel. Meier v. Sun Intern. Hotels, Ltd.",
  				"creators": [],
  				"dateDecided": "April 19, 2002",
  				"court": "Court of Appeals, 11th Circuit",
  				"firstPage": "1264",
  				"itemID": "1",
  				"reporter": "F. 3d",
  				"reporterVolume": "288",
  				"attachments": [
  					{
  						"title": "Google Scholar Judgement",
  						"type": "text/html"
  					}
  				],
  				"tags": [],
  				"notes": [],
  				"seeAlso": []
  			}
  		]
  	},
  	{
  		"type": "web",
  		"url": "http://scholar.google.com/scholar_case?case=4250138655935640563",
  		"items": [
  			{
  				"itemType": "case",
  				"caseName": "Patio Enclosures, Inc. v. Four Seasons Marketing Corp.",
  				"creators": [],
  				"dateDecided": "September 21, 2005",
  				"court": "Court of Appeals, 9th Appellate Dist.",
  				"extra": "{:jurisdiction: Ohio}",
  				"firstPage": "4933",
  				"itemID": "1",
  				"reporter": "Ohio",
  				"reporterVolume": "2005",
  				"attachments": [
  					{
  						"title": "Google Scholar Judgement",
  						"type": "text/html"
  					}
  				],
  				"tags": [],
  				"notes": [],
  				"seeAlso": []
  			}
  		]
  	},
  	{
  		"type": "web",
  		"url": "http://scholar.google.com/scholar_case?case=8121501341214166807",
  		"items": [
  			{
  				"itemType": "case",
  				"caseName": "Click v. Estate of Click",
  				"creators": [],
  				"dateDecided": "June 13, 2007",
  				"court": "Court of Appeals, 4th Appellate Dist.",
  				"extra": "{:jurisdiction: Ohio}",
  				"firstPage": "3029",
  				"itemID": "1",
  				"reporter": "Ohio",
  				"reporterVolume": "2007",
  				"attachments": [
  					{
  						"title": "Google Scholar Judgement",
  						"type": "text/html"
  					}
  				],
  				"tags": [],
  				"notes": [],
  				"seeAlso": []
  			}
  		]
  	},
  	{
  		"type": "web",
  		"url": "http://scholar.google.com/scholar_case?case=834584264358299037",
  		"items": [
  			{
  				"itemType": "case",
  				"caseName": "Kenty v. Transamerica Premium Ins. Co.",
  				"creators": [],
  				"dateDecided": "July 5, 1995",
  				"court": "Supreme Court",
  				"extra": "{:jurisdiction: Ohio}",
  				"firstPage": "415",
  				"itemID": "1",
  				"reporter": "Ohio St. 3d",
  				"reporterVolume": "72",
  				"attachments": [
  					{
  						"title": "Google Scholar Judgement",
  						"type": "text/html"
  					}
  				],
  				"tags": [],
  				"notes": [],
  				"seeAlso": []
  			}
  		]
  	},
  	{
  		"type": "web",
  		"url": "http://scholar.google.com/scholar_case?case=15235797139493194004",
  		"items": [
  			{
  				"itemType": "case",
  				"caseName": "Tinker v. Des Moines Independent Community School Dist.",
  				"creators": [],
  				"dateDecided": "February 24, 1969",
  				"court": "Supreme Court",
  				"firstPage": "503",
  				"itemID": "1",
  				"reporter": "US",
  				"reporterVolume": "393",
  				"attachments": [
  					{
  						"title": "Google Scholar Judgement",
  						"type": "text/html"
  					}
  				],
  				"tags": [],
  				"notes": [],
  				"seeAlso": []
  			}
  		]
  	},
  	{
  		"type": "web",
  		"url": "http://scholar.google.com/scholar_case?case=163483131267446711",
  		"items": [
  			{
  				"itemType": "case",
  				"caseName": "Kaimowitz v. Board of Trustees of U. of Illinois",
  				"creators": [],
  				"dateDecided": "December 23, 1991",
  				"court": "Court of Appeals, 7th Circuit",
  				"firstPage": "765",
  				"itemID": "1",
  				"reporter": "F. 2d",
  				"reporterVolume": "951",
  				"attachments": [
  					{
  						"title": "Google Scholar Judgement",
  						"type": "text/html"
  					}
  				],
  				"tags": [],
  				"notes": [],
  				"seeAlso": []
  			}
  		]
  	},
  	{
  		"type": "web",
  		"url": "https://scholar.google.com/scholar_case?case=608089472037924072",
  		"items": [
  			{
  				"itemType": "case",
  				"caseName": "Kline v. Mortgage Electronic Security Systems",
  				"creators": [],
  				"dateDecided": "February 27, 2013",
  				"court": "Dist. Court",
  				"docketNumber": "Case No. 3:08cv408",
  				"extra": "{:jurisdiction: SD Ohio}",
  				"attachments": [
  					{
  						"title": "Google Scholar Judgement",
  						"type": "text/html"
  					}
  				],
  				"tags": [],
  				"notes": [],
  				"seeAlso": []
  			}
  		]
  	},
  	{
  		"type": "web",
  		"url": "https://scholar.google.de/citations?view_op=view_citation&hl=de&user=INQwsQkAAAAJ&citation_for_view=INQwsQkAAAAJ:u5HHmVD_uO8C",
  		"items": [
  			{
  				"itemType": "journalArticle",
  				"title": "Linked data-the story so far",
  				"creators": [
  					{
  						"firstName": "Christian",
  						"lastName": "Bizer",
  						"creatorType": "author"
  					},
  					{
  						"firstName": "Tom",
  						"lastName": "Heath",
  						"creatorType": "author"
  					},
  					{
  						"firstName": "Tim",
  						"lastName": "Berners-Lee",
  						"creatorType": "author"
  					}
  				],
  				"date": "2009",
  				"itemID": "bizer2009linked",
  				"libraryCatalog": "Google Scholar",
  				"pages": "205–227",
  				"publicationTitle": "Semantic services, interoperability and web applications: emerging concepts",
  				"attachments": [
  					{
  						"title": "Snapshot"
  					},
  					{
  						"title": "Fulltext",
  						"mimeType": "application/pdf"
  					}
  				],
  				"tags": [],
  				"notes": [],
  				"seeAlso": []
  			}
  		]
  	},
  	{
  		"type": "web",
  		"url": "https://scholar.google.de/citations?user=INQwsQkAAAAJ&hl=de&oi=sra",
  		"items": "multiple"
  	},
  	{
  		"type": "web",
  		"url": "https://scholar.google.be/scholar?hl=en&as_sdt=1,5&as_vis=1&q=%22transformative+works+and+cultures%22&scisbd=1",
  		"items": "multiple"
  	}
  ]
  /** END TEST CASES **/
  