﻿var purchaseId = null;
var contentId = null;
var slider;
var sliderValue = 0;
var getStatusTimeout = null;

function downloadPurchase(id, cid) {
	if ((id != null) && (id.match(/^[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}$/))) {
		purchaseId = id;
		if ((cid != null) && (cid.match(/^[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}$/))) {
			contentId = cid;
		}
		else {
			contentId = null;
		}
		scOverlay.scShowMessage('<h2>Ostoksen lataus</h2><p style="width: 300px;">Ostos vesileimataan ja ladattava ZIP -paketti luodaan. Valmistuminen voi kestää muutaman minuutin. Ole hyvä ja odota...</p><div id="slidercontainer"></div><p id="sliderstatus" class="purchaseinfo"><img src="/gfx/ajax-loader.gif" alt="" /> <span></span></p>', function() {
			try {
				if (getStatusTimeout != null) {
					clearTimeout(getStatusTimeout);
					getStatusTimeout = null;
				}
			}
			catch (err) {
			}
		}).scShowCloseButton('/gfx/icons/24x24/poista-tyhjenna.gif', 24, 24);

		try {
			// Vesileimataan tiedosto 1/10
			slider = $('#slidercontainer').scProgressbar({ animationDuration: 3000 });
			//setTimeout('updateBar()', 200);
			getStatus();

		} catch (err) {
			if (window.console) console.log("Virhe2: " + err);
		}
	}

	return false;
}

function getStatus() {
	try {
		$.ajax({
			url: '/purchase/' + purchaseId + '/status' + ((contentId != null) ? '/' + contentId : ''),
			dataType: "json",
			type: "GET",
			processData: false,
			contentType: "application/json; charset=utf-8",
			timeout: 30000,
			success: function(result, textStatus, request) {
				if ((result != null) && (result.d != null)) {
					switch (result.d.Status) {
						case 20:
							scOverlay.scChangeMessage('<h2>Ostoksen lataus</h2><p style="width: 300px;">Et ole enää kirjautuneena. Kirjaudu sisään ja yritä uudelleen.</p><p>&raquo; <a href="#" onclick="javascript: window.location.reload(); return false;">Kirjaudu sisään</a></p>');
							break;

						case 21:
							scOverlay.scChangeMessage('<h2>Ostoksen lataus</h2><p style="width: 300px;">Kirjautumistietojesi haku epäonnistui. Mikäli virhetilanne jatkuu, ole yhteydessä <a href="/palaute/">asiakastukeen</a>.</p><p>&raquo; <a href="#" onclick="javascript: restartPurchaseDownload(); return false;">Yritä uudelleen</a></p>');
							break;

						case 100:
						case 101:
							printStatus(result.d);
							getStatusTimeout = setTimeout('getStatus()', 2500);
							break;

						case 200:
							$('#sliderstatus > span').text('ZIP -paketti valmis..');
							slider.scProgressbar("set", 100);
							$('#sliderstatus > img').remove();
							getStatusTimeout = setTimeout(function() { downloadPackage(result.d.DownloadUrl); }, 600);
							break;

						case 40:
						case 41:
						case 80:
						default:
							scOverlay.scChangeMessage('<h2>Ostoksen lataus</h2><p style="width: 300px;">Ostoksen käsittelyssä tapahtui odottamaton virhe (koodi: ' + result.d.Status + ')! Mikäli virhetilanne jatkuu, ole yhteydessä <a href="/palaute/">asiakastukeen</a>.</p><p>&raquo; <a href="#" onclick="javascript: restartPurchaseDownload(); return false;">Yritä uudelleen</a></p>');
							break;
					}
				}
				else {
					// Virhe
					scOverlay.scChangeMessage('<h2>Ostoksen lataus</h2><p style="width: 300px;">Ostoksen käsittelyssä tapahtui odottamaton virhe! Mikäli virhetilanne jatkuu, ole yhteydessä <a href="/palaute/">asiakastukeen</a>.</p><p>&raquo; <a href="#" onclick="javascript: getStatus(); return false;">Yritä uudelleen</a></p>');
				}
			},
			error: function(request, textStatus, error) {
				scOverlay.scChangeMessage('<h2>Ostoksen lataus</h2><p style="width: 300px;">Ostoksen käsittelyssä tapahtui odottamaton virhe! Mikäli virhetilanne jatkuu, ole yhteydessä <a href="/palaute/">asiakastukeen</a>.</p><p>&raquo; <a href="#" onclick="javascript: getStatus(); return false;">Yritä uudelleen</a></p>');
			}
		});
	}
	catch (err) {
	}
}

