var cartajaxspinner = '<img class="ajax-spinner" src="/images/ajaxspinners/circleball.gif" />';
var ajaxBlockedTmp = null;
var addLOSLastSubmitted = null;
var cartdata = null;

$(function() {

	if (cartDataService != "") {
		$.ajax( {
			type : 'POST',
			url : cartDataService,
			dataType : 'json',
			success : function(jsonobj) {
				cartdata = jsonobj;
				if (cartdata.success) {
					if (typeof (displayMiniCart) != 'undefined')
						displayMiniCart(cartdata);
					if (typeof (displayLocation) != 'undefined')
						displayLocation(cartdata);
					if (typeof (initLivePersonVars) != 'undefined')
						initLivePersonVars(cartdata);
				} else {
					if (typeof (initLivePersonVars) != 'undefined')
						initLivePersonVars( null );
				}
			}
		});
	}


	// Attach zipcode check ajax validation.
	$('a.ajax-shop').click(function(event) {
		var elem = this;

		event.preventDefault();

		//checkShopZip(elem.href);
		checkShopZip(elem);

	});

	//if no URL is set to a button helper, this gets exec
	$('button.ajax-shop').click(function(event) {
		var elem = this;
		event.preventDefault();
		checkShopZip(elem);
	});


	$('.addtocart-submit').click(function(event) {
		event.preventDefault();
		submitAddToCart(this, $(this).parents('form'));
	});

	$('.inline-zip-form').ajaxForm(
					{
				dataType : 'json',
				beforeSubmit : function(formData, jqForm, options) {

					if (ajaxBlocked($(jqForm).find('button')))
						return false;
						},
				success : function(data, statusText, xhr, $form) {
				   if (data.islocationset || data.doRedirect) {
						if (data.redirect) {
							document.location = data.redirect;
						} else {
							document.location.reload(true);
						}
					} else {

						if(data.cities) {
							ajaxUnblock();

							$('input[name=zip]').keyup(function(){
								if($(this).val().length < 5)
								{
									$('.cities').hide();
									$('input[name="city"]').val('');
								}
							});

							if($('.cities.box').length)
							{
								$('.cities.box').remove();
							}

							var options = '<div class="cities box">';

							options += '<input name="city" type="hidden"/>';
							options += '<div class="topleft"><div class="topright">';
							options += '<div class="item-feature-icons-text">Please select your city.</div>';

							//THIS ZIP CODE CITIES
							for(var i = 0; i < data.cities.city.length; i++ )
							{
								options += '<div class="city-item"><a>'+ data.cities.city[i] + ", " + data.cities.state[i] +'</a></div>';
								//options += '<div class="city-item" style="padding: 3px 10px;border-bottom: 1px dotted #999;"><input type="radio" name="city" value="'+ data.cities.city[i] + ", " + data.cities.state[i] +'"/>&nbsp;'+ data.cities.city[i] + ", " + data.cities.state[i] +'</div>';
							}

							//ALL CITIES
							var all_cities = '';
							all_cities += '<option value=""></option>';
							for(var i = 0; i < data.all_cities.length; i++ )
							{
								all_cities += '<option value="' + data.all_cities[i] + '">' + data.all_cities[i] +'</option>';
							}

							options += '<br/><div class="item-feature-icons-text">Or, tell us your city &amp; state:</div>';

							options += '<div class="box-city-state clearfix"><div class="form-input-warning-box">   <div class="form-zipentry-top-outer"><div class="form-zipentry-top-inner"></div></div>   <div class="form-zipentry-content">';

							options += ' <input type="text" class="clear-this input-shadowed input-text-city" name="city-user"/>&nbsp;<select name="state-user" class="input-shadowed">'+ all_cities +'</select>';

							options += '<div class="form-error-input-city-state" style="display: none;"></div>';

												  //warning
							options += '</div>   <div class="form-zipentry-bottom-outer"><div class="form-zipentry-bottom-inner"></div></div>   </div></div>';

							options += '</div></div><div class="bottomleft"><div class="bottomright"></div></div>';

							var classList = xhr[0].className.split(/\s+/);

							if (classList.length > 1) {
								var baseForm = $('.inline-zip-form.' + classList[1]);
							} else {
								var baseForm = $('.inline-zip-form');
							}
							var targetBase = '';
							if(baseForm.find('.item-zip-wrapper-tall').length != 0)
							{
								baseForm.find('.item-zip-wrapper-tall').append(options);
								targetBase = baseForm.find('.item-zip-wrapper-tall');
							}
							else if(baseForm.find('.item-zip-wrapper').length != 0)
							{
								baseForm.find('.item-zip-wrapper').append(options);
								targetBase = baseForm.find('.item-zip-wrapper');
							}
							else //(baseForm.find('.item-zip-right').length != 0)
							{
								baseForm.append(options);
								targetBase = baseForm;
							}


							$('.city-item a').click(function(e){
								//do post
								e.preventDefault();

								ajaxUnblock();

								$('input[name="city"]').val($(this).text());
								baseForm.submit();

							});
							$('select[name="state-user"]').change(function(e){
								$('input[name="zip"]').val(''); //disregard zip code if user enter c/s manually
								$('input[name="city"]').val($('input[name="city-user"]').val()+  ", "+ $(this).val());

								ajaxUnblock();

								baseForm.submit();

							});

							$('input[name="city-user"]').keyup(function(){
								ajaxUnblock();
								$('input[name="city"]').val($(this).val()+  ", "+ $('select[name="state-user"]').val());
							});


						} else {

							ajaxUnblock();

							//if not able to load entered city and state
							if(data.target_item) {
								var target_item = 'zip'; //default
									target_item =  data.target_item;

								$('.form-error-input-' + target_item).fadeOut('normal', function() {
									//$('#form-zipentry').addClass('popup-zipcode-error');
									$('.box-' + target_item).addClass('popup-zipcode-error');
									$('.form-error-input-' + target_item).html(data.message);
									$('.form-error-input-' + target_item).fadeIn();
								});
							} else {  //normal
								//Remove Cities list from DOM when displaying zip response message
								$('.cities').remove();

								$('#lightbox-container-content').html('<h3 class="question-title">We\'re sorry.</h3>' + data.message);
								$('#lightbox-container').addClass('popup-zipcode');
								$('#lightbox-container-content p').addClass('copy');
								$('#lightbox-container-content h4').remove();

								hbxFailedZip(this.data,	'zipsearch_failed');

								$('#lightbox-container').jqmShow();
							}


						}
					}
				}

			});
//////clear values
	function clearZipForm(form)
	{
		if($('form').find('select[name="city"]').length)
		{
			$('form').find('select[name="city"]').remove();

		}
	}


	// does not refresh page
	$('.inline-zip-form2').ajaxForm(
					{
				dataType : 'json',
				beforeSubmit : function(formData, jqForm, options) {
					if (ajaxBlocked($(jqForm).find('button')))
						return false;
						},
				success : function(data) {
							if (data.islocationset || data.doRedirect) {
						if (data.redirect) {
							document.location = data.redirect;
						} else {
							// document.location = document.location;
							// alert('cool man');
							$('#savings-calculator-hidden').submit();
						}
					} else {
						ajaxUnblock();

						$('#lightbox-container-content')
						.html(
								'<h3 class="question-title">We\'re sorry.</h3>' + data.message);
						$('#lightbox-container').addClass(
						'popup-zipcode');
						$('#lightbox-container-content p').addClass(
						'copy');
								$('#lightbox-container-content h4').remove();

						hbxFailedZip(this.data,
						'zipsearch_community_failed');

								$('#lightbox-container').jqmShow();
							}
						}

			});

	$('.jqmClose').click(function() {
		$('#lightbox-container').jqmHide();
	});

	$('.ajax-broadband-servicearea-check').click(function(event) {
		var clicked = this;
		event.preventDefault();
		checkShopZip( clicked, null, checkBroadbandServiceArea );
	});

	$('.ajax-broadband-servicearea-check-skipzip').click(function(event) {
		var clicked = this;
		event.preventDefault();
		checkBroadbandServiceArea( clicked.href );
	});

});

