var TagR = {}

function SearchItem(id,entry){
	this.id = id;
	this.entries = [];
	this.addEntry(entry);
	
}

SearchItem.prototype.tagCheck = function(word){
	for (var i = 0; i < this.entries.length; i++) {
		for (var j = 0; j < this.entries[i].keywords.length; j++) {
			if (word.toLowerCase() == this.entries[i].keywords[j].toLowerCase())
				return '<span style="color:#c99e54">' + word + '</span>';
		}
		
	}
	
	return word;
}

SearchItem.prototype.getTitleString = function(title){
	var t = title.split(' ');
	var str = '';
	for (var i = 0; i < t.length; i++)
		str += this.tagCheck(t[i]) + ' ';
	
	return str;
}

SearchItem.prototype.getTagsString = function(tags){
	//return tags.join(', ');
	for (var i = 0; i < tags.length; i++)
		tags[i] = tags[i].split('_');
		
	
	var str = '';
	
	for (i = 0; i < tags.length; i++) {
		for (var j = 0; j < tags[i].length; j++)
			
			str += " " + this.tagCheck(tags[i][j]);
				
		str += ',';
	}
			
	return str;
	
	
	
}

TagR.etsyCallback = function(response){
	
	if (!response.ok)
		return;
	
	var results = response.results;
	
	for (var i = 0; i < results.length; i++) {
	
		var id = results[i].listing_id;
		var title = results[i].title;
		var url = results[i].Images[0].url_75x75;
		var tags = results[i].tags;
	
		if (title.length > 85) title = title.substr(0,84)  + '...';

		var h = '<img alt="' + title + '" style="float:left;margin:0px 2px 6px;width:50px;height:50px" src="' + url + '"/><p style="text-align:left;font-weight:bold;font-size:12px;margin:0px">' + this.searchItems[id].getTitleString(title) + '</p>';
	
		var t = '<p style="width:420px;color:#463624;text-align:justify;font-weight:bold;font-size:9px;margin:10px auto"><span style="color:black">Tags:</span> ' + this.searchItems[id].	getTagsString(tags) + '</p>'
	
		document.getElementById('H' + id).innerHTML = h + t;
	
	}
	
	this.listingOffset += results.length;
	
	if (this.listingOffset >= this.ids.length){
		supA.print();
		return;
	}
	
	this.getListings('GO');

}

SearchItem.prototype.addEntry = function(entry){
	var e = {};
	var p = entry.getValueOf('ga:pagePath');
	 
	
	
	var keywords = this.extract('ga_search_query',p).split('+');
	e.keywords = [];
	for (var i = 0; i < keywords.length; i++){
		if (keywords[i] != '')
			e.keywords.push(keywords[i]);
	}
	
	
	e.type = this.extract('ga_search_type',p);
	if (e.type == '') e.type = 'filtered';
	if (e.type == 'all') e.type = 'all items';
	e.page = this.extract('ga_page',p);
	
	this.entries.push(e);
}

SearchItem.prototype.extract = function(name,url){
	var pos = url.indexOf(name)
		if (pos != -1){
			start = pos + name.length + 1;
			end = url.indexOf('&',start);
			if (end == -1) end = url.length;
				return url.substring(start,end);
		}
		
	return '';
}

SearchItem.prototype.drawTable = function(){
	
	var str = '<div style = "margin-bottom:10px;" class="box">'
	
	str += '<div style="text-align:left;margin-top:0px;padding:0px" id="H' + this.id + '"></div>';
	
	
	str += '<div style="margin-left:auto;margin-right:auto;width:570px" id="T' + this.id + '"></div></div>';
	
	TagR.tables.innerHTML += str;
	
	
	
	var data = new google.visualization.DataTable(); 
		data.addColumn('string', 'Search Type');
        data.addColumn('string', 'Search Terms'); 
        data.addColumn('string', 'Page Found On');
        data.addRows(this.entries.length); 
	
	for (var i = 0; i < this.entries.length; i++){
		data.setCell(i, 0, this.entries[i].type);
		data.setCell(i, 1, this.entries[i].keywords.join(', '));
		data.setCell(i, 2, this.entries[i].page);
	}
	
	var table = new google.visualization.Table(document.getElementById('T' + this.id)); 
	
	table.draw(data, {showRowNumber: false,allowHtml:true,width:'570px',cssClassNames:{headerRow: 'headerCells',headerCell:'headerCells',tableCell:'cell'}});
	
	//this.draw();
}