function printStatus(data) {
	if (data.Files > 0) {
		if (data.FilesReady >= data.Files - 1) {
			$('#sliderstatus > span').text('Luodaan ZIP -paketti..');
		}
		else {
			$('#sliderstatus > span').text('Vesileimataan MP3 -tiedostoa.. ' + (data.FilesReady) + '/' + (data.Files - 1));
		}
		slider.scProgressbar("set", 1 + Math.round((data.FilesReady / (data.Files + 2)) * 99));
	}
	else {
		$('#sliderstatus > span').text('Paketin tekoa valmistellaan..');
		slider.scProgressbar("set", 1);
	}
}

function downloadPackage(url) {
	scOverlay.scChangeMessage('<h2>Ostoksen lataus</h2><p style="width: 300px;">Ostoksesi on valmis ladattavaksi.</p><p>&raquo; <a href="' + url + '" onclick="javascript: scOverlay.scClose(); return true;">Lataa ostos</a></p>');
}

var searchBoxFocusOut = null;
function initPage() {
	// Init search box
	$('#info').scTextbox({ defaultcolor: '#999', color: '#000' }).scSearchV4({
		url: '/search/suggestion',
		showResult: function(query, data) {
			var results = $('#SearchResultData');
			results.empty();
			if ((data != null) && (data.d != null)) {

				if ((data.d.Items != null) && (data.d.Items.length > 0)) {
					var table = $('<ul></ul>');
					$.each(data.d.Items, function(idx, item) {
						var tr = $('<li></li>');
						var contr = '';
						if (item.Contributors) {
							$.each(item.Contributors, function(i, contributor) {
								if (i > 0) {
									contr += ', ';
								}
								contr += contributor;
							});
						}
						if (item.Type[0] == 'ar') {
							tr.append('<i>Kirjailija</i>')
								.append($('<div></div>').text(item.Name))
								.click(function(e) {
									e.preventDefault();
									window.location = '/haku/tekija/' + item.Id + '/';
								});
							table.append(tr);
						}
						else if (item.Type[0] == 'ab') {
							tr.append($('<i></i>').text(contr))
								.append($('<div></div>').text(item.Name))
								.click(function(e) {
									e.preventDefault();
									window.location = '/product/' + item.Id;
								});
							table.append(tr);
						}
					});

					results.html('<p>Hakutuloksia: ' + data.d.QueryHits + ' kpl</p>');
					results.prepend(table);
				}
				else {
					results.html('<p><i>Ei tuloksia</i></p>');
				}
			}
			else {
				results.html('<p><i>Ei tuloksia</i></p>');
			}
		},
		requestError: function() {
			$('#SearchResultData').remove();
		},
		requestBegin: function(query) {
			$('#SearchResultData').prepend('<p><img src="/gfx/ajax-loader.gif" alt="" style="vertical-align: middle; margin-right: 3px;" /> Haetaan..</p>');
		},
		isEnabled: function() {
			return true;
		},
		productFilter: function() {
			//return 'ab ar^2.0';
			return 'ab';
		},
		formatFilter: function() {
			return '';
		},
		onEnterPressed: function() {
			window.location = '/haku/?f=' + encodeURIComponent($('#info').val());
		}
	}).focusout(function() {
		if (searchBoxFocusOut) {
			try {
				clearTimeout(searchBoxFocusOut);
				searchBoxFocusOut = null;
			}
			catch (err) {
			}
		}
		searchBoxFocusOut = setTimeout(function() { $('#SearchResultData').empty(); }, 300);
	}).focusin(function() {
		if (searchBoxFocusOut) {
			try {
				clearTimeout(searchBoxFocusOut);
				searchBoxFocusOut = null;
			}
			catch (err) {
			}
		}
	});
	
	$('#searchSubmitButton').click(function(e) {
		e.preventDefault();
		window.location = '/haku/?f=' + encodeURIComponent($('#info').val());
	});

	$('#basketWrapper').scBasket({
		showEmptyBasket: function(elem) {
			elem.empty().append($('<div class="basketMessage"></div>').text("Ostoskorisi on tyhjä"));
		},
		formatBasket: function(elem, data) {
			var selectList = $(document.createElement('select')).attr('id', 'basketSelect');

			$.each(data.d.Items, function(idx, value) {
				selectList.append($('<option></option>').text(value.Name + ' 1 KPL ' + ((value.Price.Value.toFixed) ? value.Price.Value.toFixed(2) : value.Value.Price)));
			});

			elem.empty().append($(document.createElement('table')).append(
						$(document.createElement('tr')).append(
						$(document.createElement('td')).attr('id', 'basketMessageTD').append(
						$(document.createElement('div')).html(data.d.Items.length + ' kirja' + ((data.d.Items.length > 1) ? 'a' : '') + ' hintaan ' + ((data.d.Price.toFixed) ? data.d.Price.toFixed(2) : data.d.Price) + '&nbsp;&euro;')
						)
						).append(
						$(document.createElement('td')).attr('id', 'basketSelectTD').append(
						$(document.createElement('div')).attr('id', 'tableBasketWrapper').append(
						$(document.createElement('div')).attr('id', 'basketSelectWrapper').append(
						$(document.createElement('div')).attr('id', 'basketSelectWrapperR').append(
							selectList
						)
						)
						)
						)
						).append(
						$(document.createElement('td')).attr('id', 'basketCashierTD').addClass('basketCashierBgk').attr('align', 'right').append(
						$(document.createElement('a')).attr('href', '/ostoskori/').text('Kassalle')
						)
						)
					));
		},
		waitHTML: "<p>Päivitetään ostoskoria.. Odota hetki!</p>",
		customFormatBasket: (typeof customBasketView == 'function') ? customBasketView : null,
		errorHTML: '<p>Ostoskorin käsittelyssä tapahtui virhe!</p><p>Mikäli virhetilanne jatkuu, ole yhteydessä <a href="/palaute/">asiakastukeen</a></p>',
		errorBtnImage: '/gfx/icons/24x24/poista-tyhjenna.gif',
		errorBtnWidth: 24,
		errorBtnHeight: 24,
		animationTarget: '#basketWrapper'
	});

	// Menu status
	try {
		if (cookie.has('menu.open')) {
			$('#menustack > div > div[menucat=' + cookie.get('menu.open') + ']').addClass('current');
		}
		$('#menustack > div > div.menuItem').click(function(e) {
			cookie.add('menu.open', $(this).attr('menucat'));
		});
	}
	catch (err) {
	}

	try {
		$('#LoginBtn').attr('href', '/kirjaudu/?ReturnUrl=' + escape(window.location));
		$('#LogoutBtn').attr('href', '/kirjaudu/ulos/?ReturnUrl=' + escape(window.location));
	}
	catch (err) {
	}

	$('.formContainer input.field').scTextbox({ color: '#000' });
}