function hbxFailedZip(data, type) {
	var result = data.split(/zip=([\d]{5})/i);
	if (result) {
		var ev1 = new _hbEvent('search');
		ev1.keywords = result[1] ? result[1] : '';
		ev1.results = 0;
		ev1.attt1 = 0;
		ev1.attr2 = type;
		ev1.attr3 = 0;
		_hbSend();
	}

}

function nextStep(clicked) {
	$.ajax( {
		type : 'POST',
		url : nextStepService,
		dataType : 'json',
		beforeSend : function(request) {
			if (ajaxBlocked(clicked))
				return false;
		},
		success : function(jsonobj) {
			document.location = jsonobj.nextURL;
		}
	});
}

function addLOSItem(clicked) {
	submitAddToCart(clicked, $(clicked).parents('form'));
	return false;
}

/**
 * Array of cart items with the following properies:
 *
 * product_id
 * product_name
 * price
 * quantity
 * cm_prod_cat
 * cm_prod_attr
 * @param cartitems
 */
function triggerShopAction5ForCartItems( cartitems ) {
	if ( typeof( cmCreateShopAction5Tag ) == 'function' ) {
		for ( var idx=0; idx < cartitems.length; idx++ ) {
			var item = cartitems[ idx ];
			var cmprodattr = '';
			var attrs = item.cm_prod_attr;
			if ( attrs.length > 0 ) {
				if ( typeof( hbx.mlc ) != 'undefined' ) {
					attrs = rdiCmSetAttr( 6, hbx.mlc, attrs );
				}
				if ( typeof( hbx.pn ) != 'undefined' ) {
					attrs = rdiCmSetAttr( 7, hbx.pn, attrs );
				}
				cmprodattr = rdiCmToAttrString( attrs );
			}
			cmCreateShopAction5Tag( item.product_name, item.product_name, item.quantity, item.price, item.cm_prod_cat, cmprodattr );
		}
		if ( cartitems.length > 0 ) {
			cmDisplayShop5s();
		}
	}
}

