var firstFilter = true;
var allProductArray;
var firstSpecialAccessoryTabText = '';

function filterProduct(filter, specialAccessoryTabFilteredText, columnCounter) {

	if(firstFilter == true ) {
		allProductArray = jQuery('.cntProductSeriesNew-ModelItem').find('div.cntProductSeriesItem');
		
		if(document.getElementById('specialAccessoryTabText') != null)
			firstSpecialAccessoryTabText = document.getElementById('specialAccessoryTabText').innerHTML;
		
		firstFilter = false;
	}

	//Clear the cntProductSeriesNew-ModelItem container
	jQuery('.cntProductSeriesNew-ModelItem').empty();
	
	var filterOptions = filter.split(",");
	var filteredProductItems = new Array();
	
	for(var i=0; i < allProductArray.length; i++) {
		if(filter != '') {
			for(var j=0; j < filterOptions.length; j++) {
				if(allProductArray[i].id == filterOptions[j]) {
					filteredProductItems.push(allProductArray[i]);
					break;
				}
			}
		}
		else {
			filteredProductItems.push(allProductArray[i]);	
		}
	}
	
	var counter = 0;
	
	//Append filtered items
	jQuery.each(filteredProductItems, function() {

		if(filteredProductItems.length == 1) {
			jQuery('.cntProductSeriesNew-ModelItem').addClass("oneitem");	
		} else {
			jQuery('.cntProductSeriesNew-ModelItem').removeClass("oneitem");
		}

		// itemLast class removed in last product
		jQuery(this).removeClass("itemLast");
		
		jQuery('.cntProductSeriesNew-ModelItem').append(jQuery(this));
		
		counter++;
		if (columnCounter == null) columnCounter = 3;
		if ((counter % columnCounter) == 0) {
			jQuery('.cntProductSeriesNew-ModelItem').append("<div class=\"clearer hr\">&nbsp;</div>");
			
			// itemLast class added in last product
			jQuery(this).addClass("itemLast");
		}
		
	});
		
	if (document.getElementById('specialAccessoryTabText') != null && specialAccessoryTabFilteredText != '' && filter != '') {
		document.getElementById('specialAccessoryTabText').innerHTML = specialAccessoryTabFilteredText;
	} else { 
		document.getElementById('specialAccessoryTabText').innerHTML = firstSpecialAccessoryTabText ;
	}
	
	if (document.getElementById('modelsSizeForSpecialAccessoryTab') != null) {
		document.getElementById('modelsSizeForSpecialAccessoryTab').innerHTML = filteredProductItems.size();
	}
	
	// after filtering we have to sort products again according to selected sort mode
	sortProducts();
}

function formatProductEntity(prodName) { 
  	var newProdName = '';
  	var charr = '';
		for(var c = 0; c < prodName.length; c++) { 
			charr = prodName.charAt(c);
			if(charr.isNum() || charr == '.' || charr.isLetter()) {
				newProdName = newProdName + charr;
			} else {
				newProdName = newProdName + '-';
			}
		}
		return newProdName.toLowerCase();
}

function clickCompareButton(productComparisonToolControllerLink) {	  	
	if(jQuery('div.compare .cntCompareLinkBtn').hasClass('active')) {
		var link = productComparisonToolControllerLink;
	  	jQuery.each(jQuery('.comp input.chk:checkbox'), function() {
	  		if (jQuery(this).attr("checked") == true) {
				var prodName = jQuery(this).attr("name");
				prodName = formatProductEntity(prodName);
				if(prodName != null || prodName != '') {
					link = link + '/' + prodName;
				}
			}
		});
	  	return link;
	} else if(jQuery('div.compare .cntCompareLinkBtn').hasClass('passive')) {
		return "javascript:void(0);";
	}
}

function clickOldCompareButton(oldComparisonLink) {	  	
	if(jQuery('div.compare .cntCompareLinkBtn').hasClass('active')) {
		var link = oldComparisonLink;
	  	jQuery.each(jQuery('.comp input.chk:checkbox'), function() {
	  		if (jQuery(this).attr("checked") == true) {
				var prodName = jQuery(this).attr("alt");
				if(prodName != null || prodName != '') {
					link = link + '&models=' + prodName;
				}
			}
		});
	  	return link;
	} else if(jQuery('div.compare .cntCompareLinkBtn').hasClass('passive')) {
		return "javascript:void(0);";
	}
}

