var domainParts = 			document.location.hostname.split(".");
var regionDomainId = 		domainParts[0].toLowerCase();
var showRegionSelection = 	false;
if (domainParts[0] == "na" || domainParts[0] == "eu") {/* show region selection only for NA/EU sites */
	showRegionSelection = true;
} else if (regionDomainId.indexOf("-") > -1) { /* same logic for staging servers */
	var domainParts = regionDomainId.split("-");
	var l = domainParts.length;
	for (var i = 0; i < l; i++) {
		var p = domainParts[i];
		if (p == "na" || p == "eu") {
			showRegionSelection = true;
		}
	}
}

allRegions = [];
allCarriers = [];
allFeatures = [];
allSeriesNames = [];
compare_devices = {};
mapI18N = {};



function oc(a)
{
  var o = {};
  for(var i=0;i<a.length;i++)
  {
    o[a[i]]='';
  }
  return o;
}
 


SingleDevice = new Class({
	initialize: function(baseElem) {
		this.regions_carriers = {};
		this.features = [];
		this.elem = new Element('li');
		
		var elLink = new Element('a');
		var textSpan = new Element('span');
		var inp = baseElem.getElement('input');
		elLink.setProperty('href', '#');
		baseElem.getElement('img').injectInside(elLink);
		inp.injectInside(elLink);
		textSpan.appendText(baseElem.getElement('h3').childNodes[0].nodeValue);
		textSpan.injectInside(elLink);
		elLink.injectInside(this.elem);

		var carrierElems = baseElem.getElements('.carriers li');
		for (var i = 0; i < carrierElems.length; i++) {
			var carrierName = carrierElems[i].getElement('.carrier').childNodes[0].nodeValue;
			var regionName = carrierElems[i].getElement('.region').childNodes[0].nodeValue;
			if (!this.regions_carriers[regionName]) this.regions_carriers[regionName] = [];
			this.regions_carriers[regionName].push(carrierName);
		}
		
		var featureElems = baseElem.getElements('.features li');
		for (var i = 0; i < featureElems.length; i++) {
			this.features.push(featureElems[i].childNodes[0].nodeValue);
		}
	}
});

function extractI18N() {
	if (!document.getElementById || !document.getElementById('i18n')) return false;
	
	$('i18n').getElements('li').each(function(el) {
		mapI18N[el.getProperty('id')] = el.childNodes[0].nodeValue;
		if (mapI18N[el.getProperty('id')].substring(mapI18N[el.getProperty('id')].length - 1) == " ") {
			mapI18N[el.getProperty('id')] = mapI18N[el.getProperty('id')].substring(0, mapI18N[el.getProperty('id')].length - 1);
		}
	});
	$('i18n').dispose();
	return true;
}

function extractDevices() {
	var allSeries = $$('div.series');
	for (var i = 0; i < allSeries.length; i++) {
		var curSeriesName = allSeries[i].getElement('h2').childNodes[0].nodeValue;
		var devicesInSeries = allSeries[i].getElements('div.device');
		compare_devices[curSeriesName] = [];
		for (var j = 0; j < devicesInSeries.length; j++) {
			curDevice = new SingleDevice(devicesInSeries[j]);
			compare_devices[curSeriesName].push(curDevice);
		}
	}
}

function hideFilterDivs() {
	$('region-container').setStyle('display', 'none');
	$('carrier-container').setStyle('display', 'none');
	$('feature-container').setStyle('display', 'none');
	$('series-container').setStyle('display', 'none');
}