function submitAddToCart(clicked, jqForm) {
	jqForm.ajaxSubmit( {
		dataType : 'json',
		beforeSubmit : function(formData, jqForm, options) {
			if (ajaxBlocked(clicked))
				return false;
					addLOSLastSubmitted = jqForm;
				},
		success : function(data) {
					if ( data.success ) {
						if ( data.cartitems && data.cartitems.length > 0 ) {
							/*
							 product_id
						     product_name
						     price
						     cm_prod_cat,
						     cm_prod_attr
						    */
							if (typeof( lpAddVars ) == 'function') {
								var item = data.cartitems[0];
								if (item.product_type == 'phone') {
									lpAddVars('page', 'lpPhoneType', item.product_name);
								} else if (item.product_type == 'plan') {
									lpAddVars('page', 'lpPlanType', item.product_name);
									}
				}

							triggerShopAction5ForCartItems( data.cartitems );
						}

						document.location = data.nextstep;
					} else {
						ajaxUnblock();
				$('.addtocart-submit').click(function(event) {
					event.preventDefault();
					submitAddToCart(this, $(this).parents('form'));
				});
						$('#lightbox-container-content').html(data.message);
						$('#lightbox-container').addClass(data.csspopupclass);
						$('#lightbox-container').jqmShow();
					}
				}
			});
}