function clickCompareButtonSimilarProducts(productComparisonToolControllerLink) {	
	if(!jQuery('.cntViewSimilarProductsBox .btn-block').hasClass('deactive')) {
		var link = productComparisonToolControllerLink;
	  	jQuery.each(jQuery('.comp input.chk:checkbox'), function() {
	  		if (jQuery(this).attr("checked") == true) {
				var prodName = jQuery(this).attr("name");
				prodName = formatProductEntity(prodName);
				if(prodName != null || prodName != '') {
					link = link + '/' + prodName;
				}
			}
		});
	  	return link;
	} else if(jQuery('div.compare .cntCompareLinkBtn').hasClass('passive')) {
		return "javascript:void(0);";
	}
}

function clickOldCompareButtonSimilarProducts(oldComparisonLink) {	  	
	if(!jQuery('.cntViewSimilarProductsBox .btn-block').hasClass('deactive')) {
		var link = oldComparisonLink;
	  	jQuery.each(jQuery('.comp input.chk:checkbox'), function() {
	  		if (jQuery(this).attr("checked") == true) {
				var prodName = jQuery(this).attr("alt");
				if(prodName != null || prodName != '') {
					link = link + '&models=' + prodName;
				}
			}
		});
	  	return link;
	} else if(jQuery('div.compare .cntCompareLinkBtn').hasClass('passive')) {
		return "javascript:void(0);";
	}
}

var totalCheckedProduct = 0;

function clickCompareCheckBox(isChecked) {
	if (isChecked) {
		totalCheckedProduct++;
		if (totalCheckedProduct >= 2) {
			jQuery('div.compare .cntCompareLinkBtn').removeClass('passive');
			jQuery('div.compare .cntCompareLinkBtn').addClass('active');
		} else {
			jQuery('div.compare .cntCompareLinkBtn').removeClass('active');
			jQuery('div.compare .cntCompareLinkBtn').addClass('passive');
		}
	} else {
		if (totalCheckedProduct > 0) {
			totalCheckedProduct--;
		}
		if (totalCheckedProduct >= 2) {
			jQuery('div.compare .cntCompareLinkBtn').removeClass('passive');
			jQuery('div.compare .cntCompareLinkBtn').addClass('active');
		} else {
			jQuery('div.compare .cntCompareLinkBtn').removeClass('active');
			jQuery('div.compare .cntCompareLinkBtn').addClass('passive');
		}
	}
	if (totalCheckedProduct >= 5) {
		jQuery.each(jQuery('.comp input.chk:checkbox'), function() {
			if (jQuery(this).attr("checked") == false) {
				jQuery(this).attr("disabled", "disabled");
			}
		});
	} else {
		jQuery.each(jQuery('.comp input.chk:checkbox'), function() {
			jQuery(this).attr("disabled", "");
		});
	}
	
}


function genericCompare(a, b) {
    return (b < a) - (a < b);
}

function sortByIntroductionDateDesc(uniqueIDofA, uniqueIDofB) {
	var dateA = null;
	var dateB = null;
	
	if(document.getElementById(uniqueIDofA.id + '-date') != null)
		dateA = document.getElementById(uniqueIDofA.id + '-date').innerHTML;
	
	if(document.getElementById(uniqueIDofB.id + '-date') != null)
		dateB = document.getElementById(uniqueIDofB.id + '-date').innerHTML;
	
	if(dateA != null && dateB != null){		
		var difference = dateB - dateA;
		if(difference == 0){
			return sortByNameAsc(uniqueIDofA, uniqueIDofB);
		}
		return difference;
	}	
	return 0;
}

function sortByPriceDesc(uniqueIDofA, uniqueIDofB) {
	var priceA = null;
	var priceB = null;
	
	if(document.getElementById(uniqueIDofA.id + '-price') != null)
		priceA = document.getElementById(uniqueIDofA.id + '-price').innerHTML;
	
	if(document.getElementById(uniqueIDofB.id + '-price') != null)
		priceB = document.getElementById(uniqueIDofB.id + '-price').innerHTML;
	
	if(priceA != null && priceB != null){		
		var difference = priceB - priceA;
		if(difference == 0){
			return sortByNameAsc(uniqueIDofA, uniqueIDofB);
		}
		return difference;
	}	
	return 0;
}

