var Minicart = Class.create();
Minicart.prototype = {
    initialize: function(form, minicartUrl){
        this.form = form;
        this.minicartUrl = minicartUrl;
        this.onUpdate = this.fillForm.bindAsEventListener(this);
		this.onGetRelatedProducts = this.fillRelatedProducts.bindAsEventListener(this);
        this.onComplete = this.resetLoadWaiting.bindAsEventListener(this);
		this.onGetFilteredProducts = this.fillFilteredProducts.bindAsEventListener(this);
		this.ongetHelpMeDiv = this.fillHelpMeDiv.bindAsEventListener(this);		
    },

    update: function(){
		var request = new Ajax.Request(
			this.minicartUrl,
			{
				method: 'post',
				onComplete: this.onComplete,
				onSuccess: this.onUpdate,
				onFailure: this.onComplete,
				parameters: Form.serialize(this.form)
			}
		);
    },

    fillForm: function(transport){
        var elementValues = {};
        if (transport && transport.responseText){
            try{
                elementValues = eval('(' + transport.responseText + ')');
            }
            catch (e) {
                elementValues = {};
            }
        }
        else{
            // do nothing.
        }
		//alert(elementValues.cart.products +' '+ elementValues.cart.price);
		// Write the code to modify the contents of the mini cart
		// javascript:alert($$('div.shop-access'));
		//.each(function(a) {alert(a.innerHTML();});
		// javascript:($$('div.shop-access').each(function(a) {alert(a.innerHTML());}));
		$('cartContent').innerHTML = '('+ elementValues.cart.products +')';

    },

    getRecentProducts: function(){
		var request = new Ajax.Request(
			this.minicartUrl,
			{
				method: 'post',
				onComplete: this.onComplete,
				onSuccess: this.onGetRecentProducts,
				onFailure: this.onComplete,
				parameters: Form.serialize(this.form)
			}
		);
    },

    fillRecentProducts: function(transport){
        var elementValues = {};
        if (transport && transport.responseText){
			// TODO: Fill the received response in the box where related products are to be shown.
			$$('div.availability').innerHTML = transport.responseText;
        }
		else {
			alert(transport.responseText);
		}
    },

    getRelatedProducts: function(){
		var request = new Ajax.Request(
			this.minicartUrl,
			{
				method: 'post',
				onComplete: this.onComplete,
				onSuccess: this.onGetRelatedProducts,
				onFailure: this.onComplete,
				parameters: Form.serialize(this.form)
			}
		);
    },

    fillRelatedProducts: function(transport){
        var elementValues = {};
        if (transport && transport.responseText){
			// TODO: Fill the received response in the box where related products are to be shown.
			$$('div.availability').innerHTML = transport.responseText;
        }
    },

	
	
	_disableEnableAll: function(element, isDisabled) {
        var descendants = element.descendants();
        for (var k in descendants) {
            descendants[k].disabled = isDisabled;
        }
        element.disabled = isDisabled;
    },

    setLoadWaiting: function(step, keepDisabled) {
        if (step) {
            if (this.loadWaiting) {
                this.setLoadWaiting(false);
            }
            var container = $(step);
            container.setStyle({opacity:.5});
            //this._disableEnableAll(container, true);
			$(step+'-please-wait').style.left = parseInt((screen.width)/2) - (parseInt((screen.width-993)/2) + 251)+'px';
            Element.show(step+'-please-wait');
        } else {
            if (this.loadWaiting) {
                var container = $(this.loadWaiting);
                var isDisabled = (keepDisabled ? true : false);
                if (!isDisabled) {
                    container.setStyle({opacity:1});
                }
               // this._disableEnableAll(container, isDisabled);
                Element.hide(this.loadWaiting+'-please-wait');
            }
        }
        this.loadWaiting = step;
    },
	
	resetLoadWaiting: function(transport) {
		// If Loading image is set, unset it here.
		this.setLoadWaiting(false);
	},

	getFilteredProducts: function(loader){

		if($('dummymain') && $('dummymain').innerHTML  == '')
			$('dummymain').innerHTML = $('main').innerHTML

		if(this.minicartUrl != null)
		{
			if(loader)
				this.setLoadWaiting('wrapper');
			var request = new Ajax.Request(
				this.minicartUrl,
				{
					method: 'get',
					onComplete: this.onComplete,
					onSuccess: this.onGetFilteredProducts,
					onFailure: this.onComplete
				}
			);	
		}
		else
		{
			this.setDefault('main');
		}
	},

	fillFilteredProducts: function(transport){
        
        if (transport && transport.responseText){
			// TODO: Fill the received response in the box where related products are to be shown.
			$('main').innerHTML = transport.responseText;
			
			$$('.col-right').each(function(element){
				element.style.display = "none";
			});
			$('main').parentNode.className = 'middle col-1-layout';
        }
    },

	getHelpMeDiv: function(loader){
		//this.setLoadWaiting('wrapper');
		if(loader)
			this.setLoadWaiting('wrapper', false);
		var request = new Ajax.Request(
			this.minicartUrl,
			{
				method: 'get',
				onComplete: this.onComplete,
				onSuccess: this.ongetHelpMeDiv,
				onFailure: this.onComplete
			}
		);
		
	},

	fillHelpMeDiv: function(transport){
        
        if (transport && transport.responseText){
			// TODO: Fill the received response in the box where related products are to be shown.
			$('help-me-choose').innerHTML = transport.responseText;
			//console.log($('main').parentNode);
			//$('help-me-choose').parentNode.className = 'middle col-1-layout';
        }
    },	

	setDefault: function(step)
	{
		if(step == 'main')
		{
			$('main').innerHTML = $('dummymain').innerHTML;
			$('main').parentNode.className = 'middle col-2-right-layout';
			$$('.col-right').each(function(element){
				element.style.display = "";
			});
		}			
	}

}

function ajaxPagination(aele)
{
	achor_href = aele.href;
	if(achor_href.indexOf('filteredProduct') != -1)
	{
		var filteredProducts = new Minicart(null, achor_href);
		filteredProducts.getFilteredProducts(true);
		return false;
	}
	else
	{
		setLocation(achor_href);
	}
}

function ajaxSort(url)
{
	if(url.indexOf('filteredProduct') != -1)
	{
		var filteredProducts = new Minicart(null, url);
		filteredProducts.getFilteredProducts(true);
		return false;
	}
	else
	{
		setLocation(url);
	}
}

function ajaxView(url)
{
	if(url.indexOf('filteredProduct') != -1)
	{
		var filteredProducts = new Minicart(null, url);
		filteredProducts.getFilteredProducts(true);
		return false;
	}
	else
	{
		setLocation(url);
	}
}
