/* Extends array functionality to chech whether it has a term in any of its cells or no */
Core.inArray = function Core_inArray(array_haystack, search_needle) {
	var i = array_haystack.length;
	if (i > 0) {
		do {
			if (array_haystack[i] === search_needle) {
				return true;
			}
		} while (i--);
	}
	return false;
}

Core.timers = new Array();

Core.setTimer = function (id) {
	if (!id) id=0;

	var old_time = Core.getTimer(id);

	Core.timers[id] = new Date().getTime();
		if (Core.timers[id]) {
	}
}

Core.getTimer = function (id) {
	if (!id) id=0;

	var elapsed = new Date().getTime() - (Core.timers[id] || 0);
	return elapsed / 1000;
}



advAJAX.setDefaultParameters({
	onInitialization : function(obj) {
		//if (ShoppingCart.dlgPanel && ShoppingCart.dlgPanel.isVisible()) {
			Core.showElement('dialog_progress');
		//} else {
			Core.showElement('sh_cart_progress');
		//}
		ShoppingCart.ajax_running = true;
	},

	onComplete : function(obj) {
		//if (ShoppingCart.dlgPanel && ShoppingCart.dlgPanel.isVisible()) {
			Core.hideElement('dialog_progress');
		//} else {
			Core.hideElement('sh_cart_progress');
		//}
		ShoppingCart.ajax_running = false;
	},

	retry: 2,
	retryDelay: 2000,

	onError : function(obj) {
		if (prompt("Response Error: " + obj.status + "\nError: " + obj.statusText +
				ShoppingCart.please_reload_page + " Also send an exact time of error: "+document.lastModified+".\nReload page now?", getCookie('username') + '-' + getCookie('s_id') + '-' + getCookie('cart_session_id'))) {
			location.reload();
		}; 

		Logger.log("Response Error: " + obj.status + ' | ' + obj.statusText);
	}
});


function ShoppingCart() {
}

ShoppingCart.ajax_running = false;

ShoppingCart.products_element = 'product_container';
ShoppingCart.total_prints_price_element = 'total_prints_price';

ShoppingCart.please_reload_page = "\nPlease, reload this page. If error will continue to appear, contact our customer service, and describe in details your problem.";


ShoppingCart.please_reload_page = "\nYour request encountered an error.\n\nPlease, try to reload the page and if error will continue to appear, contact our customer service, and describe in details your problem.\n\nYou may be asked about the following error code."


ShoppingCart.warning__low_dpi__poor_quality = "Print quality will be poor &mdash; original is too small for this size.";
ShoppingCart.warning__corrupted__not_printable = "Impossible to print: original corrupted!";
if(!Core.detectBrowser().isIE && !Core.detectBrowser().isFirefox) {
	ShoppingCart.please_reload_page + "\nErrors may be caused by your version of browser. Try using Firefox or Internet Explorer instead.";
}

ShoppingCart.insignificant_cropping_threshold = 96;

ShoppingCart.showPage = function ShoppingCart_showPage(page_no, show_items_per_page) {

//	Core.setText(ShoppingCart.products_element, "<div class=text2b><img src=http://images.fotki.com/progress.gif> Loading Shopping Cart Page...</div>");
	Core.setText('bulk_edit_container', "<div class=text2b style='padding-top:8px; text-align:center'><img src=http://images.fotki.com/progress.gif></div>");
	Core.setText('scrollable_allitems_container', '');
//	Core.setText('cart_page_navigation', '');
//	Core.setText('cart_page_navigation_bottom', '');

	ShoppingCart.reloadPage(page_no, show_items_per_page, ShoppingCart.FULL_RELOAD);
}

/* Refresh current page */
ShoppingCart.refreshPage = function ShoppingCart_refreshPage(reload_method) {
	ShoppingCart.dialog_applied.address = 0;
	ShoppingCart.dialog_applied.shipping = 0;
	ShoppingCart.dialog_applied.credit_card = 0;
	ShoppingCart.dialog_applied.upload = 0;
	ShoppingCart.reloadPage(cart.current_page, cart.items_per_page, reload_method);
}

ShoppingCart.reloadPage = function ShoppingCart_showPage(page_no, show_items_per_page, reload_method) {
	if (cart.first_page_content) {
		//On first load we have XML cached in the page. So no AJAX needed.
		var xmlDoc = null;
		if (window.ActiveXObject) {
			// code for IE
			xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
			xmlDoc.async="false";
			var loaded = xmlDoc.loadXML(cart.first_page_content);
			if (!loaded) {
				alert('ActiveX Cart Error: ' + xmlDocument.parseError.reason + xmlDocument.parseError.srcText);
			}
		} else if (document.implementation && document.implementation.createDocument) {
			// code for Mozilla, etc.
			var domParser = new DOMParser();
			xmlDoc = domParser.parseFromString(cart.first_page_content, 'application/xml');
			//		var parseError = checkForParseError(xmlDocument); 
			//source: http://www.faqts.com/knowledge_base/view.phtml/aid/15302/fid/616
			//		if (parseError.errorCode == 0) {
			//			alert(xmlDocument.documentElement.nodeName);
			//		}
		}

		if (xmlDoc) {
			ShoppingCart.updateCartObjectFromXML(xmlDoc, ShoppingCart.FULL_RELOAD);
		} else {
			prompt("Failed to load cart content.\n(String to XML conversion error.)" + ShoppingCart.please_reload_page, 
            getCookie('username') + '-' + getCookie('s_id') + '-' + getCookie('cart_session_id')
         );
		}

		

//		window.setTimeout("Core.getElementU('bottomline_hline').onclick = ShoppingCart.showHideBottomLine; ShoppingCart.showHideBottomLine();", 1500);


		ShoppingCart.onLoad = function SC_onLoad() {
                    var bottomline_hline = Core.getElementU('bottomline_hline');
                    if (bottomline_hline) {
                        bottomline_hline.onclick = ShoppingCart.showHideBottomLine;
                    }
		    ShoppingCart.showHideBottomLine();
		}

		Core.addEvent(window, 'load', ShoppingCart.onLoad);

		cart.first_page_content = null;
	} else {
		advAJAX.get({
			url : ("?ajax=get_cart_content_script&items_per_page="+show_items_per_page+"&page_no="+page_no),
	
			onSuccess: function(obj) { 
				ShoppingCart.updateCartObjectFromXML(obj.responseXML, reload_method || ShoppingCart.RELOAD_ONLY_SUMMARY);
			},
	
			onError : function(obj) {
				Core.setText(ShoppingCart.products_element, "<h2>Error occured</h2>" + 
				"<div class=text2b>" + ShoppingCart.please_reload_page + getCookie('username') + '-' + getCookie('s_id') + '-' + getCookie('cart_session_id') + "</div>");
			}
		});
	}
}


ShoppingCart.FULL_RELOAD = 1;
ShoppingCart.RELOAD_ONLY_SUMMARY = 2;

ShoppingCart.updateCartObjectFromXML = function ShoppingCart_updateCartObjectFromXML(responseXML, reload_method) {
			Logger.disabled = Core.isProduction();

			// fixes reloading page while editing other item
			var prev_edit_part_index = ShoppingCart.edit_part_index;
			var prev_edit_item_index = ShoppingCart.edit_item_index;
			var prev_edit_item_if_show_title = ShoppingCart.edit_item_if_show_title;
			var prev_edit_mode = ShoppingCart.edit_mode;

			var currNode = responseXML.childNodes[0].childNodes[0];

			var temp_cart = new Cart();

			temp_cart.empty = 1;

			if (cart.arrayFormats) {
				//precache formats so we dont need to get them once again, and they actually will not come again, so store them.
				for (f in cart.arrayFormats) {
					temp_cart.addFormat(cart.arrayFormats[f]);
				}
			}

			cart = new Cart();

			while (currNode) {
				if (currNode.nodeName == "item") {
					var temp_cart_item = new Object();

					for (i=0; i<currNode.childNodes.length; i++) {
						if (currNode.childNodes.item(i).nodeType != Node.TEXT_NODE) {
							var nodeValue = null;
							try {
								nodeValue = currNode.childNodes.item(i).firstChild.nodeValue;
							} catch (e) {
								//Logger.log('ITEM catched ' + e);
							}

							temp_cart_item[currNode.childNodes.item(i).nodeName] = nodeValue;
						}
					}

					if (! temp_cart_item.copy) temp_cart_item.copy = "Copyright";

					temp_cart.addCartItem(temp_cart_item);
				} else if (currNode.nodeName == "category") {
					var temp_cat = new Object();

					for (i=0; i<currNode.childNodes.length; i++) {
						if (currNode.childNodes.item(i).nodeType != Node.TEXT_NODE) {
							var nodeValue = null;
							try {
								nodeValue = currNode.childNodes.item(i).firstChild.nodeValue;
							} catch (e) {
								//Logger.log('CAT catched ' + e);
							}
							temp_cat[currNode.childNodes.item(i).nodeName] = nodeValue;
						}
					}

					if (temp_cart.arrayParts[temp_cat.type] == undefined){
						temp_cart.addCartPart(temp_cat.type);
					}

					//Adding separately to avoid subarray of items overwriting :( TODO: make it shorter
					temp_cart.arrayParts[temp_cat.type].total_price = temp_cat.total_price;
					temp_cart.arrayParts[temp_cat.type].type_name = temp_cat.type_name;
					temp_cart.arrayParts[temp_cat.type].total_unique_items = temp_cat.total_unique_items;
					temp_cart.arrayParts[temp_cat.type].total_items = temp_cat.total_items;
				} else if (currNode.nodeName == 'format' || currNode.nodeName == 'format_summary') {
					var temp_format = new Object();

					for (i=0; i<currNode.childNodes.length; i++) {
						if (currNode.childNodes.item(i).nodeType != Node.TEXT_NODE) {
							var nodeValue = null;
							try {
								nodeValue = currNode.childNodes.item(i).firstChild.nodeValue;
							} catch (e) {
								//Logger.log('FMT catched ' + e);
							}
							temp_format[currNode.childNodes.item(i).nodeName] = nodeValue;
						}
					}

					if (currNode.nodeName == "format") {
						temp_cart.addFormat(temp_format);
					} else if (currNode.nodeName == "format_summary") {
						temp_cart.addFormatSummary(temp_format);
					} 

				} else if (currNode.nodeType != Node.TEXT_NODE) {
					var nodeName = currNode.nodeName;
					var nodeType = currNode.nodeType;
					var nodeValue = ''
					try {
						nodeValue = currNode.firstChild.nodeValue;
					} catch(e) {}
					temp_cart[nodeName] = nodeValue;

				}
				currNode = currNode.nextSibling;
			}

			cart = temp_cart;

			if (prev_edit_mode == 'edit' || prev_edit_mode == 'copy') {
				ShoppingCart.edit_part_index = prev_edit_part_index;
				ShoppingCart.edit_item_index = prev_edit_item_index;
				ShoppingCart.edit_item_if_show_title = prev_edit_item_if_show_title;
				ShoppingCart.edit_mode = prev_edit_mode;
			}

			if (prev_edit_mode == 'copy') {
				//dont show editing row - only able to edit next row after ajax ended
				ShoppingCart.edit_mode = '';
				ShoppingCart.edit_part_index =0;
			}

			if (cart.empty == 1) {
				ShoppingCart.showCartIsEmpty();
			}

			if (reload_method == ShoppingCart.RELOAD_ONLY_SUMMARY) {
				Core.setText('summary_container', cart.getHTMLforSummary());

   			var str_body = '';
   			var if_show_title =1;
   			
   			var flag_deleted_last_item_in_group = 1;
   			
   			var last_photo_id_displayed = null;


            for (part_index in cart.arrayParts) {
					//var part_index = 'photo_print';
					var i = part_index;
	            
					for (k in cart.arrayParts[i].arrayItem) {
						var item = cart.arrayParts[i].arrayItem[k];
						
						if (item.photo_id == ShoppingCart.edit_group_id) flag_deleted_last_item_in_group = 0;
               
						if (last_photo_id_displayed != item.photo_id) {
							var el = Core.getElementU('items_group_id_'+item.photo_id);
							if (!el) {//erroneous markup present (absent divs for items group)
							//							reload_method == ShoppingCart.FULL_RELOAD;
								var ni = Core.getElementU('scrollable_allitems_container');
								var newdiv = document.createElement('div');
								newdiv.setAttribute('id', 'same_photos_container_group_id_' + item.photo_id);
								//TODO decide for IE or FF is it setting the className or class
								newdiv.setAttribute('class', "same_photos_container"+ ((Core.detectBrowser().isIE&& Core.detectBrowser().version < 8.0)?'__ie_hack':'') +" rcorners dark_light");
								newdiv.setAttribute('className', "same_photos_container"+ ((Core.detectBrowser().isIE&& Core.detectBrowser().version < 8.0)?'__ie_hack':'') +" rcorners dark_light");
								newdiv.innerHTML = "<div class=rc1><div class=rc2><div class=rc3><div class=rc4>" +
										" <div class=rinner >\n\n " + 
										"\n<div id='items_group_id_" + item.photo_id + "'>\n" +
										cart.getHTMLforItemsGroupByID(item.photo_id) +
										"</div>\n</div></div></div></div></div>";
								ni.appendChild(newdiv);
               
							} else { 
								Core.setText(el, cart.getHTMLforItemsGroupByID(item.photo_id));
							}
						}
					}
            }

				if (flag_deleted_last_item_in_group == 1) {
					//no need to store group of items container
					Core.setText('same_photos_container_group_id_'+ ShoppingCart.edit_group_id, '');
					Core.hideElement('same_photos_container_group_id_'+ ShoppingCart.edit_group_id);
				}


				//redraw pagination and pagesize options
				var pagination = cart.getHTMLForPagination();
				if (pagination != '') {
					Core.setText('cart_left', pagination);
				} else {
					Core.hideElement('cart_left');
				}

            if (cart.total_prints != 0) {
   				Core.setText('bulk_edit_container', cart.getHTMLforBulkEdit());
               if (cart.total_pages>1) {
                  Core.showElement('cart_page_navigation_top');
               }
            } else if (cart.total_pages == 1) {
               Core.hideElement('cart_page_navigation_top');
            }

				//cart.editRowItem(prev_edit_part_index, prev_edit_item_index, 'get', prev_edit_item_if_show_title);
				Core.flushElementCache();
				ShoppingCart.edit_part_index = 0;
			} 

			if (reload_method == ShoppingCart.FULL_RELOAD) {
				cart.update();
			}

//         if (TopNav.setToShoppingCartItemsCount) {
//   			TopNav.setToShoppingCartItemsCount(cart.total_items);
//         }

			Core.hideElement('sh_cart_progress');
}