function sortByPriceAsc(uniqueIDofA, uniqueIDofB) {
	var priceA = null;
	var priceB = null;
	
	if(document.getElementById(uniqueIDofA.id + '-price') != null)
		priceA = document.getElementById(uniqueIDofA.id + '-price').innerHTML;
	
	if(document.getElementById(uniqueIDofB.id + '-price') != null)
		priceB = document.getElementById(uniqueIDofB.id + '-price').innerHTML;
	
	if(priceA != null && priceB != null && priceA != '' && priceB != '') {		
		var difference = priceA - priceB;
		if(difference == 0) {
			return sortByNameAsc(uniqueIDofA, uniqueIDofB);
		}
		return difference;
	} else if(priceA == '' && priceB != '') {
		return 1;
	} else if(priceB == '' && priceA != '') {
		return -1;
	} else if(priceB == '' && priceA == '') {
		return sortByNameAsc(uniqueIDofA, uniqueIDofB);
	}
	return 0;
}

function sortByNameDesc(uniqueIDofA, uniqueIDofB) {
	var nameA = uniqueIDofA.id;
	var nameB = uniqueIDofB.id;
	return genericCompare(nameB, nameA);
}

function sortByNameAsc(uniqueIDofA, uniqueIDofB) {
	return sortByNameDesc(uniqueIDofB, uniqueIDofA);
}

function sortByRanking(uniqueIDofA, uniqueIDofB) {
	var rankA = null;
	var rankB = null;
	
	if(document.getElementById(uniqueIDofA.id + '-rank') != null)
		rankA = document.getElementById(uniqueIDofA.id + '-rank').innerHTML;
	
	if(document.getElementById(uniqueIDofB.id + '-rank') != null)
		rankB = document.getElementById(uniqueIDofB.id + '-rank').innerHTML;
	
	if(rankA != null && rankB != null){		
		var difference = rankA - rankB;
		if(difference == 0){
			return sortByNameAsc(uniqueIDofA, uniqueIDofB);
		}
		return difference;
	}	
	return 0;
}

function defaultSortType(sortMode, columnCounter) {
	switch(sortMode){
		case "price_asc":		
			sortableProduct(sortByPriceAsc, columnCounter);
			break;
		case "price_desc":
			sortableProduct(sortByPriceDesc, columnCounter);
			break;
		case "date_desc":
			sortableProduct(sortByIntroductionDateDesc, columnCounter);
			break;
		case "alphabetical_desc":
			sortableProduct(sortByNameDesc, columnCounter);
			break;
		case "alphabetical_asc":
			sortableProduct(sortByNameAsc, columnCounter);
			break;
		case "ranking":
			sortableProduct(sortByRanking, columnCounter);
			break;
	}	
}

function sortProducts(columnCounter) {
	var selectObj = document.getElementById('Sorts');	
	var sortMode = selectObj[selectObj.selectedIndex].value;
	switch(sortMode){
		case "price_asc":		
			sortableProduct(sortByPriceAsc, columnCounter);
			break;
		case "price_desc":
			sortableProduct(sortByPriceDesc, columnCounter);
			break;
		case "date_desc":
			sortableProduct(sortByIntroductionDateDesc, columnCounter);
			break;
		case "alphabetical_desc":
			sortableProduct(sortByNameDesc, columnCounter);
			break;
		case "alphabetical_asc":
			sortableProduct(sortByNameAsc, columnCounter);
			break;
		case "ranking":
			sortableProduct(sortByRanking, columnCounter);
			break;
	}		
}

function sortableProduct(sortType, columnCounter) {
   
	MagicThumb.stop();
	
	var sortableArray = jQuery('.cntProductSeriesNew-ModelItem').find('div.cntProductSeriesItem');
	
	var sortedArray = jQuery(sortableArray).sort(sortType);
	
	//Clear the cntProductSeriesNew-ModelItem container
	jQuery('.cntProductSeriesNew-ModelItem').empty();
	
	var counter = 0;
	
	//Append sorted items
	jQuery.each(sortedArray, function() {
		
		// itemLast class removed in last product
		jQuery(this).removeClass("itemLast");
		
		jQuery('.cntProductSeriesNew-ModelItem').append(jQuery(this));
		
		counter++;
		if (columnCounter == null) columnCounter = 3;
		if ((counter % columnCounter) == 0 || counter == sortedArray.length) {
			jQuery('.cntProductSeriesNew-ModelItem').append("<div class=\"clearer hr\">&nbsp;</div>");
			
			// itemLast class added in last product
			jQuery(this).addClass("itemLast");
		}
		
	});
	
	setTimeout("MagicThumb.refresh();", 2000);
	
}

