/**
* aheadWorks Co.
*
* NOTICE OF LICENSE
*
* This source file is subject to the EULA
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://ecommerce.aheadworks.com/LICENSE-M1.txt
*
* @category   AW
* @package    AW_Ajaxcartpro
* @copyright  Copyright (c) 2009-2010 aheadWorks Co. (http://www.aheadworks.com)
* @license    http://ecommerce.aheadworks.com/LICENSE-M1.txt
*/


Prototype.Browser.IE6 = Prototype.Browser.IE && parseInt(navigator.userAgent.substring(navigator.userAgent.indexOf("MSIE")+5)) == 6;
Prototype.Browser.IE7 = Prototype.Browser.IE && parseInt(navigator.userAgent.substring(navigator.userAgent.indexOf("MSIE")+5)) == 7;
Prototype.Browser.IE8 = Prototype.Browser.IE && !Prototype.Browser.IE6 && !Prototype.Browser.IE7;

window.ACPTop = 200;

if(!Prototype.Browser.IE6){

	setLocation = function(url,form_id){
		if(window.location.href.match('https://') && !url.match('https://')){
				url = url.replace('http://','https://')
		}
		if(AW_ACP.isCartPage && ((url.search('/add') != -1 ) || (url.search('/remove') != -1 )) ){
				ajaxcartsend(url+'awacp/1/is_checkout/1', 'url', '', '');
		}else if (url.search('checkout/cart/add') != -1){
				if (form_id!=undefined && $(form_id))
					ajaxcartsend('?awacp=1', 'form', '', $(form_id));
				else ajaxcartsend(url+'awacp/1', 'url', '', '');
		}else if (url.search('wishlist/index/cart') != -1){
				ajaxcartsendwishlist(url+'awwishl/1/awacp/1', 'url', '', '');
		}else if (url.search('options=cart') != -1){
				ajaxcartsendconfigurable(url);
		}
		else
		{
				window.location.href = url;
		}
	}
}

function addSubmitEvent()
{
	if (typeof productAddToCartForm != 'undefined')
	{
		productAddToCartForm.submit = function(url){
				if(this.validator && this.validator.validate()){
					ajaxcartsend('?awacp=1', 'form', this, '');
				}
				return false;
		}

		productAddToCartForm.form.onsubmit = function() {
				productAddToCartForm.submit();
				return false;
		};
	}
}

function addAcpSubmitEvent()
{
	if (typeof productAddToCartFormAcp != 'undefined')
	{
		productAddToCartFormAcp.submit = function(url){
				if(this.validator && this.validator.validate()){
					if (AW_ACP.isCartPage)
						ajaxcartsend('?awacp=1&is_checkout=1', 'form', this, '');
					else
						ajaxcartsend('?awacp=1', 'form', this, '');
				}
				return false;
		}

		productAddToCartFormAcp.form.onsubmit = function() {
				productAddToCartFormAcp.submit();
				return false;
		};
	}
}

if(!Prototype.Browser.IE6){

	var cnt1 = 20;
	__intId = setInterval(
		/* Hangs event listener for @ADD TO CART@ links*/
		function(){
			cnt1--;
			if(typeof productAddToCartForm != 'undefined'){
				try {
					// This fix is applied to magento <1.3.1
						$$('#product_addtocart_form '+aw_addToCartButtonClass).each(function(el){
								el.setAttribute('type', 'button')
						})
				}catch(err){

				}

					if (AW_ACP.hasFileOption == false) addSubmitEvent();

				clearInterval(__intId);
			}
			if(!cnt1) clearInterval(__intId);
		},
		500
	);



	var cnt2 = 20;
	__intId2 = setInterval(
		/* This hangs event listener on @DELETE@ items from cart*/
		function(){
			cnt2--;
			if(typeof aw_cartDivClass!= 'undefined' && $$(aw_cartDivClass).length || ((typeof AW_ACP !== 'undefined') && AW_ACP.isCartPage)){
					//updateDeleteLinks();
				clearInterval(__intId2);
			}
			if(!cnt2) clearInterval(__intId);
		},
		500
	);
}