ShoppingCart.showCartIsEmpty = function ShoppingCart_showCartIsEmpty() {
	Core.hideElement('product_container');
	Core.showElement('empty_cart');
	location.reload();
}


function CartPart(type){
	this.type = type;
	this.arrayItem = new Array();

	this.addCartItem = function(item){
		this.arrayItem.push(item);
	}

	this.removeCartItem = function(id){
		delete this.arrayItem[id];
	}

	this.getCartItem = function Cart_getCartItem(id) {
		return this.arrayItem[id];
	}
}

function Cart() {
	this.size = 0;		
	this.arrayParts = new Array();
	this.total_price = 0;
	this.unique_items = 0;
	this.items_per_page = 5;
	this.current_page = 1;
	this.total_cart_parts = 0;
	this.total_formats = 0;
	ShoppingCart.edit_part_index = 0;
	ShoppingCart.edit_item_index = 0;

	this.clearCart = function Cart_clearCart() {
		if (confirm('Please confirm you want to remove all items from your current shopping cart?')) {
			Core.hideElement('product_container');
			Core.showElement('empty_cart');
	
			advAJAX.get({
				url : ("?ajax=clear_cart"),
	
				onSuccess : function(obj) {
					ShoppingCart.showCartIsEmpty();
				}
			});
		}
	}

	this.arrayFormats = new Array();

	this.addFormat = function Cart_addFormat(format) {
		this.arrayFormats[format.value] = format;
		this.total_formats++;
	}

	this.arrayFormatSummaries = new Array();

	this.addFormatSummary = function Cart_addFormatSummary(format) {
		this.arrayFormatSummaries[format.format] = format;
		//this.total_formats++;
	}
	
	this.isCommonFormat = function Cart_isCommonFormat(format) {
		var formats = this.common_formats.split(',');

		for (f in formats) {
			if (formats[f] == format) return true;
		}

		return false;
	}

	this.addCartPart = function Cart_addCartPart(type){
		this.arrayParts[type] = new CartPart(type);
		this.total_cart_parts++;
	}

	this.removeCartPart = function Cart_removeCartPart(type){
		this.total_price = Core.formatMoney(this.total_price - this.arrayParts[type].total_price);
		delete this.arrayParts[type];

		advAJAX.get({
			url : ("?ajax=delete_part&type="+type),

			onSuccess : function(obj) {
				ShoppingCart.refreshPage();
			}
		});		

		this.cancelEditCartItem();
	}

	this.addCartItem = function Cart_addCartItem(item) {
		if (this.arrayParts[item.type] == undefined){
			this.addCartPart(item.type);
		}

		this.arrayParts[item.type].addCartItem(item);
	}

	this.removeCartItem = function Cart_removeCartItem(part_index , item_index) {
		var item = this.arrayParts[part_index].arrayItem[item_index];
		var photo_id = item.photo_id.split('x')[0];
		this.arrayParts[part_index].removeCartItem(item_index);
/*
		this.collapseTr = function Cart_collapseTr(e, c) {
			var speed = 30;
			var el = Core.getElementU(e);
			var clr =	'#f' + c.toString(16) + 'f' + c.toString(16) + 'f' + c.toString(16);
			el.style.background	= clr;
			c++;			

			if (c<16) {
				setTimeout("cart.collapseTr(\""+e+"\", " +c+")",speed);
			} else {
				Core.hideElement('cartitem_table_'+type+id);
			}
		}

		this.collapseTr('cartitem_table_'+type+id, 0);		
*/
		Core.setClassName('delete_button_'+ part_index + item_index, 'progress');
		Core.getElementU('delete_button_'+ part_index + item_index).onclick = function click_blocker() { return false; }

		Core.addToClassName('cartitem_table_'+ part_index + item_index, ' deleting_item');
		Core.getElementU('cartitem_table_'+ part_index + item_index).disabled = "disabled";


		advAJAX.get({
			url : ("?ajax=delete_item&photo_id=" +photo_id+ "&type=" +item.type+ "&product_sortnum=" +item.product_sortnum),

			onSuccess : function(obj) {
				ShoppingCart.edit_part_index = part_index;
				ShoppingCart.edit_item_index = item_index;
				ShoppingCart.edit_group_id = item.photo_id;
				ShoppingCart.edit_mode = 'delete';
//            if (TopNav.addToShoppingCartItemsCount) {
//   				TopNav.addToShoppingCartItemsCount(-1 * item.qty);
//            }
				Core.hideElement('cartitem_table_wrapper_'+ part_index + item_index);
				// Core.setText('cartitem_table_wrapper_'+ part_index + item_index, '');
				ShoppingCart.refreshPage();
			}
		});		

		Core.hideElement('cartitem_table_wrapper_'+ part_index + item_index);
	}

	this.applyCrop = function Cart_applyCrop() {/*prototype will be redifined*/ }

	this.last_cropping = new Object();

	this.changeCrop = function Cart_changeCrop(x1, y1, x2, y2) {
		this.last_cropping.x1 = x1;
		this.last_cropping.y1 = y1;
		this.last_cropping.x2 = x2;
		this.last_cropping.y2 = y2;
	}

	this.editCropping = function Cart_editCropping(part_index, item_index) {
		var item = this.arrayParts[part_index].arrayItem[item_index];
		var type = this.arrayParts[part_index].type;
		var choosen_size = Core.getText('item_format');

		if (choosen_size) {
			choosen_size = choosen_size.split('__')[0];
		} else {
			choosen_size = item.format;
		}

		var photo_id = item.photo_id.split('x')[0];
		var item = this.arrayParts[type].arrayItem[item_index];

      //alert( this.getCroppingPreview(part_index, item_index, 1)); return;
		advAJAX.get({
			url : ("/cart/see_cropping.html?photo=" + item.photo_id + "&chosen_sizes=" + choosen_size  + '_' +item.paper_type + '&cropping='+item.crop),
	
			onSuccess : function(obj) {
				ShoppingCart.flash_cropping__part_index = part_index;
				ShoppingCart.flash_cropping__item_index = item_index;

				cart.applyCrop =	function Crapping_applyCrop() {
					if (cart.last_cropping.x1 == undefined || cart.last_cropping.x2 == undefined || cart.last_cropping.y1 == undefined || cart.last_cropping.y2 == undefined) {
						return alert('Can not communicate with Flash object. Please update Flash Player.\n(www.adobe.com)');
					}
					cart.arrayParts[part_index].arrayItem[item_index].crop_x = cart.last_cropping.x1;
					cart.arrayParts[part_index].arrayItem[item_index].crop_y = cart.last_cropping.y1;
					cart.arrayParts[part_index].arrayItem[item_index].crop_w = cart.last_cropping.x2;
					cart.arrayParts[part_index].arrayItem[item_index].crop_h = cart.last_cropping.y2;
               var crop = GetFlashVar('myFlash', 'cropping') == 'true' ? 1: 0;

               var is_changed = cart.applyItemCropping(part_index, item_index, crop);

               cart.arrayParts[part_index].arrayItem[item_index].crop_state_original = crop;

					cart.update();

					ShoppingCart.dlgPanelCancel();

               if (is_changed || crop) {
   					advAJAX.get({
   						url : ("/cart/see_cropping.html?ajax=update_photo_cropping&photo=" +item.photo_id+ "&format="+item.format+
   								"_"+item.paper_type+
   								"&x_crop="+cart.last_cropping.x1+"&y_crop="+cart.last_cropping.y1+
   								"&w_crop="+cart.last_cropping.x2+"&h_crop="+cart.last_cropping.y2)
   					});
               }
				}

				ShoppingCart.dlgPanelShow('crop', obj.responseText);
			}
		});
	
	}


	this.getFormatsDropDown = function Cart_getFormatsDropDown(part_index, item_index, method) {
		var item = this.arrayParts[part_index].arrayItem[item_index];

		if (/tshirt|mousepad|mug/.test(item.type)) {
			return '<br>Type Change is not abailable!';
		}

		var select = "<select id=item_format onChange='cart.updateItemPrice();'" +
				" title=\"Image Original Size: " + item.dimension + "\" >";

//		var item_sizes_array = new Array();
//		var flag_consequent_same_id_photos = 0;
//
//		for (ti in this.arrayParts[part_index].arrayItem) {
//			var titem = this.arrayParts[part_index].arrayItem[ti];
//			
//			if (titem.photo_id == item.photo_id) {
//				if (method == 'copy' || titem.format != item.format) {
//					item_sizes_array.push(titem.format);
//				}
//				flag_consequent_same_id_photos = 1;
//			} else if (flag_consequent_same_id_photos) {
//				break;
//			}
//		}

		var is_optgroup_used = 0;

		for (f in this.arrayFormats) {
			var format = this.arrayFormats[f];

//			var ina = Core.inArray(item_sizes_array, format.value); //XXX FIXME
			var ina = 0;
			var class_str = new Array();
			if (is_optgroup_used) class_str.push('toolarge'); 
			if (ina) class_str.push('used');

         if (format.type == 'photo_print') {
   			select += '<option value="' + format.value + '__' + is_optgroup_used + '" ' + 
					(method != 'copy' && item.format == format.value ? 'selected id=option_format_selected':'') + 
					(class_str.length ? " class='" + class_str.join(' ') + "' " : '') +
					(ina == 1 ? " disabled='disabled' " : "") +
	 	 			' >' + format.name + 
					(f != 'unselected' ? " ($" + format.price + ")" : '') + 
					'</option>';
         }

			if (!is_optgroup_used && f != 'size4px' && f != 'unselected' && (!item.recommended_size || 
							('size'+item.recommended_size == format.value) || item.recommended_size == '2.5x3.5')) {
				select += '<optgroup label="Too large for this photo">'; 
				is_optgroup_used = 1;
			}			
		}

		if (is_optgroup_used) {			select += '</optgroup>';		}

		return select + '</select>';
	}

	this.getPaperTypeDropDown = function Cart_getPaperTypeDropDown(part_index, item_index, method) {
		var item = this.arrayParts[part_index].arrayItem[item_index];

		if (/tshirt|mousepad|mug/.test(item.type)) {
			return '<br>not abailable!';
		}

		var select = "<select id=item_paper_type>";
		select += "<option value=glossy " + (item.paper_type == 'glossy' ? 'selected id=option_paper_selected':'') + ">glossy</option>";
		select += "<option value=matte " + (item.paper_type == 'matte' ? 'selected id=option_paper_selected':'') + ">matte</option>";
		return select + '</select>';
	}


	/* updateItemPrice called whenever you change item properties and influence its total price */
	this.updateItemPrice = function Cart_updateItemPrice() {
		var item = this.arrayParts[ShoppingCart.edit_part_index].arrayItem[ShoppingCart.edit_item_index];
		var new_quantity	= Number(Core.getText('item_qty'));

      if (item.type == 'photo_print') {
         
		var select_option = Core.getText('item_format');
		var x = select_option.split('__');
		var new_format = x[0];
		var new_price = Number(this.arrayFormats[new_format].price, 10);
		var size_is_too_large = x[1];

		var cartitem_table_id = 'cartitem_table_'+ShoppingCart.edit_part_index+ShoppingCart.edit_item_index;

		if (size_is_too_large == 1 || item.corrupted == 1) {
			if (Core.getClassName(cartitem_table_id).indexOf('warning') == -1) {
				Core.addToClassName(cartitem_table_id, ' warning');
				Core.showElement('warning_smallsize');
			}
		} else if (size_is_too_large == 0 && item.corrupted != 1) {
			if (Core.getClassName(cartitem_table_id).indexOf('warning') != -1) {
				Core.replaceInClassName(cartitem_table_id, 'warning', '');
				Core.hideElement('warning_smallsize');
			}
		}
		
      } else {
         var new_price = Number(this.arrayFormats[item.format].price, 10);
      }

		Core.setText('item_price', "$" + Core.formatMoney(new_price));
		Core.setText('item_total_price', (new_quantity ? "$" + Core.formatMoney(new_price * new_quantity) : ''));
	}



	this.getCroppingPreview = function Cart_getCroppingPreview(part_index, item_index, method, if_show_title) {
		var item = this.arrayParts[part_index].arrayItem[item_index];

		if (item.need_to_be_reloaded == 1) {
			//preview is transparent, hense will be visible progress.gif
			return "";
		}

      if (item.type != 'photo_print') {
			return ( "<a href='" + Core.localizeURL("http://cart.fotki.com/")+"book_layout?book=" + item.photo_id + "&cmd=edit_xml" + "' target=_blank onClick='return ShoppingCart.openMemorystoneBookEditor(\"" +item.photo_id+ "\"); return false;'>" + 
         "<img src='" + item.thumb_url + "'>" + "</a>" );
      }

		var rect = null;
		if (item.crop_h == null || item.crop != 1) {
			rect = ShoppingCart.getCropRectangle(item.rw, item.rh, 0, 0, item.rw, item.rh, item.cw, item.ch);
		} else {
			rect = ShoppingCart.getCropRectangle(item.rw, item.rh, item.crop_x, item.crop_y, item.crop_w, item.crop_h, item.cw, item.ch);
		}

		var dpdw = item.rw / 120;
		var dpdh = item.rh / 90;

		var height = Core.round(item.rh/dpdw || 90);
		var width	= 120;

		if (dpdh > dpdw) {
			//the image is tall
			dpd = dpdh;
			width = Core.round(item.rw/dpd || 120);
			height=90;
		} else {
			dpd = dpdw;
		}


		var crop_precent_amount = ( (rect.yMax || item.rh) - (rect.yMin || 0) )
										* ( (rect.xMax || item.rw) - (rect.xMin || 0) )
										* 100	/ ( item.rh * item.rw);

		item.estimated_crop_precent_amount = Core.round(crop_precent_amount, 1);
		this.arrayParts[part_index].arrayItem[item_index].estimated_crop_precent_amount = item.estimated_crop_precent_amount;

		item.insignificant_cropping =	item.need_to_be_reloaded != 1 && (item.estimated_crop_precent_amount < ShoppingCart.insignificant_cropping_threshold	? 0:1);
		this.arrayParts[part_index].arrayItem[item_index].insignificant_cropping = item.insignificant_cropping;
		//converting to 120x90 thumbnail
		var r_th = new Object();
		if (method == 'copy' || method == 'edit') {//item.crop == 1 && item.insignificant_cropping == 0 ) {
			//CROPPING OFF
			r_th.xMin = 0;
			r_th.yMin = 0;
			r_th.xMax = Core.round(item.rw / dpd);
			r_th.yMax = Core.round(item.rh / dpd);
		} else {
			r_th.xMin = Core.round((rect.xMin || 0) /	dpd);
			r_th.yMin = Core.round((rect.yMin || 0) / dpd);
			r_th.xMax = Core.round((rect.xMax || item.rw) / dpd);
			r_th.yMax = Core.round((rect.yMax || item.rh) / dpd);
		}

		var printarea_height = r_th.yMax-r_th.yMin;
		var printarea_width  = r_th.xMax-r_th.xMin;
		var style_bg = (item.crop == 1 ? " background:url("+item.thumb_url+") center center no-repeat; " : "");


		var img_attrib = '';
		if ((Core.detectBrowser().isIE && Core.detectBrowser().version < 8.0) || Core.detectBrowser().isSafari) {
			if (rect._align == 'w') { 
				img_attrib = "style='height:" + printarea_height + "px;'";
			} else {
				var margin_top = (height - Core.round( height / (width/printarea_width))) / (Core.detectBrowser().isSafari ? 4 : 2);
				img_attrib = "style='width:" + printarea_width + "px;  margin-top:"+margin_top+"px;'";
			}
		} else {
			img_attrib = (rect._align == 'w' ? "height='100%'" : "width='100%'");
		}

		var style_img = (item.crop == 1 ? '' : " <img src="+item.thumb_url+" " + img_attrib + " title='" + printarea_width + "x" + printarea_height + "'> ");

      var style_ltd = '';
      var style_rtd = '';
      var style_tbl = '';

		var wmargin =	Core.round((120 - width)/2);

      if (item.crop == 1) {
		   wmargin =	Core.round((120 - width)/2);
         style_ltd = "style='width:" +r_th.xMin+ "px; height:" +r_th.yMin+ "px;'";
         style_rtd = "style='width:" +(width-r_th.xMax)+ "px; height:" +(height-r_th.yMax)+ "px;'";
         style_tbl = "style='width:" +width+ "px; height:" +height+ "px; " +style_bg+ " margin-left: "+wmargin+"px;'";
      } else {
		   wmargin =	Core.round((120 - printarea_width)/2);
         style_ltd = "style='width:0;height:0'";
         style_rtd = "style='width:0;height:0'";
         style_tbl = "style='width:" +printarea_width+ "px; height:" +printarea_height+ "px; " +style_bg+ " margin-left: "+wmargin+"px;'";
      }


		var return_string = "\n\n<table class='croppingtable croppingtable_"+(item.crop == 1 ? 'on':'off')+"' summary=\"Custom Cropping Preview for "+item.photo_id+ "\" " +style_tbl+ ">\n" +
			"<tr><td " + style_ltd + " /><td/><td/></tr>\n" +
			"<tr><td/><td class=printarea " + ((item.crop == 1 || rect._align == 'w' || (Core.detectBrowser().isIE && Core.detectBrowser().version < 8.0))? "style='width:" +printarea_width+ "px; height:" +printarea_height+"px;' " : '') + ">" + 
			(/*item.crop == 1 &&*/ item.corrupted != 1 /*&& item.insignificant_cropping == 0 */?
			"<a href='javascript:cart.editCropping(\"" +part_index+ "\", " +item_index+ ");' title='" + 
			"Edit Cropping...'> " +style_img+ " </a>" : style_img )+
			"<td/></tr>\n" +
			"<tr><td/><td/><td " +style_rtd+ "/></tr>\n" +
			"</table>\n\n";


		return return_string;
	}

	this.entry_row__paper_size__sizer = "<img src=http://images.fotki.com/pixel.gif style='height:1px; display:block; width:220px;' border=1>";
	this.entry_row__buttons__sizer = "<img src=http://images.fotki.com/pixel.gif style='height:1px; display:block; width:88px;' border=1>";

	this.editRowItem = function Cart_editRowItem(part_index, item_index, method, if_show_title) {
		ShoppingCart.edit_part_index = part_index;
		ShoppingCart.edit_item_index = item_index;
		ShoppingCart.edit_mode = method;
		ShoppingCart.edit_item_if_show_title = if_show_title;
		var item = this.arrayParts[part_index].arrayItem[item_index];
		ShoppingCart.edit_group_id = item.photo_id;

		var str_edit = '';

		if (method == 'edit' || method == 'copy') {
			str_edit += this.getEntryRowEdit(part_index, item_index, ShoppingCart.edit_mode, if_show_title);

			if (method == 'copy') {
				str_edit += this.getEntryRow(part_index, item_index, ShoppingCart.edit_mode, 0);
			}

		} else {
			 str_edit += this.getEntryRow(part_index, item_index, ShoppingCart.edit_mode, if_show_title);
		}

		Core.setText('cartitem_table_wrapper_'+part_index+item_index, str_edit);
		Core.flushElementCache();


		if (ShoppingCart.edit_part_index != 0) {

			Core.addSystemEvent("mousedown", cart.applyUpdateIfItemChanged);

//			if (Core.detectBrowser().isIE && document.getElementsByTagName) {
//				//Add disable to all selects. That fixes unimplemented option disable in IE :)
//				Core._restoreDisabledSelectOption = function Core__restoreSelectOption(e) {
//					if (e.options[e.selectedIndex].disabled) {
//						e.selectedIndex = window.select_current[e.id];
//					}
//				}
//
//				var s = document.getElementsByTagName("select");
//				if (s.length > 0) {
//					window.select_current = new Array();
//
//					for (var i=0, select; select = s[i]; i++) {
//						select.onfocus = function(){ window.select_current[this.id] = this.selectedIndex; }
//						select.onchange = function(){ Core._restoreDisabledSelectOption(this); }
//					}
//				}
//			}
		}

	}



	this.getEntryRowEdit = function Cart_getEntryRowEdit(part_index, item_index, method, if_show_title) {
		this.arrayParts[part_index].arrayItem[item_index].if_show_title = if_show_title;
		var item = this.arrayParts[part_index].arrayItem[item_index];

		var control_buttons = 
				"<a id=apply_button href='javascript:cart.applyUpdateCartItem(\"" + 
				part_index	+ "\", " + item_index	+ ", \"" + method + "\")' " +
				(method == 'edit' ? "class=ok>Apply" : "class=addformat>OK") + 
				"</a>" +
			"<a id=cancel_button href='javascript:cart.cancelEditCartItem()' class=cancel>Cancel</a>";

//			"class=addformat>OK</a><a href='javascript:cart.cancelEditCartItem()' class=cancel>Cancel</a>" : '');

/*
			(method == 'delete' ?
			"<a href='javascript:cart.removeCartItem(\"" + part_index	+ "\", " + item_index	+ ");' class=deleteitem>Delete</a>" :
			"<a id=apply_button href='javascript:cart.applyUpdateCartItem(\"" + part_index	+ "\", " + item_index	+ ", \"" + method + "\")' " +
				(method == 'edit' ? "class=ok>Apply" : "class=addformat>OK") + "</a>" ) +
			"<a href='javascript:cart.cancelEditCartItem()' class=cancel>Cancel</a>";

*/
		var return_string = 
		"\n\n<table id=cartitem_table_"+part_index+item_index+ " class='"+item.type+" item"+ ((item.small == 1 || item.corrupted == 1) ? ' warning' : '' )
			+ (item.corrupted == 1 ? ' corrupted' : '' ) 
			+"'>\n" + 

/*		(if_show_title == 1 ?
		"<tr><td colspan=2 class=photo_info><span class=phototitle><b>" + item.n + ".</b> " + item.title + "</span> " + 
		"<a href='" + item.photo_url +"' class=photocopy title='&copy; "+ item.copy+"'>&copy;</a>" +
		"</td></tr>" : '' ) +*/

		"<tr><td class=photo>" + 
		//"<a href='javascript:cart.editCropping(\"" + part_index	+ "\", " + item_index	+ ");' title='Edit Cropping'>" +
		//"<a href='" +item.photo_url+ "'>" + 
		//"<img src='" +item.thumb_url+ "'></a>" + 
		this.getCroppingPreview(part_index, item_index, method, if_show_title) +

		"<img src=http://images.fotki.com/pixel.gif height=1 width=130>" + 
		"</td>\n<td class='iteminfo'>" +
		"<div class='itemwrapper '>"+
		"<table>" + 

			(if_show_title == 1 ?
			"<tr><td colspan=5 class=photo_info><span class=phototitle><b>" + item.n + ".</b> "+
         ((item.type == 'photo_print' && item.photo_url) ? ("<a href='" + item.photo_url + "' class=item_url>" + item.title + "</a>") : item.title) +
/*         "<a href='" + item.photo_url + "' class=item_url>" + item.title + "</a>"+ */
         "</span> " +
/*			"<a href='" + item.photo_url +"' class=photocopy title='&copy; "+ item.copy+"'>&copy;</a>" + */
			"</td></tr>" +
			"<tr class=head_row>" +
			"<td class=head_format>"+ (item.type == 'photo_print' ? 'Size' : 'Type') +"</td><td class=head_paper_type>"+
         (item.type == 'photo_print' ?  "Paper" : '') + "</td><td class=head_quantity>Quantity</td>" +
			"<td class=head_price>Price</td><td class=head_total>Total</td>" +
			"<td class=control id=edit_buttons rowspan=3>" + control_buttons + "</td>" +
			"</tr>" : '<tr class=head_row><td colspan=5>&nbsp;</td></tr>') + 

			"<tr class=item_details>"+
			"<td class=format>" + (item.type == 'photo_print' ? this.getFormatsDropDown(part_index, item_index, method) : item.product) + 
				this.entry_row__paper_size__sizer + 
			"</td>" +
			"<td class=paper>" + (item.type == 'photo_print' ? this.getPaperTypeDropDown(part_index, item_index, method) : '') + "</td>" + 
			"<td class=quantity>" + 
			"<input onChange='cart.updateItemPrice();' onKeyUp='cart.updateItemPrice();' onSubmit='return false;'"+
			"class=edit_qty_input type=text id=item_qty value='" + (method == 'edit' ? item.qty : 1) + "' size=4 maxlength=4></input>" +
			"</td>" +
			"<td class=price id=item_price>$" + item.price + "</td>" +
			"<td class=total id=item_total_price>$" + Core.formatMoney(item.price * item.qty) + "</td>" +
			(if_show_title == 0 ? "<td class=control rowspan=2 id=edit_buttons>" + control_buttons + "</td>" : '' ) +
			"</tr><tr class=item_warnings_tr>" +
			"<td colspan=5>" +
			"<ul class='itemwarnings' id=itemwarnings>" +
         (item.type == 'photo_print' ?
            "<li class='crop_chexbox' id=cropping_button><input type=checkbox name=crop id=crop " + (item.crop == '1' ? 'checked' : '') + "> enable cropping</input></li>" : '') +

			"<li class='smallsize'" + (item.small != 1 ? " style=\"display:none\"" : '' ) + 
			" id=warning_smallsize>" + ShoppingCart.warning__low_dpi__poor_quality + "</li>" +

/*			(item.crop == 1 ? "<li class='cropped' id=image_willbe_cropped>Image will be cropped ( <a href=#>edit cropping</a> ).</li>" : "") + */
			(item.corrupted == 1 ? "<li class='corrupted'>"+ShoppingCart.warning__corrupted__not_printable+"</li>" : "") +
/*
			'<br>Original file is <B>' + item.dimension + '</b>' +
			(item.recommended_size != null ?
				'<br><span class=text3>Max Recommended <B>' + item.recommended_size	+ '</b></span>' : '') +
*/
			"</ul>" +
			"</td>" + 
		"</tr></table>" + 
		"</div>" +
		"</td></tr></table>\n\n";

		return return_string;
	}




	this.getEntryRow = function Cart_getEntryRow(part_index, item_index, method, if_show_title) {
		this.arrayParts[part_index].arrayItem[item_index].if_show_title = if_show_title;

		var item = this.arrayParts[part_index].arrayItem[item_index];
		var type = this.arrayParts[part_index].type;

		var control_buttons = "<span id=control_buttons_" + part_index + item_index + " style=\"visibility: hidden;\" >" + 
			(method == 'delete' ?
			"<a href='javascript:cart.removeCartItem(\"" +part_index+ "\", " +item_index+ ");' " + 
				" class=deleteitem id=delete_button_" +part_index + item_index+ ">Delete</a>" + 
			"<a href='javascript:cart.cancelEditCartItem()' class=cancel>Cancel</a>"	:
			(item.corrupted != 1 ?

				"<a href='javascript:cart.editRowItem(\"" +part_index+ "\", "+item_index+", \"edit\", " +if_show_title+ ")' class=edititem title='Edit item'><span>Edit</span></a> " +  

				/*"<a href='javascript:cart.editRow(\"" +part_index+ "\", " +item_index+ ")' class=edititem>Edit</a>" +*/
				(if_show_title == 1 &&  item.type != 'book' ?
				"<a href='javascript:cart.editRowItem(\"" +part_index+ "\", "+item_index+", \"copy\", " +if_show_title+ ")' class=addformat title='Add size'><span>Add size</span></a> " 
				/*"<a href='javascript:cart.copyRow(\"" +part_index+ "\", " +item_index+ ")' class=addformat>Add format</a>"*/ : '') 
			: '') +

			"<a href='javascript:cart.removeCartItem(\"" +part_index+ "\", " +item_index+ ");' " + 
				" title='Delete item' class=deleteitem id=delete_button_" + part_index + item_index + "><span>Delete</span></a>" 

			/*+ "<a href='javascript:cart.deleteRow(\"" + part_index	+ "\", " + item_index	+ ")' class=deleteitem>Delete</a>"*/ ) + 
			"</span>";

		var preview_html = this.getCroppingPreview(part_index, item_index, method, if_show_title);

		var on_click = (item.corrupted != 1 ? /*"onClick='cart.editRow(\"" +part_index+ "\", " +item_index+ ")' " + */
			"onClick='ShoppingCart.ajax_running ? false : cart.editRowItem(\"" +part_index+ "\", "+item_index+", \"edit\", " +if_show_title+ ")' " +
			"onMouseOver='ShoppingCart.ajax_running ? false : Core.addToClassName(this.id, \" editable_hover \");' " +
			"onMouseOut='Core.replaceInClassName(this.id, \"editable_hover\", \" \");' title='Click to edit...'" : '');

      var span_hidden_open = '<span class=hidden>';
      var span_close = '</span>';

		var visible_class_open =  (if_show_title == 1 ? '' : span_hidden_open);
		var visible_class_close = (if_show_title == 1 ? '' : span_close);

		var return_string = 
		"\n\n<table id=cartitem_table_"+part_index+item_index+ " class='"+item.type+" item"+ ((item.small == 1 || item.corrupted == 1) ? ' warning' : '' ) +
			(item.corrupted == 1 ? ' corrupted' : '' ) + "' " + 

		"onMouseOver='ShoppingCart.ajax_running ? false : Core.getElementU(\"control_buttons_" + part_index	+ item_index	+ "\").style.visibility=\"visible\"' " +
		"onMouseOut='Core.getElementU(\"control_buttons_" + part_index	+ item_index	+ "\").style.visibility=\"hidden\"' " + " > " +

		"<tr><td class=photo>" +

		"<img src=http://images.fotki.com/pixel.gif height=1 width=130>" + 

		preview_html +
		"</td>\n<td class='iteminfo' >" +
		"<div class='itemwrapper'>" +
		"<table>" + 
			(if_show_title == 1 ?
			"<tr><td colspan=5 class=photo_info><span class=phototitle><b>" +	item.n + /*"<a href='" + item.photo_url +"'>.</a>*/
			".</b> " + ((item.type == 'photo_print' && item.photo_url)? ("<a href='" + item.photo_url + "' class=item_url>" + item.title + "</a>") : item.title) + "</span> " +
			/*"<a href='" + item.photo_url +"' class=photocopy title='&copy; "+item.copy+"'>&copy;</a>" +*/
			"</td></tr>" : '' ) +
			
			"<tr class=head_row>" +
			"<td class=head_format>" + visible_class_open + (item.type == 'photo_print' ? "Size" : "Type") + visible_class_close + "</td>" + 
			"<td class=head_paper_type>" + (item.type == 'photo_print' ? visible_class_open : span_hidden_open) + "Paper" + 
               (item.type == 'photo_print' ? visible_class_close  : span_close) + "</td>" + 
			"<td class=head_quantity>" + visible_class_open + "Quantity" + visible_class_close + "</td>" +
			"<td class=head_price>" + visible_class_open + "Price" + visible_class_close + "</td>" + 
			"<td class=head_total>" + visible_class_open + "Total" + visible_class_close + "</td>" +
  			(if_show_title == 1 ? "<td class=control rowspan=3>" + control_buttons + this.entry_row__buttons__sizer + "</td>"  : '') + 
			"</tr>" +
			//: '<tr class=head_row><td colspan=5>&nbsp;</td></tr>') + 

		"<tr class=item_details>"+
			"<td id=format_" + part_index + item_index + " class=format " + (item.type != 'book' ? on_click : '') + 
				" title=\"Image Original Size: " + item.dimension + "\"" + 
				">" + item.product + this.entry_row__paper_size__sizer + "</td>" +
			"<td id=paper_" + part_index + item_index + " class=paper " + (item.type != 'book' ? on_click : '') + ">" + 
         (item.type != 'photo_print' ? span_hidden_open : '') + item.paper_type + (item.type != 'photo_print' ? span_close : '') + 
         "</td>" + 
			"<td id=qty_" + part_index + item_index + " class=quantity " + on_click + ">" + item.qty + "</td>" +
			"<td class=price>" + (item.corrupted == 1 ? '' : '$'+item.price) + "</td>" +
			"<td class=total>" + (item.corrupted == 1 ? '' : '$'+item.total_price) + "</td>" +

			(if_show_title == 0 ? "<td class=control rowspan=2>" + control_buttons + this.entry_row__buttons__sizer + "</td>" : '' ) +

			"</tr><tr class=item_warnings_tr>" +
			"<td colspan=5>" +

			"<ul class='itemwarnings'>" +

			(item.need_to_be_reloaded == 1 ? "<li class='updating'>Updating... Please wait.<blink>..</blink></li>" :
			(
			(item.small == 1 ? "<li class='smallsize'>" + ShoppingCart.warning__low_dpi__poor_quality + "</li>" : "") +


// <crop
			(item.corrupted != 1 && item.type == 'photo_print'? 
			"<li class='cropped' title='Estimated printable area: " + item.estimated_crop_precent_amount + 
			"%.'>" + 

			"<input type=checkbox name=crop id=crop_" +part_index+item_index+ ' ' + (item.crop == 1 ? 'checked' : '') + 
			" onClick='cart.applyItemCropping(\"" + part_index + "\", " + item_index	+ ")' />" +
			"<span id=crop_label_" +part_index+item_index+">" +

			(item.crop != 1 ? "Enable image cropping.":
			"Image will be "+
			(item.insignificant_cropping == 1? 'insignificantly ' : '') + (item.crop_h != null?'custom-':'')+"cropped. " +

			(item.corrupted == 1 || item.insignificant_cropping == 1? "" : 
				"[<a href='javascript:cart.editCropping(\"" + part_index	+ "\", " + item_index	+ ");'>edit</a>]")
			) + 
			"</span></li>" : "") +

// /crop>

			(item.corrupted == 1 ? "<li class='corrupted'>"+ShoppingCart.warning__corrupted__not_printable+"</li>" : "") +
//			(item.rw == 0 || item.rh == 0 ? "<li class='smallsize'>Unable to custom-crop!</li>" : "") +
			'')) +

			"</ul>" +
			"</td>" + 
		"</tr></table>" + 
		"</div>" +
		"</td></tr></table>\n\n";

		return return_string;
	}


	this.applyItemCropping = function Cart_applyItemCropping(part_index, item_index, new_crop) {
		var item = this.arrayParts[part_index].arrayItem[item_index];

		//new_crop is being set from flash, else its undefined 
		var new_crop = new_crop != undefined ? new_crop : (Core.getElementU('crop_'+part_index+item_index).checked ? 1 : 0);

		var key = item.photo_id + '|' + item.format+'_'+item.paper_type;

		if (item.crop_state_original == null) {
			item.crop_state_original = item.crop;
			this.arrayParts[part_index].arrayItem[item_index].crop_state_original = item.crop;
		}

		ShoppingCart.setQueuedCommand('set_crop', key, item.crop_state_original != new_crop ? new_crop : undefined);

		//apply new setting virtually
		this.arrayParts[part_index].arrayItem[item_index].crop = new_crop;
		Core.setText('cartitem_table_wrapper_'+part_index+item_index, this.getEntryRow(part_index, item_index, '', item.if_show_title));
		Core.flushElementCache();

      return (item.crop_state_original != new_crop ? 1 : 0);//is changed
	}

	this.copyRow = function Cart_copyRow(part_index, item_index) {
		ShoppingCart.edit_part_index = part_index;
		ShoppingCart.edit_item_index = item_index;
		ShoppingCart.edit_mode = 'copy';
		this.update();
	}


	this.editRow = function Cart_editRow(part_index, item_index) {
		ShoppingCart.edit_part_index = part_index;
		ShoppingCart.edit_item_index = item_index;
		ShoppingCart.edit_mode = 'edit';
		this.update();
	}


	this.deleteRow = function Cart_deleteRow(part_index, item_index) {
		ShoppingCart.edit_part_index = part_index;
		ShoppingCart.edit_item_index = item_index;
		ShoppingCart.edit_mode = 'delete';
		this.update();
	}


	this.applyUpdateCartItem = function Cart_applyUpdateCartItem(part_index, item_index, method, if_show_title) {

		var item = this.arrayParts[part_index].arrayItem[item_index];
		var type = this.arrayParts[part_index].type;
		var photo_id = item.photo_id.split('x')[0];

		var new_quantity	= Core.getText('item_qty');

      if (item.type == 'photo_print') {

   		var select_option = Core.getText('item_format');
   
     		var x = select_option.split('__');
   		var new_format = x[0];
   		var format_is_not_recommended = x[1];
   
   		if (new_format == 'unselected' && item.type == 'photo_print') {
   			return alert('Please select a new format from the dropdown list.');
   		}
   
   		var new_paper_type = (Core.getText('item_paper_type') == 'glossy' ? 'glossy' : 'matte');
   
   		var new_crop		= (Core.getElementU('crop').checked ? 'crop' : 'no')
   		item.crop = Core.getElementU('crop').checked;
      }


      if (item.type == 'book') {
         new_format = 'memorystone';
         new_paper_type = 'matte';
         new_crop = 'no';
      }


		if (method == 'copy') {
			Core.setClassName('apply_button', 'progress');
			Core.getElementU('apply_button').onclick = function click_blocker() { return false; }
		}

		item.format = new_format;
		item.price = this.arrayFormats[new_format].price;
		item.total_price = Core.formatMoney(this.arrayFormats[new_format].price * new_quantity);
		item.small = format_is_not_recommended;
		item.qty = new_quantity;
		item.paper_type = new_paper_type;
		item.product =	this.arrayFormats[new_format].name; 

		item.need_to_be_reloaded = 1;

		this.arrayParts[part_index].arrayItem[item_index] = item;

		if (ShoppingCart.edit_mode == 'edit') {
//xxx			ShoppingCart.edit_part_index = 0;
//xxx			ShoppingCart.edit_mode = ''; 
			this.editRowItem(part_index, item_index, 'get', item.if_show_title);
			//this.update();
		}

//XXX		Core.setText('itemwarnings', "<li class='updating'>Updating... Please wait.<blink>..</blink></li>");

		var requested_mode = part_index + item_index +	method;

		advAJAX.get({
			parameters : {
				"ajax"	: "update_cart_item",
				"type" : type,
				"photo_id" : photo_id,
				"new_format" : new_format,
				"new_quantity" : new_quantity,
				"new_paper_type" : new_paper_type,
				"new_crop" : new_crop,
				"method": method, //(edit, copy)
				"product_sortnum": item.product_sortnum
			},
	
			onSuccess : function(obj) {
				//cart.cancelEditCartItem();
				if (requested_mode == ShoppingCart.edit_part_index + ShoppingCart.edit_item_index + ShoppingCart.edit_mode) {
					//if while updating cart we did not changed on editing other item then update page
//xxx					ShoppingCart.edit_part_index = 0;
//xxx					ShoppingCart.edit_mode = '';
				}

				ShoppingCart.refreshPage();
			}
		});

		//this.cancelEditCartItem();
	}


	this.cancelEditCartItem = function Cart_cancelEditCartItem() {
		this.editRowItem(ShoppingCart.edit_part_index, ShoppingCart.edit_item_index, 'get', ShoppingCart.edit_item_if_show_title);
		ShoppingCart.edit_part_index = 0;
		ShoppingCart.edit_mode = '';
		//this.update();
	}


	this.getHTMLforSummary = function Cart_getHTMLforSummary() {
		/* Adding new Shopping Cart Summary */
		var str_cart_info = ''; 
		str_cart_info += 
			"<div class=\"rcorners dark\"><div class=rc1><div class=rc2><div class=rc3><div class=rc4>" + 
			" <div class=rinner>\n" + 
			"<h1 style='float:left'>Shopping Cart Summary</h1>\n" +
			"<div style='float:right; padding-left:4px; padding-top:5px;'> " + 
			"<a href='javascript:ShoppingCart.refreshPage();'><img src=http://images.fotki.com/progress.gif id=sh_cart_progress style='display:none; vertical-align: bottom;' title='Loading. Please wait...'></a></div> <br clear=all>" + 


			"<div id=summary_content_container>" +
			"<table class=summary>" +
			"<tr id=first><td>Product</td><td>Qty</td><td id=price>Price</td></tr>";
		
		for (f in this.arrayFormatSummaries) {
			str_cart_info += "\n<tr>" +
			"<TD>" + this.arrayFormatSummaries[f].format + "</TD>" +
			"<TD>" + this.arrayFormatSummaries[f].qty + "</TD>" +
			"<TH>$" + this.arrayFormatSummaries[f].subtotal + "</TH></tr>";
		}

		str_cart_info += "<tr id=totalline><td colspan=3></td></tr>";
 
//		str_cart_info += "<tr class=total><td>Total prints</td><td>" +this.total_prints+ "</td><th>$" +this.total_prints_price+ "</th></tr>";

		str_cart_info += "<tr class=total><td>Total quantity</td><td>" +this.total_items+ "</td><th>$" +this.total_price+ "</th></tr>";
		/* change SA, Sh, CC */

		if (this.total_corrupted != 0) {
			str_cart_info += "<tr><td>Corrupted original</td><td>" +this.total_corrupted+ "</td><th></th></tr>";
		}

		if (this.total_low_dpi != 0) {
			str_cart_info += "<tr><td>Poor print quality</td><td>" +this.total_low_dpi+ "</td><th></th></tr>";
		}

		str_cart_info += "</table>\n\n<div class=perf></div>\n";

		str_cart_info += "<div id=checkoutSA><a id=editSA href='javascript:ShoppingCart.dialogShippingAddress();'>Shipping Address</a>" +
			(this.shipping_address != 'N/A' ? this.shipping_address : '<div>Not selected</div>') + "</div>";


		if (this.shipping_address != 'N/A') {
			str_cart_info += "<div class=perf></div>\n";
		
			str_cart_info += "<div id=checkoutSh><a id=editSh href='javascript:ShoppingCart.dialogShipping();'>Shipping Method</a>" +
			"<table class=summary>" +
			"<tr><td>" + (this.shipping_method != 'N/A' ? this.shipping_method : 'Shipping not selected' ) + "</td>" + 
			"<th>" + (this.shipping_method != 'N/A' ? '$' + this.shipping_price : '') + "</th></tr>" + 
			"</table></div>";

		}

		//if (this.loggedin != '0' || (this.shipping_address != 'N/A' && this.shipping_method != 'N/A')) {

		str_cart_info += "<div class=perf></div>\n";

		//str_cart_info += "<div id=checkoutCC><a id=editCC href='javascript:ShoppingCart.dialogCC();'>Payment</a>" + 
		str_cart_info += "<div id=checkoutCC><span id=editCC>Payment</span>"
			+ "<div class='text3' style='margin-top:5px;margin-bottom:5px' id='payment_we_accept' >We accept MasterCard, Visa, Amex, Discover credit cards and Paypal.</div>"
			+ "<div style='margin-top:10px' id='payment_icons'><img width='150' src='http://images.fotki.com/payment/cards/creditcards.gif' border='0'><img height='20' src='http://images.fotki.com/payment/paypal/paypal_logo.gif' border='0'></div>"
			+ "</div>";
     //(this.credit_card != 'N/A' ? this.credit_card : '<div>Not selected</div>') + "</div>";

		//}

		str_cart_info += "<div class=perf></div>\n";
		
		str_cart_info += "<table class=summary summary=\"Shopping Cart Summary\" id=checkout_summary>" + 

      (this.total_discount != 0 ?
   	"<tr class=discount><td id=total_discount>Discount:</td><th>-$" + this.total_discount + "</th></tr>" : '') +

		(this.taxes != 0 ? 
				"<tr class=taxes>" + (this.shipping_method != 'N/A' ?
				"<td id=total_taxes>Taxes: </td>" + "<th>$" + this.taxes + "</th>" : "<td colspan=2>Taxes will be added.</td>" ) + "<tr>" 
			: '' ) + 

	   "<tr class=total><td id=total_cart_price>Total Price:</td><th>$" + this.total_cart_price + "</th></tr></table>";

		str_cart_info += "<div class=perf></div>\n";
		str_cart_info += "</div>";
		str_cart_info += '<table class="cartbutton" cellspacing="0" cellpadding="0" align="right"><tr><td id="cbleft" /><th><a href="javascript:ShoppingCart.processCheckout();">Place Order</a></th><td id="cbright" /></tr></table><br clear=all>';
		
		str_cart_info += "</div></div></div></div></div></div>";

      str_cart_info +=
         "\n\n\n<div class=summary_options>" +
             "<div class=rcorners style='padding-top:4px;'><div class=rc1><div class=rc2><div class=rc3><div class=rc4><div class=rinner>" +               (Core.isDev() && this.loggedin != '0'?
                "<a href=\"javascript:ShoppingCart.saveCart();\" class=savecart>Save</a>" +
                "<a href=\"javascript:ShoppingCart.loadCart();\" class=loadcart>Load</a>" : '') +
                "<a href='javascript:cart.clearCart();' class=clearcart>Clear</a>" +

                (this.history_items > 0 ?
                "<br><a href='" + Core.localizeURL('http://cart.fotki.com/history') + "' class=history>Orders History</a>" : '') +


         (Core.isDev() ? '<br clear=all><br><small><div color="#999999">This is dev-server.' +
//(Core.isDev() && cart.loggedin != '0'? '<br>To show correct pricings<br>click Place Order button.' :'')+

         '</div>' : '') +

            "</div></div></div></div></div></div></div>";

         str_cart_info += "\n\n\n<div class=upload_options>" +
             "<div class=rcorners style='padding-top:4px;'><div class=rc1><div class=rc2><div class=rc3><div class=rc4><div class=rinner style1=\"text-align1: left; height: auto;\">" +
	     "<a class=uploadlink style1=\"float: none; display: inline; padding: 0px 0px;\" href=\"javascript:ShoppingCart.globalUpdate('upload_photo')\">Upload photos</a> to cart."+
	     "<br/>You can also order photos directly from "+
             "<a style1=\"float: none; display: inline; padding: 0px 0px;\" href=\"http://login.fotki.com/?finish=http://public.fotki.com/\">your albums</a>."+
          "</div></div></div></div></div></div>";

         str_cart_info += "</div>\n\n\n";

		return str_cart_info;
	}// /this.getHTMLforSummary 



	this.getHTMLforItemsGroupByID = function (group_id) {
	   var str_body = '';
	   var if_show_title =1;
			
		var last_photo_id_displayed = null;

      for (part_index in this.arrayParts) {
			//var part_index = 'photo_print';
			var i = part_index;

	      
			for (k in this.arrayParts[i].arrayItem) {
				var item = this.arrayParts[i].arrayItem[k];
         
				if (item.photo_id != group_id) continue;
         
				if (last_photo_id_displayed != item.photo_id) {
					last_photo_id_displayed = item.photo_id;
					if_show_title = 1;
				} else {				
					str_body += "<div class=perf></div>";
					if_show_title = 0;
				}
         
         
				if (ShoppingCart.edit_part_index != i || ShoppingCart.edit_item_index != k) {
					str_body += "<div id='cartitem_table_wrapper_"+i+k+"'>";
					str_body += this.getEntryRow(i, k, '', if_show_title);
					str_body += "</div>";
				} else {
					if (ShoppingCart.edit_mode == 'delete') {
						str_body += this.getEntryRow(i, k, ShoppingCart.edit_mode, if_show_title);
					} else if (ShoppingCart.edit_mode == 'copy') {
						str_body += this.getEntryRowEdit(i, k, ShoppingCart.edit_mode, 1);
					} else {
						str_body += this.getEntryRowEdit(i, k, ShoppingCart.edit_mode, if_show_title);
					}
         
					if (ShoppingCart.edit_mode == 'copy') {
						str_body += "<div class=perf></div>";
						str_body += this.getEntryRow(i, k, ShoppingCart.edit_mode, 0);
					} 
				}
			}
      }
		return str_body;
	}



	this.getHTMLForPagination = function Cart_getHTMLForPagination() {

		this._findBlockStart = function Cart__findBlockStart(current_page, block_size) {
			//TODO: add this pagination logics to the Core
			return ((parseInt((current_page / block_size) - .00001) * block_size) + 1);
		}

		var block_size			 = 10;
		var current_block_start = this._findBlockStart(this.current_page, block_size);
		var last_block = this._findBlockStart(this.total_pages, block_size);

		this.current_page = parseInt(this.current_page);
		this.total_pages = parseInt(this.total_pages);

		var str_pagination = "";

		//Make Pagination Links
		this._getPageLink = function Cart__getPageLink(page, page_name) {
			var ret = (page == this.current_page ? "<b>" : '') +
				"<a href='javascript:ShoppingCart.showPage(" + page +
				//((parseInt(page) == 0 && page_name != 'Show all') ? 1 : page) 
				", " + this.items_per_page + ")'>" + page_name +"</a>" + 
				(page == this.current_page ? "</b>" : '');
			return ret;
		}

		if (this.total_pages > 1 && this.current_page != 0) {
			str_pagination += (this.current_page > 1 ? this._getPageLink(this.current_page*1-1, '&laquo;Prev')+' '	: '&laquo;Prev ');

			str_pagination += (current_block_start > 1 ? ' ' + this._getPageLink(current_block_start - 1, '&laquo;')+' ' : ' ');

			for (p=current_block_start; p<=current_block_start+block_size-1; p++) {
				if (p >= this.total_pages+1) { break; }
				else {
				str_pagination += this._getPageLink(p, p);
				str_pagination += " ";
				}
			}

			str_pagination += (last_block > current_block_start ? ' ' + this._getPageLink(current_block_start + block_size, '&raquo;')+' ' : ' ');

			str_pagination += (this.current_page < this.total_pages ? ' ' + this._getPageLink(this.current_page*1+1, 'Next&raquo;')+' ' : ' Next&raquo;');

		}

		this._getPageSizeLink = function Cart__getPageSizeLink(pagesize) {
			var ret = (this.items_per_page == pagesize && this.current_page != 0 ? '<b>' : '') +
				"<a href='javascript:ShoppingCart.showPage(1, " + pagesize + ")'>" + pagesize + "</a>" + 
				(this.items_per_page == pagesize && this.current_page != 0 ? '</b>' : '');
			return ret;
		}

		var max_page_size = 100;
		var min_page_size = 5;
		var page_sizes = new Array(min_page_size, 10, 20, 30, 40, 50, max_page_size);

		var available_page_sizes = new Array();

		for (psz in page_sizes) {
			if (this.total_unique_photos <= min_page_size) {
				break;
			}

			var psz_html = this._getPageSizeLink(page_sizes[psz]);
 			available_page_sizes.push( psz_html );
			if (this.total_unique_photos <= page_sizes[psz]) {
				break;
			}
		}

		var str_pagesize_options = "";

		if (available_page_sizes.length > 0) {
			str_pagesize_options = "Items per page: " + available_page_sizes.join(", ");
			if (this.total_unique_photos > max_page_size) {
				str_pagesize_options += ', ' + this._getPageLink(0, 'all');
			}
		}

		var ret =  this.total_unique_photos < 6 ? '' : 
		('<div class="rcorners cartpagenav">' +
			"<div class=rc1><div class=rc2><div class=rc3><div class=rc4><div class=rinner>" + 
			(this.total_pages > 1 ? "<div class=pagination>" + str_pagination + "</div>"  : '') +
			"<div class='pagesize text3'>" + str_pagesize_options + "</div>" +
			"</div></div></div></div></div>" +
		"</div>");
		return ret;
	}


	this.getHTMLforBulkEdit = function Cart_getHTMLforBulkEdit() {
		var set_4x6 = 'All 4&#215;6';
		var set_5x7 = 'All 5&#215;7';
		var set_glossy = 'All glossy';
		var set_matte = 'All matte';
		var set_singles = 'Singles';
		var set_doubles = 'Doubles';

		var str_bul_edit =
		"<span>Edit Order:</span>" +

		(cart.isCommonFormat('size4x6') ? "<b id=all4x6>" + set_4x6 + "</b>" :
		" <a id=all4x6 href=\"javascript:ShoppingCart.bulkAddFormat('4x6');\">" + set_4x6 + "</a> " ) +

		(cart.quantity == 'singles' ? "<b id=all_singles>" + set_singles + "</b> " :
		" <a id=all_singles href='javascript:ShoppingCart.bulkSetQuantity(1);'>" + set_singles + "</a> " ) +

		(cart.paper_type == 'glossy'? "<b id=all_glossy>" + set_glossy + "</b>" : 
		" <a id=all_glossy href=\"javascript:ShoppingCart.bulkSetPaperType('glossy');\">" + set_glossy + "</a> " ) +

		"<a id=advanced_bulk_edit href='javascript:ShoppingCart.globalUpdate();' class=global_update_btn>More options...</a><br>" +

		(cart.isCommonFormat('size5x7') ? "<b id=all5x7>" + set_5x7 + "</b>" :
		" <a id=all5x7 href=\"javascript:ShoppingCart.bulkAddFormat('5x7');\">" + set_5x7 + "</a> " ) +

		(cart.quantity == 'doubles' ? "<b id=all_doubles>" + set_doubles + "</b> " :
		" <a id=all_doubles href='javascript:ShoppingCart.bulkSetQuantity(2);'>" + set_doubles + "</a> " ) +

		(cart.paper_type == 'matte' ? "<b id=all_matte>" + set_matte + "</b> " :
		" <a id=all_matte href=\"javascript:ShoppingCart.bulkSetPaperType('matte');\">" + set_matte + "</a> " );

		return str_bul_edit;
	}




	this.update = function Cart_update() {
		this.disabled = 1;
		Logger.log('cart.update(); ' + this.loggedin);

		this.total_unique_gifts = this.total_unique_items - this.total_unique_prints;
		this.total_gifts_price = Core.round(this.total_price - this.total_prints_price, 2);
		this.total_gifts = this.total_items - this.total_prints;

		var str_header = "<!--start of cart items-->\n<div class='shoppingcart_allitems allitems' id=allitems_container>\n";

		var str_footer = "</div>\n\n<!--end of cart items-->\n\n";

		var str_body = "";

		var str_delete_group_links1 = "<div class=delete_items>";
		var str_delete_group_links = "";

		var photo_ids_displayed = new Array();
		var last_photo_id_displayed = null;

		var edititng_photo_id = (ShoppingCart.edit_part_index !=0 ) ?
			this.arrayParts[ShoppingCart.edit_part_index].arrayItem[ShoppingCart.edit_item_index].photo_id : '';

		//Links: Delete group (Unnecessary w/o gifts)
		for (i in this.arrayParts) {
			var type = this.arrayParts[i].type; 
			str_delete_group_links += "<a href='javascript:cart.removeCartPart(\""+ this.arrayParts[i].type + "\");' " +
												" onClick=\"return confirm('Are you sure to delete?');\">"+ this.arrayParts[i].type_name + "</a> " +
												" (" + this.arrayParts[i].total_items + " item" + 
												( this.arrayParts[i].total_items>1 ? 's':'') + ") | ";

			var if_show_title = 1;

			for (k in this.arrayParts[i].arrayItem) {
				//if new then add div
				var item = this.arrayParts[i].arrayItem[k];


				if (last_photo_id_displayed != item.photo_id) {
					if (last_photo_id_displayed != null) {
						str_body += "\n</div>\n";
						str_body += "\n</div></div></div></div></div></div>\n\n";
					}

					//str_body+= (last_photo_id_displayed == null ? '<div class=same_photos_container id=first_photos_container />' : '');


					str_body+= "\n<div class=\"same_photos_container"+ ((Core.detectBrowser().isIE && Core.detectBrowser().version < 8.0)?'__ie_hack':'') +" rcorners dark_light " + (edititng_photo_id == item.photo_id ? 'dark' : '') + "\" ";
					str_body+= 'id=same_photos_container_group_id_' + item.photo_id;
					str_body+= "><div class=rc1><div class=rc2><div class=rc3><div class=rc4>" + 
									" <div class=rinner >\n\n "; //id=notitle
					str_body+= "\n<div id='items_group_id_" + item.photo_id + "'>\n";

					last_photo_id_displayed = item.photo_id;
 					if_show_title = 1;
				} else {				
					str_body += "<div class=perf></div>";
					if_show_title = 0;
				}


				if (ShoppingCart.edit_part_index != i || ShoppingCart.edit_item_index != k) {
					str_body += "<div id='cartitem_table_wrapper_"+i+k+"'>";
					str_body += this.getEntryRow(i, k, '', if_show_title);
					str_body += "</div>";
				} else {
					if (ShoppingCart.edit_mode == 'delete') {
						str_body += this.getEntryRow(i, k, ShoppingCart.edit_mode, if_show_title);
					} else if (ShoppingCart.edit_mode == 'copy') {
						str_body += this.getEntryRowEdit(i, k, ShoppingCart.edit_mode, 1);
					} else {
						str_body += this.getEntryRowEdit(i, k, ShoppingCart.edit_mode, if_show_title);
					}

					if (ShoppingCart.edit_mode == 'copy') {
						str_body += "<div class=perf></div>";
						str_body += this.getEntryRow(i, k, ShoppingCart.edit_mode, 0);
					} 
				}
			}
		}

		str_body += "\n</div>\n";
		str_body += "\n</div></div></div></div></div></div>\n\n";


		//Cart Items are drawn, Draw Summary 
		var str_cart_bulk_edit = 
			'<div class="rcorners cartbulkedit"><div class="rc1"><div class="rc2"><div class="rc3"><div class="rc4">' +
			'<div class="rinner">'+

			"<div class='bulk_edit text3' id=bulk_edit_container>" + 
         (  (cart.arrayParts['photo_print'] != undefined && cart.arrayParts['photo_print'].total_items > 0) ?
            this.getHTMLforBulkEdit() : '' ) +
			"</div>" + 

			"</div>" +
			"</div></div></div></div></div>";

		var str_delete_group = "<div class=delete_items>" + str_delete_group_links + "</div>";//xxx

		/* Adding new Shopping Cart Controls */

//		var str_cart_page_navigation = this.getHTMLForPagination();
//			(this.total_pages > 1 || this.current_page == 0 || available_page_sizes.length > 0 ?


		var pagination = this.getHTMLForPagination();

		var str = str_header + 
			 '<table cellspacing="0" cellpadding="0" id=cart_page_navigation_top>'+
			 '<tr style="height:1px"><td colspan=2 style="height:1px; line-height:0; font-size:0;"><img src=http://images.fotki.com/pixel.gif height=1 width=670></td></tr>'+
			 '<tr>' +
			 (pagination != '' ? '<td id=cart_left>' + pagination + '</td>' : '') +

			 '<td id=cart_right>' +
				str_cart_bulk_edit +
			 '</td>' +

			"</tr></table>" +
			"<div id=scrollable_allitems_container>" +
			str_body + 
			"</div>" +
//			"<div class='rcorners cartpagenav' id=cart_page_navigation_bottom>" +
//				str_cart_page_navigation + 
//			"</div>" + 
			str_footer +

			"<div class=checkout id=summary_container>\n\n" +
			this.getHTMLforSummary() +
			"</div>";

		Core.setText(ShoppingCart.products_element, str);
//		Core.setText('cart_page_navigation', str_cart_page_navigation);
//		Core.setText('cart_page_navigation_bottom', str_cart_page_navigation);

		if (this.total_price != this.total_prints_price) {
			Core.setText(ShoppingCart.total_prints_price_element, '($' + this.total_prints_price + ')');
		}

		Core.flushElementCache();

      if (cart.arrayParts['photo_print'] == undefined && cart.total_pages == 1) {
         Core.hideElement('cart_page_navigation_top');
      }



//		Core.setText('summary_container', this.getHTMLforSummary());


		ShoppingCart.original_el_content_height = null;

		Core.addSystemEvent("keypress", ShoppingCart.onKeyPress);

		if (ShoppingCart.edit_part_index != 0) {
		  
			Core.addSystemEvent("mousedown", cart.applyUpdateIfItemChanged);

//			if (Core.detectBrowser().isIE && document.getElementsByTagName) {
//				//Add disable to all selects. That fixes unimplemented option disable in IE :)
//				Core._restoreDisabledSelectOption = function Core__restoreSelectOption(e) {
//					if (e.options[e.selectedIndex].disabled) {
//						e.selectedIndex = window.select_current[e.id];
//					}
//				}
//	
//				var s = document.getElementsByTagName("select");
//				if (s.length > 0) {
//					window.select_current = new Array();
//	
//					for (var i=0, select; select = s[i]; i++) {
//						select.onfocus = function(){ window.select_current[this.id] = this.selectedIndex; }
//						select.onchange = function(){ Core._restoreDisabledSelectOption(this); }
//					}
//				}
//			}
		}

//		if (!ShoppingCart.summary_reposition_interval_id) {
//DISABLED_SUMMARY_MOVE			ShoppingCart.summary_reposition_interval_id = window.setTimeout("ShoppingCart.moveSummaryToTop()", ShoppingCart.summary_redraw_delay);
//			ShoppingCart.summary_reposition_interval_id = window.setInterval("ShoppingCart.moveSummaryToTop()", ShoppingCart.summary_redraw_delay);
//		}


		window.onresize = ShoppingCart.resizeScrollableAllItemsArea;
		window.onscroll = ShoppingCart.resizeScrollableAllItemsArea;
		Core.addSystemEvent("resize", ShoppingCart.resizeScrollableAllItemsArea);
		Core.addSystemEvent("scroll", ShoppingCart.resizeScrollableAllItemsArea);

//			ShoppingCart.bottomline_hline = Core.getElementU('bottomline_hline');
//			if (ShoppingCart.bottomline_hline) {
//			ShoppingCart.bottomline_hline.onclick = ShoppingCart.showHideBottomLine;
//			}


		window.setTimeout("ShoppingCart.resizeScrollableAllItemsArea()", 1000);
		

	}///update()


	this.applyUpdateIfItemChanged = function Cart_applyUpdateIfItemChanged(e) {
		var do_apply = false;	
		if (ShoppingCart.edit_part_index != 0 && !ShoppingCart.ajax_running) {
			var item = cart.arrayParts[ShoppingCart.edit_part_index].arrayItem[ShoppingCart.edit_item_index];
			var new_quantity	= Core.getText('item_qty');

         if (item.type == 'photo_print') {
	   		var select_option = Core.getText('item_format');
   			var x = select_option.split('__');
			   var new_format = x[0];
		   	var format_is_not_recommended = x[1];
	   		var new_paper_type = (Core.getText('item_paper_type') == 'glossy' ? 'glossy' : 'matte');
   			var new_crop		= (Core.getElementU('crop').checked ? 1: 0)
         }


			if (ShoppingCart.edit_mode == 'edit' && new_format != 'unselected' && 
					(item.qty !=new_quantity || item.type == 'photo_print' && (item.format != new_format || item.paper_type != new_paper_type || item.crop != new_crop))) {
				do_apply = true;
			} else if (ShoppingCart.edit_mode == 'copy' && new_format != 'unselected') {
				do_apply = true;
			}
		}
		
		//Goodly IE compatibility
		if (!e) var e = window.event;
		var tg = (window.event) ? e.srcElement : e.target;

		if (!e || e.keyCode==13 || tg.tagName != "SELECT" && tg.tagName != "OPTION" && tg.tagName != "INPUT" && tg.id != 'apply_button' && tg.id != 'cancel_button' && tg.id != 'cropping_button') {
			Logger.log('Clicked ' + tg.tagName + ' ('+tg.className+' ) id='+ tg.id + ' APPLY=' + do_apply);
			if (do_apply) {
				Core.removeSystemEvent("mousedown", cart.applyUpdateIfItemChanged);
				cart.applyUpdateCartItem(ShoppingCart.edit_part_index, ShoppingCart.edit_item_index, ShoppingCart.edit_mode);
			} 

			if (!e || tg.tagName != "TD" || !tg.id.indexOf('format_') > -1 || !tg.id.indexOf('paper_') > -1 || !tg.id.indexOf('qty_') > -1) {
				if (!do_apply && (ShoppingCart.edit_mode == 'edit' || ShoppingCart.edit_mode == 'copy') ) {
					cart.cancelEditCartItem();
				}
			}
		}
	}


}





