cart = function(pageCode){
	this.pageCode = pageCode;
	this.shippingCostsWrapper = doc.dhtml.getElementById('shippingCosts');
	this.cartCheckOutWrapper = doc.dhtml.getElementById('cartCheckOutPg');
	this.cartTotalCheckOutWrapper = doc.dhtml.getElementById('cartTotalCheckOutPg');
	
	if(session.currentStep == 2){
		// phone list page
		this.addAccessoryURL = this.addPhoneURL;
		this.detailWrapper = doc.dhtml.getElementById('cartDetail');
		this.summaryWrapper = doc.dhtml.getElementById('cartSummary');
	}else{
		// accessories page		
		this.detailWrapper = doc.dhtml.getElementById('cartDetail2');
		this.summaryWrapper = doc.dhtml.getElementById('cartSummary2');
	}
}

cart.prototype.alert = function( msg ){
	if(session.currentStep == 2){
		// phone list page
		this.alertElement = doc.dhtml.getElementById('miscCartAlert');
	}else{
		// accessories page		
		this.alertElement = doc.dhtml.getElementById('cartAlert2');
	}

	if(!msg || msg == '' || !this.alertElement) return;
	this.alertElement.innerHTML = msg;	
	if(session.currentStep != 2) closeCart();

	doc.dhtml.toggleVisibilityById(this.alertElement,'visible')
}

cart.prototype.addPhone = function( evt ){
	var model = phones.getModelById(session.viewingModel);
	var target = doc.dhtml.getTarget(evt);
	var id = target.id;
	var zip = null;

	if (phones.zipCode.indexOf(model.id, 0) > -1){
		//alert('model id: ' +model.id +'zipcode list:' +phones.zipCode+'voila:'+phones.zipCode.indexOf(model.id,0));
		if (id == 'addToCartButton_'+model.id) { 
			if (session.zip == null) {
				doc.dhtml.toggleVisibilityById('zipChecker','visible');
				return false;
			}else zip = session.zip;
		} else {
      zip = target.form.zip.value;
      doc.tracking.setSProp('prop5',zip);
      doc.tracking.setSProp('prop4',model.id);
	    doc.tracking.sendSClickHit(doc.tracking.pageCode + '_submitZip');
    }
	}	else {
			doc.dhtml.toggleVisibilityById('zipChecker','hidden');
	}
	
	doc.cart.addAjax(evt,model, zip);

  doc.tracking.setSProp('prop5',zip);
	doc.tracking.setSAddToCart(model.bpProductId, 'addPhoneToCart');
}

cart.prototype.addAjax = function( evt,model, zip ){
	var pid = 'addPhone';
 	var url = doc.utils.urls['addPhone'];
	url += (url.indexOf('?') > -1) ? '&' : '?';
 	url += 'productVariantExtensionId=' + model.bpProductId;	
 	// if(model.type == 2) 	url += '&zipCode=' + zip; - MB
       if(zip)  url += '&zipCode=' + zip;
	
	doc.cart.alert('<p>Agregando al carrito...</p>');
	//alert('adding to cart');
	/* SiteCatalyst Variables */
	s.pageName="Choose a Phone – Add Phone To Cart_ES" 
	s.channel ="Comprar"
	s.eVar22="Tel\351fono"
	/************* DO NOT ALTER ANYTHING BELOW THIS LINE ! **************/
	var s_code=s.t();if(s_code)document.write(s_code);

	
	if(doc.ajax.threads[pid]){
		thread = doc.ajax.threads[pid];
		thread.url = url;
		thread.model = model;
		thread.zip = zip || null;
		thread.loadXMLDoc();
		return;
	}

	var onload = function(){
		var response = this.getResponseText();
		var buffer = doc.ajax.setBuffer(response, this.pid);
		var cartDetail_ajax = document.getElementById('cartDetail_ajax');

		if(cartDetail_ajax){
			doc.cart.detailWrapper.innerHTML = cartDetail_ajax.innerHTML
			var cartSummary_ajax = doc.dhtml.getElementById('cartSummary_ajax');
			doc.cart.summaryWrapper.innerHTML = cartSummary_ajax.innerHTML;
			this.model.inCart = true;
	
			swapAddCartButton(this.model);
			doc.dhtml.toggleDisplayById(doc.cart.alertWrapper,'block')
			doc.dhtml.toggleVisibilityById('zipChecker','hidden');
			toggleFeatureFilter(null,'hidden');
			toggleCartSummary(this.evt);
			if (thread.zip != null) session.setZipAndMap(zip);
		}else{
			if(doc.cart.timedOut(response)){
				doc.cart.reset();
				return;
			}
			// zip code failed
			doc.dhtml.toggleDisplayById('zipMessage','block');
		} 
		var cartAlert = doc.dhtml.getElementById('addedToCartAlert');
		doc.cart.alert(cartAlert.innerHTML);
		doc.ajax.clearBuffer(this.pid);
	}		

	var onerror = function(){
			doc.cart.alert('<p>La opci\363n agregar al carrito no funciona en este momento.<p>'); 
			return false;	
	}
		

	var thread = new doc.ajax.thread(pid, url, onload,onerror);
	thread.evt = doc.dhtml.getEvent(evt);
	thread.model = model;
	thread.zip			= zip || null;
	thread.method = 'POST';
	thread.mime = 'text/html';
	thread.loadXMLDoc();
}

