
/**
* Contains compare button related functions
* @author Ozge Koylu
*/

var SelectorCompareButton = Class.create();
SelectorCompareButton.prototype = {
	
  	selectedProducts : null,
  	isPageFirstLoad : null,
  	
	initialize: function() {
		this.selectedProducts = new Array();
		this.isPageFirstLoad = true;
	},
  	
	// onclick function of compare button
	clickCompareButton: function(productSelector,productComparisonToolControllerLink) { 
	  	
	  	var link = productComparisonToolControllerLink;
		for(var i = 0; i < this.selectedProducts.length; i++) {
			var prodName = this.selectedProducts[i];
			prodName = this.formatProductEntity(prodName);
			if(prodName != null || prodName != '') {
				link = link + '/' + prodName;
			}
			
		}
		
		var isPageFromBack = $("restoreFromCookieOrBack");
		isPageFromBack.value = "true";
		
  		return link;	
  	},
  	
  	// format product names for simplified url
  	formatProductEntity: function(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();
	},
	
	// shows or hides compare button
  	showAndHideScroller: function(productSelector, changedObj) {
		
  		// Get prodNames from prodNamesForHistoryBack hidden input, if it meets the below requirements. 
		if(this.isPageFirstLoad) {
			var storedProdNamesForHistoryBack = $('prodNamesForHistoryBack');
			if(storedProdNamesForHistoryBack.value != '') {
				this.selectedProducts = storedProdNamesForHistoryBack.value.split(';');
			}
			this.isPageFirstLoad = false;
		}
  		
  		if(changedObj) {
	  		if(changedObj.checked && !this.selectedProducts.exist(changedObj.value)) {
	  			// Add to selectedProducts.
	  			this.selectedProducts[this.selectedProducts.length] = changedObj.value;
	  		}
	  		else {
	  			// Remove from selectedProducts.
	  			this.selectedProducts = this.selectedProducts.remove(changedObj.value);
	  		}
	  		this.setProdNamesToHiddenInputForHistoryBack();
  		}
  		
  		// This operation is needed to recheck already checked products
  		// which are unchecked due to a bug of IE6.
  		this.makeCheckedSelectedProducts();
	    
		for(var i = 0; i < this.selectedProducts.length; i++) {
			var productId = this.selectedProducts[i];
			if(productSelector.currentProducts && !productSelector.currentProducts.exist(productId)){
				this.selectedProducts = this.selectedProducts.remove(productId);
			}
		}
		
  		var scrolObj = document.getElementById('scroller');  			
  		
  		(this.selectedProducts.length < 2) ? scrolObj.style.visibility = 'hidden' : scrolObj.style.visibility = 'visible';
  		
  		// Make all checkboxes enabled if the length of selectedProducts are 4 which means either it is comming
  		// from 5 or 3. 3 is negligible for this case.
  		if(this.selectedProducts.length == 4) {
	  		this.showAndHideCompareCheckBox(productSelector.currentProducts, true);
  		} 
  		// Make all checkboxes disabled except the selected once.
  		else if(this.selectedProducts.length == 5) {  			
	  		// disable other compare checkboxes  			
  			// p.c : no need to this calls since showAndHideCompareCheckBox method is changed
  			//this.showAndHideCompareCheckBox(productSelector.currentProducts, false);
  			this.showAndHideCompareCheckBox(this.selectedProducts, true);
  		}
  		this.showCurrentSelectionCountOfCompareProducts(this.selectedProducts.length); 	
  		
  	},
	
	// shows or hides compare check boxes under each product
	showAndHideCompareCheckBox_old: function(products, isVisible) {
  		
  		if(products) {
			for(var i = 0; i < products.length; i++) {
				var prod = $(products[i]);
				if(prod) {
					isVisible ? prod.disabled = false : prod.disabled = true;
				} 
			}
  		}
  	},
  	
 // p.c : this method is changed because of the ids of the check boxs are main sku' metarial names but the values are selected colour's material name.
 // And there for, if you select a different colour sku, this sku is added to selectedProducts but because of the checkbox's id is different, you can not get the 
 // checkbox.
  	showAndHideCompareCheckBox: function(products, isVisible) {
  		
  		var allCurrentProducts = productSelector.currentProducts;
  		
  		if(products) {
			for(var i = 0; i < allCurrentProducts.length; i++) {
				var prod = $(allCurrentProducts[i]);
				if(prod) {
					var value = prod.value;
					if (products.exist(value)) {
						isVisible ? prod.disabled = false : prod.disabled = true;
					} else {
						isVisible ? prod.disabled = true : prod.disabled = false;
					}
				} 
			}
  		}
  	},
  	
  	
  	showCurrentSelectionCountOfCompareProducts: function(len) {
		var obje = $('currentSelectionCountOfCompareProducts');
		if(obje != null) obje.innerHTML = len;
	},
  	
	removeFromCompareProducts: function(productName) {
		// if this product's compare checkbox is checked, unchecked it 
		var hideObj = document.getElementById(productName);
	  	if(hideObj != null) hideObj.checked = false;	  				
  	},
  	
  	setProdNamesToHiddenInputForHistoryBack: function() {
  		if(!this.isPageFirstLoad) {
			var storedProdNamesForHistoryBack = $('prodNamesForHistoryBack');
			var tmpStoredProdNamesForHistoryBack = '';
			for(var i = 0; i < this.selectedProducts.length; i++) {
				var prodName = this.selectedProducts[i];
				tmpStoredProdNamesForHistoryBack += this.selectedProducts[i]+';';
			}
			storedProdNamesForHistoryBack.value = tmpStoredProdNamesForHistoryBack.substr(0, tmpStoredProdNamesForHistoryBack.length-1);
  		}
  	},
  	
  	
  	// Recheckes the previously selected products.
  	// This method is used for overcoming IE6's bug which
  	// makes previously selected products unchecked.
  	makeCheckedSelectedProducts: function() {
		for(var i = 0; i < this.selectedProducts.length; i++) {
	        var alreadySelected = $(this.selectedProducts[i]);
	        if(alreadySelected) {
	           alreadySelected.checked = 'checked';
	        }
	    }
  	}
}