ShoppingCart.dlgPanel = null;

ShoppingCart.dialog_applied = new Object();
ShoppingCart.dialog_applied.address = 0;
ShoppingCart.dialog_applied.shipping = 0;
ShoppingCart.dialog_applied.credit_card = 0;
ShoppingCart.dialog_applied.upload = 0;

ShoppingCart.original_el_content_height = null;
ShoppingCart.original_el_top = null;
ShoppingCart.original_el_content_width = null;


function shoppingCartDialogInit() {
	ShoppingCart.dlgPanel = new ModalDialog('cart_dialog', 'note');
}




//Settings
ShoppingCart.summary_redraw_delay = 1; //ms
ShoppingCart.summary_idle_redraw_delay = 350; //ms  - when no scrolling occured
ShoppingCart.summary_scroll_amount = 3; //1/x
ShoppingCart.summary_padding = 0;
ShoppingCart.max_scroll_tokens = 3; //how many times should hit counter to avoid ShoppingCart.moveSummaryToTop



// CHECK IF SCROLLING STOPPED
ShoppingCart.last_scroll_token = 0;
ShoppingCart.current_scroll_token = 0;
ShoppingCart.scroll_tokens_counter = 0;

ShoppingCart._hitScrollPositions = function _hitSc(scroll) {
	ShoppingCart.last_scroll_token = ShoppingCart.current_scroll_token;
	ShoppingCart.current_scroll_token = scroll;
}
ShoppingCart._isAllScrollPosUnchanged = function _isAll() {
	if (ShoppingCart.current_scroll_token == ShoppingCart.last_scroll_token) {
		ShoppingCart.scroll_tokens_counter++;
		if (ShoppingCart.scroll_tokens_counter > ShoppingCart.max_scroll_tokens) {
			return true;
		}
	} else {
		ShoppingCart.scroll_tokens_counter=0;
		return false;
	}
}
// /CHECK IF SCROLLING STOPPED