//var tempZip = '';
//var tempZipHidden = false;
function popupZipForm(zipformcontent, successurl) {
	$('#lightbox-container-content').html(zipformcontent);
	$('#lightbox-container').addClass('popup-zipcode');

	//Trigger Coremetrics cmCreateElementTag
	if ( typeof( cmCreateElementTag ) == 'function' ) {
		cmCreateElementTag('ENTER ZIP CODE','INTERSTITIALS:ZIP CODE');
	}

	$('#form-zipentry').ajaxForm( {
		dataType : 'json',
		beforeSubmit : function(formData, jqForm, options) {
			if (ajaxBlocked($(jqForm).find('button')))
				return false;
		},
		success : function(data) {
			if (data.islocationset) {

				if (data.message && data.message != '') {
					//A message was supplied in the reponse, so display the message
					//instead of redirecting them.
					$('#lightbox-container-content').html(data.message);

					$('a.jqmClose').click(function(e){
						// Success url is empty. So refresh the
						document.location.reload(true);
					});

				} else {
					//No message in the response. So redirect the user.
					if (successurl != '') {

						//show popup 'we are sorry' - 317 addition - cases isolated
						if(data.is_cricket == false && successurl.indexOf('broadband/devices') > -1 &&
								document.location.href.indexOf('shop') > -1 )
						{
							$('#lightbox-container-content').html(data.error_message);
							//$('#lightbox-container').addClass('short-message-popup');
							$('a.jqmClose').click(function(e){
								// Success url is empty. So refresh the
								document.location.reload(true);
							});

						}else if(data.is_cricket == false && successurl.indexOf('shop/smartphones') > -1 &&
								document.location.href.indexOf('shop') > -1 )
						{
							document.location = '/cell-phones/shop/muve-music-phones';
						}
						else{//anything else - ORIGINAL redirect
						document.location = successurl;
						}
					} else if (data.redirect && data.redirect != '') {
						document.location = data.redirect;
					} else {
						// Success url is empty. So refresh the
						document.location.reload(true);
					}
				}
			} else {

				if(data.cities)
				{
					ajaxUnblock();

					$('#lightbox-container').css('overflow', 'visible');

					$('input[name="zip"]').keyup(function(){
						if($(this).val().length < 5)
						{
							$('.cities').remove();
							$('input[name="city"]').val('');
						}
					});

					//add class
					//var options = '<div style="margin: -5px 0 0 5px;padding: 10px;width: 175px;position:absolute; background-color: #fff;z-index: 9999; border: 1px solid #999;">';

					if($('.cities.box').length)
					{
						$('.cities.box').remove();
					}

					var options = '<div class="cities box">';

					options += '<input name="city" type="hidden"/>';
					options += '<div class="topleft"><div class="topright">';
					options += '<div class="item-feature-icons-text">Please select your city.</div>';

					//THIS ZIP CODE CITIES
					for(var i = 0; i < data.cities.city.length; i++ )
					{
						options += '<div class="city-item"><a>'+ data.cities.city[i] + ", " + data.cities.state[i] +'</a></div>';
						//options += '<div class="city-item" style="padding: 3px 10px;border-bottom: 1px dotted #999;"><input type="radio" name="city" value="'+ data.cities.city[i] + ", " + data.cities.state[i] +'"/>&nbsp;'+ data.cities.city[i] + ", " + data.cities.state[i] +'</div>';
					}

					//ALL CITIES
					var all_cities = '';
					all_cities += '<option value=""></option>';
					for(var i = 0; i < data.all_cities.length; i++ )
					{
						all_cities += '<option value="' + data.all_cities[i] + '">' + data.all_cities[i] +'</option>';
						//options += '<div class="city-item" style="padding: 3px 10px;border-bottom: 1px dotted #999;"><input type="radio" name="city" value="'+ data.cities.city[i] + ", " + data.cities.state[i] +'"/>&nbsp;'+ data.cities.city[i] + ", " + data.cities.state[i] +'</div>';
					}

					options += '<br/><div class="item-feature-icons-text">Or, tell us your city &amp; state:</div>';

					//options += '<div class="box-city-state"><div class="form-input-warning-box"><div class="form-zipentry-top-outer"><div class="form-zipentry-top-inner"></div></div><div class="form-zipentry-content">';//error

					options += '<div class="box-city-state clearfix"><div class="form-input-warning-box">   <div class="form-zipentry-top-outer"><div class="form-zipentry-top-inner"></div></div>   <div class="form-zipentry-content">';

					options += ' <input type="text" class="clear-this input-shadowed input-text-city" name="city-user"/>&nbsp;<select name="state-user" class="input-shadowed">'+ all_cities +'</select>';

					options += '<div class="form-error-input-city-state" style="display: none;"></div>';

										  //warning
					options += '</div>   <div class="form-zipentry-bottom-outer"><div class="form-zipentry-bottom-inner"></div></div>   </div></div>';

				//	options += '</div><div class="form-zipentry-bottom-outer"><div class="form-zipentry-bottom-inner"></div></div>';

					options += '</div></div><div class="bottomleft"><div class="bottomright"></div></div>';

					//options += '<div class="selected-city" style="padding: 2px 10px; margin-top: 40px;width: 175px; position:absolute; background-color: #fff;z-index: 9999; border: 1px solid #999;" >West Linda, CA<span style="padding: 0 5px;font-weight: normal;">[<a>change</a>]</span></div>';

					var baseForm = $('#form-zipentry');
					/*
												var baseForm = $('.inline-zip-form.' + xhr[0].classList[1]);
												var targetBase = '';

												if(baseForm.find('.item-zip-wrapper-tall').length != 0)
												{
													baseForm.find('.item-zip-wrapper-tall').append(options);
													targetBase = baseForm.find('.item-zip-wrapper-tall');
												}
												else if(baseForm.find('.item-zip-wrapper').length != 0)
												{
													baseForm.find('.item-zip-wrapper').append(options);
													targetBase = baseForm.find('.item-zip-wrapper');
												}
												else //(baseForm.find('.item-zip-right').length != 0)
												{
													baseForm.append(options);
													targetBase = baseForm;
												}
					 */

					$('#form-zipentry-content').append(options);

					$('.cities').css('margin-top', '-25px');

					$('#form-zipentry #form-zipentry-content input').css('display', 'inline');
					$('.city-item a').click(function(e){
						//do post
						e.preventDefault();
						$('input[name="city"]').val($(this).text());
						baseForm.submit();
					});
					$('select[name="state-user"]').change(function(e){
						$('input[name="zip"]').val(''); //disregard zip code if user enter c/s manually
						$('input[name="city"]').val($('input[name="city-user"]').val()+  ", "+ $(this).val());
						baseForm.submit();
					});

					$('input[name="city-user"]').keyup(function(){
						$('input[name="city"]').val($(this).val()+  ", "+ $('select[name="state-user"]').val());
					});


				} else if (data.doRedirect) {
					document.location = data.redirect;
				} else {
					ajaxUnblock();

					var target_item = 'zip'; //default

					if(data.target_item)
					{
						target_item =  data.target_item;
					} else {
						//Remove Cities list from DOM when displaying zip response message
						$('.cities').remove();
					}

					$('.form-error-input-' + target_item).fadeOut('normal', function() {
						//$('#form-zipentry').addClass('popup-zipcode-error');
						$('.box-' + target_item).addClass('popup-zipcode-error');
						$('.form-error-input-' + target_item).html(data.message);
						$('.form-error-input-' + target_item).fadeIn();
					});

					hbxFailedZip(this.data, 'zipsearch_shop_failed');
				}
			}
		}

	});

	$('#lightbox-container').jqmShow();
}