function createFilterEvents() {
	if (allRegions.length > 1) {
	$('choose-regions').getFirst().addEvent('click', function(e) {
		if ($('region-container').getStyle('display') == 'none') {
			hideFilterDivs();
			$('region-container').setStyle('display', 'block');
		}
		else {
			hideFilterDivs();
		}
		if (e.preventDefault) e.preventDefault(); return false;
	});
	}
	$('choose-carriers').addEvent('click', function(e) {
		if ($('carrier-container').getStyle('display') == 'none') {
			hideFilterDivs();
			$('carrier-container').setStyle('display', 'block');
		}
		else {
			hideFilterDivs();
		}
		if (e.preventDefault) e.preventDefault(); return false;
	});
	$('choose-features').addEvent('click', function(e) {
		if ($('feature-container').getStyle('display') == 'none') {
			hideFilterDivs();
			$('feature-container').setStyle('display', 'block');
		}
		else {
			hideFilterDivs();
		}
		if (e.preventDefault) e.preventDefault(); return false;
	});
	$('choose-series').addEvent('click', function(e) {
		if ($('series-container').getStyle('display') == 'none') {
			hideFilterDivs();
			$('series-container').setStyle('display', 'block');
		}
		else {
			hideFilterDivs();
		}
		if (e.preventDefault) e.preventDefault(); return false;
	});
	
	var filterInputs = $('region-container').getElements('ul li a').extend(
						$('carrier-container').getElements('ul li a')).extend(
						$('feature-container').getElements('ul li a')).extend(
						$('series-container').getElements('ul li a'));
	
	filterInputs.each(function(el) {
		el.addEvent('click', function(e) {
			this.toggleClass('selected');
			if (e.preventDefault) e.preventDefault(); return false;
		});
	});
	
	$$('.update').each(function(el) {
		el.addEvent('click', function(e) {
			hideFilterDivs();
			filter();
			if (e.preventDefault) e.preventDefault(); return false;
		});
	});
	
	var el = $('region-container').getElement('a');
	el.addEvent('click', function() {
		$('region-container').getElement('ul').getElements('a').each(function(anch) {
			anch.addClass('selected');
		});
	});
	el = el.getNext();
	el.addEvent('click', function() {
		$('region-container').getElement('ul').getElements('a').each(function(anch) {
			anch.removeClass('selected');
		});
	});
	
	el = $('carrier-container').getElement('a');
	el.addEvent('click', function() {
		$('carrier-container').getElement('ul').getElements('a').each(function(anch) {
			anch.addClass('selected');
		});
	});
	el = el.getNext();
	el.addEvent('click', function() {
		$('carrier-container').getElement('ul').getElements('a').each(function(anch) {
			anch.removeClass('selected');
		});
	});
	
	el = $('feature-container').getElement('a');
	el.addEvent('click', function() {
		$('feature-container').getElement('ul').getElements('a').each(function(anch) {
			anch.addClass('selected');
		});
	});
	el = el.getNext();
	el.addEvent('click', function() {
		$('feature-container').getElement('ul').getElements('a').each(function(anch) {
			anch.removeClass('selected');
		});
	});
	
	el = $('series-container').getElement('a');
	el.addEvent('click', function() {
		$('series-container').getElement('ul').getElements('a').each(function(anch) {
			anch.addClass('selected');
		});
	});
	el = el.getNext();
	el.addEvent('click', function() {
		$('series-container').getElement('ul').getElements('a').each(function(anch) {
			anch.removeClass('selected');
		});
	});
}



function createSliderEvents() {
	compareSlide = new Fx.Tween('top-phones', 'margin-left', {duration:150, wait:true});
	var leftA = $('compare-pane').getFirst();
	var rightA = leftA.getNext(); 
	
	leftA.addEvent('click', function(e) {
		if ($('top-phones').getElements('li').length > 5) {
			$('move-left').setStyle('visibility', 'hidden');
			compareSlide.start("margin-left", -112, 0).chain(function(){
				while ($('top-phones').getLast().style.display == "none") {
					$('top-phones').getLast().injectBefore($('top-phones').getFirst());
				}
				$('top-phones').getLast().injectBefore($('top-phones').getFirst());
				$('top-phones').setStyle('margin-left', '-112px');
				$('move-left').setStyle('visibility', 'visible');
			});
		}
		if (e.preventDefault) e.preventDefault(); return false;
	});

	
	rightA.addEvent('click', function(e) {
		if ($('top-phones').getElements('li').length > 5) {
			$('move-right').setStyle('visibility', 'hidden');
			compareSlide.start("margin-left", -112, -224).chain(function(){
				while ($('top-phones').getFirst().style.display == "none") {
					$('top-phones').getFirst().injectAfter($('top-phones').getLast());
				}
				$('top-phones').getFirst().injectAfter($('top-phones').getLast());
				$('top-phones').setStyle('margin-left', '-112px');
				$('move-right').setStyle('visibility', 'visible');
			});
		}
		if (e.preventDefault) e.preventDefault(); return false;
	});
}

