//
//-------------------------------------------------------------------
// Licensed Materials - Property of IBM
//
// WebSphere Commerce
//
// (c) Copyright IBM Corp. 2006
//
// US Government Users Restricted Rights - Use, duplication or
// disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
//-------------------------------------------------------------------
//

//
// ***
// * This javascript function is used by the 'Add to Shopcart' button.  Since the HTML form is shared by both 'Add to Shopcart' and 'Add to Wish List' button,
// * appropriate values are set using this javascript before the form is submitted.
// * The variable 'busy' is used to avoid submitting the same forms multiple times when users click the button more than once.
// ***
//
var busy = false;
function Add2ShopCart(form)

{      //alert("catentryId="+form.catEntryId.value);
	   
       if (!busy) {
              busy = true;
              form.action="/webapp/wcs/stores/servlet/OrderItemAdd";
              //form.catEntryId.value = catEntryId;
              //form.quantity.value = catEntryQuantity;
              form.URL.value='OrderCalculate?dummaryparam=1&URL=OrderItemDisplay';
              form.submit();
       }
}
// This javascript function is used by the 'Add to Wish List' button to set appropriate values before the form is submitted
function Add2WishList(form)
{
       if (!busy) {
              busy = true;
              form.action="/webapp/wcs/stores/servlet/InterestItemAdd";
             // form.catEntryId.value = catEntryId;
              form.URL.value='InterestItemDisplay';
              form.submit();
       }
}

 
// getURLParam() assumes URL parameters are name-value-pairs
// A valid URL would be http://domain/page?name1=value1&name2=value2
// Any similar, more (or less) robust function can be substituted here
function getURLParam(name) {
	var pairs = window.location.search.substr(1).split("&");
	for(var i = 0; i < pairs.length; i++) {
		var nvp = pairs[i].split("=");
		if((nvp.length == 2) && (nvp[0] == name)) {
			return nvp[1];
		}
	}
	return "";
}
	var cmCatID = getURLParam("cmCategory");
	
var isProductItemDisplaySetupJsLoaded = true;

//////////////////////////////////////////////////////////////
// JS code for compare page functionality
/////////////////////////////////////////////////////////////

// variable to store checked products on search results page
var checkedProductsOnPage = new Object();

// handler, called when user checked/unchecked some product on search results page
function CompareItemChecked(productId)
{
	var http = createRequestObject();
	var name = "compareItemCheckbox_" + productId;
	var status = document.getElementsByName(name)[0].checked;
	if(status == true)
	{  
		http.open('post', '/webapp/wcs/stores/servlet/SAUpdateComparePage?action=addNewItemAjax&itemId=' + productId);
	    http.onreadystatechange = function () {
		    processAjaxResponseAddNewItem(productId, http);
		  };
	    http.send(null);
	    document.getElementsByName(name)[0].checked = false;
	}
	else
	{
		http.open('post', '/webapp/wcs/stores/servlet/SAUpdateComparePage?action=removeItemAjax&itemId=' + productId);
	    http.onreadystatechange = function () {
		    processAjaxResponseRemoveItem(productId, http);
		  };
	    http.send(null);
	    document.getElementsByName(name)[0].checked = true;
	}
} 

function processAjaxResponseAddNewItem(productId, ajaxObject) {
    //check if the response has been received from the server
    if(ajaxObject.readyState == 4){
	
        //read and assign the response from the server
        var response = ajaxObject.responseText;
        var name = "compareItemCheckbox_" + productId;
		
		if(response == "ItemAdded")
		{
			document.getElementsByName(name)[0].checked = true;
			checkedProductsOnPage[productId] = productId + '';
			ItemsInCompagePageSet[productId] = productId + '';
			
			// user clicked two or more checkboxes - create link "Compare Selected Items"
			if(Object.size(ItemsInCompagePageSet) >= 2)
			{
				for (var key in checkedProductsOnPage)
				{
					var compareSpan = document.getElementById("compareItemSpan_" + key);
					if(compareSpan != null)
					{
						compareSpan.innerHTML = "<a href='javascript:GoToComparePage()'>Compare Selected Items</a>";
						compareSpan.className = "compareLabelLink";
					}
				}
			}
		}
		else
		{
			document.getElementsByName(name)[0].checked = false;
			alert(response);
		}
    }
}