function replaceLOSItem(clicked, packageid) {
	$(addLOSLastSubmitted[0]['addmode']).attr( {
		value : packageid
	});
	submitAddToCart(clicked, addLOSLastSubmitted);
}

function newLOSItem(clicked, packagetype) {
	$(addLOSLastSubmitted[0]['packagetype']).attr( {
		value : packagetype
	});
	$(addLOSLastSubmitted[0]['addmode']).attr( {
		value : 'append'
	});
	submitAddToCart(clicked, addLOSLastSubmitted);
}

function setIntention(clicked, packagetype) {
	$(addLOSLastSubmitted[0]['packagetype']).attr( {
		value : packagetype
	});
	appendConfirmStack(addLOSLastSubmitted, 'confirmintention');
	submitAddToCart(clicked, addLOSLastSubmitted);
}

function confirmFringeAddToCart(clicked) {
	appendConfirmStack(addLOSLastSubmitted, 'fringezip');
	submitAddToCart(clicked, addLOSLastSubmitted);
}

function confirmIncompatiblePhoneAddToCart(clicked) {
	appendConfirmStack(addLOSLastSubmitted, 'incompatiblephoneaddtocart');
	submitAddToCart(clicked, addLOSLastSubmitted);
}

function changeIntention(clicked, packagetype) {
	var data = {packageType: packagetype};

	$.ajax( {
		type : 'POST',
		url : changeIntentionService,
		dataType : 'json',
		data : data,
		beforeSend : function(request) {
			if (ajaxBlocked(clicked))
				return false;
		},
		success : function(jsonobj) {
			if (jsonobj.success) {
				document.location = jsonobj.nextstep;
			} else {
				ajaxUnblock();
				$('#lightbox-container-content').html(jsonobj.message);
				$('#lightbox-container').addClass('popup-package-conflict');
				$('#lightbox-container').jqmShow();
			}
		}
	});
}