function frontpageShowHideList(button) {
	try {
		var btn = $(button);
		if (btn.text() == 'Lisää') {
			btn.parent().parent().parent().find('.hide').fadeIn();
			btn.text('Vähemmän');
		}
		else {
			btn.parent().parent().parent().find('.hide').fadeOut();
			btn.text('Lisää');
		}
	}
	catch (err) {
	}
}

function _loadOthers(id, loadid, title, type, cids, page, allReady, idx, curId) {
	try {
		$.ajax({
			url: '/contentlist/' + cids + '/FI/' + type + '/' + page,
			dataType: "json",
			type: "GET",
			processData: false,
			contentType: "application/json; charset=utf-8",
			timeout: 120000,
			success: function(result, textStatus, request) {
				if ((result != null) && (result.d != null) && (result.d.Items != null)) {
					var elem = $('#' + id);
					if (page == 1) {
						if ((curId) && (result.d.Items.length == 1) && (result.d.Items[0].Id == curId)) {
							// No other products..
							$('#OtherProducts').empty();
							return;
						}
						else {
							elem.append('<div class="bookImages"></div>');
							elem.append('<div class="bookNames"></div>');
							elem.append('<div class="bookPrices"></div>');
							elem.append('<div class="bookAddToCartActions"></div>');
						}
					}
					//elem = elem.find('.items');
					var row1 = elem.find('div.bookImages:last');
					var row2 = elem.find('div.bookNames:last');
					var row3 = elem.find('div.bookPrices:last');
					var row4 = elem.find('div.bookAddToCartActions:last');
					var cellCount = row1.find('div.bookImage').size();
					for (var i = 0; i < result.d.Items.length; ++i) {
						var it1 = null;
						var it2 = null;
						var it3 = null;
						var it4 = null;

						if ((curId) && (result.d.Items[i].Id == curId)) {
							continue;
						}
						if (result.d.Items[i].Type == 'AB') {
							if (result.d.Items[i].ImageUrl) {
								it1 = $('<div class="bookImage"></div>').attr('title', result.d.Items[i].Name).append(
									$('<a></a>').attr('href', result.d.Items[i].Url).append($('<img />').attr('src', result.d.Items[i].ImageUrl).attr('title', result.d.Items[i].Name)));
							}
							else {
								it1 = $('<div class="bookImage"></div>').attr('title', result.d.Items[i].Name);
							}
							it2 = $('<div class="bookName"></div>').append($('<a></a>').attr('href', result.d.Items[i].Url).text(result.d.Items[i].Name));
							it3 = $('<div class="bookPrice"></div>').append(((result.d.Items[i].Price.Value.toFixed) ? result.d.Items[i].Price.Value.toFixed(2) : result.d.Items[i].Price.Value));
							it4 = $('<div class="bookAddToCart"></div>').append('<a class="bookAddToCartButton" href="#" onclick="javascript: $.scBasket.add(\'' + result.d.Items[i].Id + '\'); return false;">Lisää ostoskoriin</a>');
						}

						if (it1) {
							if (++cellCount % 5 == 0) {
								row1 = $('<div class="bookImages"></div>');
								row2 = $('<div class="bookNames"></div>');
								row3 = $('<div class="bookPrices"></div>');
								row4 = $('<div class="bookAddToCartActions"></div>');
								elem.append(row1);
								elem.append(row2);
								elem.append(row3);
								elem.append(row4);
								cellCount = 1;
							}
							row1.append(it1);
							row2.append(it2);
							row3.append(it3);
							row4.append(it4);
						}
					}
					_loadOthers(id, loadid, title, type, cids, page + 1, null, idx, curId);
				}
				else {

				}
				if (allReady) {
					allReady[idx] = true;
					var result = true;
					for (var i = 0; i < allReady.length; i++) {
						if (!allReady[i]) {
							result = false;
							break;
						}
					}
					if (result) {
						$('#OtherLoading').hide();

						if ($('#OtherProducts div.content > div.bookImages').size() == 0) {
							$('#OtherProductsHeader').hide();
						}
						else {
							$('#OtherProducts div.content').append('<div class="clearBoth"></div>');
						}
					}
				}
			},
			error: function(request, textStatus, error) {
				if (allReady) {
					allReady[idx] = true;
					var result = true;
					for (var i = 0; i < allReady.length; ++i) {
						if (!allReady[i]) {
							result = false;
							break;
						}
					}
					if (result) {
						$('#OtherLoading').hide();

						if ($('#OtherProducts div.content > div.bookImages').size() == 0) {
							$('#OtherProductsHeader').hide();
						}
						else {
							$('#OtherProducts div.content').append('<div class="clearBoth"></div>');
						}
					}
				}
			}
		});
	}
	catch (err) {
	}
}