TagR.convertDate = function(date){
	var m = date.getMonth()+1
	if (m < 10) m = '0' + m;
	var d = date.getDate();
	if (d < 10) d = '0' + d;
	return date.getFullYear() + '-' + m + '-' + d;
}

TagR.dateChange = function(dates){
	TagR.searchItems = {};
	TagR.ids = [];
	TagR.tables.innerHTML = '';
	
	var d1 = TagR.convertDate(dates[0]); 
	var d2 = TagR.convertDate(dates[1]);
	TagR.getEtsySearch(d1,d2);
	
}

TagR.init = function(){
	
	controller.main.innerHTML += '<div id="dateChooser" class="box"><input onClick="DateChooser.click(this)" type="radio" name="group1" value="LAST_60_DAYS" /> Last 60 Days <input onClick="DateChooser.click(this)" type="radio" name="group1" value="LAST_30_DAYS" /> Last 30 Days <input id="dradio" onClick="DateChooser.click(this)" type="radio" name="group1" value="LAST_7_DAYS" checked /> Last 7 Days <input onClick="DateChooser.click(this)" type="radio" name="group1" value="YESTERDAY" /> Yesterday <input onClick="DateChooser.click(this)" type="radio" name="group1" value="TODAY" /> Today</div><div id="tables"></div>'
	
	this.tables = document.getElementById('tables');

	DateChooser.callback = TagR.dateChange;
	DateChooser.init();
	
	
}



TagR.searchItems = {}
TagR.ids = [];

TagR.getEtsySearch = function(startDate,endDate){
	var q = new GAQuery();
	q.setOptions(['dimensions=ga:pagePath','metrics=ga:uniquePageviews','filters=ga:pagePath=@ga_search_query','max-results=10000','start-date=' + startDate,'end-date=' + endDate]);
	q.callback = TagR.etsySearchCallback;
	q.errorHandler = TagR.etsySearchError;
	q.query();
}

TagR.etsySearchCallback = function(result){
	
	var entries = result.feed.getEntries();
	
	if  (entries.length == 0){
		controller.printMsg('No products found through Etsy search during this time period',this.tables);
		supA.print();
		return;
	}
	
	for (var i = 0; i < entries.length; i++){
		var id = SLQuery.getItemId(entries[i].getValueOf('ga:pagePath'));
		if (id == '')
			continue;
		
		if (TagR.searchItems[id]){
			TagR.searchItems[id].addEntry(entries[i]);
		}
		else {
			TagR.searchItems[id] = new SearchItem(id,entries[i]);
			TagR.ids.push(id);
		}
	}
	
	for(var prop in TagR.searchItems) {
		if(TagR.searchItems.hasOwnProperty(prop))
				TagR.searchItems[prop].drawTable();
	}
	
	TagR.getListings('START');
	
 }
 
 
 TagR.getListings = function(status){
	
	if (status == 'START'){
		this.listingOffset = 0;
	}
	
	var q2 = new ETSYQuery(2,'/listings/',[TagR.ids.slice(this.listingOffset,this.listingOffset + 100)],'Images(url_75x75):1:0',{limit:100,offset:0,fields:'listing_id,title,tags'});
	q2.callbackStr = 'TagR.etsyCallback';
	q2.query();
	
 
 }
 
 
TagR.etsySearchError = function(e){
	etsyGoogle.handleError(e);
}
 
 