var ccc=0;
ShoppingCart.resizeScrollableAllItemsArea = function ShoppingCart_resizeScrollableAllItemsArea() {
	var el_allitems = Core.getElementU('scrollable_allitems_container');
	var el_cart_top_nav = Core.getElementU('cart_page_navigation_top');

	//<hack> - getting content height
//	el_allitems.style.overflow = 'visible';
//	el_allitems.style.height = 'auto';
	var allitems_content_height = el_allitems.offsetHeight;
//	el_allitems.style.overflow = 'auto';
	//</hack>

	var nav_menu_height = 0;

	if (ShoppingCart.scrollable_allitems_container_top == null) {
		ShoppingCart.scrollable_allitems_container_top =
				Core.getElementPos('scrollable_allitems_container').currentTop;
		var el_bottomline = Core.getElementU('bottomline');
		//ShoppingCart.el_bottomline_height = el_bottomline.offsetHeight;
	}

	var el_summary = Core.getElementU('summary_container');

	var vis = Core.getBrowserVisibleArea();

//	var new_h = vis.height - ShoppingCart.scrollable_allitems_container_top - 26 - ShoppingCart.el_bottomline_height;
	var new_h = vis.height - ShoppingCart.scrollable_allitems_container_top - 4;
				//(ShoppingCart.bottom_line_is_hidden ? 15 : 15/*ShoppingCart.el_bottomline_height*/);

	if (new_h < el_summary.offsetHeight - el_cart_top_nav.offsetHeight)
		new_h = el_summary.offsetHeight - el_cart_top_nav.offsetHeight;

//	if (new_h > vis.height) {
//		new_h = vis.height;
//	}

//	if (new_h < allitems_content_height)
	el_allitems.style.height = new_h +'px';

	//<hack: redraws screen w/o blinking>
//	var pd = Core.getPageDimensions();

	//the code for resizing summary panel

	var el_content = Core.getElementU('summary_content_container');
	var el_summary = Core.getElementU('summary_container');

	if (ShoppingCart.original_el_content_height == null) {
		ShoppingCart.original_el_content_height = el_content.offsetHeight;
		ShoppingCart.original_el_summary_height = el_summary.offsetHeight;
		ShoppingCart.original_el_summary_head_height = ShoppingCart.original_el_summary_height - ShoppingCart.original_el_content_height;
		ShoppingCart.original_el_content_top = Core.getElementPos(el_summary).currentTop;
	}


////<code for aloowing resize of summary>
//	var screen = Core.getScreenDimensions();	
//	var x = 0;
//	if (vis.toolbarHeight + ShoppingCart.original_el_summary_height < screen.height) {x=0;}
//	else {x=1;};
//	document.title= vis.toolbarHeight +'+'+ ShoppingCart.original_el_summary_height +'<'+ screen.height + '	=  ' +x;
//	if (x==1) return;
////</code>

//	var scroll = Core.getPageScrollTop();
//
//	var scroll_offset = (scroll < ShoppingCart.original_el_content_top) ? ShoppingCart.original_el_content_top - scroll : 0;
//
//	var new_el_content_height =  vis.height - scroll_offset;
//	
//	if (new_el_content_height > ShoppingCart.original_el_summary_height) {
//		el_content.style.overflow  = "hidden";
//		el_content.style.height = 'auto'; //(ShoppingCart.original_el_content_height) + 'px';
//	} else {
//		el_content.style.overflow  = "auto";
//		new_el_content_height = new_el_content_height - ShoppingCart.original_el_summary_head_height;
//		el_content.style.height = new_el_content_height + 'px';
//	}
//
//	var str = 'vis='+ vis.height + 'x' + vis.width + ' ' +
//				  pd.height + 'x' + pd.width + ' top=' +
//				  ShoppingCart.scrollable_allitems_container_top +
//				  ' sum_h=' + el_summary.offsetHeight + ' tn_h='+el_cart_top_nav.offsetHeight +
//				  ' bh='+ShoppingCart.el_bottomline_height+
//				  ' rh='+allitems_content_height;
//	str+= ' nh=' + new_h;
//
//	str += ' h='+el_allitems.offsetHeight + ' neh='+new_el_content_height;

//	document.title = ccc++ + ')' + str+' scroll='+scroll;
}