function loadOtherAudiobooks(id, loadid, cids, allReady, idx, curId) {
	var cidlist;
	for (var i = 0; i < cids.length; ++i) {
		if (cidlist) {
			cidlist += '%20' + cids[i];
		}
		else {
			cidlist = cids[i];
		}
	}

	_loadOthers(id, loadid, 'Äänikirjat:', 'Audiobook', cidlist, 1, allReady, idx, curId);
}


function lastPurchased(page, getall) {
	try {
		$.ajax({
			url: '/lastpurchased/json/Audiobook/FI/12/' + page,
			dataType: "json",
			type: "GET",
			processData: false,
			contentType: "application/json; charset=utf-8",
			timeout: 120000,
			success: function(result, textStatus, request) {
				try {
					if ((result != null) && (result.d != null) && (result.d.Items != null)) {
						var elem = $('#mostsalesmade div.content');
						if (page == 1) {
							if (result.d.Items.length == 0) {
								// No other products..
								$('#mostsalesmade').empty();
								return;
							}
							else {
								elem.append('<div class="bookImages"></div>');
								elem.append('<div class="bookNames"></div>');
								elem.append('<div class="bookPrices"></div>');
								elem.append('<div class="bookAddToCartActions"></div>');
							}
						}
						//elem = elem.find('.items');
						var row1 = elem.find('div.bookImages:last');
						var row2 = elem.find('div.bookNames:last');
						var row3 = elem.find('div.bookPrices:last');
						var row4 = elem.find('div.bookAddToCartActions:last');
						var cellCount = row1.find('div.bookImage').size();
						for (var i = 0; i < result.d.Items.length; ++i) {
							var it1 = null;
							var it2 = null;
							var it3 = null;
							var it4 = null;

							if (result.d.Items[i].Type == '16') {
								it1 = $('<div class="bookImage"></div>').attr('title', result.d.Items[i].Title)
									.append(
										$('<a></a>').attr('href', '/product/' + result.d.Items[i].Id)
											.append(
												$('<img />').attr('src', '/productimage/100/' + result.d.Items[i].Id)
													.attr('title', result.d.Items[i].Title)
												)
											);
								it2 = $('<div class="bookName"></div>').append($('<a></a>').attr('href', '/product/' + result.d.Items[i].Id).text(result.d.Items[i].Title));
								if (result.d.Items[i].Price != null) {
									it3 = $('<div class="bookPrice"></div>').append(((result.d.Items[i].Price.Value.toFixed) ? result.d.Items[i].Price.Value.toFixed(2) : result.d.Items[i].Price.Value));
									it4 = $('<div class="bookAddToCart"></div>').append('<a class="bookAddToCartButton" href="#" onclick="javascript: $.scBasket.add(\'' + result.d.Items[i].Id + '\'); return false;">Lisää ostoskoriin</a>');
								}
								else {
									it3 = $('<div class="bookPrice"></div>');
									it4 = $('<div class="bookAddToCart"></div>');
								}
							}

							if (it1) {
								if (++cellCount % 5 == 0) {
									row1 = $('<div class="bookImages hide"></div>');
									row2 = $('<div class="bookNames hide"></div>');
									row3 = $('<div class="bookPrices hide"></div>');
									row4 = $('<div class="bookAddToCartActions hide"></div>');
									elem.append(row1);
									elem.append(row2);
									elem.append(row3);
									elem.append(row4);
									cellCount = 1;
								}
								row1.append(it1);
								row2.append(it2);
								row3.append(it3);
								row4.append(it4);
							}
						}
						if (getall) {
							lastPurchased(page + 1, getall);
						}
					}
					else {

					}
				}
				catch (err) {
				}

				$('#MostSalesMadeLoading').hide();

				if ($('#mostsalesmade div.content > div.bookImages').size() == 0) {
					$('#mostsalesmade').hide();
				}
				else {
					$('#mostsalesmade div.content').append('<div class="clearBoth"></div>');
				}
			},
			error: function(request, textStatus, error) {
				$('#MostSalesMadeLoading').hide();

				if ($('#mostsalesmade div.content > div.bookImages').size() == 0) {
					$('#mostsalesmade').hide();
				}
				else {
					$('#mostsalesmade div.content').append('<div class="clearBoth"></div>');
				}
			}
		});
	}
	catch (err) {
	}
}