cart.prototype.addAccessory = function( evt ){
	var target = doc.dhtml.getTarget(evt);
	doc.dhtml.swapImgBySrc(null,target.id,'off');
	doc.cart.addAccessoryAjax(evt,target.value);
  doc.tracking.setSAddToCart(target.value,doc.tracking.pageCode + '_addAccessoryToCart');
}

cart.prototype.addAccessoryAjax = function( evt,id ){
	var pid = 'addAccessory';
 	var url = doc.utils.urls[this.pageCode + '_addAccessory'];
	url += (url.indexOf('?') > -1) ? '&' : '?';
 	url += 'productVariantExtensionId=' + id;
	var thread;

	doc.cart.alert('<p>Agregando al carrito...</p>');

	if(doc.ajax.threads[pid]){
		thread = doc.ajax.threads[pid];
		thread.url = url;
		thread.loadXMLDoc();
		return;
	}

	if(session.currentStep == 2){
		// phone list page
		var onload = function(){ 
			var response = this.getResponseText();

			var buffer = doc.ajax.setBuffer(response, this.pid);
			var cartDetail_ajax = document.getElementById('cartDetail_ajax');
			var cartSummary_ajax = doc.dhtml.getElementById('cartSummary_ajax');
			var cartAlert = doc.dhtml.getElementById('addedToCartAlert');

			if(!(cartDetail_ajax || cartSummary_ajax)){
				if(doc.cart.timedOut(response)){
					doc.cart.reset();
					return;
				}

				doc.cart.alert('<p>La opci\363n agregar al carrito no funciona en este momento.<p>'); 
			}else{
				if(cartDetail_ajax) doc.cart.detailWrapper.innerHTML = cartDetail_ajax.innerHTML
				if(cartSummary_ajax) doc.cart.summaryWrapper.innerHTML = cartSummary_ajax.innerHTML;
				if(cartAlert) doc.cart.alert(cartAlert.innerHTML);
				doc.ajax.clearBuffer(this.pid);

				doc.dhtml.toggleDisplayById('viewCheckOutWrap','block');
				doc.dhtml.toggleVisibilityById('zipChecker','hidden');
				toggleFeatureFilter(null,'hidden');
				toggleCartSummary(this.evt);
			} 
		}
	}else{
		// accessories page
		var onload = function(){
			var response = this.getResponseText();

			var buffer = doc.ajax.setBuffer(response, this.pid);
			var cartDetail_ajax = document.getElementById('cartDetail2_ajax');
			var cartSummary_ajax = doc.dhtml.getElementById('cartSummary2_ajax');
			var cartAlert = doc.dhtml.getElementById('cartAlert2_ajax');

			if(!(cartDetail_ajax || cartSummary_ajax)){
				if(doc.cart.timedOut(response)){
					doc.cart.reset();
					return;
				}

				doc.cart.alert('<p>La opci\363n agregar al carrito no funciona en este momento.<p>'); 
			}else{
				if(cartDetail_ajax) doc.cart.detailWrapper.innerHTML = cartDetail_ajax.innerHTML
				if(cartSummary_ajax) doc.cart.summaryWrapper.innerHTML = cartSummary_ajax.innerHTML;
				if(cartAlert) doc.cart.alert(cartAlert.innerHTML);
				toggleCartAlert(this.evt);
				doc.ajax.clearBuffer(this.pid);

			} 	
		}
	}

	var onerror = function(){
			doc.cart.alert('<p>La opci\363n agregar al carrito no funciona en este momento.<p>'); 
			return false;	
	}

	thread = new doc.ajax.thread(pid, url, onload, onerror);
	thread.evt = doc.dhtml.getEvent(evt);
	thread.currentStep = session.currentStep;
	thread.method = 'POST';
	thread.loadXMLDoc();
}