ShoppingCart.onKeyPress = function ShoppingCart_onKeyPress(e) {
	var character = e.charCode > 0 ? String.fromCharCode(e.charCode) : null;
	var code = e.keyCode;

	if (ShoppingCart.edit_part_index != 0) {
		if (code==27) {//ESC
			cart.cancelEditCartItem();
			Core.hideElement('dialog_progress');
			Core.hideElement('sh_cart_progress');
			return false;
		} else if (code==13) {//Enter
			cart.applyUpdateIfItemChanged(e);
		}
	}
}



ShoppingCart.bottom_line_is_hidden = 0;
ShoppingCart.showHideBottomLine = function ShoppingCart_showHideBottomLine() {
	ShoppingCart.bottom_line_is_hidden = !ShoppingCart.bottom_line_is_hidden;
	if (ShoppingCart.bottom_line_is_hidden) {
//	Core.hideElement("bottom_links"); 
	Core.hideElement("bottomline");
	} else {
//	Core.showElement("bottom_links"); 
	Core.showElement("bottomline");
	} 
//	var el_bottomline = Core.getElementU('bottomline');
//    ShoppingCart.el_bottomline_height = el_bottomline.offsetHeight + 5;
    ShoppingCart.el_bottomline_height = 0;
	ShoppingCart.resizeScrollableAllItemsArea();
}

