var openedTagDescription = null;
var autoCompleter = null;
function showTagDescription(id, event) {
	if (openedTagDescription) {
		openedTagDescription = null;
		$('tag_desc_' + openedTagDescription).hide();
	}	
	$('tag_desc_' + id).show();

	openedTagDescription = id;
}

function hideTagDescription(id) {	
	$('tag_desc_' + id).hide();
	openedTagDescription = null;
}

function addSelectOption(el, value, text) {
	var option = document.createElement("OPTION");
	option.value = value;
	option.innerHTML = text;
	
	$(el).appendChild(option);
	
	return option;
}

function handleSearchInputKeyDown(e) {
	 var element = Event.element(e);
	 
     switch (e.keyCode) {     
         case Event.KEY_RETURN:          	 
             Event.stop(e);
             $('search-form').submit();
             break;
          default:
        	  autoCompleter.onKeyPress(e);
     }

     
}

function showBlock() {
	if (document.getElementById('advanced-search').style.display == "none")
	{
		document.getElementById('advanced-search').style.display = "block";
		document.getElementById('product-tags').style.display = "none";	
	} else {
		document.getElementById('advanced-search').style.display = "none";
		document.getElementById('product-tags').style.display = "block";
	}
}


Comparison = function () {	

}

Comparison.emptyMobileImage = '/images/frontend/all/mobile-small.gif';
Comparison.deleteImage = '/images/frontend/icons/cross.png';
Comparison.addIcon = '/images/frontend/icons/compare.gif';
Comparison.addActiveIcon = '/images/frontend/icons/compare-active.gif';


Comparison.getStorage = function(type) {

	var comparisonString = Cookie.get("comparison_" + type);
	var comparisonList = [];
	if (comparisonString != null && comparisonString.length > 0) {	
		comparisonString = Base64.decode(comparisonString);
		comparisonList =  comparisonString.evalJSON();
	} else {
	}
	return comparisonList;
	
}

Comparison.saveInStorage = function(type, list) {
	var serialized = list.toJSON();
	serialized = Base64.encode(serialized);
	Cookie.set("comparison_" + type, serialized);		
}

Comparison.has = function(type) {	
	var comparisonList = Comparison.getStorage(type);
	return comparisonList.length > 0;
}

Comparison.need = function() {	
	if ($("comparison_block") != null) {
		Event.observe(window, 'resize' , Comparison.alignBlock);
		Event.observe(window, 'scroll' , Comparison.alignBlock);		
		Comparison.alignBlock();		
		return true;
	}
	
	return false;	
}

Comparison.alignBlock = function() {
	
	var height = $(document.body).getHeight();
	var elementHeight = 162; //$("comparison_block").getHeight()
	
	var offsets = document.viewport.getScrollOffsets();
	$("comparison_block").style.top = (height + offsets.top - elementHeight - 20) + "px";


}

Comparison.add = function(type, name, safeName, photo, eventSource) {
	var comparisonString = Cookie.get("comparison_" + type);
	var comparisonList = Comparison.getStorage(type);
	
	for (var i = 0; i < comparisonList.length; i++) {
		if (comparisonList[i].safeName == safeName) {
			Comparison.remove(type, i);
			return;
		}
	}	
	
	if (comparisonList.length >= 4) {
		alert("Sorry you are allowed to compare up to 4 products");
		return;
	}
	
	var newItem = {};
	newItem["linkId"] = eventSource.id;
	newItem["name"] = name;
	newItem["safeName"] = safeName;
	newItem["photo"] = photo;
	comparisonList.push(newItem);	
	/*
	Comparison.setIcon(eventSource, true);*/
	
	var elements = Comparison.findElements(newItem["linkId"]);
	for (var i = 0; i < elements.length; i++) {
		Comparison.setIcon(elements[i], true);
	}
	
	Comparison.saveInStorage(type, comparisonList);
	Comparison.render(type, comparisonList);
}

Comparison.remove = function(type, index) {

	var comparisonString = Cookie.get("comparison_" + type);
	var comparisonList = Comparison.getStorage(type);
	
	if (index < comparisonList.length) {
		var tmp = [];
		/*
		if ($(comparisonList[index].linkId) != null) {
			Comparison.setIcon($(comparisonList[index].linkId), false);
		}*/
		
		var elements = Comparison.findElements(comparisonList[index].linkId);
		for (var i = 0; i < elements.length; i++) {
			Comparison.setIcon(elements[i], false);
		}
		 
		for (var i = 0; i < comparisonList.length; i++) {
			if (i != index) {
				tmp.push(comparisonList[i]);
			}
		}
		
		comparisonList = tmp;
		Comparison.render(type, comparisonList);		
	}

	Comparison.saveInStorage(type, comparisonList);	
}


Comparison.findElements = function(linkId) {
	var elements = $(document.body).getElementsBySelector('a[id="' +  linkId +'"]');
	return elements;
}