cart.prototype.update = function( evt ){
	var pid = 'updateCart';
 	var url = doc.utils.urls['updateCart'];
	var params = doc.cart.getCartPostParams();
	if(session.currentStep != 2) params += '&accessory=1';	

 	if(session.currentStep == 2){
		// phone list page
		doc.cart.alert('<p>Actualizando el carrito...</p>');

		var onload = function(){
			var response = this.getResponseText();

			var buffer = doc.ajax.setBuffer(response, this.pid);
			var cartDetail_ajax = document.getElementById('cartDetail_ajax');
			var cartSummary_ajax = doc.dhtml.getElementById('cartSummary_ajax');
			var cartAlert = doc.dhtml.getElementById('addedToCartAlert');

			if(!(cartDetail_ajax || cartSummary_ajax)){
				if(doc.cart.timedOut(response)){
					doc.cart.reset();
					return;
				}

				doc.cart.alert('<p>La opci\363n actualizar carrito no funciona en este momento.<p>'); 
			}else{
				if(cartDetail_ajax) doc.cart.detailWrapper.innerHTML = cartDetail_ajax.innerHTML
				if(cartSummary_ajax) doc.cart.summaryWrapper.innerHTML = cartSummary_ajax.innerHTML;
				if(cartAlert) doc.cart.alert(cartAlert.innerHTML);
				doc.ajax.clearBuffer(this.pid);

				doc.dhtml.toggleDisplayById('viewCheckOutWrap','block');
				doc.dhtml.toggleVisibilityById('zipChecker','hidden');
				toggleFeatureFilter(null,'hidden');
			} 
		}

	}else{
		// accessories page
		var onload = function(){
			var response = this.getResponseText();

			var buffer = doc.ajax.setBuffer(response, this.pid);
			var cartDetail_ajax = document.getElementById('cartDetail2_ajax');
			var cartSummary_ajax = doc.dhtml.getElementById('cartSummary2_ajax');
			var cartAlert = doc.dhtml.getElementById('cartAlert2_ajax');

			if(!(cartDetail_ajax || cartSummary_ajax)){
				if(doc.cart.timedOut(response)){
					doc.cart.reset();
					return;
				}

				doc.cart.alert('<p>La opci\363n actualizar carrito no funciona en este momento.<p>'); 
			}else{
				if(cartDetail_ajax) doc.cart.detailWrapper.innerHTML = cartDetail_ajax.innerHTML
				if(cartSummary_ajax) doc.cart.summaryWrapper.innerHTML = cartSummary_ajax.innerHTML;
				if(cartAlert) doc.cart.alert(cartAlert.innerHTML);
				doc.ajax.clearBuffer(this.pid);
			} 	
		}

	}	
	

	var onerror = function(){
			doc.cart.alert('<p>La opci\363n actualizar carrito no funciona en este momento.<p>'); 
			return false;
	}
		

	var thread = new doc.ajax.thread(pid, url, onload,onerror);
	thread.params = params;
	thread.loadXMLDoc();
	doc.tracking.sendSClickHit(doc.tracking.pageCode + '_updateCart');
}