// FUNCTION TO SEARCH THROUGH THE ORIGINAL AND DISPLAYED PHONES AND DETERMINE WHERE THIS PHONE FUCKING BELONGS AND PUTS ITS THERE
// CONSIDER IT LIKE THE FOSTER CARE SYSTEM, FINDING HOMES AND TONS OF ABUSE, BUT WAY FASTER
function reinsert(el) {
	var filtered = filterBySeries(compare_devices, $('series-container').getElements('.selected'));
	var found = false;
	var i;

	filtered = filterByRegion(filtered, $('region-container').getElements('.selected'));
	filtered = filterByCarrier(filtered, $('carrier-container').getElements('.selected'));
	filtered = filterByFeature(filtered, $('feature-container').getElements('.selected'));
	filtered = filterPreselected(filtered, $('bottom-phones').getElements('span'));
	
	for (i = 0; i < filtered.length && !found; i++) {
		if (filtered[i].elem.getElement('span').childNodes[0].nodeValue == el.getElement('span').childNodes[0].nodeValue) {
			found = true;
			i-=1;
		}
	}
	if (i == -1) i = filtered.length - 1;
	
	if (!found && document.all) {
		found = true;
	}
	
	if (found) {
		
		var li = new Element('li');
		el.injectInside(li);
		el.removeClass('dragging');
		if ($('top-phones').getElements('li').length == 0) {
			li.injectInside($('top-phones'));
		}
		else {
			var pointer = $('top-phones').getFirst();
			var physicals = $('top-phones').getElements('span');
			var c = 0;
			if (document.all) {
				var tp = $('top-phones').childNodes;
				var len = tp.length;
				for (i = 0; i < len; i++) {
					if ($(tp[i]).getElement('span').childNodes[0].nodeValue == el.getElement('span').childNodes[0].nodeValue) {
						break;
					}
					pointer = pointer.getNext();
					c++;
				}
			} else {
				for (ndx = 0; physicals[ndx].childNodes[0].nodeValue != filtered[i].elem.getElement('span').childNodes[0].nodeValue; ndx++) {
					pointer = pointer.getNext();
					c++;
				}
			}
			li.injectAfter(pointer);
			physicals[c].parentNode.dispose();
		}
		createSingleDrag(el);
	}
}