function setPLocation(url, setFocus){
	if (url.search('checkout/cart/add') != -1){ //CART ADD
		window.opener.focus();

		if (url[url.length-1] == '/') delim = '';
		else delim = '/';

		if (window.opener.location.pathname.search('checkout/cart') == -1)
				window.opener.ajaxcartsend(url+delim+'awacp/1', 'url', '');
		else
				window.opener.ajaxcartsend(url+delim+'awacp/1/is_checkout/1', 'url', '');
	}
	else{
		if(setFocus) {
			window.opener.focus();
		}
		window.opener.location.href = url;
	}
}

function ajaxcartsendwishlist(url, type, obj){
	url = getCommonUrl(url);
	showProgressAnimation();
	new Ajax.Request(url, {
			onSuccess: function(resp){
					try{
						if (typeof(resp.responseText) == 'string') eval('resp = ' + resp.responseText);
				}catch(e){
					win.location.href=url;
					hideProgressAnimation();
					return;
				}
					hideProgressAnimation();
				if (resp.r != 'success'){
						if (resp.redirect)
								win.location.href = resp.redirect;
						else
								win.location.href=url;
					}
				else{
					if(AW_ACP.useConfirmation){
						showConfirmDialog(resp.product_name);
					}
					__onACPRender();
					updateCartView(resp);
						updateTopLinks(resp);
						updateWishlist(resp);
						updateWishlistTopLinks(resp);
						updateAddLinks();
				}
			}
		});
}

function ajaxcartsend(url, type, obj, form){
	url = getCommonUrl(url)

	showProgressAnimation();
	if (type == 'form'){
		var aForm;
		if (form!=undefined && form!='') {
			aForm = form;
		} else aForm = $('product_addtocart_form_acp') ? $('product_addtocart_form_acp') : $('product_addtocart_form');
		aForm.action += url;

		aForm.request({
				onComplete:  function(resp){
					location.href='/checkout/cart';

					if (typeof(resp.responseText) == 'string'){
						try{
								eval('resp = ' + resp.responseText);
						}catch(e){
								if (obj.form.submit()){
									return;
								}
								else{
									win.location.href = obj.form.action;
									return;
								}
						}
					}
				hideProgressAnimation();
				if (resp.r != 'success'){
					obj.form.submit();
				}
				else{
					__onACPRender();
						if(AW_ACP.useConfirmation && (url.search('is_checkout/1') != 1)){
						showConfirmDialog(resp.product_name);
					}
					updateCartView(resp);
				}
			}
		})

	}
	if (type == 'url'){
		new Ajax.Request(url, {
			onSuccess: function(resp){
				location.href='/checkout/cart';
				try{
					if (typeof(resp.responseText) == 'string') eval('resp = ' + resp.responseText);
				}catch(e){
					win.location.href=url;
					hideProgressAnimation();
					return;
				}
				hideProgressAnimation();
					if (resp.r != 'success'){
					win.location.href=url;
				}
				else{
						if(AW_ACP.useConfirmation && (url.search('is_checkout/1') == -1)){
						showConfirmDialog(resp.product_name);
					}
					__onACPRender();
					updateCartView(resp);
				}
			}
		});

	}
}

function __onACPRender(){
	if(AW_ACP.onRender && AW_ACP.onRender.length){
	$A(AW_ACP.onRender).each(function(h){h(AW_ACP)})
	}
}

function addEffectACP(obj, effect)
{
	if (effect == 'opacity'){
		$(obj).hide();
		new Effect.Appear(obj);

	}
	if (effect == 'grow'){
		$(obj).hide();
		new Effect.BlindDown(obj);
	}
	if (effect == 'blink'){
		new Effect.Pulsate(obj);
	}
}


