﻿(function() {

var itemsToCompare = new Array();
var comparisonCookieDevices = new MultiValueCookie("selectedDevices", "$", ",");

function getItemsToCompareObjectById(id) {
	for (var i=0; i<itemsToCompare.length; i++) {
		if(itemsToCompare[i].id == id) 
			return itemsToCompare[i];
	}
	return null;
}

function getSelectedIds() {
	var selectedIds = new Array();
	jQuery("#comparables .device").each(function(){
		selectedIds.push(jQuery(this).attr('id'));
	});
	return selectedIds;
}

function setSelectedComparablesCookie(){
    var comparisonCookieDevices = new MultiValueCookie("selectedDevices", "$", ",");
    comparisonCookieDevices.clear();
    jQuery("#comparables .device").each(function(){        
		var t = jQuery(this);
        comparisonCookieDevices.setValue(t.attr('id'), t.find('.device-name td').eq(0).text());
        comparisonCookieDevices.setValue(t.attr('id'), t.find('.devimg').eq(0).attr('src'));
    });
	comparisonCookieDevices.setExpirationDays(0);
    comparisonCookieDevices.save();
}

function countSelected() {
	var count = 0;
	for (var i=0; i<itemsToCompare.length; i++) {
		if(itemsToCompare[i].selected) {
			count++;
		}
	}
	return count;
}

function unselectItem(item, dontSave) {
	item.selected = false;
	jQuery("#comparables").children("#"+item.id).eq(0).remove();
	jQuery("#thumb_" + item.id).attr("class","device");
	if (!dontSave) {
		setSelectedComparablesCookie();
	}
}

function selectItem(item, dontSave) {
	item.selected = true;

	var newDeviceDiv = jQuery("<div></div>");
	newDeviceDiv.attr('id', item.id);
	newDeviceDiv.attr('class', "device added");
	var newDeviceContent = jQuery("#thumb_" + item.id).html();
	newDeviceDiv.append(newDeviceContent);
	newDeviceDiv.appendTo("#comparables");

	jQuery("#comparables #" + item.id).html(newDeviceContent+"");
	jQuery("#" + item.id + " .device-compare-btn").click(function(){
		toggleCompare(item.id);
	});
	jQuery("#thumb_" + item.id).attr("class","device added");
	if (!dontSave) {
		setSelectedComparablesCookie();
	}
}

function toggleCompare(id, dontSave) {
	openComparableView();
	
	var item = getItemsToCompareObjectById(id);
	if (item.selected) {
		unselectItem(item, dontSave);
		return false;
	}

	if (countSelected() >= 5) {
		alert("You can select at maximum five devices!");
		return false;
	} 
	
	selectItem(item, dontSave);
	return true;
}

function openComparableView(){
		jQuery("#device-comparison").attr("class", "opened");
}

function clearComparables(){
	for (var i=0; i<itemsToCompare.length; i++) {
		if(itemsToCompare[i].selected) {
			itemsToCompare[i].selected = false;
			jQuery("#comparables").children("#" + itemsToCompare[i].id).eq(0).remove();
		}
	}			
	jQuery("#device-matrix-container .device").attr("class","device");

    setSelectedComparablesCookie();
}

function enableJavascriptFields(){
	jQuery(".javas").css({display: "inline"});
	jQuery(".non-javas").remove();
}


function initPhoneComparison(){

    jQuery("#device-matrix-container .device").each(function(){
		var t = jQuery(this);
		var deviceId = t.attr('id').substring(6, t.attr('id').length);    
		itemsToCompare.push({id:deviceId, selected:false});
    });

	var comparisonCookieIds = comparisonCookieDevices.getIds(); 
	for (var i=0; i<comparisonCookieIds.length; i++) {
		var values = comparisonCookieDevices.getValues(comparisonCookieIds[i]);
		if (getItemsToCompareObjectById(comparisonCookieIds[i]) != null) {
			toggleCompare(comparisonCookieIds[i], true);     
		} else {
			itemsToCompare.push({id:comparisonCookieIds[i], selected:true});
			var newDevice = jQuery('<div id="' + comparisonCookieIds[i] + '" class="device added"></div>');
			newDevice.html('<a href="/devices/' + 
				comparisonCookieIds[i] + '"><img title="' + values[0] + '" alt="' + values[0] + 
				'" class="devimg" src="' + values[1] + 
				'"/></a><div class="device-info-container"><div class="device-name"><table><tbody><tr><td><a href="/devices/' + 
				comparisonCookieIds[i] + '">' + values[0] + 
				'</a></td></tr></tbody></table></div><span class="device-info"></span><div title="Compare ' + 
				values[0] + '" class="device-compare-btn javas"><span class="add">Add to comparison</span><span class="remove">Remove</span></div></div>');
			
			newDevice.appendTo("#comparables");
			jQuery("#" + comparisonCookieIds[i] + " .device-compare-btn").click(function(){
				toggleCompare(jQuery(this).parents('.device').eq(0).attr('id'));
			});
		}
	}

	if (comparisonCookieIds.length > 0) {
		openComparableView();	
	}

	jQuery(".non-javas").remove();
}

jQuery(document).ready(function() {

    jQuery("#device-comparison-top").click(function(){
        if (jQuery("#comparables_container").css('display') == 'block'){
            jQuery("#device-comparison").removeAttr('class');
        } else {
            jQuery("#device-comparison").attr('class', 'opened');
        }
    });
    
    //enableJavascriptFields();

    jQuery("#device-matrix-container .device .device-compare-btn").click(function(){
        var thumbId = jQuery(this).parents(".device").eq(0).attr("id");
        var id = thumbId.substring(6, thumbId.length);
    	toggleCompare(id);
    });
    
    jQuery("#comparebtn").click(function(){
    	var selIds = getSelectedIds();
    	if (selIds.length<2) {
            alert("Select at least two devices for comparison!");	
        } else {  
			startComparison(selIds);
    	}
    });

    jQuery("#clearbtn").click(function(){
		clearComparables();
    });

    var pagePath = window.location.pathname;
    var pageName = '/devices/'+pagePath.substring(pagePath.lastIndexOf('/') + 1);
    jQuery("#device-selector form select option[@value='" + pageName + "']").attr('selected', 'selected');

    jQuery("#device-selector form select").change(function(){
        var selectValue = this.options[this.selectedIndex].value;
        if (selectValue != ''){
            location = selectValue;
        }
    });

    initPhoneComparison();

	jQuery("#btn_compare-all").click(function(){
        var listedDeviceIds = new Array();
        jQuery("#device-matrix-container .device").each(function(){
			var id = jQuery(this).attr('id');
            listedDeviceIds.push(id.substring(6, id.length));
        });
		startComparison(listedDeviceIds);
    });    
	
	
});

})();