function createSingleDrag(el) {
	if (!document.all) {
	el.addEvent('mousedown', function() {
		/* IE6 Fix (RIMWA-4653), IE6 will recieve a mousedown on both the original and the trans copy object after an element is drug back into the top bar, this stops the click handling for that orphan trans object */
		if (!this.parentNode.parentNode.tagName || this.parentNode.parentNode.tagName == "") {
			return;
		}/* /IE6 Fix */
		
		/* FF2/Opera Fix RIMWA-4741) */
		if (this.parentNode.tagName == "BODY") {
			return;
		}/* /FF2/Opera */
		
		var l = $(this.parentNode).getLeft();
		var t = $(this.parentNode).getTop();
		this.trans = $(this.parentNode).clone();
		this.origParent = $(this.parentNode);
		this.trans.injectAfter(this.origParent);
		this.trans.setOpacity(0.35);
		this.setStyles({ position: 'absolute', top: t + 'px', left: l + 'px' });
		this.injectInside($(document.getElementsByTagName('body')[0]));
		this.origParent.setStyle('display', 'none');
		var cloneSpan = $(this.getElementsByTagName("span")[0]).clone();
		cloneSpan.injectInside(this.origParent);
		this.cloneSpan = cloneSpan;
		this.addClass('dragging');
		this.addClass('placeHolder');
	});

	el.addEvent('mouseup', function() {
		if (this.hasClass('placeHolder')) {
			this.removeClass('dragging');
			this.cloneSpan.dispose();
		}
		this.trans.dispose();
		this.injectInside(this.origParent);
		this.origParent.setStyle('display', '');
		this.setStyle('position', 'static');
	});} else {
		el.addEvent('mousedown', function() {
			
			if (this.options) {
				this.handle = $(this.options.handle) || this.element;
			} else {
				this.handle = this.element;
			}
			/* IE6 Fix (RIMWA-4653), IE6 will recieve a mousedown on both the original and the trans copy object after an element is drug back into the top bar, this stops the click handling for that orphan trans object */
			if (!this.parentNode.parentNode.tagName || this.parentNode.parentNode.tagName == "") {
				return;
			}/* /IE6 Fix */
			
			/* FF2/Opera Fix RIMWA-4741) */
			if (this.parentNode.tagName == "BODY") {
				return;
			}/* /FF2/Opera */
			
			var l = $(this.parentNode).getLeft();
			var t = $(this.parentNode).getTop();
			
			this.trans = $(this.parentNode).clone();
			this.origParent = $(this.parentNode);
			this.trans.injectAfter(this.origParent);
			this.trans.setOpacity(0.35);
			
			this.setStyles({ position: 'absolute', top: t + 'px', left: l + 'px' });
			this.injectInside($(document.getElementsByTagName('body')[0]));
			this.origParent.setStyle('display', 'none');
			
			var cloneSpan = $(this.getElementsByTagName("span")[0]).clone();
			cloneSpan.injectInside(this.origParent);
			this.cloneSpan = cloneSpan;
			
			this.addClass('dragging');
			this.addClass('placeHolder');
			this.drag.start(new Event(event));
		});
		el.unselectable = true;
	}
	
	

	el.drag = el.makeDraggable({
	
		onStart: function(el) {		
			this.removeClass('placeHolder');
			this.addClass('dragging');
		}.bind(el),
		
		onDrag: function(el) {
			if (document.all) {
				el.style.left = event.clientX - 40;
				el.style.top = 	event.clientY - 50;
			}
		},
		
		onComplete: function() {
			this.setStyle('position', 'static');
			this.removeClass('dragging');
			this.trans.dispose();
		}.bind(el),
		droppables: [$('bottom-phones'), $('top-phones-port')],
		onDrop: function(el, dr) {
			if ($('bottom-phones').getElements('li').length < 5 && dr == $('bottom-phones')) {
				var li = new Element('li');
				//el.origParent.dispose();
				el.origParent.setStyle('display', 'none');
				el.injectInside(li);
				li.injectInside($('bottom-phones'));
				el.bottom = true;
				setTimeout('updateStyles()', 1);
			} else if (dr == $('top-phones-port') && el.bottom) {
				var elCopy = el.clone();
				el.origParent.dispose();
				el.dispose();
				reinsert(elCopy);
				if (document.all) {
					//its a game to make IE6 show the title span properly again
					var c = $(elCopy.parentNode).clone();
					c.injectAfter(elCopy.parentNode);
					c.innerHTML = "";
					var p = elCopy.parentNode;
					elCopy.injectInside(c);
					p.dispose();
				}
				setTimeout('updateStyles()', 1);
			} else {
				if (document.all) {
					var elCopy = el.clone();
					el.origParent.dispose();
					el.dispose();
					reinsert(elCopy);
					setTimeout('updateStyles()', 1);
				} else {
					el.cloneSpan.dispose();
					el.injectInside(el.origParent);
					el.origParent.setStyle('display', '');
				}
			}
		}.bind(el)
		
	});
	el.setStyles({position:'static'});
}

function createDragEvents() {
	var dragMes = $('top-phones').getElements('a').extend($('bottom-phones').getElements('a'));
	
	dragMes.each(function(el) {
		createSingleDrag(el);
	});
	
	$('bottom-phones').getElements('a').each(function(el) {
		el.bottom = true;
	});
}

function filterBySeries(serDevArr, filterList) {
	var matches = [];
	
	if (filterList.length == 0) {
		for (i in serDevArr) {
			if (typeof i != 'function') {
				matches = matches.concat(serDevArr[i]);
			}
		}
	}
	else {
		for (var i = 0; i < filterList.length; i++) {
			matches = matches.concat(serDevArr[filterList[i].childNodes[0].nodeValue]);
		}
	}
	
	return matches;
}