//Core.addEvent('bottomline_hline', 'click', ShoppingCart.showHideBottomLine);
//ShoppingCart.bottomline_hline = 
//ShoppingCart.bottomline_hline.onclick = ShoppingCart.showHideBottomLine;


//
//ShoppingCart.dialog_onKeyPress = function ShoppingCart_dialog_onKeyPress(e) {
//	var code = e.keyCode;
//
//	if (ShoppingCart.dlgPanel.isVisible() && code==27) {//ESC
//		ShoppingCart.dlgPanelCancel();
//		window.onkeypress = ShoppingCart.onKeyPress;
//		Core.addEvent(window, "keypress", ShoppingCart.onKeyPress);
//		Core.hideElement('sh_cart_progress');
//	}
//}





ShoppingCart.string_sa_step = 'Shipping Address';
ShoppingCart.string_sa_edit_step = 'Shipping Address Edit';
ShoppingCart.string_sa_unconfirmed_step = 'Shipping Address';
ShoppingCart.string_cc_step = 'Payment';
ShoppingCart.string_sh_step = 'Shipping Method';
ShoppingCart.string_checkout_step = 'Order Review';
ShoppingCart.string_crop_step = 'Adjust Cropping';
ShoppingCart.string_global_update_step = 'Edit Order';

ShoppingCart.string_save_cart_step = 'Saving Current Shopping Cart';
ShoppingCart.string_load_cart_step = 'Loading Saved Shopping Cart';

