Subversion Repositories SmartDukaan

Rev

Rev 3313 | Rev 3446 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
3232 varun.gupt 1
$(function(){
3440 varun.gupt 2
	feedbacks = null;
3232 varun.gupt 3
 
3440 varun.gupt 4
	function updateWithFeedback()	{
5
		$.ajax({
6
			url: '/feedback',
7
			type: 'GET',
8
			success: function(data){
9
//				console.log(data);
10
				feedbacks = eval('(' + data + ')');
11
 
12
				$.each(feedbacks, function(entityId, feedback){
13
					var tr = $('#' + entityId);
14
//					console.log(tr);
15
 
16
					$.each(feedback, function(source, feedback_instruction){
17
						updateCellWithFeedback($(tr).children('td[source=' + source + ']')[0], feedback_instruction);
18
					});
19
				});
20
			}
21
		})
22
	}
23
 
24
	function updateCellWithFeedback(td, feedback)	{
25
		var anchor = $(td).children('.link-conflict');
26
		var source = $(td).attr('source');
27
		$(anchor).html('Filtered');
28
		console.log(anchor);
29
 
30
		if(feedback.type == 'reject')	{
31
			$(td).html('Not Found ' + $('<a>').append($(anchor).clone()).remove().html()).addClass('with-feedback');
32
 
33
		} else	{
34
			var itemInfo = lookupInfoForItem(eval($(td).attr('data')), feedback.selected_item);
35
			$(td).html('<a href="' + baseUrl[source] + itemInfo.url + '">' + itemInfo.price + '</a> ' + $('<a>').append($(anchor).clone()).remove().html()).addClass('with-feedback');
36
		}
37
	}
38
 
39
	function lookupInfoForItem(data, itemName)	{
40
		var info = null;
41
 
42
		$.each(data, function(index, item){
43
 
44
			if (item.name == itemName)	{
45
				info = {name: item.name, price: item.price, url: item.url};
46
			}
47
		});
48
		return info;
49
	}
50
 
51
	$('tbody tr').each(function(index, e)	{
52
 		var class_tr = index % 2 == 0 ? 'even' : 'odd';
53
 		$(e).addClass(class_tr);
54
 		markBestPrice(this);
55
 		$(this).find('td').each(function(){
56
 			if($(this).hasClass('conflict'))	$(this).children('a[href="#"]').addClass('link-conflict');
57
 		});
58
	});
59
 
60
	updateWithFeedback();
61
 
3313 varun.gupt 62
	function markBestPrice(trNode)	{
63
		var tdBestPrice = $(trNode).children('td')[1];
64
		var saholicPrice = parseInt(tdBestPrice.innerHTML);
65
		var bestPrice = saholicPrice;
66
 
67
		$(trNode).find('a[href!="#"]').each(function(index, a){
68
			var price = parseInt(a.innerHTML);
69
 
70
			if (price < bestPrice)	{
71
				bestPrice = price;
72
				tdBestPrice = $(a).parent();
73
			}
74
		});
75
		$(tdBestPrice).addClass('best');
76
 
77
		if (bestPrice < saholicPrice)	$($(trNode).children()[0]).addClass('red');
78
	}
79
 
80
	var baseUrl = {
81
		'flipkart': 'http://www.flipkart.com',
82
		'homeshop18': '',
83
		'infibeam': 'http://www.infibeam.com',
84
		'letsbuy': ''
85
	};
86
 
3440 varun.gupt 87
	$('.conflict a').live('click', function(){
88
		var td = $(this).parent();
3232 varun.gupt 89
 
3440 varun.gupt 90
		var entityId = $(td).parent().attr('id');
91
		var source = $(td).attr('source');
92
 
93
		var data = eval("{results: " + $(td).attr('data') + "}");
94
 
95
		var feedback = null;
96
		var selectedItem = null; 
97
 
98
		if(feedbacks && feedbacks[entityId] && feedbacks[entityId][source])	{
99
			feedback = feedbacks[entityId][source];
100
 
101
			if (feedback.type == 'select')	selectedItem = feedback.selected_item;
102
		}
103
 
104
		if (feedback && feedback.type == 'reject')	{
105
			var text = '<div class="msg">Currently following set is marked <i>rejected</i></div>';
106
 
107
		} else	{
108
			var text = '';
109
		}
110
		text += '<table id="' + entityId + '" source="' + source + '">';
111
 
3232 varun.gupt 112
		for (i in data)	{
3440 varun.gupt 113
			var checked = selectedItem && selectedItem == data[i]['name'] ? 'checked' : ''; 
3232 varun.gupt 114
			text += '<tr>';
115
			text += '<td>' + data[i]['name'] + '</td>';
3313 varun.gupt 116
			text += '<td><a target="_blank" href="' + baseUrl[data[i]['source']] + data[i]['url'] + '">' + data[i]['price'] + '</a></td>';
3440 varun.gupt 117
			text += '<td><input type="radio" name="chosen_one_' + entityId + '" value="' + data[i]['name'] + '" ' + checked + '></td>';
3232 varun.gupt 118
			text += '</tr>';
119
		}
3440 varun.gupt 120
		text += '<tr>';
121
		text += '<td colspan="2" align="center"><a id="feedback-reject" href="#">Reject All</a></td>';
122
		text += '<td><a id="feedback-select" href="#">Save</a></td>';
123
		text += '</tr>';
3232 varun.gupt 124
		text += '</table>';
3440 varun.gupt 125
 
3232 varun.gupt 126
		$.facebox(text);
127
	});
3440 varun.gupt 128
 
129
	$('#feedback-reject').live('click', function(){
130
		var table = $(this).parents('table');
131
		var feedback = {
132
				type: 'reject',
133
				entityId: $(table).attr('id'),
134
				source: $(table).attr('source')
135
		};
136
		postFeedback(feedback, table);
137
	});
138
 
139
	$('#feedback-select').live('click', function(){
140
		var table = $(this).parents('table');
141
		var entityId = $(table).attr('id');
142
 
143
		var selected_item = $("input:radio[name='chosen_one_" + entityId + "']:checked").val();
144
 
145
		if(! selected_item)	{
146
 
147
			showMsg(table, true, 'At least one option must be selected');
148
 
149
		} else	{
150
			var feedback = {
151
					type: 'select',
152
					entityId: entityId,
153
					source: $(table).attr('source'),
154
					selected: selected_item
155
			};
156
			postFeedback(feedback, table);
157
		}
158
	});
159
 
160
	function postFeedback(feedback, table)	{
161
		console.log(feedback);
162
		var feedbackType = feedback.type;
163
		var entityId = feedback.entityId;
164
 
165
		$.ajax({
166
			url: '/feedback',
167
			type: 'POST',
168
			data: feedback,
169
			success: function(msg)	{
170
 
171
				if (feedbackType == 'reject')	{
172
					$("input:radio[name='chosen_one_" + entityId + "']:checked").prop('checked', false);
173
				} else	{
174
 
175
				}
176
				var td = $('#' + feedback.entityId).children('td[source=' + feedback.source + ']')[0];
177
				updateCellWithFeedback(td, {type: feedback.type, selected_item: feedback.selected});
178
				showMsg(table, false, 'Your feedback has been saved successfully.');
179
			},
180
			error: function(msg)	{
181
				showMsg(table, true, 'Error! please try again.');
182
			}
183
		});
184
	}
185
 
186
	function showMsg(table, is_error, msg)	{
187
		msg_class = is_error ? 'error' : 'notice';
188
 
189
		if($(table).siblings('.msg').length > 0)	{
190
			var msgDiv = $(table).siblings('.msg')[0];
191
			$(msgDiv).html(msg);
192
 
193
		} else	{
194
			$(table).before('<div class="msg">' + msg + '</div>');
195
		}
196
	}
197
 
198
	$('#facebox .close').live('click', function(){});
3232 varun.gupt 199
});