function filterByRegion(devArr, regionList) {
	if (regionList.length == 0) return devArr;
	
	var matches = [];
	
	for (var i = 0; i < regionList.length; i++) {
		for (var j = 0; j < devArr.length; j++) {
			var curDevice = devArr[j];
			if (curDevice.regions_carriers[regionList[i].childNodes[0].nodeValue]) {
				matches.push(curDevice);
			}
		}
	}
	
	return matches;
}

function filterByCarrier(devArr, carrierList) {
	if (carrierList.length == 0) return devArr;
	
	var matches = [];
	
	for (var i = 0; i < carrierList.length; i++) {
		for (var j = 0; j < devArr.length; j++) {
			var curDevice = devArr[j];
			for (k in curDevice.regions_carriers) {
				if (carrierList[i].childNodes[0].nodeValue in oc(curDevice.regions_carriers[k]) && matches.indexOf(curDevice) == -1) {
					matches.push(curDevice);
				}
			}
		}
	}
	
	return matches;
}

function filterByFeature(devArr, featureList) {
	
	for (var i = 0; i < featureList.length; i++) {
		var matches =[];
		for (var j = 0; j < devArr.length; j++) {
			var curDevice = devArr[j];
			if (featureList[i].childNodes[0].nodeValue in oc(curDevice.features) && matches.indexOf(curDevice) == -1) {
				matches.push(curDevice);
			}
		}
		devArr = matches;
	}
	
	return devArr;
}

function filterPreselected(devArr, preselected) {
	var matches = [];
	
	for (var i = 0; i < devArr.length; i++) {
		var pre = false;
		for (var j = 0; !pre && j < preselected.length; j++) {
			devArr[i].elem.getElement('span').childNodes[0].nodeValue;
			if (preselected[j].childNodes[0].nodeValue == devArr[i].elem.getElement('span').childNodes[0].nodeValue) {
				pre = true;
			}
		}
		if (!pre) matches.push(devArr[i]);
	}
	
	return matches;
}

function updateStyles() {
	var len = $('top-phones').getElements('li').length;
	if (len > 5) {
		$('top-phones').setStyle('margin', '0 0 0 -112px');
		$('top-phones').setStyle('width', '9000px');
		$('move-left').setStyle('background-image', "url('/assets/images/compare_left_button.jpg')");
		$('move-right').setStyle('background-image', "url('/assets/images/compare_right_button.jpg')");
	}
	else {
		$('top-phones').setStyle('margin', '0 auto');
		$('top-phones').setStyle('width', (len * 112) + 'px');
		$('move-left').setStyle('background-image', "url('/assets/images/compare_left_button_over.jpg')");
		$('move-right').setStyle('background-image', "url('/assets/images/compare_right_button_over.jpg')");
	}
	
	len = $('bottom-phones').getElements('li').length;
	if (len < 2) {
		$('compare-button').removeClass('enabled');
		$('compare-button').addClass('disabled');
	}
	else {
		$('compare-button').addClass('enabled');
		$('compare-button').removeClass('disabled');
	}

	if (len > 0 && mapI18N['drag-more'] != undefined) { // Not all blocks will have defined the 'drag-more' text yet
		$('drag-more').setStyle('display', 'block');
	}
	else {
		$('drag-more').setStyle('display', 'none');
	}
	
	if (len == 5) {
		$('max-message').setStyle('display', 'block');
		$('drag-more').setStyle('display', 'none');
	}
	else {
		$('max-message').setStyle('display', 'none');
	}
	
	if (len > 0) {
		$('bottom-phones').addClass('has-devices');
	}
	else {
		$('bottom-phones').removeClass('has-devices');
	}
}