function refreshSpecialAccessoryTab() {

	if(firstSpecialAccessoryTabText != null && firstSpecialAccessoryTabText != '' && document.getElementById('specialAccessoryTabText') != null) {
		document.getElementById('specialAccessoryTabText').innerHTML = firstSpecialAccessoryTabText;
	}
	if(totalCheckedProduct != null) {
		totalCheckedProduct = 0 ;
	}
	if(firstFilter != null) {
		firstFilter = true;
	}
	
	setTimeout("MagicThumb.refresh();", 2000);
}

// change list mockup type - list/grid
function changeListType(obj, gridView, listView) {
	var modelID = document.getElementById("cntProductSeriesNew-Model");
	if (modelID.className.indexOf('listView') != -1) {
		modelID.className = "cntProductSeriesNew-Model gridView clearfix";
		obj.innerHTML = listView;
	} else {
		modelID.className = "cntProductSeriesNew-Model listView clearfix";
		obj.innerHTML = gridView;
	}
}

// change list mockup type - list/grid
function changeListType2(obj) {
	var modelID = document.getElementById("cntProductSeriesNew-Model");

	jQuery(obj).addClass('selected').parents('div.listType').find('a').not(obj).removeClass('selected');
	
	if (modelID.className.indexOf('gridView') != -1) {
		modelID.className = "cntProductSeriesNew-Model listView clearfix";
	} else {
		modelID.className = "cntProductSeriesNew-Model gridView clearfix";
	}

}

// if gridLink clicked turn to grid else turn to list 
function changeListType3(obj,viewType) {
	
	var modelID = document.getElementById("cntProductSeriesNew-Model");
	jQuery(obj).addClass('selected').parents('div.listType').find('a').not(obj).removeClass('selected');
	
	if (viewType.indexOf('gridLink') != -1) {
		modelID.className = "cntProductSeriesNew-Model gridView clearfix";
	} else {
		modelID.className = "cntProductSeriesNew-Model listView clearfix";
	}

}

/*
	Message For Sony
	This script is an example to simulate earlier model (checkbox) functionality on page.	
*/	

function earlierModel() {

	var checkboxStatus = jQuery("input#earlierModels").attr("checked");
	//Clear the cntProductSeriesNew-ModelItem container
	jQuery('.cntProductSeriesNew-ModelItem').empty();
	var counter = 0;
	if(checkboxStatus == undefined){
		jQuery.each(allProductArray, function() {
			jQuery(this).removeClass("itemLast");
			if(!jQuery(this).hasClass('earlierModel')) {
				jQuery('.cntProductSeriesNew-ModelItem').append(jQuery(this));
				counter++;
				if ((counter % 3) == 0) {
					jQuery('.cntProductSeriesNew-ModelItem').append("<div class=\"clearer hr\">&nbsp;</div>");
					// itemLast class added in last product
					jQuery(this).addClass("itemLast");
				}
			}
		});
	} else {
		
		if(checkboxStatus) {
			jQuery.each(allProductArray, function() {
				jQuery(this).removeClass("itemLast");
				jQuery('.cntProductSeriesNew-ModelItem').append(jQuery(this));	
				
				counter++;
	
				if ((counter % 3) == 0) {
					jQuery('.cntProductSeriesNew-ModelItem').append("<div class=\"clearer hr\">&nbsp;</div>");
					// itemLast class added in last product
					jQuery(this).addClass("itemLast");
				}
	
			});
			jQuery("span#modelsSizeForSpecialAccessoryTab").text(allProductArrayLength);
			
		} else {
			jQuery.each(allProductArray, function() {
				jQuery(this).removeClass("itemLast");
				if(!jQuery(this).hasClass('earlierModel')) {
					jQuery('.cntProductSeriesNew-ModelItem').append(jQuery(this));
					counter++;
					if ((counter % 3) == 0) {
						jQuery('.cntProductSeriesNew-ModelItem').append("<div class=\"clearer hr\">&nbsp;</div>");
						// itemLast class added in last product
						jQuery(this).addClass("itemLast");
					}
				}
			});
	
			jQuery("span#modelsSizeForSpecialAccessoryTab").text(allProductArrayLength - earlierModelArraySize);
	
		}
	
	}

}

jQuery(function() {
	

	allProductArray = jQuery('.cntProductSeriesNew-ModelItem').find('div.cntProductSeriesItem');
	allProductArrayLength = allProductArray.length;
	earlierModelArraySize = jQuery('.cntProductSeriesNew-ModelItem .earlierModel').length;
	earlierModel();
	// Behavior of checkbox when click
	jQuery("input#earlierModels").bind("click", function() {
		earlierModel();
	});
	
});