function topList(page, getall) {
	try {
		$.ajax({
			url: '/toplist/json/Audiobook/all/FI/12/' + page,
			dataType: "json",
			type: "GET",
			processData: false,
			contentType: "application/json; charset=utf-8",
			timeout: 120000,
			success: function(result, textStatus, request) {
				try {
					if ((result != null) && (result.d != null) && (result.d.Items != null)) {
						var elem = $('#topcontentlist div.content');
						if (page == 1) {
							if (result.d.Items.length == 0) {
								// No other products..
								$('#topcontentlist').empty();
								return;
							}
							else {
								elem.append('<div class="bookImages"></div>');
								elem.append('<div class="bookNames"></div>');
								elem.append('<div class="bookPrices"></div>');
								elem.append('<div class="bookAddToCartActions"></div>');
							}
						}
						//elem = elem.find('.items');
						var row1 = elem.find('div.bookImages:last');
						var row2 = elem.find('div.bookNames:last');
						var row3 = elem.find('div.bookPrices:last');
						var row4 = elem.find('div.bookAddToCartActions:last');
						var cellCount = row1.find('div.bookImage').size();
						for (var i = 0; i < result.d.Items.length; ++i) {
							var it1 = null;
							var it2 = null;
							var it3 = null;
							var it4 = null;

							if (result.d.Items[i].Type == '16') {
								it1 = $('<div class="bookImage"></div>').attr('title', result.d.Items[i].Title)
									.append(
										$('<a></a>').attr('href', '/product/' + result.d.Items[i].Id)
											.append(
												$('<img />').attr('src', '/productimage/100/' + result.d.Items[i].Id)
													.attr('title', result.d.Items[i].Title)
												)
											);
								it2 = $('<div class="bookName"></div>').append($('<a></a>').attr('href', '/product/' + result.d.Items[i].Id).text(result.d.Items[i].Title));
								if (result.d.Items[i].Price != null) {
									it3 = $('<div class="bookPrice"></div>').append(((result.d.Items[i].Price.Value.toFixed) ? result.d.Items[i].Price.Value.toFixed(2) : result.d.Items[i].Price.Value));
									it4 = $('<div class="bookAddToCart"></div>').append('<a class="bookAddToCartButton" href="#" onclick="javascript: $.scBasket.add(\'' + result.d.Items[i].Id + '\'); return false;">Lisää ostoskoriin</a>');
								}
								else {
									it3 = $('<div class="bookPrice"></div>');
									it4 = $('<div class="bookAddToCart"></div>');
								}
							}

							if (it1) {
								if (++cellCount % 5 == 0) {
									row1 = $('<div class="bookImages hide"></div>');
									row2 = $('<div class="bookNames hide"></div>');
									row3 = $('<div class="bookPrices hide"></div>');
									row4 = $('<div class="bookAddToCartActions hide"></div>');
									elem.append(row1);
									elem.append(row2);
									elem.append(row3);
									elem.append(row4);
									cellCount = 1;
								}
								row1.append(it1);
								row2.append(it2);
								row3.append(it3);
								row4.append(it4);
							}
						}
						if (getall) {
							lastPurchased(page + 1, getall);
						}
					}
					else {

					}
				}
				catch (err) {
				//	alert(err);
				}

				$('#TopContentListLoading').hide();

				if ($('#topcontentlist div.content > div.bookImages').size() == 0) {
					$('#topcontentlist').hide();
				}
				else {
					$('#topcontentlist div.content').append('<div class="clearBoth"></div>');
				}
			},
			error: function(request, textStatus, error) {
				$('#TopContentListLoading').hide();

				if ($('#topcontentlist div.content > div.bookImages').size() == 0) {
					$('#topcontentlist').hide();
				}
				else {
					$('#topcontentlist div.content').append('<div class="clearBoth"></div>');
				}
			}
		});
	}
	catch (err) {
	}
}