function processAjaxResponseRemoveItem(productId, ajaxObject) {
    //check if the response has been received from the server
    if(ajaxObject.readyState == 4){
	
        //read and assign the response from the server
        var response = ajaxObject.responseText;
        var name = "compareItemCheckbox_" + productId;
		
		if(response == "ItemRemoved")
		{
			document.getElementsByName(name)[0].checked = false;
			delete checkedProductsOnPage[productId];
			delete ItemsInCompagePageSet[productId];
			
			var compareSpan = document.getElementById("compareItemSpan_" + productId);
			if(compareSpan != null)
			{
				compareSpan.innerHTML = "Compare";
				compareSpan.className = "compareLabel";
			}
			
			// remove links to compare page
			if(Object.size(ItemsInCompagePageSet) < 2)
			{
				while(true)
				{
					var compareSpans = document.getElementsByClassName("compareLabelLink");
					if(compareSpans != null && compareSpans.length > 0)
					{
						compareSpans[0].innerHTML = "Compare";
						compareSpans[0].className = "compareLabel";
					}
					else
						break;
				}
			}
		}
		else
		{
			document.getElementsByName(name)[0].checked = true;
			alert(response);
		}
    }
}

// function, called by Omnifind when produced search results. Used to simplify modification of one search result produced by Omnifind.
function ProductDetailsExt(catentryId)
{
	var showLink = 0;
	if(Object.size(ItemsInCompagePageSet) >= 2)
    	showLink = 1;
    var res = '';
	if (ItemsInCompagePageSet.hasOwnProperty(catentryId))
	{
		res = ('<div class="b-compare"><input type="checkbox" name="compareItemCheckbox_' + catentryId + 
		'" value="' + catentryId + '" checked="checked" onclick=\'CompareItemChecked("' + catentryId + 
		'");\'/>');
		checkedProductsOnPage[catentryId] = catentryId + '';
		if(showLink == 0)
			res += ('<span id="compareItemSpan_' + catentryId + '" class="compareLabelLink">Compare</span></div>')
		else
			res += ('<span id="compareItemSpan_' + catentryId + '" class="compareLabel">' + '<a href="javascript:GoToComparePage()">Compare Selected Items</a>' + '</span></div>')
	}
	else
	{
		res = ('<div class="b-compare"><input type="checkbox" name="compareItemCheckbox_' + catentryId + 
		'" value="' + catentryId + '" onclick=\'CompareItemChecked("' + catentryId + 
		'");\'/><span id="compareItemSpan_' + catentryId + '" class="compareLabel">Compare</span></div>');
	} 
	
	document.write(res);
}

// Called when user want to add products to compare page
function GoToComparePage()
{
	var action = "/webapp/wcs/stores/servlet/SAUpdateComparePage";
	var params = new Object();
	params['storeId'] = '10052';
	params['catalogId'] = '10002';
	params['langId'] = '-1';
	params['action'] = 'showComparePage';
	post_to_url(action, params, "post");
}

// perform post query to web server
function post_to_url(path, params, method, listParams) {
    method = method || "post"; // Set method to post by default, if not specified.

    // The rest of this code assumes you are not using a library.
    // It can be made less wordy if you use one.
    var form = document.createElement("form");
    form.setAttribute("method", method);
    form.setAttribute("action", path);

    for(var key in params) {
    	if(params[key] instanceof Array)
    	{
    		var array = params[key];
    		for(var i = 0; i < array.length; i++)
    			addParamToForm(form, key, array[i]);
    	}
    	else
    		addParamToForm(form, key, params[key]);
    }

    document.body.appendChild(form);
    form.submit();
}

function addParamToForm(form, name, value)
{
	var hiddenField = document.createElement("input");
    hiddenField.setAttribute("type", "hidden");
    hiddenField.setAttribute("name", name);
    hiddenField.setAttribute("value", value);
    form.appendChild(hiddenField);
}

Object.size = function(obj) {
    var size = 0, key;
    for (key in obj) {
        if (obj.hasOwnProperty(key)) size++;
    }
    return size;
};

function createRequestObject() {
    var tmpXmlHttpObject;
    
    //depending on what the browser supports, use the right way to create the XMLHttpRequest object
    if (window.XMLHttpRequest) { 
        // Mozilla, Safari would use this method ...
        tmpXmlHttpObject = new XMLHttpRequest();
	
    } else if (window.ActiveXObject) { 
        // IE would use this method ...
        tmpXmlHttpObject = new ActiveXObject("Microsoft.XMLHTTP");
    }
    
    return tmpXmlHttpObject;
}

//////////////////////////////////////////////////////////////
// End JS code for compare page functionality
/////////////////////////////////////////////////////////////