function filter(useParams) {
	var filtered = filterBySeries(compare_devices, $('series-container').getElements('.selected'));
	filtered = filterByRegion(filtered, $('region-container').getElements('.selected'));
	filtered = filterByCarrier(filtered, $('carrier-container').getElements('.selected'));
	filtered = filterByFeature(filtered, $('feature-container').getElements('.selected'));
	filtered = filterPreselected(filtered, $('bottom-phones').getElements('span'));
	
	if (filtered.length > 5) {
		filtered.unshift(filtered.pop());
	}
	
	var selected = gup('prodID').split(',');
	
	$('top-phones').innerHTML = "";
	for (var i = 0; i < filtered.length; i++) {
		var copy = filtered[i].elem.clone();
		var copy2 = filtered[i].elem.clone();
		if (useParams && filtered[i].elem.getElement('input').getProperty('value') in oc(selected)) {
			copy.injectInside('bottom-phones');			
			copy2.setStyle('display', 'none');
			copy2.injectInside($('top-phones'));
		}
		else {
			copy.injectInside($('top-phones'));
		}
	}
	
	updateStyles();
	createDragEvents();
}

function createShell() {
	var compareWrap = $('compare-page');
	compareWrap.setProperty('id', 'compare-tool');
	
	var refineP = new Element('p');
	refineP.setProperty('id', 'refine');
	refineP.appendText(mapI18N['refine']);
	
	var filtersList = new Element('ul');
	filtersList.setProperty('id', 'filters');
	
	if (allRegions.length > 1) {
		var tempLI = new Element('li');
		tempLI.setProperty('id', 'choose-regions');
		tempLI.injectInside(filtersList);
		var tempA = new Element('a');
		tempA.appendText(mapI18N['choose-regions']);
		tempA.setProperty('href', '#');
		tempA.injectInside(tempLI);
	}
	
	tempLI = new Element('li');
	tempLI.setProperty('id', 'choose-carriers');
	tempLI.injectInside(filtersList);
	tempA = new Element('a');
	tempA.appendText(mapI18N['choose-carriers']);
	tempA.setProperty('href', '#');
	tempA.injectInside(tempLI);
	
	tempLI = new Element('li');
	tempLI.setProperty('id', 'choose-features');
	tempLI.injectInside(filtersList);
	tempA = new Element('a');
	tempA.appendText(mapI18N['choose-features']);
	tempA.setProperty('href', '#');
	tempA.injectInside(tempLI);
	
	tempLI = new Element('li');
	tempLI.setProperty('id', 'choose-series');
	tempLI.injectInside(filtersList);
	tempA = new Element('a');
	tempA.appendText(mapI18N['choose-series']);
	tempA.setProperty('href', '#');
	tempA.injectInside(tempLI);
	
	clearer = new Element('div');
	clearer.addClass('clear');
	
	var comparePane = new Element('div');
	comparePane.setProperty('id', 'compare-pane');
	
	var leftA = new Element('a');
	leftA.appendText(mapI18N['action-left']);
	leftA.setProperty('href', '#');
	leftA.setProperty('id', 'move-left');
	var rightA = new Element('a');
	rightA.appendText(mapI18N['action-right']);
	rightA.setProperty('href', '#');
	rightA.setProperty('id', 'move-right');
	
	var phonesTopPort = new Element('div');
	phonesTopPort.setProperty('id', 'top-phones-port');
	var phonesTop = new Element('ul');
	phonesTop.setProperty('id', 'top-phones');
	phonesTop.injectInside(phonesTopPort);
	
	var sliderDiv = new Element('div');
	sliderDiv.setProperty('id', 'slider');
	var sliderA = new Element('a');
	sliderA.setProperty('href', '#');
	sliderA.injectInside(sliderDiv);
	
	var phonesBottom = new Element('ul');
	phonesBottom.setProperty('id', 'bottom-phones');
	
	var compareButton = new Element('a');
	compareButton.setProperty('id', 'compare-button');
	compareButton.setProperty('href', '#');
	compareButton.appendText(mapI18N['compare-selected']);
	
	var message = new Element('p');
	message.setProperty('id', 'max-message');
	message.appendText(mapI18N['max-message']);
	
	var dragMessage = new Element('p');
	dragMessage.setProperty('id', 'drag-more');
	dragMessage.appendText(mapI18N['drag-more']);
	
	var regionDiv = new Element('div');
	regionDiv.setProperty('id', 'region-container');
	regionDiv.addClass('filter-container');
	var regionHeader = new Element('h2');
	regionHeader.appendText(mapI18N['header-regions']);
	var regionSelectAll = new Element('a');
	regionSelectAll.appendText(mapI18N['select-all']);
	regionSelectAll.setProperty('href', '#');
	var regionSelectNone = new Element('a');
	regionSelectNone.appendText(mapI18N['select-none']);
	regionSelectNone.setProperty('href', '#');
	var regionList = new Element('ul');
	var regionUpdate = new Element('a');
	regionUpdate.addClass('update');
	regionUpdate.appendText(mapI18N['update']);
	regionUpdate.setProperty('href', '#');
	regionHeader.injectInside(regionDiv);
	regionSelectAll.injectInside(regionDiv);
	regionSelectNone.injectInside(regionDiv);
	regionList.injectInside(regionDiv);
	regionUpdate.injectInside(regionDiv);
	
	var carrierDiv = new Element('div');
	carrierDiv.setProperty('id', 'carrier-container');
	carrierDiv.addClass('filter-container');
	var carrierHeader = new Element('h2');
	carrierHeader.appendText(mapI18N['header-carriers']);
	var carrierSelectAll = new Element('a');
	carrierSelectAll.appendText(mapI18N['select-all']);
	carrierSelectAll.setProperty('href', '#');
	var carrierSelectNone = new Element('a');
	carrierSelectNone.appendText(mapI18N['select-none']);
	carrierSelectNone.setProperty('href', '#');
	var carrierList = new Element('ul');
	var carrierUpdate = new Element('a');
	carrierUpdate.addClass('update');
	carrierUpdate.appendText(mapI18N['update']);
	carrierUpdate.setProperty('href', '#');
	carrierHeader.injectInside(carrierDiv);
	carrierSelectAll.injectInside(carrierDiv);
	carrierSelectNone.injectInside(carrierDiv);
	carrierList.injectInside(carrierDiv);
	carrierUpdate.injectInside(carrierDiv);
	
	var featureDiv = new Element('div');
	featureDiv.setProperty('id', 'feature-container');
	featureDiv.addClass('filter-container');
	var featureHeader = new Element('h2');
	featureHeader.appendText(mapI18N['header-features']);
	var featureSelectAll = new Element('a');
	featureSelectAll.appendText(mapI18N['select-all']);
	featureSelectAll.setProperty('href', '#');
	var featureSelectNone = new Element('a');
	featureSelectNone.appendText(mapI18N['select-none']);
	featureSelectNone.setProperty('href', '#');
	var featureList = new Element('ul');
	var featureUpdate = new Element('a');
	featureUpdate.addClass('update');
	featureUpdate.appendText(mapI18N['update']);
	featureUpdate.setProperty('href', '#');
	featureHeader.injectInside(featureDiv);
	featureSelectAll.injectInside(featureDiv);
	featureSelectNone.injectInside(featureDiv);
	featureList.injectInside(featureDiv);
	featureUpdate.injectInside(featureDiv);
	
	var seriesDiv = new Element('div');
	seriesDiv.setProperty('id', 'series-container');
	seriesDiv.addClass('filter-container');
	var seriesHeader = new Element('h2');
	seriesHeader.appendText(mapI18N['header-series']);
	var seriesSelectAll = new Element('a');
	seriesSelectAll.appendText(mapI18N['select-all']);
	seriesSelectAll.setProperty('href', '#');
	var seriesSelectNone = new Element('a');
	seriesSelectNone.appendText(mapI18N['select-none']);
	seriesSelectNone.setProperty('href', '#');
	var seriesList = new Element('ul');
	var seriesUpdate = new Element('a');
	seriesUpdate.addClass('update');
	seriesUpdate.appendText(mapI18N['update']);
	seriesUpdate.setProperty('href', '#');
	seriesHeader.injectInside(seriesDiv);
	seriesSelectAll.injectInside(seriesDiv);
	seriesSelectNone.injectInside(seriesDiv);
	seriesList.injectInside(seriesDiv);
	seriesUpdate.injectInside(seriesDiv);
	
	compareWrap.innerHTML = '';
	
	refineP.injectInside(compareWrap);
	filtersList.injectInside(compareWrap);
	clearer.injectInside(compareWrap);
	comparePane.injectInside(compareWrap);
	
	leftA.injectInside(comparePane);
	rightA.injectInside(comparePane);
	phonesTopPort.injectInside(comparePane);
	sliderDiv.injectInside(comparePane);
	phonesBottom.injectInside(comparePane);
	compareButton.injectInside(comparePane);
	message.injectInside(comparePane);
	dragMessage.injectInside(comparePane);
	regionDiv.injectInside(comparePane);
	carrierDiv.injectInside(comparePane);
	featureDiv.injectInside(comparePane);
	seriesDiv.injectInside(comparePane);
}