$.fn.scSearchV4 = function(options, param) {
	var args = arguments, opts = $.extend({
		organisationId: '00000000-0000-0000-0000-000000000000',
		changeDelay: 100,
		minInputLength: 2,
		itemsPerPage: 20,
		productFilter: function() {
			return null;
		},
		formatFilter: function() {
			return null;
		},
		isEnabled: function() {
			return true;
		}
	}, options);

	return this.each(function() {
		var $this = $(this), lastKeyPressCode, timeout, prev;

		function onGetResultComplete(value, result) {
			//	if (window.console) {
			//		window.console.log('onGetResultComplete: ' + value);
			//	}
			if (typeof (opts.showResult) == 'function') {
				opts.showResult(value, result);
			}
			else {
			}
		}

		function getResult(value, page) {
			//	if (window.console) {
			//		window.console.log('getResult: ' + value + '  ' + opts.url);
			//	}

			if (!opts.url) {
				return;
			}

			if (!opts.isEnabled()) {
				onGetResultComplete(value, null);
			}

			// Abort ongoing ajax request (if any)
			try {
				ajaxRequest.abort();
			} catch (err) {
			}

			if (typeof (opts.requestBegin) == 'function') {
				opts.requestBegin(value);
			}

			ajaxRequest = $.ajax({
				url: opts.url,
				type: "GET",
				processData: true,
				// contentType: "application/json; charset=utf-8",
				data: {
					q: value,
					p: page,
					i: opts.itemsPerPage,
					t: opts.productFilter(),
					f: opts.formatFilter()
				},
				timeout: 60000,
				success: function(result) {
					onGetResultComplete(value, result);
				},
				error: function() {
					if (typeof (opts.requestError) == 'function') {
						opts.requestError();
					}
				}
			});
		}

		function onChange() {
			//	if (window.console) {
			//		window.console.log('onChange: ' + prev);
			//	}

			// Skip del, shift, capslock etc keys
			if (lastKeyPressCode == 46 || (lastKeyPressCode > 8 && lastKeyPressCode < 32)) {
				return;
			}

			var value = $this.val();
			if (value == prev) {	// Same
				return;
			}
			prev = value;
			if (value.length >= opts.minInputLength) { // At least 1 characters
				getResult(value, 1);
			}
		}

		function onEnterPressed() {
			if (typeof (opts.onEnterPressed == 'function')) {
				opts.onEnterPressed();
			}
			else {
				onChange();
			}
		}

		function retry() {
			//	if (window.console) {
			//		window.console.log('retry: ' + $this.data('initialized'));
			//	}
			opts = $this.data('options');
			getResult($this.val(), 1);
		}

		function showPage(page) {
			opts = $this.data('options');
			getResult($this.val(), page);
		}

		if ((!args.length || typeof options == "object") && !$this.data("initialized")) {
			$this.data("initialized", true);
			$this.data("options", opts);
			$this.keypress(function(e) {
				lastKeyPressCode = e.keyCode;
				switch (e.keyCode) {
					case 38: // Up
						e.preventDefault();
						break;

					case 40: // Down
						e.preventDefault();
						break;

					case 9: // Tab
						if (timeout) {
							clearTimeout(timeout);
						}
						onChange();
						break;

					case 13: // Return
						e.preventDefault();
						if (timeout) {
							clearTimeout(timeout);
						}
						onEnterPressed();
						break;

					default:
						if (timeout) {
							clearTimeout(timeout);
						}
						timeout = setTimeout(function() { onChange(); }, opts.changeDelay);
						break;
				}
			});
		} else if (typeof options == "string" && options == "doSearch") {
			retry();
		} else if (typeof options == "string" && options == "showPage") {
			showPage(param);
		}
	});
};