function updateDeleteLinks(){
	var tmpLinks = document.links;
	for (i=0; i<tmpLinks.length; i++){
		if (tmpLinks[i].href.search('checkout/cart/delete') != -1){
			url = tmpLinks[i].href.replace(/\/uenc\/.+,/g, "");
			var del = url.match(/delete\/id\/\d+\//g);
			var id = del[0].match(/\d+/g);
			if (window.location.protocol == 'https:'){
				aw_base_url = aw_base_url.replace("http:", "https:");
			}
			if(!AW_ACP.isCartPage){
				//tmpLinks[i].href = 'javascript:ajaxcartprodelete("' + aw_base_url + 'ajaxcartpro/cart/remove/id/' + id +'")';
			}else{
				//tmpLinks[i].href = 'javascript:ajaxcartprodelete("' + aw_base_url + 'ajaxcartpro/cart/remove/id/' + id +'/is_checkout/1")';
			}
		}
	}
}

function updateTopLinks(resp){
	if($$(aw_topLinkCartClass).length){
		/*$$(aw_topLinkCartClass)[0].title = */$$(aw_topLinkCartClass)[0].innerHTML = resp.links;
		//$('topCartSidebarElement').innerHTML = resp.sidebar;
		//updateDeleteLinks();
	}
}

function updateWishlistTopLinks(resp){
	if($$(aw_topWishlistLinkCartClass).length){
		$$(aw_topWishlistLinkCartClass)[0].innerHTML = resp.wishlist_links;
	}
}

window.updateBigCartView = function (resp){

	$$(aw_bigCartClass)[0].innerHTML = resp.cart
	if($('shopping-cart-table')){
		decorateTable('shopping-cart-table')
	}

	//updateDeleteLinks();
	updateTopLinks(resp);
	updateAddLinks();

	var scripts = resp.cart.extractScripts();
	for (var i=0; i<scripts.length; i++)
	{
		if (typeof(scripts[i]) != 'undefined')
		{
				try
				{
					eval(scripts[i].replace(/var /gi, ""));
				} catch(e){ }
		}
	}

}

function showProgressAnimation(){
	alignBlock($$('.ajaxcartpro_progress')[0], 260, 50, 'progress');
}

var Browser = {
	Version: function() {
		var version = 999; // we assume a sane browser
		if (navigator.appVersion.indexOf("MSIE") != -1)
		// bah, IE again, lets downgrade version number
		version = parseFloat(navigator.appVersion.split("MSIE")[1]);
		return version;
	}
}

function showConfirmDialog(product_name){
	if (product_name) $('acp_product_name').innerHTML = product_name;
	block = $$('.ajaxcartpro_confirm')[0];
	checkElementsAW();
	alignBlock(block, 260, 140, 'confirmation');
	block.style.display = 'block';
	$("bg-screen-ajax-cart").style.display = 'block';
	if (typeof($$('.ajaxcartpro_confirm .focus')[0]) != 'undefined') $$('.ajaxcartpro_confirm .focus')[0].focus();

	var ACPcountdown = $('ACPcountdown');
	if(typeof ACPcountdown != 'undefined' && AW_ACP.counterBegin>0)
	{
		ACPcountdown.innerHTML = AW_ACP.counterBegin;
		if (typeof __intId3 != 'undefined') clearInterval(__intId3);
		__intId3 = setInterval(
				function(){
					if ( parseInt(ACPcountdown.innerHTML) ){
						ACPcountdown.innerHTML = parseInt(ACPcountdown.innerHTML)-1;
					}
					else
					{
						clearInterval(__intId3);
						block.style.display = "none";
						ACPcountdown.innerHTML = AW_ACP.counterBegin;
					}

				},
				1000
		);
	}
}
function closeAjaxCartPopup(e) {
	e = e||event;
	if(e.preventDefault)
		e.preventDefault()
	$('bg-screen-ajax-cart').style.display = 'none';
	$$('.ajaxcartpro_confirm')[0].style.display='none';
	return false;
}

function hideProgressAnimation(){

	$$('.ajaxcartpro_progress')[0].style.display = 'none';
}
function checkElementsAW() {
	updateAddLinks();

	// Some other onclicks
	$$('#aw_acp_continue')[0].onclick = function(e){
		e = e||event;
		if(e.preventDefault)
			e.preventDefault()
		$$('.ajaxcartpro_confirm')[0].style.display='none';
		$('bg-screen-ajax-cart').style.display = 'none';
		return false;
	}

	$('bg-screen-ajax-cart').onclick = function(e){
		closeAjaxCartPopup(e);
	}
	$('aw_acp_checkout').onclick = function(e){
		$$('.ajaxcartpro_confirm')[0].style.display='none';
		$('bg-screen-ajax-cart').style.display = 'none';
		return true;
	}
	Event.observe(document, 'keydown', function(e){
		if (e.keyCode == 27) {
			closeAjaxCartPopup(e);
		}
	}.bind(this));


	// Test for minicart

	//if((typeof aw_cartDivClass != 'undefined') && ($$(aw_cartDivClass).length || ((typeof AW_ACP !== 'undefined') && AW_ACP.isCartPage))){
		updateDeleteLinks();
	//}

}
if(!Prototype.Browser.IE6){
	document.observe("dom:loaded", checkElementsAW);
}

function updateAddLinks(){
	var ats = document.links;
	for (i=ats.length-1; i>=0; i--){
		if (ats[i].href.search('checkout/cart/add') != -1){
			ats[i].onclick = function(link){
				return function(){
					setLocation(link)
				}
			}(ats[i].href);
			ats[i].href="javascript:void(0)";
		}
		if (ats[i].href.search('wishlist/index/cart') != -1){
			ats[i].onclick = function(link){
				return function(){
					setLocation(link)
				}
			}(ats[i].href);
			ats[i].href="javascript:void(0)";
		}
	}
}

function getCommonUrl(url){
	if(window.location.href.match('www.') && url.match('http://') && !url.match('www.')){
		url = url.replace('http://', 'http://www.');
	}else if(!window.location.href.match('www.') && url.match('http://') && url.match('www.')){
		url = url.replace('www.', '');
	}
	return url;
}

var productAddToCartFormAcp;
function ajaxcartsendconfigurable(url)
{
	showProgressAnimation();
	urlToSend = url + '&ajaxcartpro=1';
	new Ajax.Request(urlToSend, {
			onSuccess: function(resp){
					if (resp.responseText == 'false')
					{
						window.location = url;
					}
					else
					{
						tmpDiv = win.document.createElement('div');
						var scripts = resp.responseText.extractScripts();

						tmpDiv.innerHTML = resp.responseText.stripScripts();
						win.document.body.appendChild(tmpDiv);

						showOptionsDialog();
						hideProgressAnimation();

						productAddToCartFormAcp = new VarienForm('product_addtocart_form_acp');
						decorateGeneric($$('#product-options-wrapper dl'), ['last']);
						addAcpSubmitEvent();
						if (typeof($$('#acp_configurable_block .focus')[0]) != 'undefined') $$('#acp_configurable_block .focus')[0].focus();

						for (var i=0; i<scripts.length; i++)
						{
								if (typeof(scripts[i]) != 'undefined')
								{
									eval(scripts[i]);
								}
						}
					}
			}
		});
}

function showOptionsDialog()
{
	alignBlock($('acp_product_options'), 400, $('acp_product_options').offsetHeight, 'custom_options');
}

function alignBlock(block, width, height, blockType)
{
	if (blockType == 'confirmation' && !AW_ACP.useConfirmation)
		return false;

	if (blockType == 'progress' && !AW_ACP.useProgress)
		return false;

	block.style.display = 'block';
	block.style.width = width + 'px';
	block.style.height = height + 'px';
	block.style.left = document.viewport.getWidth()/2 - width/2 + 'px';

	if (Prototype.Browser.IE && Browser.Version()<8){//edit ARTERA per adattare a nuovi ie
		block.style.position = 'absolute';
		window.ACPTop = 200;
	}
	if (aw_ajaxcartpro_proganim == 'center'){
		if (!(Prototype.Browser.IE && !navigator.appVersion.match("8") && !navigator.appVersion.match("9"))){
				block.style.top = (document.viewport.getHeight()/2 - height/2) + 'px';
		}else{
				window.ACPTop = 200;
		}
		}
	if (aw_ajaxcartpro_proganim == 'top'){
		if (!(Prototype.Browser.IE && !navigator.appVersion.match("8"))){
			block.style.top = '0px';
		}else{
			// IE7-
			window.ACPTop = 0;
		}
	}
	if (aw_ajaxcartpro_proganim == 'bottom'){

		block.style.bottom = '0px';
	}
}

function validateDownloadableCallback(elmId, result)
{
	var container = $('downloadable-links-list');
	if (result == 'failed') {
		container.removeClassName('validation-passed');
		container.addClassName('validation-failed');
	} else {
		container.removeClassName('validation-failed');
		container.addClassName('validation-passed');
	}
}

function validateOptionsCallback(elmId, result)
{
	var container = $(elmId).up('ul.options-list');
	if (result == 'failed') {
		container.removeClassName('validation-passed');
		container.addClassName('validation-failed');
	} else {
		container.removeClassName('validation-failed');
		container.addClassName('validation-passed');
	}
}

function acpSubmit()
{
	if(productAddToCartFormAcp.validator&&productAddToCartFormAcp.validator.validate())
	{
		productAddToCartFormAcp.submit();
		$('acp_configurable_block').remove();
	}
}