cart.prototype.updateOnCheckout = function(evt){
  doc.dhtml.cancelEvent(evt);
	var pid = 'updateCart';
 	var url = doc.utils.urls['updateCartOnCheckOut'];

	var onload = function(){
		var response = this.getResponseText();
		var buffer = doc.ajax.setBuffer(response, this.pid);
		var cart_ajax = doc.dhtml.getElementById('cartCheckOutPg_ajax');	

		if(cart_ajax){
			doc.cart.cartCheckOutWrapper.innerHTML = cart_ajax.innerHTML
			var cartTotal_ajax = doc.dhtml.getElementById('cartTotalCheckOutPg_ajax');
			doc.cart.cartTotalCheckOutWrapper.innerHTML = cartTotal_ajax.innerHTML;

			doc.ajax.clearBuffer(this.pid);
		}	else{
			if(doc.cart.timedOut(response)){
				doc.cart.reset();
				return;
			}
		} 
	}		


	var onerror = function(){
//			doc.cart.alert('The update cart feature is currently down.'); 
			return false;
	}
		
	var form = document.getElementById('BillShipForm');
	if(form != null){
		var params = doc.cart.getCartPostParams(form)
	}else return;

	params = params + '&checkout=1';
	var thread = new doc.ajax.thread(pid, url, onload,onerror);
	thread.params = params;
	thread.loadXMLDoc();
/*	doc.tracking.sendSClickHit(doc.tracking.pageCode + '_updateCart'); remove client side tracking per Tania S. - GM */
}

cart.prototype.selectShipping = function(evt){
	var pid = 'selectShipping';
  var target = doc.dhtml.getTarget(evt);

	var params = target.id + '=' + target.options[target.selectedIndex].value;
 	var url = doc.utils.urls['selectShipping'];
  var thread;
  
	if(doc.ajax.threads[pid]){
		thread = doc.ajax.threads[pid];
		thread.params = params;
		thread.url = url;
		thread.loadXMLDoc();
		return;
	}
  
  
	var onload = function(){
		var buffer = doc.ajax.setBuffer(this.getResponseText(), this.pid);
		var cartTotal_ajax = doc.dhtml.getElementById('cartTotalCheckOutPg_ajax');
		if(cartTotal_ajax){
			doc.cart.cartTotalCheckOutWrapper.innerHTML = cartTotal_ajax.innerHTML;
			doc.ajax.clearBuffer(this.pid);
		}else{
			if(doc.cart.timedOut(response)){
				doc.cart.reset();
				return;
			}
		} 
	}		

	var onerror = function(){
	
	}
		
	thread = new doc.ajax.thread(pid, url, onload);
	thread.params = params;
	thread.loadXMLDoc();
	return true;	
}

cart.prototype.checkOut = function(evt){
  doc.tracking.sendSClickHit('checkOut'); 
//	var url = doc.utils.secureURL
	doc.utils.goToURL(evt);
}

cart.prototype.itemInCart = function( bpid ){
	// Uses update cart form to determine if item is in cart
	// updateCartForm	

	// can't use because of safari innerHTML issues.
	
	var form = doc.dhtml.getElementById('updateCartForm');
	if(form == null) form = document.forms[2]; // safari hack

	if(form != null){
		var elms = form.elements;
		for (var i = 0; i < elms.length; i++){
			if(elms[i].id.indexOf(bpid) > -1) return true;		
		}
	}
	return false;
}

cart.prototype.getCartPostParams = function(){
	var params = '';
	var form = document.getElementById('updateCartForm') || arguments[0];
	if(form == null) form = document.forms[2]; // safari hack

	if(form != null){
		var elms = form.elements;

		for(var i = 0; i < elms.length; i++){
			if(elms[i].id.indexOf('n') > -1){
				if(i == 0) params = elms[i].id + '=' + elms[i].value;
				else  params += '&' + elms[i].id + '=' + elms[i].value;
			}else if(elms[i].id == 'promoCode'){
				params += '&promoCode=' + elms[i].value;
			}
		}
	}
	return params;
}

cart.prototype.timedOut = function(response){
	if(response.indexOf('session') > -1) return true
	return false;
}

cart.prototype.reset = function(){
	this.alert('<p>Tu sesi\363n expir\363. Actualiza esta p\341gina.</p>');
	setTimeout('doc.cart.refreshPage',10000);
}

cart.prototype.refreshPage = function(){
	doc.utils.locationReplace(doc.utils.urls['hdr_step2']);
}