// -----------------------------------------------------------


//v1.7
// Flash Player Version Detection
// Detect Client Browser type
// Copyright 2005-2007 Adobe Systems Incorporated.  All rights reserved.
var isIE = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false;
var isWin = (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false;
var isOpera = (navigator.userAgent.indexOf("Opera") != -1) ? true : false;

function ControlVersion() {
	var version;
	var axo;
	var e;

	// NOTE : new ActiveXObject(strFoo) throws an exception if strFoo isn't in the registry

	try {
		// version will be set for 7.X or greater players
		axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
		version = axo.GetVariable("$version");
	} catch (e) {
	}

	if (!version) {
		try {
			// version will be set for 6.X players only
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");

			// installed player is some revision of 6.0
			// GetVariable("$version") crashes for versions 6.0.22 through 6.0.29,
			// so we have to be careful. 

			// default to the first public version
			version = "WIN 6,0,21,0";

			// throws if AllowScripAccess does not exist (introduced in 6.0r47)		
			axo.AllowScriptAccess = "always";

			// safe to call for 6.0r47 or greater
			version = axo.GetVariable("$version");

		} catch (e) {
		}
	}

	if (!version) {
		try {
			// version will be set for 4.X or 5.X player
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
			version = axo.GetVariable("$version");
		} catch (e) {
		}
	}

	if (!version) {
		try {
			// version will be set for 3.X player
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
			version = "WIN 3,0,18,0";
		} catch (e) {
		}
	}

	if (!version) {
		try {
			// version will be set for 2.X player
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
			version = "WIN 2,0,0,11";
		} catch (e) {
			version = -1;
		}
	}

	return version;
}

// JavaScript helper required to detect Flash Player PlugIn version information
function GetSwfVer() {
	// NS/Opera version >= 3 check for Flash plugin in plugin array
	var flashVer = -1;

	if (navigator.plugins != null && navigator.plugins.length > 0) {
		if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) {
			var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "";
			var flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description;
			var descArray = flashDescription.split(" ");
			var tempArrayMajor = descArray[2].split(".");
			var versionMajor = tempArrayMajor[0];
			var versionMinor = tempArrayMajor[1];
			var versionRevision = descArray[3];
			if (versionRevision == "") {
				versionRevision = descArray[4];
			}
			if (versionRevision[0] == "d") {
				versionRevision = versionRevision.substring(1);
			} else if (versionRevision[0] == "r") {
				versionRevision = versionRevision.substring(1);
				if (versionRevision.indexOf("d") > 0) {
					versionRevision = versionRevision.substring(0, versionRevision.indexOf("d"));
				}
			}
			var flashVer = versionMajor + "." + versionMinor + "." + versionRevision;
		}
	}
	// MSN/WebTV 2.6 supports Flash 4
	else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") != -1) flashVer = 4;
	// WebTV 2.5 supports Flash 3
	else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") != -1) flashVer = 3;
	// older WebTV supports Flash 2
	else if (navigator.userAgent.toLowerCase().indexOf("webtv") != -1) flashVer = 2;
	else if (isIE && isWin && !isOpera) {
		flashVer = ControlVersion();
	}
	return flashVer;
}