ShoppingCart.dlgPanelShow = function ShoppingCart_dlgPanelShow(panel_id, content, mode) {
	//	if (panel_id == 'sa' || panel_id == 'sh' || panel_id == 'cc' || panel_id == 'checkout' || panel_id == 'crop') {
	//		Core.setClassName('dialog_content_class_wrapping dojo_rcorners', 'rcorners dark dojo_' + panel_id);
	//	}
	if (content == '') {
		ShoppingCart.dlgPanel.setClassName('dojo_loading');
		//Core.setText('panel_content', '');//<div class=text2>Loading<blink>...</blink></div>');
      ShoppingCart.dlgPanel.setContent2('panel_content', "");
	} else if (content != 'default') {
		//ShoppingCart.dlgPanel.quickHide();
		//Core.setText('panel_content', content);
      ShoppingCart.dlgPanel.setContent2('panel_content', content);
		ShoppingCart.dlgPanel.quickShow();
	}

	Core.flushElementCache();

	if (!ShoppingCart.dlgPanel.isVisible()) {
		ShoppingCart.dlgPanel.show();
	}

	if (content == '') {
      ShoppingCart.dlgPanel.setContent2('dialog_dinamic_buttons', '');
      ShoppingCart.dlgPanel.setContent2('dialog_dinamic_description', '');
      ShoppingCart.dlgPanel.setContent2('dlg_panel_header', 'Loading');
		return;
	}

	// force to correct and change header, corresponding to retrieved content 
	var old_panel_id = panel_id;

	if (Core.getElementU('addresses_list')) {
		panel_id = 'sa';
	} else if (Core.getElementU('sh_address_corrected')) {
		panel_id = 'sh_corrected';
	} else if (Core.getElementU('new_address')) {
		panel_id = 'sa_edit';
//		panel_id = 'sa';
	} else if (Core.getElementU('unconfirmed_address')) {
		panel_id = 'sa_unconfirmed';
	} else if (Core.getElementU('editing_shipping')){
		panel_id = 'sh';
	} else if (Core.getElementU('cc_list_step')) {
		panel_id = 'cc';
	} else if (Core.getElementU('new_credit_card')) {
		panel_id = 'cc_new';
	} else if (Core.getElementU('checkout_final_step') || Core.getElementU('order_placed_ok')) {
		panel_id = 'checkout';
	} else if (Core.getElementU('global_update')) {
		panel_id = 'global_update';
	}

	var is_single = (Core.getElementU('is_single') ? 1 : 0);

	var panel_title = panel_id;
	var panel_buttons = '';
	var panel_description = '';

	if (panel_id != old_panel_id) {
		Core.hideElement('panel_content');
	}

	if (panel_id == 'sa' || panel_id == 'sa_unconfirmed' || panel_id == 'sh' || panel_id == 'cc' || panel_id == 'checkout' || 
		 panel_id == 'crop' || panel_id == 'global_update' || panel_id == 'sa_edit' || panel_id == 'save_cart' || 
		 panel_id == 'load_cart' || panel_id == 'sh_corrected' || panel_id == 'cc_new') {

		panel_title = ShoppingCart['string_' + panel_id + '_step'];

		ShoppingCart.dlgPanel.setClassName('dojo_' + panel_id + (is_single ? '_single' : ''));
	} else {
		ShoppingCart.dlgPanel.setClassName('');
	}

	if (panel_id != old_panel_id) {
		Core.showElement('panel_content');
	}

	if (Core.getElementU('hidden_dialog_dinamic_buttons')) {
		panel_buttons = Core.getText('hidden_dialog_dinamic_buttons');	
	}

	if (Core.getElementU('hidden_dialog_dinamic_description')) {
		panel_description = Core.getText('hidden_dialog_dinamic_description');	
	}

   ShoppingCart.dlgPanel.setContent2('dialog_dinamic_buttons', panel_buttons);
   ShoppingCart.dlgPanel.setContent2('dialog_dinamic_description', panel_description);
	Core.flushElementCache();

	//Core.setText('dlg_panel_header', panel_title);
   ShoppingCart.dlgPanel.setContent2('dlg_panel_header', panel_title);

	ShoppingCart.dlgPanel.onESC = ShoppingCart.dlgPanelCancel;
}



ShoppingCart.dlgPanelCancel = function ShoppingCart_dlgPanelCancel(force) {
	if (force || ShoppingCart.dialog_applied.address || 
			ShoppingCart.dialog_applied.shipping || 
			ShoppingCart.dialog_applied.credit_card ||
			ShoppingCart.dialog_applied.upload) {
		ShoppingCart.refreshPage();
	}

	ShoppingCart.dlgPanel.onHide = function ShoppingCart_dlgPanel_onHide() {
		//Core.setText('panel_content', '');
      ShoppingCart.dlgPanel.setContent2('panel_content', '');
      ShoppingCart.dlgPanel.setContent2('dialog_dinamic_buttons', '');
      ShoppingCart.dlgPanel.setContent2('dialog_dinamic_description', '');

		//IE fix: redraw summary on close
		if (Core.detectBrowser().isIE && Core.detectBrowser().version < 8.0) {
			Core.setText('summary_container', Core.getText('summary_container'));
		}
//DISABLED_SUMMARY_MOVE		ShoppingCart.summary_padding = 3;
//DISABLED_SUMMARY_MOVE		ShoppingCart.moveSummaryToTop(1);
//DISABLED_SUMMARY_MOVE		ShoppingCart.summary_padding = 0;
	}

	ShoppingCart.dlgPanel.hide();
}


ShoppingCart.assignAJAXonDialogForm = function ShoppingCart_assignAJAXonDialogForm() {
	var result = 1;
	if (Core.getElementU('new_address') || Core.getElementU('unconfirmed_address')) {
		ShoppingCart.assignAJAXonSAEditForm();
		ShoppingCart.OnCountryChange('addressess');
	} else if (Core.getElementU('sh_address_corrected')) {
		ShoppingCart.assignAJAXonSAEditForm();
	} else if (Core.getElementU('editing_shipping')){
		ShoppingCart.assignAJAXonShEditForm();
	} else if (Core.getElementU('new_credit_card')) {
		ShoppingCart.assignAJAXonCCEditForm();
		ShoppingCart.OnCountryChange('cc');
	} else if (Core.getElementU('checkout_final_step')) {
		ShoppingCart.assignAJAXonCheckoutForm();
	} else if (Core.getElementU('order_placed_ok')) {
		ShoppingCart.dlgPanel.onHide = function() {
			ShoppingCart.showCartIsEmpty();
		}
	} else if (Core.getElementU('shopping_cart_is_empty')) {
		ShoppingCart.dlgPanel.hide();
		ShoppingCart.showCartIsEmpty();
	} else if (Core.getElementU('save_cart')){
		ShoppingCart.assignAJAXonSaveCartForm();
	} else {
		result = 0;
	}

	return result;
}



/* .submit* functions are needed so hidden control buttons in .tpl in <div id='hidden_dialog_dinamic_buttons'>
	can be extracted and can be put into another dojoDialog container and still be able to submit.
	Just copying the buttons won't work out for advAJAX assign, so we have to froce submission onClick */

ShoppingCart.submitNewAddress = function ShoppingCart_submitNewAddress(this_ref) {
	if(this_ref) this_ref.disabled = true;

	advAJAX.submit(document.getElementById("frmAddr"), {
		onSuccess : function(obj) { 
			ShoppingCart.dialog_applied.address = 1;
			ShoppingCart.dlgPanelShow('sa_edit', obj.responseText);
			ShoppingCart.assignAJAXonDialogForm();
		},
		onFinalization : function(obj) {
			if(this_ref) this_ref.disabled = false;
		}
	});
}

ShoppingCart.submitShippingMethod = function ShoppingCart_submitShippingMethod(this_ref) {
	if(this_ref) this_ref.disabled = true;

	advAJAX.submit(document.getElementById("frmOrder"), {
		onSuccess : function(obj) {
			ShoppingCart.dialog_applied.shipping = 1;
			ShoppingCart.dlgPanelShow('sh', obj.responseText);
			ShoppingCart.assignAJAXonDialogForm();
		},
		onFinalization : function(obj) {
			if(this_ref) this_ref.disabled = false;
		}
	});
}

ShoppingCart.submitNewCreditCard = function ShoppingCart_submitNewCreditCard(this_ref) {
	if(this_ref) this_ref.disabled = true;

      Crypto.encodeDataField('x_card_num_raw', 'x_card_num_enc');

	advAJAX.submit(document.getElementById("frmOrder"), {
		onSuccess : function(obj) {
			ShoppingCart.dialog_applied.credit_card = 1;
			ShoppingCart.dlgPanelShow('cc', obj.responseText);			
			ShoppingCart.assignAJAXonDialogForm();
		},
		onFinalization : function(obj) {
			if(this_ref) this_ref.disabled = false;
		}
	});
}


ShoppingCart.submitCheckout = function ShoppingCart_submitCheckout(this_ref) {
	if(this_ref) this_ref.disabled = true;

	advAJAX.submit(document.getElementById("frmOrder"), {
		onSuccess : function(obj) {
			ShoppingCart.dialog_applied.credit_card = 1;
			var response = obj.responseText.split('|');		
			var status = response[0];
			var redirect_link = response[1];

			if(status == 'ok' && redirect_link != '') {
				window.location = redirect_link;
			} else {// show error message
				ShoppingCart.dlgPanelShow('checkout', obj.responseText);
				ShoppingCart.assignAJAXonDialogForm();
			}
		},
		onFinalization : function(obj) {
			if(this_ref) this_ref.disabled = false;
		}
	});
}


ShoppingCart.submitSaveCart = function ShoppingCart_submitSaveCart() {
	advAJAX.submit(document.getElementById("save_cart"), {
		onSuccess : function(obj) {
			ShoppingCart.dlgPanelCancel();
		}
	});
}


ShoppingCart.dialogShippingAddress = function ShoppingCart_dialogShippingAddress() {
	Logger.log('this.processing_checkout_in_progress='+this.processing_checkout_in_progress);

	ShoppingCart.dlgPanelShow('sa', '');

	advAJAX.get({
		url : ("/checkout/?get_plain=1"),

		onSuccess : function(obj) { Logger.log('Cleared....');
			ShoppingCart.dlgPanelShow('sa', obj.responseText);
			ShoppingCart.assignAJAXonDialogForm();
		}
	});
}


ShoppingCart.assignAJAXonSAEditForm = function ShoppingCart_assignAJAXonSAEditForm() {
	ShoppingCart.dlgPanelShow('sa', 'default');

	advAJAX.assign(document.getElementById("frmAddr"), {
		onSuccess : function(obj) { 
			ShoppingCart.dialog_applied.address = 1;
			ShoppingCart.dlgPanelShow('sa', obj.responseText);
			ShoppingCart.assignAJAXonDialogForm();
		}
	});
}


ShoppingCart.selectAddress = function ShoppingCart_selectAddress(address_id) {
	advAJAX.get({
		url : ("/addresses/?" + address_id + "=1&get_plain=1"),

		onSuccess : function(obj) {
			ShoppingCart.dialog_applied.address = 1;

			//Core.setText('panel_content', obj.responseText );
         ShoppingCart.dlgPanel.setContent2('panel_content', obj.responseText );
			Core.flushElementCache();

			ShoppingCart.assignAJAXonDialogForm(this.processing_checkout_in_progress ? 'checkout' : null);
			cart.shipping_method = 'N/A';

			if (cart.shipping_method == 'N/A') {
				ShoppingCart.dialogShipping(this.processing_checkout_in_progress ? 'checkout' : null);
			} else if (cart.credit_card == 'N/A') {
				ShoppingCart.dialogCC(this.processing_checkout_in_progress ? 'checkout' : null);
			} else {
				ShoppingCart.dlgPanelCancel();
			}
		}
	});
}



ShoppingCart.editAddress = function ShoppingCart_editAddress(login, address_id) {
	advAJAX.get({
		url : ("/addresses/" + login + "?change=" + address_id + "&get_plain=1"),

		onSuccess : function(obj) {
			ShoppingCart.dlgPanelShow('sa', obj.responseText);
			ShoppingCart.assignAJAXonDialogForm('sa');
			ShoppingCart.dialog_applied.address = 1;
		}
	});
}


ShoppingCart.newAddress = function ShoppingCart_newAddress() {
	advAJAX.get({
		url : ("/addresses/?get_plain=1"),

		onSuccess : function(obj) {
			ShoppingCart.dlgPanelShow('sa_edit', obj.responseText);
			ShoppingCart.assignAJAXonDialogForm('sa'); //ShoppingCart.assignAJAXonSAEditForm();//XXX
		}
	});
}


ShoppingCart.deleteAddress = function ShoppingCart_deleteAddress(login, address_id) {
	if (!confirm('Are you sure to delete?')) {
		return;
	}
	
	Core.hideElement('content_' + address_id);

	advAJAX.get({
		url : ("/addresses/" + login + "?remove=" + address_id + "&get_plain=1"),

		onSuccess : function(obj) { 
			ShoppingCart.dialog_applied.address = 1;
		}
	});
}


ShoppingCart.dialogShipping = function ShoppingCart_dialogShipping() {
	ShoppingCart.dlgPanelShow('sh', '');

	advAJAX.get({
		url : ("/checkout2/?get_plain=1"),

		onSuccess : function(obj) {
			ShoppingCart.dlgPanelShow('sh', obj.responseText);
			ShoppingCart.assignAJAXonDialogForm(); //ShoppingCart.assignAJAXonShEditForm(); //XXX
		}
	});
}


ShoppingCart.assignAJAXonShEditForm = function ShoppingCart_assignAJAXonShEditForm() {
	ShoppingCart.dlgPanelShow('sh', 'default');

	advAJAX.assign(document.getElementById("frmOrder"), {
		onSuccess : function(obj) {

			ShoppingCart.dlgPanelShow('sh', obj.responseText);

			if (Core.getElementU('editing_shipping')){
				ShoppingCart.assignAJAXonShEditForm();
				Logger.log('editing_shipping');
				return 0;
			} else {
				//if (Core.getElementU('new_credit_card')) {
				ShoppingCart.dialog_applied.shipping = 1;
				Core.showElement('panel_content');
				ShoppingCart.assignAJAXonCCEditForm();
			}

		}
	});
}


ShoppingCart.dialogCC = function ShoppingCart_dialogCC() {
	ShoppingCart.dlgPanelShow('cc', '');

	advAJAX.get({
		url : ("/checkout3/?get_plain=1"),

		onSuccess : function(obj) {
			ShoppingCart.dlgPanelShow('cc', obj.responseText);
			ShoppingCart.assignAJAXonDialogForm();
		}
	});
}