Comparison.render = function(type, comparisonList) {
	
	if (type == "phone") {
		$('comparison_header').innerHTML = "Compare phones";
	} else if (type == "tariff") {
		$('comparison_header').innerHTML = "Compare tariffs";		
	}
	
	for (var i = 0; i < 4; i++) {
		var element = $("comparison_item" + (i + 1));
		if (i < comparisonList.length) {
			var comparisonItem = comparisonList[i];
			element.innerHTML =  '<img src="' + comparisonItem["photo"] + '" alt="' + comparisonItem["name"]  + '"/>'
			                   + '<img src="' + Comparison.deleteImage + '" alt="" onclick="Comparison.remove(' + "'" + type + "'" + ', ' + i + ')" class="delete" />';
		} else {
			element.innerHTML = '<img src="' + Comparison.emptyMobileImage + '" alt=""/>';			
		}
	}	
	
	if (comparisonList.length > 0) {
		$("comparison_block").show();
	} else {
		$("comparison_block").hide();
	}
}

Comparison.setIcon = function(linkObject, status) {
	if (linkObject == null) {
		return;
	}
	
	var children = $(linkObject).getElementsBySelector('img');

	if (children.length == 0) {
		return;
	}
	var img = children[0];
	
	if (status) {
		$(linkObject).addClassName("active");	
		img.src = Comparison.addActiveIcon;
	} else {
		$(linkObject).removeClassName("active");		
		img.src = Comparison.addIcon;
	}
}

Comparison.compare = function(type) {
	
	var url = $('compare_link').value + '#compare$';
	var comparisonList = Comparison.getStorage(type);
	var parts = [];
	for (var i = 0; i < comparisonList.length; i++) {		
	
		parts.push(comparisonList[i].safeName);		
	}
	
	url += parts.join('-vs-');	

	Comparison.saveInStorage(type, []);
	
	Comparison.render(type, []);
	document.location.href = url;
}


Comparison.load = function(type) {
	var comparisonList = Comparison.getStorage(type);

	if (comparisonList.length > 0) {
		Comparison.render(type, comparisonList);	
		
		for (var i = 0; i < comparisonList.length; i++) {
		
			/*if ($(comparisonList[i].linkId) != null) {
				Comparison.setIcon($(comparisonList[i].linkId), true);
			}*/
			
			var elements = Comparison.findElements(comparisonList[i].linkId);
			for (var j = 0; j < elements.length; j++) {
				Comparison.setIcon(elements[j], true);
			}
			 
		}
	}	
	
	Event.observe('compare_btn', 'click', Comparison.compare.curry(type));
}

if (woopraEnabled) {
	var _wh = ((document.location.protocol=='https:') ? "https://sec1.woopra.com" : "http://static.woopra.com");
	document.write(unescape("%3Cscript src='" + _wh + "/js/woopra.js' type='text/javascript'%3E%3C/script%3E"));
}		
	
Event.observe(window, "load",
	function () {
	


	autoCompleter = new Ajax.Autocompleter('search-input', 
			   'autocomplete-result',
			   "/search/autocomplete",
			   {paramName : "q"});
		
		Event.stopObserving($('search-input'), "keydown");		
		Event.observe($('search-input'), "keydown", handleSearchInputKeyDown);
		
		$('search-input').setAttribute("autocomplete", "off");
		
		$('search-input').observe('keydown', function (e) {
	
			if (e.keyCode == 13) {
				if (woopraEnabled) {
					woopraTracker.trackSearch($F('search-input'));
				}
			}
		});
		

		
		$('search-submit').observe('click', function () {
	
		
			if (woopraEnabled) {
				woopraTracker.trackSearch($F('search-input'));
			}
			
			$('search-form').submit();
		});

		if (woopraEnabled) {
		
			woopraTracker.trackExternal = function (pageUrl, pageTitle) {	
		
			    var ev=new WoopraEvent(pageUrl);

	            ev.addProperty('type','exit');
	           // ev.addProperty('name', pageUrl);
	            ev.fire();
	            this.sleep(400);

		
			};
		
			woopraTracker.postRating = function (rating, object) {	

				var ev = new WoopraEvent(object);
				ev.addProperty('type', 'rating');
				ev.addProperty("rating", rating);
				ev.fire();		
				
			};
			
			

			woopraTracker.postReview = function (name, email, avatar, text, rating, object) {	
	
				

				var ev = new WoopraEvent(object);
				ev.addProperty('type', 'review');
				ev.addProperty("rating", rating);
				ev.addProperty("comment", text);
				ev.addProperty("email", email);
				ev.addProperty("user", name);
				if (avatar) {
					ev.addProperty("avatar", avatar);
				}
				ev.fire();	
				
			};
			
			woopraTracker.trackSearch = function (value) {		
			
				var ev = new WoopraEvent('search');

				ev.addProperty('type','search');
				ev.addProperty("query", value);
				ev.fire();		
	            this.sleep(400); 					
				
			};
			
			woopraTracker.trackComparison = function (value) {	
				
				var ev = new WoopraEvent('comparison');

				ev.addProperty('type','comparison');
				ev.addProperty("compare", value);
				ev.fire();						
				
			};

			woopraTracker.trackDealsFilter = function (value) {						
				var ev = new WoopraEvent('Deals filter');
				ev.addProperty('type','Deals filter');
				ev.addProperty("query", value);
				ev.fire();						
				
			};
			
			woopraTracker.trackNewsletterSubscription = function (value) {						
				var ev = new WoopraEvent('Newsletter subscription');
				ev.addProperty('type','Newsletter subscription');
				ev.addProperty("email", value);
				ev.fire();				
				
			};
			
			woopraTracker.trackNewsletterSubscriptionConfirmed = function (value) {						
				var ev = new WoopraEvent('Newsletter subscription confirmed');
				ev.addProperty('type','Newsletter subscription confirmed');
				ev.addProperty("email", value);
				ev.fire();						
				
			};	
			
			woopraTracker.trackNewsletterUnsubscribe = function (value) {						
				var ev = new WoopraEvent('Newsletter unsubscribed');
				ev.addProperty('type','Newsletter unsubscribed');
				ev.addProperty("email", value);
				ev.fire();
			};
			
		} else {
			woopraTracker = {};
			woopraTracker.trackExternal = function (pageUrl, pageTitle) {
			
			
			};
			
		}
		
	}

);