// When called with reqMajorVer, reqMinorVer, reqRevision returns true if that version or greater is available
function DetectFlashVer(reqMajorVer, reqMinorVer, reqRevision) {
	versionStr = GetSwfVer();
	if (versionStr == -1) {
		return false;
	} else if (versionStr != 0) {
		if (isIE && isWin && !isOpera) {
			// Given "WIN 2,0,0,11"
			tempArray = versionStr.split(" "); 	// ["WIN", "2,0,0,11"]
			tempString = tempArray[1]; 		// "2,0,0,11"
			versionArray = tempString.split(","); // ['2', '0', '0', '11']
		} else {
			versionArray = versionStr.split(".");
		}
		var versionMajor = versionArray[0];
		var versionMinor = versionArray[1];
		var versionRevision = versionArray[2];

		// is the major.revision >= requested major.revision AND the minor version >= requested minor
		if (versionMajor > parseFloat(reqMajorVer)) {
			return true;
		} else if (versionMajor == parseFloat(reqMajorVer)) {
			if (versionMinor > parseFloat(reqMinorVer))
				return true;
			else if (versionMinor == parseFloat(reqMinorVer)) {
				if (versionRevision >= parseFloat(reqRevision))
					return true;
			}
		}
		return false;
	}
}

function AC_AddExtension(src, ext) {
	if (src.indexOf('?') != -1)
		return src.replace(/\?/, ext + '?');
	else
		return src + ext;
}

function AC_Generateobj(objAttrs, params, embedAttrs) {
	var str = '';
	if (isIE && isWin && !isOpera) {
		str += '<object ';
		for (var i in objAttrs) {
			str += i + '="' + objAttrs[i] + '" ';
		}
		str += ' class="zero">';
		for (var i in params) {
			str += '<param name="' + i + '" value="' + params[i] + '" /> ';
		}
		str += '</object>';
	}
	else {
		str += '<embed ';
		for (var i in embedAttrs) {
			str += i + '="' + embedAttrs[i] + '" ';
		}
		str += ' class="zero"> </embed>';
	}

	document.write(str);
}

function AC_FL_RunContent() {
	var ret =
    AC_GetArgs
    (arguments, ".swf", "movie", "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
     , "application/x-shockwave-flash"
    );
	AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
}

function AC_SW_RunContent() {
	var ret =
    AC_GetArgs
    (arguments, ".dcr", "src", "clsid:166B1BCA-3F9C-11CF-8075-444553540000"
     , null
    );
	AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
}

function AC_GetArgs(args, ext, srcParamName, classid, mimeType) {
	var ret = new Object();
	ret.embedAttrs = new Object();
	ret.params = new Object();
	ret.objAttrs = new Object();
	for (var i = 0; i < args.length; i = i + 2) {
		var currArg = args[i].toLowerCase();

		switch (currArg) {
			case "classid":
				break;
			case "pluginspage":
				ret.embedAttrs[args[i]] = args[i + 1];
				break;
			case "src":
			case "movie":
				args[i + 1] = AC_AddExtension(args[i + 1], ext);
				ret.embedAttrs["src"] = args[i + 1];
				ret.params[srcParamName] = args[i + 1];
				break;
			case "onafterupdate":
			case "onbeforeupdate":
			case "onblur":
			case "oncellchange":
			case "onclick":
			case "ondblclick":
			case "ondrag":
			case "ondragend":
			case "ondragenter":
			case "ondragleave":
			case "ondragover":
			case "ondrop":
			case "onfinish":
			case "onfocus":
			case "onhelp":
			case "onmousedown":
			case "onmouseup":
			case "onmouseover":
			case "onmousemove":
			case "onmouseout":
			case "onkeypress":
			case "onkeydown":
			case "onkeyup":
			case "onload":
			case "onlosecapture":
			case "onpropertychange":
			case "onreadystatechange":
			case "onrowsdelete":
			case "onrowenter":
			case "onrowexit":
			case "onrowsinserted":
			case "onstart":
			case "onscroll":
			case "onbeforeeditfocus":
			case "onactivate":
			case "onbeforedeactivate":
			case "ondeactivate":
			case "type":
			case "codebase":
			case "id":
				ret.objAttrs[args[i]] = args[i + 1];
				break;
			case "width":
			case "height":
			case "align":
			case "vspace":
			case "hspace":
			case "class":
			case "title":
			case "accesskey":
			case "name":
			case "tabindex":
				ret.embedAttrs[args[i]] = ret.objAttrs[args[i]] = args[i + 1];
				break;
			default:
				ret.embedAttrs[args[i]] = ret.params[args[i]] = args[i + 1];
		}
	}
	ret.objAttrs["classid"] = classid;
	if (mimeType) ret.embedAttrs["type"] = mimeType;
	return ret;
}