ShoppingCart.assignAJAXonCCEditForm = function ShoppingCart_assignAJAXonCCEditForm() {
	ShoppingCart.dlgPanelShow('cc', 'default');

	advAJAX.assign(document.getElementById("frmOrder"), {
		onSuccess : function(obj) { 
			Core.hideElement('panel_content');
			
			//Core.setText('panel_content', obj.responseText );
         ShoppingCart.dlgPanel.setContent2('panel_content', obj.responseText);
         
			Core.flushElementCache();

			if (Core.getElementU('new_credit_card')) {
				Core.showElement('panel_content');
				ShoppingCart.assignAJAXonCCEditForm();
			} else {
				ShoppingCart.dialog_applied.credit_card = 1;
				ShoppingCart.dialogCC();
				Core.showElement('panel_content');
			}
		}
	});
}

ShoppingCart.deleteCC = function ShoppingCart_deleteCC(cc_id) {
	if (!confirm('Do you surely want to remove saved Credit Card?')) {
		return;
	}

	Core.hideElement('content_' + cc_id);

	advAJAX.get({
		url : ("/checkout3" + "?remove=" + cc_id + "&get_plain=1"),

		onSuccess : function(obj) {
				ShoppingCart.dialog_applied.credit_card = 1;
		}
	});
}


ShoppingCart.selectCC = function ShoppingCart_selectCC(login, cc_id) {
	advAJAX.get({
		url : ("/checkout3/" + login + '?' + cc_id + "=1&get_plain=1"),

		onSuccess : function(obj) {
			ShoppingCart.dlgPanelShow('sa', obj.responseText);
			ShoppingCart.dialog_applied.credit_card = 1;

			if (! ShoppingCart.assignAJAXonDialogForm() ) {
				if (this.processing_checkout_in_progress == 1) {
					ShoppingCart.processCheckout();
				} else {
					ShoppingCart.dlgPanelCancel();
				}
			}
		}
	});
}


ShoppingCart.newCC = function ShoppingCart_newCC() {
	advAJAX.get({
		url : ("/checkout3/?new-cc=1&get_plain=1"),

		onSuccess : function(obj) {
			ShoppingCart.dlgPanelShow('cc', obj.responseText);

			ShoppingCart.assignAJAXonDialogForm();

			if (! Core.getElementU('new_credit_card')) {
				ShoppingCart.dialog_applied.credit_card = 1;
				
				if (! ShoppingCart.assignAJAXonDialogForm()) {
					if (this.processing_checkout_in_progress == 1) {
						ShoppingCart.processCheckout();
					} else {
						ShoppingCart.dlgPanelCancel();
					}
				}
			}
		}
	});
}


ShoppingCart.processing_checkout_in_progress = 0;

ShoppingCart.processCheckout = function ShoppingCart_processCheckout() {
	ShoppingCart.processing_checkout_in_progress = 1;
	Logger.log('this.processing_checkout_in_progress='+this.processing_checkout_in_progress);


	if (cart.shipping_address == 'N/A') {
		ShoppingCart.dialogShippingAddress('checkout'); 
		return;
	} 

	if (cart.shipping_method == 'N/A') {
		ShoppingCart.dialogShipping('checkout');
		return;
	}

	if (cart.credit_card == 'N/A') {
		ShoppingCart.dialogCC('checkout');
		return;
	}

	Logger.log('assigning');

	ShoppingCart.dlgPanelShow('checkout', '');

	advAJAX.get({
		url : ("/checkout4/?get_plain=1"),

		onSuccess : function(obj) {
			ShoppingCart.dlgPanelShow('checkout', obj.responseText);
			ShoppingCart.assignAJAXonDialogForm(); //ShoppingCart.assignAJAXonCheckoutForm(); //XXX
		}
	});
}

ShoppingCart.assignAJAXonCheckoutForm = function ShoppingCart_assignAJAXonCheckoutForm() {
	ShoppingCart.dlgPanelShow('checkout', 'default');

	advAJAX.assign(document.getElementById("frmOrder"), {
		onSuccess : function(obj) {
			ShoppingCart.dlgPanelShow('checkout', 'default');
			ShoppingCart.assignAJAXonDialogForm();
		}
	});
}

ShoppingCart.assignAJAXonSaveCartForm = function ShoppingCart_assignAJAXonSaveCartForm() {
	ShoppingCart.dlgPanelShow('save_cart', 'default');

	advAJAX.assign(document.getElementById("save_cart"), {
		onSuccess : function(obj) {
			ShoppingCart.dialog_applied.address = 1;
			ShoppingCart.dlgPanelShow('save_cart', obj.responseText);
			ShoppingCart.assignAJAXonDialogForm();
		}
	});
}

ShoppingCart.saveCart = function ShoppingCart_saveCart() {
	advAJAX.get({
		url : ("/cart?save_cart=1&get_plain=1"),

		onSuccess : function(obj) {
			ShoppingCart.dlgPanelShow('save_cart', obj.responseText);

			advAJAX.assign(document.getElementById("save_cart"), {
				onSuccess : function(obj) {
					ShoppingCart.dlgPanelCancel();
				}
			});
		}
	});
}

ShoppingCart.loadCart = function ShoppingCart_loadCart() {
	ShoppingCart.dlgPanelShow('load_cart', '');

	advAJAX.get({
		url : ("/cart?load_cart=1&get_plain=1"),

		onSuccess : function(obj) {
			ShoppingCart.dlgPanelShow('load_cart', obj.responseText);
		}
	});
}

ShoppingCart.deleteSavedCart = function ShoppingCart_deleteSavedCart(cart_id) {
	if (!confirm('Are you sure to remove saved Cart?')) {
		return;
	}

	Core.hideElement('content_' + cart_id);

	advAJAX.get({
		url : ("/cart/remove_cart.html?num=" + cart_id + "&get_plain=1"),

		onSuccess : function(obj) {
		}
	});
}


ShoppingCart.globalUpdate = function ShoppingCart_globalUpdate(action) {
	ShoppingCart.dlgPanelShow('global_update', '');

        if (action == 'upload_photo')
		ShoppingCart.dialog_applied.upload = 1;

	advAJAX.get({
		url : ("/cart?global_update=1&get_plain=1" + ((action == 'upload_photo') ? '&upload_photo=1' : '')),

		onSuccess : function(obj) {
			ShoppingCart.dlgPanelShow('global_update', obj.responseText);
			/* moved to ShoppingCart.submitGlobalUpdate
			advAJAX.assign(document.getElementById("global_update"), {
				onSuccess : function(obj) {
					ShoppingCart.dlgPanelCancel(1);
				}
			});
			*/
		}
	});
}

ShoppingCart.submitGlobalUpdate = function ShoppingCart_submitGlobalUpdate() {
	advAJAX.submit(document.getElementById("global_update"), {
		onSuccess : function(obj) {
			ShoppingCart.dlgPanelCancel(1);
		}
	});
}

ShoppingCart.bulkAddFormat = function ShoppingCart_bulkAddFormat(format) {
	if (confirm('This will set '+format+ ' as the only format for all items in Shopping Cart. Are you sure?')) {
	advAJAX.get({
		url : ("/cart?ajax=update_add_format_to_all_photos&new_format="+format),

		onSuccess : function(obj) {
			ShoppingCart.refreshPage();
		}
	});
	}
}

ShoppingCart.bulkSetPaperType = function ShoppingCart_bulkSetPaperType(paper_type) {
	if (confirm('This will set '+paper_type+ ' paper type for all prints in Shopping Cart. Are you sure?')) {
	advAJAX.get({
		url : ("/cart?ajax=update_all_photos_paper_type&new_paper_type=" + paper_type),

		onSuccess : function(obj) {
			Logger.log('COMPLETED: ' + paper_type);
			ShoppingCart.refreshPage();
		}
	});
	}
}


ShoppingCart.bulkSetQuantity = function ShoppingCart_bulkSetQuantity(quantity) {
	if (confirm('This will set quantity to '+quantity+ ' for all prints in Shopping Cart. Are you sure?')) {
	advAJAX.get({
		url : ("/cart?ajax=update_all_photos_quantity&new_quantity=" + quantity),

		onSuccess : function(obj) {
			ShoppingCart.refreshPage();
		}
	});
	}
}

/*
Core.getUniqueParam = function (first_letter) {
	var param = ((first_letter != null && first_letter == '?') ? '?' : '&') + 'unique__param=' + Core.getUniqueStr();
	return param;
}

Core.getUniqueStr = function () {
	var unique  = new Date().getTime().toString().substr(5) + Math.floor(Math.random() * 100).toString();
	return unique;
}
*/


//all temp changes will be processed on server
//pass value=undefined to clear command
ShoppingCart.setQueuedCommand = function ShoppingCart_setQueuedCommand(cmd, key, value) {
	var expdate = new Date();
	fixDate(expdate);
	expdate.setTime(expdate.getTime() + (24 * 60 * 60 * 1000)*365);

	var c = getCookie('cart_cmd') || '';

	var start = c.indexOf(cmd + '#' + key);
	if (start != -1) {
		//remove old command
		var end = c.indexOf('*', start);
		var sliced = c.slice(start, end+1);
		c = c.substring(0, start) + c.substring(end+1);
	}

	if (value != undefined) {
		var queue = cmd + '#' + key + '=' + value + '*';
		c += queue;
	}

	setCookie('cart_cmd', c, expdate, '/', '.fotki.com');
}


ShoppingCart.getCropRectangle = function ShoppingCart_getCropRectangle(rpw, rph, px, py, pw, ph, cw, ch) {
	rpw = parseInt(rpw);
	rph = parseInt(rph);
	px = parseInt( px);
	py = parseInt( py);
	pw = parseInt( pw);
	ph = parseInt( ph);
	cw = parseFloat( cw);
	ch = parseFloat( ch);

//Logger.log('CROP: ' + rpw+', '+ rph+', '+ px+', '+ py+', '+ pw+', '+ ph+', '+ cw+', '+ ch);

// rpw - original width
// rph - original height
// px - current photo X
// py - current photo Y
// pw - current photo width
// ph - current photo height
// cw - crop width
// ch - crop height
	var _x1 = new Number();
	var obj = new Object();
	if(ph > pw) {
		if(ch < cw) {
			_x1 = cw;
			cw = ch;
			ch = _x1;
		}
		_x1 = ph / ch;
		if(_x1 * cw > pw) {
			_x1 = 2;
		} else {
			_x1 = 1;
		}
	} else {
		if(ch > cw) {
			_x1 = cw;
			cw = ch;
			ch = _x1;
		}
		_x1 = pw / cw;
		if(_x1 * ch > ph) {
			_x1 = 1;
		} else {
			_x1 = 2;
		}
	}
	if(_x1 == 1) {
		_x1 = ph / ch;
		obj.yMin = py;
		obj.yMax = py + ph;
		obj.xMax = _x1 * cw;
		obj.xMin = Math.round(px + (pw - obj.xMax) / 2);
		obj.xMax = obj.xMin + obj.xMax;
		_x1 = rph / ch;
//		obj._nOrigDpi = objParams._height / ch;
		obj._align = 'h';
	} else if(_x1 == 2) {
		_x1 = pw / cw;
		obj.xMin = px;
		obj.xMax = px + pw;
		obj.yMax = _x1 * ch;
		obj.yMin = Math.round(py + (ph - obj.yMax) / 2);
		obj.yMax = obj.yMin + obj.yMax;
		_x1 = rpw / cw;
//		obj._nOrigDpi = objParams._width / cw;
		obj._align = 'w';
	}
	obj.rDpi = _x1;
	return obj;
}



/*FIXME: checkout is these 3 funcs are being used */
function getFlashMovieObject(movieName) {
	if(window.document[movieName]) {
		return window.document[movieName];
	}
	if(navigator.appName.indexOf("Microsoft Internet") == -1) {
		if(document.embeds && document.embeds[movieName])
			return document.embeds[movieName]; 
	} else {
		return document.getElementById(movieName);
	}
}

function GetFlashVar(obj, name) {
	var flashmovie = getFlashMovieObject(obj);
	return flashmovie.GetVariable(name);
}

function SetFlashVar(obj, name, value) {
	var flashmovie = getFlashMovieObject(obj);
	return flashmovie.SetVariable(name, value);
}

ShoppingCart.toggleCroppingFromFlash = function ShoppingCart_toggleCroppingFromFlash() {
	var value = GetFlashVar('myFlash', 'cropping');
	value = (value == 'true' ? 'false' : 'true');
	SetFlashVar('myFlash', 'cropping', value);
}


ShoppingCart.openMemorystoneBookEditor = function ShoppingCart_openMemorystoneBookEditor(book) {
   var memorystone_editor = window.open(
      Core.localizeURL("http://cart.fotki.com/") + "book_layout?book=" + book + "&cmd=edit_xml" , 'bookEditorNum'+book, 
      "width="+screen.width + ", height="+screen.height);

   //memorystone_editor.moveTo(0, 0);
   //win.resizeTo(screen.width, screen.height);
   return false;
}


ShoppingCart.OnCountryChange = function ShoppingCart_OnCountryChange(apply_on) {
	var country; var sel;
	if (Core.getElementU('new_address')) {
		country = document.forms['frmAddr'].Country.value;
		sel = document.forms['frmAddr'].State;
	} else if (apply_on == 'cc') {
		country = document.forms['frmOrder'].elements['x_country'].value;
		sel = document.forms['frmOrder'].elements['x_state']; 
	} else return Logger.log('unknown form');

	if (country != 'US' && country != 'CA') {
		 sel.selectedIndex = sel.length - 1;
		if (document.all) sel.disabled = true;
	 } else {
		if (document.all) sel.disabled = false;
		if (country == 'US') {
			 if (sel.selectedIndex>63) sel.selectedIndex = 0;
		} else {
			 if (sel.selectedIndex<64) sel.selectedIndex = 64;
		}
	 }

}

var ptype_selected_id;
function ptypeSelectId(id) {
	Core.setClassName(ptype_selected_id, "conthidden");
	Core.setClassName(id, "contnormal");
	ptype_selected_id = id;
}

function SellingCart() {
   
}

SellingCart.isAnySellingPhotoCheked = function SellingPhotosCheck() {
   var ds = Core.getElementU('cart');
   var i = 1;
   
   while (i <= ds.length) {
      var elem = ds['selling_photo_' + i];
      
      if (elem == null) {
         return false;
      }
        
      if (ds[elem.value].checked) {
         return true;
      }
      i++;
   }

   return false;
}

SellingCart.deleteSelectedPhotos =  function SellingDeletePhotos() {
   if (!SellingCart.isAnySellingPhotoCheked()) {
      alert(LangDict.translateToken("TopNav.AlbumsJS.SelectPhotosFirst"));
      return false;
   } else {
      return true;
   }
}