function appendConfirmStack(jqForm, confirmAction) {
	var confirmstack = $(jqForm[0]['confirmstack']).attr('value');
	confirmstack += (confirmAction + ',');
	$(jqForm[0]['confirmstack']).attr( {
		value : confirmstack
	});
}

function ajaxBlocked(ajaxButton) {
	if ($('.ajax-spinner').length > 0)
		return true;
	ajaxBlockedTmp = $(ajaxButton).replaceWith(cartajaxspinner);
}

function ajaxUnblock() {
	$.each(ajaxBlockedTmp, function(intIndex, objValue) {
		$('.ajax-spinner').replaceWith(objValue);
	});
}

function expireCart() {
	var rdi_cart_date = new Date();
	rdi_cart_date.setTime(rdi_cart_date.getTime() + (-7 * 24 * 60 * 60 * 1000));
	var rdi_cart_expires = "; expires=" + rdi_cart_date.toGMTString();
	document.cookie = "MyCricketCartID=" + rdi_cart_expires
	+ "; path=/; domain=.mycricket.com";
	document.cookie = "data=" + rdi_cart_expires + "; path=/";
	// document.cookie = "ShopPhonesNav=" + rdi_cart_expires + "; path=/";
	// document.cookie = "ShopPlansNav=" + rdi_cart_expires + "; path=/";
	// document.cookie = "ShopBroadbandNav=" + rdi_cart_expires + "; path=/";
	// document.cookie = "ShopBroadbandPlansNav=" + rdi_cart_expires + ";
	// path=/";
	// document.cookie = "ShopFamilyPlansNav=" + rdi_cart_expires + "; path=/";
	// document.cookie = "ShopAccessoriesNav=" + rdi_cart_expires + "; path=/";
}

function showCartError() {
	$('#cart-error-msg').toggle();
}

function showPIASingleLOSInstructions(totoggle) {
	$('#' + totoggle).toggle();
}

function checkShopZip(elem, closecallback, successcallback) {
	var href;
	if(elem.href)
	href = elem.href;
	else
	href = '';

	var popupMode = '';
	if ( $(elem).hasClass('shop-paygo') ) {
		popupMode = 'shop-paygo-learn';
	}
	$.ajax( {
		type : 'POST',
		url : locationCheckService,
		data : {href:href, popupMode: popupMode},
		dataType : 'json',
		success : function(data) {
			var formButton = null;
			if (!data.islocationset) {
				popupZipForm(data.message, href);
				if (typeof(closecallback) == 'function') {
					$('.jqmClose').click( closecallback );
				}
			} else {
				if (typeof(successcallback) == 'function') {
					//console.log('calling successcallback');
					successcallback( href );
				} else {
					document.location = href;
				}
			}
		},
		error : function(request, status, errorThrown) {
			// alert(status + ' ' + locationCheckService);
	}
	});
}

function removeItem(itemid, clicked) {
	$.ajax( {
		type : 'POST',
		url : removeItemService,
		dataType : 'json',
		data: {itemid: itemid},
		beforeSend : function(request) {
			if (ajaxBlocked(clicked))
				return false;
		},
		success : function(data) {
			ajaxUnblock();
			if (data.success) {
				//document.location.reload(true);
				$('#lightbox-container').jqmHide();
			} else {
				$('#lightbox-container-content').html(data.message);
				$('#lightbox-container').addClass(data.csspopupclass);
				$('#lightbox-container').jqmShow();
			}
		},
		error : function(request, status, errorThrown) {
			// alert(status + ' ' + locationCheckService);
		}
	});
}

function checkBroadbandServiceArea(href) {
	$.ajax( {
		type : 'POST',
		url : broadbandServiceAreaCheckService,
		dataType : 'json',
		success : function(data) {

			if (data.isBroadbadServiceArea) {
				if( typeof(href) != 'undefined' ) {
					document.location = href;
				}
			} else {
				//console.log(data.csspopupclass);
				$('#lightbox-container').jqmHide();
				$('#lightbox-container-content').html(data.message);
				$('#lightbox-container').addClass(data.csspopupclass);
				$('#lightbox-container').jqmShow();
			}
		},
		error : function(request, status, errorThrown) {
			// alert(status + ' ' + broadbandServiceAreaCheckService);
		}
	});
}