var Base64 = {
		 
		// private property
		_keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
	 
		// public method for encoding
		encode : function (input) {
			var output = "";
			var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
			var i = 0;
	 
			input = Base64._utf8_encode(input);
	 
			while (i < input.length) {
	 
				chr1 = input.charCodeAt(i++);
				chr2 = input.charCodeAt(i++);
				chr3 = input.charCodeAt(i++);
	 
				enc1 = chr1 >> 2;
				enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
				enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
				enc4 = chr3 & 63;
	 
				if (isNaN(chr2)) {
					enc3 = enc4 = 64;
				} else if (isNaN(chr3)) {
					enc4 = 64;
				}
	 
				output = output +
				this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) +
				this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);
	 
			}
	 
			return output;
		},
	 
		// public method for decoding
		decode : function (input) {
			var output = "";
			var chr1, chr2, chr3;
			var enc1, enc2, enc3, enc4;
			var i = 0;
	 
			input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
	 
			while (i < input.length) {
	 
				enc1 = this._keyStr.indexOf(input.charAt(i++));
				enc2 = this._keyStr.indexOf(input.charAt(i++));
				enc3 = this._keyStr.indexOf(input.charAt(i++));
				enc4 = this._keyStr.indexOf(input.charAt(i++));
	 
				chr1 = (enc1 << 2) | (enc2 >> 4);
				chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
				chr3 = ((enc3 & 3) << 6) | enc4;
	 
				output = output + String.fromCharCode(chr1);
	 
				if (enc3 != 64) {
					output = output + String.fromCharCode(chr2);
				}
				if (enc4 != 64) {
					output = output + String.fromCharCode(chr3);
				}
	 
			}
	 
			output = Base64._utf8_decode(output);
	 
			return output;
	 
		},
	 
		// private method for UTF-8 encoding
		_utf8_encode : function (string) {
			string = string.replace(/\r\n/g,"\n");
			var utftext = "";
	 
			for (var n = 0; n < string.length; n++) {
	 
				var c = string.charCodeAt(n);
	 
				if (c < 128) {
					utftext += String.fromCharCode(c);
				}
				else if((c > 127) && (c < 2048)) {
					utftext += String.fromCharCode((c >> 6) | 192);
					utftext += String.fromCharCode((c & 63) | 128);
				}
				else {
					utftext += String.fromCharCode((c >> 12) | 224);
					utftext += String.fromCharCode(((c >> 6) & 63) | 128);
					utftext += String.fromCharCode((c & 63) | 128);
				}
	 
			}
	 
			return utftext;
		},
	 
		// private method for UTF-8 decoding
		_utf8_decode : function (utftext) {
			var string = "";
			var i = 0;
			var c = c1 = c2 = 0;
	 
			while ( i < utftext.length ) {
	 
				c = utftext.charCodeAt(i);
	 
				if (c < 128) {
					string += String.fromCharCode(c);
					i++;
				}
				else if((c > 191) && (c < 224)) {
					c2 = utftext.charCodeAt(i+1);
					string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
					i += 2;
				}
				else {
					c2 = utftext.charCodeAt(i+1);
					c3 = utftext.charCodeAt(i+2);
					string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
					i += 3;
				}
	 
			}
	 
			return string;
		}
	 
}