function populateFilters() {
	$('compare-page').getElements('.region').each(function (el) {
		if (!(el.childNodes[0].nodeValue in oc(allRegions))) {
			allRegions.push(el.childNodes[0].nodeValue);
		}
	});
	
	$('compare-page').getElements('.carrier').each(function (el) {
		if (!(el.childNodes[0].nodeValue in oc(allCarriers))) {
			allCarriers.push(el.childNodes[0].nodeValue);
		}
	});
	
	$('compare-page').getElements('.series h2').each(function (el) {
		if (!(el.childNodes[0].nodeValue in oc(allSeriesNames))) {
			allSeriesNames.push(el.childNodes[0].nodeValue);
		}
	});
	
	$('compare-page').getElements('.features li').each(function (el) {
		if (!(el.childNodes[0].nodeValue in oc(allFeatures))) {
			allFeatures.push(el.childNodes[0].nodeValue);
		}
	});
	
	allFeatures.sort();
	allCarriers.sort();
	allRegions.sort();
}

function fillLists() {
	for (var i = 0; i < allRegions.length; i++) {
		var tempLI = new Element('li');
		var tempA = new Element('a');
		tempA.appendText(allRegions[i]);
		tempA.setProperty('href', '#');
		tempA.injectInside(tempLI);
		tempLI.injectInside($('region-container').getElement('ul'));
	}
	
	for (var i = 0; i < allCarriers.length; i++) {
		var tempLI = new Element('li');
		var tempA = new Element('a');
		tempA.appendText(allCarriers[i]);
		tempA.setProperty('href', '#');
		tempA.injectInside(tempLI);
		tempLI.injectInside($('carrier-container').getElement('ul'));
	}
	
	for (var i = 0; i < allFeatures.length; i++) {
		var tempLI = new Element('li');
		var tempA = new Element('a');
		tempA.appendText(allFeatures[i]);
		tempA.setProperty('href', '#');
		tempA.injectInside(tempLI);
		tempLI.injectInside($('feature-container').getElement('ul'));
	}

	for (var i = 0; i < allSeriesNames.length; i++) {		
		var tempLI = new Element('li');
		var tempA = new Element('a');
		tempA.appendText(allSeriesNames[i]);
		tempA.setProperty('href', '#');
		tempA.injectInside(tempLI);
		tempLI.injectInside($('series-container').getElement('ul'));
	}
}

function createSubmitEvent() {
	$('compare-button').addEvent('click', function() {
		var phones = $('bottom-phones').getElements('input');
		if (phones.length > 1) {
			var theURL = 'product-attr-compare.jsp?';
			for (var i = 0; i < phones.length; i++) {
				theURL += 'products=' + phones[i].getProperty('value');
				if (i < phones.length - 1) theURL += '&';
			}
			location.href = theURL;
		}
	});
}

function showLoader() {
	var loader = new Element('div');
	loader.setProperty('id', 'loader');
	loader.injectInside('compare-pane');
}

function initCompareTool() {
	if (!document.getElementById || !document.getElementById('compare-page')) return;
	if (!extractI18N()) return;
	populateFilters();
	extractDevices();
	createShell();
	showLoader();
	fillLists();
	createFilterEvents();
	createSliderEvents();
	filter(true);
	createSubmitEvent();
	$('loader').dispose();
}

Event.onDOMReady(function() {
	initCompareTool();
});

function gup(name) {
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href );
  if( results == null )
    return "";
  else
    return results[1];
}