	//
	// Check for browser
	//

	Prototype.Browser.IE6 = Prototype.Browser.IE && parseInt(navigator.userAgent.substring(navigator.userAgent.indexOf("MSIE")+5))==6;

  //
  // Check for platform
  // 

  var isMac = false;
  var isWindows = false;
  var isLinux = false;

  if (navigator.platform) {
    if (navigator.platform.toLowerCase().indexOf("mac") >= 0) isMac = true;
    if (navigator.platform.toLowerCase().indexOf("win") >= 0) isWindows = true;
    if (navigator.platform.toLowerCase().indexOf("linux") >= 0) isLinux = true;
  }

	//
	// Public variables
	//

	var objAjax  = "";
	var objKeepAliveTimer = "";
	var objAjaxPopupTimer = "";
	var sites_window_can_close = true;
  // var cart_position = false;
  // var cart_position_offset = false;

	var round_full_settings = {
      tl: { radius: 20 },
      tr: { radius: 20 },
      bl: { radius: 20 },
      br: { radius: 20 },
      antiAlias: true,
      autoPad: true,
      validTags: ["div"]
  }

	var round_bottom_settings = {
      tl: { radius: 0 },
      tr: { radius: 0 },
      bl: { radius: 20 },
      br: { radius: 20 },
      antiAlias: true,
      autoPad: true,
      validTags: ["div"]
  }

	var round_bottom_small_settings = {
      tl: { radius: 0 },
      tr: { radius: 0 },
      bl: { radius: 10 },
      br: { radius: 10 },
      antiAlias: true,
      // autoPad: true,
      validTags: ["div"]
  }

	//
	// Startup
	// 

	Event.observe(window, "load", function() {
	  try {
      // Shopping Cart
      initialize_cart();
			// Corners
			initialize_corners();
      // FancyZoom
      if (typeof window.setupZoom == 'function') {
			  setupZoom();
			}
		} catch(err) {
		  
		}
	});

	Event.observe(document.onresize ? document : window, "resize", function() {
	  initialize_cart();
	});

  function initialize_corners() {
    // var boxes = new curvyCorners(round_full_settings, "round");
    // boxes.applyCornersToAll();
    // 
    // var boxes = new curvyCorners(round_bottom_settings, "round_bottom");
    // boxes.applyCornersToAll();
    // 
    // var boxes = new curvyCorners(round_bottom_small_settings, "round_bottom_small");
    // boxes.applyCornersToAll();    
  }

  function is_array(obj) {
    if (obj.constructor.toString().indexOf("Array") == -1)
      return false;
    else
      return true;
  }

  function keepMeAlive() {
     clearTimeout(objKeepAliveTimer);
     myImg = document.getElementById('keepAlive');
     if (myImg) myImg.src = myImg.src.replace(/\?.*$/, '?' + Math.random());
     objKeepAliveTimer = setTimeout("keepMeAlive()", 100000);
  }

  keepMeAlive();

	//
	// Get the position of an element
	//

	function getAbsX(elt) { if (elt) { return (elt.x) ? elt.x : getAbsPos(elt,"Left"); } }
	function getAbsY(elt) { if (elt) { return getAbsPos(elt,"Top"); } }
	function getAbsPos(elt,which) {
		iPos = 0;
		while (elt != null) {
			iPos += elt["offset" + which];
			elt = elt.offsetParent;
		}
		return iPos;
	}

	//
	// Get mouse coordinates
	//

	function getMouseCoords(objEvent) {
		var intMouseX = 0;
		var intMouseY = 0;

		if (Prototype.Browser.IE) {
			intMouseX = event.clientX + document.body.scrollLeft;
			intMouseY = event.clientY + document.body.scrollTop;
		} else {
			intMouseX = objEvent.pageX;
			intMouseY = objEvent.pageY;
		}

		return Array(intMouseX, intMouseY);
	}

	//
	// Cookies
	//

	function createCookie(name,value,days) {
		if (days) {
			var date = new Date();
			date.setTime(date.getTime()+(days*24*60*60*1000));
			var expires = "; expires="+date.toGMTString();
		}
		else var expires = "";
		document.cookie = name+"="+value+expires+"; path=/";
	}

	function readCookie(name) {
		var nameEQ = name + "=";
		var ca = document.cookie.split(';');
		for(var i=0;i < ca.length;i++) {
			var c = ca[i];
			while (c.charAt(0)==' ') c = c.substring(1,c.length);
			if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
		}
		return null;
	}

	function eraseCookie(name) {
		createCookie(name,"",-1);
	}

	//
	// Check if an inputted character is a number
	//

	function isNumber(evt) {
		evt = ( evt ) ? evt : window.event;
		var charCode = ( evt.which ) ? evt.which : evt.keyCode;
		return (charCode <= 40 || charCode == 44 || charCode == 46 || (charCode >= 48 && charCode <= 57));
	}

  function is_alphanumeric(evt) {
		evt = ( evt ) ? evt : window.event;
		var charCode = ( evt.which ) ? evt.which : evt.keyCode;
		return ((charCode >= 48 && charCode <= 57) || (charCode >= 65 && charCode <= 90) || (charCode >= 97 && charCode <= 122) || charCode == 8 || charCode == 37 || charCode == 39 || charCode == 45 || charCode == 95);
  }

  function is_enter(evt) {
    evt = ( evt ) ? evt : window.event;
    var charCode = ( evt.which ) ? evt.which : evt.keyCode;
    return (charCode == 13);
  }

  // function popup(sURL, sName, sParameters) {
  //  window.open(sURL, sName, sParameters);
  // }

	function fncDelete() {
		return confirm(lang["ConfirmDelete"]);
	}

  // function fncTask(strTask, objCheckbox, strID) {
  //  var intState = 0;
  //  if (objCheckbox.checked) intState = 1;
  //  location.href = "/admin/products/set_status/" + strID + "/?state=" + intState;
  // }

	//
	// --- BEGIN: Helpers ---
	//

	function toggle_ship_to_billing() {
	  if ($("shipping_information")) {
  		if ($("shiptobilling").checked) {
  			$("shipping_information").hide();
  		} else {
  			$("shipping_information").show();
  		}
  	}
	}

  // function toggle_shipping_method() {
  //   if ($("shipping_method")) {
  //     if ($("input_deliveryoption_2").checked) {
  //       $("shipping_method").show();
  //     } else {
  //       $("shipping_method").hide();
  //     }
  //   }
  // }

	function check_payment_type(update_element) {
		selectedElement = "";

		if ($("payment_type_information")) {
  		elements = document.cartForm.payment_type;
  		if (typeof(elements.length) == "undefined") {
  			selectedElement = elements;
  		} else {
  			for (i=0;i<elements.length;i++) {
  				element = elements[i];
  				if (element.checked) selectedElement = element;
  			}
  		}
  		$("payment_type_information").innerHTML = $("payment_method_information_" + selectedElement.value).innerHTML;
  	}

  	if (update_element) update_order_information(update_element, update_shipping_options);
	}

	function check_payment_service() {
		var ps = $("site_payment_service_id") ? $("site_payment_service_id") : $("input_Shop_PaymentServiceID");
		var div = $("paymentservice_information");
		var div_user = $("pi_username");
		var div_pass = $("pi_password");

		div.style.display = "none";
		div_user.style.display = "none";
		div_pass.style.display = "none";

		if (ps.selectedIndex != 0) {
			var type = ps[ps.selectedIndex].className;
			switch (type) {
				case "u":
					div_user.style.display = "block";
				break;
				case "up":
					div_user.style.display = "block";
					div_pass.style.display = "block";
				break;
			}
			div.style.display = "block";
		}
	}

	function check_mailinglist_service() {
		var ms = $("site_mailing_list_service_id");
		var div = $("mailinglistservice_information");
		var div_user = $("mi_username");
		var div_pass = $("mi_password");
		var div_listid = $("mi_list");

		div.style.display = "none";
		div_user.style.display = "none";
		div_pass.style.display = "none";
		div_listid.style.display = "none";

		if (ms.selectedIndex != 0) {
			var type = ms[ms.selectedIndex].className;
			switch (type) {
				case "u":
					div_user.style.display = "block";
				break;
				case "up":
					div_user.style.display = "block";
					div_pass.style.display = "block";
				break;
			}
			div_listid.style.display = "block";
			div.style.display = "block";
		}
	}

  function initialize_editor(element_id, width, height) {
    innovaeditor = initialize_editor_create(width, height);
    // Event.observe(window, 'load', function() { 
      innovaeditor.REPLACE(element_id);
    // });
  }

  function initialize_editor_create(width, height) {
    width = (typeof width == 'undefined') ? 700 : width;
    height = (typeof height == 'undefined') ? 500 : height;

    innovaeditor = new InnovaEditor("innovaeditor");

    // innovaeditor.tabs=[
    // ["tabHome", "Home", ["grpEdit", "grpFont", "grpPara", "grpInsert", "grpTables"]],
    // ["tabStyle", "Objects", ["grpMedia", "grpMisc"]]
    // ];
    // 
    // innovaeditor.groups=[
    // ["grpEdit", "", ["Undo", "Redo", "FullScreen", "RemoveFormat", "BRK", "Cut", "Copy", "Paste", "PasteWord", "PasteText", "XHTMLSource"]],
    // ["grpFont", "", ["FontName", "FontSize", "Styles", "BRK", "Bold", "Italic", "Underline", "Strikethrough", "Superscript", "ForeColor", "BackColor"]],
    // ["grpPara", "", ["Paragraph", "Indent", "Outdent", "StyleAndFormatting", "BRK", "JustifyLeft", "JustifyCenter", "JustifyRight", "JustifyFull", "Numbering", "Bullets"]],
    // ["grpInsert", "", ["Hyperlink", "Bookmark", "BRK", "Image"]],
    // ["grpTables", "", ["Table", "BRK", "Guidelines"]],
    // ["grpMedia", "", ["Media", "BRK", "Flash"]],
    // ["grpMisc", "", ["Characters", "Line", "BRK"]],
    // ];

    innovaeditor.cmdAssetManager = "modalDialogShow('/admin/assetsmanager',640,445);";

    innovaeditor.width = width + "px";
    innovaeditor.height = height + "px";

    return innovaeditor;
  }

  function open_sites() {
    var link = $("top_menu_sites");
    var win = $("sites_popup");

    link.addClassName("over");

    win.style.left = link.cumulativeOffset()[0] + "px";
    win.style.top = link.cumulativeOffset()[1] + link.getHeight() + "px";
    win.style.display = "block";

    sites_window_can_close = false;
  }

  function close_sites() {
    sites_window_can_close = true;
    setTimeout("close_sites_timeout()", 100);
  }

  function close_sites_timeout() {
    if (sites_window_can_close) {
      var link = $("top_menu_sites");
      var win = $("sites_popup");

      link.removeClassName("over");
      win.hide();      
    }
  }

	//
	// --- END: Helpers ---
	//


	//
	// --- BEGIN: Remote helpers  ---
	//

  function set_visibility(checkbox, container, path, objectId) {
    // Hide checkbox
    checkbox.style.visibility = "hidden";
    // Show spinner
    var old_background = container.style.background;
    container.style.background = "url(/img/spinner.gif) no-repeat center";
    // Run AJAX
    if (checkbox.checked) visible = 1; else visible = 0;
    params = objectId + "/" + visible;
    run(path + params, "", function() { set_visibility_done(checkbox, container, old_background) });
  }

  function set_visibility_done(checkbox, container, old_background) {
    // Hide spinner
    container.style.background = old_background;
    // Show checkbox
    checkbox.style.visibility = "visible";
  }

	//
	// --- END: Remote helpers ---
	//


	//
	// --- BEGIN: class="standard sortable" ---
	//

	function rowClick(objRow) {
		if (objRow.className.indexOf("clicked") > -1) {
			objRow.className = objRow.className.replace("clicked", "");
		} else {
			objRow.className += " clicked";
		}
	}

	//
	// --- END: class="standard sortable" ---
	//


	//
	// --- BEGIN: Viewlets ---
	//

	function beginContent (user, partialResults) { }
	function endContent (time, completed, timedOut) { }
	function beginQuestion (questionid) { }
	function endQuestion (questionid, correct, points, attempts, time, timedOut) { }
	function addAnswer (questionid, choiceid, answerid, correct) { }

	//
	// --- END: Viewlets ---
	//


	//
	// --- BEGIN: File Upload ---
	//

	function setImages(strImages, strUniqueID) {
		var objDIV = $("itemimages");
		var arrImages = strImages.split(";");
		var strHTML = "";
		var intID = 0;

		for (intKey=0;intKey<arrImages.length;intKey++) {
			strImage = arrImages[intKey];
			if (strImage != "") {
				strHTML += "<li id=\"image_" + intID + "\">\n";
				strHTML += "	<img src=\"/img/shops/items/thumbnails/" + strImage + "\" border=\"0\" /><br />\n";
				strHTML += "	<a href=\"#\" onclick=\"ifrUpload.location.href='/admin/products/image_remove/?image=" + strImage + "&unique_id=" + strUniqueID + "';return false;\">" + lang["Delete"] + "</a>\n";
				strHTML += "</li>\n";
				intID++;
			}
		}

		objDIV.innerHTML = strHTML;

		Sortable.create('itemimages', {onUpdate:sortImages, constraint:'horizontal', containment:['itemimages']});
	}

	function sortImages() {
		$("imagelist").value = Sortable.sequence($("itemimages"));
	}

	function showImage(strImage) {
		var strPreviewURL = "/img/shops/items/preview/" + strImage;
		var strFullURL = "/img/shops/items/full/" + strImage;
		$("productimage_link").href = strFullURL;
		$("productimage").src = strPreviewURL;
	}

	//
	// --- END: File Upload ---
	//


	//
	// --- BEGIN: Ajax ---
	//

	/*function URLencode(strURL) {
		var strEncoded = escape(strURL);
		strEncoded = strEncoded.replace("+", "%2B");
		strEncoded = strEncoded.replace("/", "%2F");

		return strEncoded;
	}*/

	function run(strURL, strParams, objSuccess) {
		var objError = function(t) { alert('Error ' + t.status + ' -- ' + t.statusText); }
		new Ajax.Request(strURL, {method:'post', postBody:strParams, onSuccess:objSuccess, onFailure: objError});
		//objAjax = new Ajax.Updater({success: strContainer}, strURL, {method: 'get', parameters: strParams, onFailure: reportError});
		//getInsidePage('" + strURL + "', '" + strParams + "', '" + strContainer + "');", 500);
	}

  function update(strContainer, strURL, strParams) {
    new Ajax.Updater({success: strContainer}, strURL, {method: 'get', parameters: strParams, onFailure: reportError});
  }

	function getInsidePage(strURL, strParams, strContainer) {
		objAjax = new Ajax.Updater({success: strContainer}, strURL, {method: 'get', parameters: strParams, onFailure: reportError});
		setTimeout("showInsidePage('" + strContainer + "');", 500);
	}

	function showInsidePage(strContainer) {
		Effect.Appear(strContainer,{duration:0.5});
	}

	function reportError(request) {
		alert(lang["CouldNotGetPage"]);
	}

	//
	// --- END: Ajax ---
	//



	//
	// --- BEGIN: Collections ---
	//

  // function addCollection(locale_id) {
  //  if (checkCollections()) {
  //    var strTitle = Prompt.show(lang["CollectionEnterTitle"]);
  //    var objSuccess = function(t) { updateCollections(t); }
  // 
  //    if (strTitle) {
  //      run("/admin/collections/save/", "title=" + strTitle + "&locale_id=" + locale_id, objSuccess);
  //    }
  //  } else {
  //    alert(lang["NoMoreCollections"]);
  //  }
  // }
  // 
  // function editCollection(strCID, strTitle) {
  //  var strTitle = Prompt.show(lang["CollectionEdit"] + " " + strTitle);
  //  var objSuccess = function(t) { updateCollections(t); }
  //  if (strTitle) run("/admin/collections/update/" + strCID, "title=" + strTitle, objSuccess);
  // }
  // 
  // function deleteCollection(strCID, strTitle) {
  //  if (confirm(lang["ConfirmDelete"])) { 
  //    var objSuccess = function(t) { updateCollections(t); }
  //    if (strTitle) run("/admin/collections/delete/" + strCID, "", objSuccess);
  //  }
  // }

	function updateCollections(objTransport, arrCollections) {
		if (typeof arrCollections == 'undefined' && document.frmProduct) {
			var arrCollections = new Array();
			var objElements = document.frmProduct.elements;
			var intCount = 0;
			for(intID=0;intID<objElements.length;intID++) {
				if (objElements[intID].name == "collections[]") {
					strCID = objElements[intID].id;
					strCID = strCID.replace("collection", "");
					if (objElements[intID].checked) arrCollections[intCount] = strCID;
					intCount++;
				}
			}
		}

		var objUL = $("collectionlist");
		objUL.innerHTML = objTransport.responseText;

		if (typeof arrCollections != 'undefined') {
			for (intKey=0;intKey<arrCollections.length;intKey++) {
				strCollectionID = arrCollections[intKey];
				var objCollection = $("collection" + strCollectionID);
				if (objCollection) objCollection.checked = true;
			}
		}

    facebox.initialize();
	}

	function getCollections(arr_collections, locale_id) {
		run("/admin/collections/index_ajax/" + locale_id, "", function(t) { updateCollections(t, arr_collections); });
	}

  function saveCollection(title, parent_id, id) {
    facebox.close();
    run("/admin/collections/save_ajax/" + id, "title=" + title + "&parent_id=" + parent_id + "&locale_id=" + $("input_Product_LocaleID").value, function(t) { updateCollections(t); });
    return false;
  }

  function deleteCollection(id) {
    if (fncDelete()) {
      run("/admin/collections/delete_ajax/" + id, "", function(t) { updateCollections(t); });
    }
    return false;
  }

  // function markCollection(strID, blnMark) {
  // }
  // 
  // function checkCollections() {
  //  return $("max_collections").value >= $("collectionlist").innerHTML.split("collections[]").length - 1
  // }

	//
	// --- END: Collections ---
	//

	//
	// --- START: Variations ---
	//

	//
	// CLASS: Variations
	//

	function Variations(varContainer, varHeaders, varCheckout) {
		// Variables

		var intVarCount  = -1;
		var intVarActive = -1;
		var arrVariations = new Array();
		var objContainer = $(varContainer);
		var arrHeaders = varHeaders;
		var blnCheckout = (varCheckout == 1);

		// Methods

		this.add    = add;
		this.remove = remove;
		this.update = update;
		this.render = render;

		function add(varValues) {
			if ($("max_variations").value > (intVarActive+1)) {
				update();
				intVarCount++;
				intVarActive++;
				arrVariations[intVarCount] = varValues;
				//arrVariations[intVarCount][7] = 1; // tracking = true
				arrVariations[intVarCount][7] = 0; // deleted = false
				render();
			} else {
				alert(lang["NoMoreVariations"]);
			}
		}

		function remove(varID) {
			if (intVarActive > 0) {
				intVarActive--;
				arrVariations[varID][7] = 1;
				update();
				render();
			}
		}

		function update(varMax) {
			for (intID=0;intID<intVarCount+1;intID++) {
				if (arrVariations[intID][7] == 0) {
					for (intField=2;intField<7;intField++) {
						objElement = $("var_" + intField + "_" + intID);
						arrVariations[intID][intField] = objElement.value;

						/*if (objElement.type == "checkbox") {
							arrVariations[intID][intField] = 0;
							if (objElement.checked) arrVariations[intID][intField] = 1;
						} else {
							arrVariations[intID][intField] = objElement.value;
						}*/
					}
				}
			}
		}

		function render() {
			var strHTML = "";

			strHTML += "<table id=\"tblVariations\">\n";
			strHTML += "<tr>\n";
			strHTML += "	<td>" + arrHeaders[0] + "</td>\n";
			strHTML += "	<td>" + arrHeaders[1] + "</td>\n";
			strHTML += "	<td>" + arrHeaders[2] + "</td>\n";
			strHTML += "	<td>" + arrHeaders[3] + "</td>\n";
			if (blnCheckout) {
				strHTML += "	<td>" + arrHeaders[4] + "</td>\n";
			}
			strHTML += "</tr>\n";

			for (intID=0;intID<intVarCount+1;intID++) {
				oid      = arrVariations[intID][0];
				vrid     = arrVariations[intID][1];
				title    = arrVariations[intID][2];
				price    = arrVariations[intID][3];
				weight   = arrVariations[intID][4];
				quantity = arrVariations[intID][5];
				sku      = arrVariations[intID][6];
				//tracking = arrVariations[intID][7];
				deleted  = arrVariations[intID][7];

				/*
				if (tracking == 1) {
					tracking_checked = "checked";
				} else {
					tracking_checked = "";
				}
				*/

				if (deleted == 1) {
					strHTML += "		<input type=\"hidden\" name=\"var_opid[]\" value=\"" + oid + "\" />\n";
					strHTML += "		<input type=\"hidden\" name=\"var_vrid[]\" value=\"" + vrid + "\" />\n";
					strHTML += "		<input type=\"hidden\" name=\"var_delete[]\" value=\"1\" />\n";
					strHTML += "		<input type=\"hidden\" name=\"var_quantity[]\" value=\"\" />\n";
					strHTML += "		<input type=\"hidden\" name=\"var_option[]\" value=\"\" />\n";
					strHTML += "		<input type=\"hidden\" name=\"var_price[]\" value=\"\" />\n";
					strHTML += "		<input type=\"hidden\" name=\"var_weight[]\" value=\"\" />\n";
					strHTML += "		<input type=\"hidden\" name=\"var_sku[]\" value=\"\" />\n";
					//strHTML += "		<input type=\"hidden\" name=\"var_tracking[]\" value=\"\" />\n";
				} else {
					strHTML += "<tr>\n";
					strHTML += "	<td>\n";
					strHTML += "		<input type=\"hidden\" name=\"var_opid[]\" value=\"" + oid + "\" />\n";
					strHTML += "		<input type=\"hidden\" name=\"var_vrid[]\" value=\"" + vrid + "\" />\n";
					strHTML += "		<input type=\"hidden\" name=\"var_delete[]\" value=\"0\" />\n";
					//strHTML += "		<input type=\"hidden\" id=\"var_4_" + intID + "\" name=\"var_weight[]\" value=\"0\" />\n";
					strHTML += "		<input type=\"text\" id=\"var_2_" + intID + "\" name=\"var_option[]\" value=\"" + title + "\" size=\"25\" class=\"input\" />\n";
					strHTML += "	</td>\n";
					strHTML += "	<td><input type=\"text\" id=\"var_3_" + intID + "\" name=\"var_price[]\" value=\"" + price + "\" size=\"10\" class=\"input\" onkeypress=\"return isNumber(event);\" /></td>\n";
					strHTML += "	<td><input type=\"text\" id=\"var_4_" + intID + "\" name=\"var_weight[]\" value=\"" + weight + "\" size=\"8\" class=\"input\" onkeypress=\"return isNumber(event);\" /></td>\n";
					strHTML += "	<td><input type=\"text\" id=\"var_6_" + intID + "\" name=\"var_sku[]\" value=\"" + sku + "\" size=\"15\" class=\"input\" /></td>\n";
					if (blnCheckout) {
						strHTML += "	<td><input type=\"text\" id=\"var_5_" + intID + "\" name=\"var_quantity[]\" value=\"" + quantity + "\" size=\"5\" class=\"input\" onkeypress=\"return isNumber(event);\" /></td>\n";
						//strHTML += "	<td><input type=\"checkbox\" id=\"var_7_" + intID + "\" name=\"var_tracking[]\" value=\"1\" " + tracking_checked + "/><label for=\"var_7_" + intID + "\">Fylgjast með birgðastöðu</a></td>\n";
					} else {
						strHTML += "		<input type=\"hidden\" name=\"var_quantity[]\" id=\"var_5_" + intID + "\"  value=\"0\" />\n";
						//strHTML += "		<input type=\"hidden\" name=\"var_tracking[]\" id=\"var_7_" + intID + "\"  value=\"0\" />\n";
					}
					strHTML += "	<td>\n";
					strHTML += "		<a href=\"#\" onclick=\"objVariations.remove(" + intID + ");return false;\">" + lang["Delete"] + "</a>\n";
					strHTML += "	</td>\n";
					strHTML += "</tr>\n";
				}
			}

			strHTML += "</table>";

			objContainer.innerHTML = strHTML;
		}
	}

	//
	// --- END: Variations ---
	//


  //
  // --- BEGIN: InSite Editing ---
  // 

  // function make_editable(element) {
  //     // Event.observe(element.id, 'click', function(){edit(element)}, false);
  //     Event.observe(element.id, 'mouseover', function(){showAsEditable(element)}, false);
  //     Event.observe(element.id, 'mouseout', function(){showAsEditable(element)}, false);
  // }

  function show_as_editable(element, clear) {
    if (!clear) {
      Element.addClassName(element, 'editable');
    } else {
      Element.removeClassName(element, 'editable');
    }
  }

  //
  // --- END: InSite Editing ---
  // 


  //
  // --- BEGIN: Form ---
  // 

  function form_field_message(field_id, display) {
    container_element = $("field_" + field_id);
    message_element = $("field_message_" + field_id);
    if (message_element) {
      if (display) {
        message_element.style.visibility = "visible";
        message_element.style.left = (container_element.offsetLeft) + "px";
        message_element.style.top = (container_element.offsetTop + container_element.offsetHeight - 8) + "px";
      } else {
        message_element.style.visibility = "hidden";
      }
    }
  }

  //
  // --- END: Form ---
  // 


  //
  // --- BEGIN: AJAX Popup ---
  // 

  var ajax_popup_close_url = "";

  function center_element(element) {
    element.style.left = parseInt((document.viewport.getDimensions().width / 2) - (element.getDimensions().width / 2)) + "px";
  }

  // function update_ajax_popup_position() {
  //   popup = $("ajax_popup");
  //   if (popup) {
  //     //popup.style.top = popup.cumulativeScrollOffset().top + 40 + "px";
  //     
  //   }
  // }

  function ajax_popup(element, options) {
    if (element) {
      var url = "";
      var params = "ajax=1&";
      var content = false;
      if (!options) options = new Array();

      // Target is a link
      if (typeof(element.href) != "undefined") {
        url = element.href;
      }
      // Target is a form
      else if (typeof(element.action) != "undefined") {
        url = element.action;
        params += element.serialize()
      }
      // Target is container (e.g. div)
      else if (typeof(element.innerHTML) != "undefined") {
        content = element.innerHTML;
        $(element).hide();
        $(element).innerHTML = "";
      }

      // Create overlay
      overlay = $("facebox_overlay");
      if (!overlay) {
        overlay = document.createElement("div");
        Element.extend(overlay);
        overlay.hide();
        overlay.id = "facebox_overlay";
        overlay.addClassName("facebox_overlayBG");
      }

      // Create container
      popup = $("ajax_popup");
      if (!popup) {
        popup = document.createElement("div");
        Element.extend(popup);
        popup.hide();
        popup.id = "ajax_popup";
        //popup.addClassName("round");
      }
      popup.update("");
      popup.addClassName("loading");
      popup.show();

      // Create close button
      close_image = $("ajax_popup_close");
      if (!close_image) {
        close_image = document.createElement("img");
        Element.extend(close_image);
        close_image.hide();
        close_image.id = "ajax_popup_close";
        close_image.src = "/img/zoom/closebox.png";
        if (options["close_url"]) {
          ajax_popup_close_url = options["close_url"];
          close_image.onclick = function() { top.location.href = options["close_url"]; }
        } else {
          close_image.onclick = function() { close_popup(); }
        }
      }

      // Add elements to DOM
      if (!$("facebox_overlay")) {
        document.body.appendChild(overlay);
      }

      if (!$("ajax_popup")) {
        document.body.appendChild(popup);
      }

      if (!$("ajax_popup_close")) {
        document.body.appendChild(close_image);
      }

      // Hide select boxes (IE6 only)
      if (Prototype.Browser.IE6) {
        $A(document.getElementsByTagName('select')).each(function(select) {
          $(select).hide();
        });
      }

      // Show slide rotator (IE only)
      if (Prototype.Browser.IE) {
        if ($("slide_rotator")) {
          $("slide_rotator").hide();
        }
      }

      // Display window
      new Effect.ScrollTo(document.body, {duration: .3});
      new Effect.Appear('facebox_overlay', {duration: .3, to: .9});

      // Get content page
      if (content) {
        $("ajax_popup").innerHTML = content;
        $("ajax_popup").removeClassName("loading");
      } else {
        run(url, params, function(t) {
          $("ajax_popup").innerHTML = t.responseText;
          $("ajax_popup").removeClassName("loading");
          update_cart_summary(t);
        });
      }

      // Positioning
      center_element(popup);

      // Add close button
      close_image.style.left = popup.cumulativeOffset().left + popup.getDimensions().width - 20 + "px";
      close_image.style.top = popup.cumulativeOffset().top - 10 + "px";
      close_image.show();
    }

    return false;
  }

  function close_popup() {
    if (ajax_popup_close_url != "") {
      top.location.href = ajax_popup_close_url;
    } else {
      // Show select boxes (IE6 only)
      if (Prototype.Browser.IE6) {
        $A(document.getElementsByTagName('select')).each(function(select) {
          $(select).show();
        });
      }

      // Show slide rotator (IE only)
      if (Prototype.Browser.IE) {
        if ($("slide_rotator")) {
          $("slide_rotator").show();
        }
      }

      // Hide window
      $("ajax_popup").hide();
      $("ajax_popup_close").hide();

      new Effect.Fade('facebox_overlay', {duration: .3});

      return false;
    }
  }

  //
  // --- END: AJAX Popup ---
  // 


  //
  // --- BEGIN: Shopping Cart ---
  //

  function initialize_cart() {
    if (!$("shopping_cart_custom_design")) {
      cart = $("shopping_cart");
      container = $("header");

      // // Version 1
      // 
      // if (!cart_position) {
      //   cart_position = cart.cumulativeOffset().left;
      // }
      // 
      // if (!cart_position_offset) {
      //   cart_position_offset = document.viewport.getWidth();
      // }
      // 
      // // cart.style.top = -(cart.cumulativeOffset().top) + "px";
      // cart.style.position = "absolute";
      // cart.style.top = "0px";
      // cart.style.left = (cart_position + parseInt((document.viewport.getWidth() - cart_position_offset) / 2)) + "px";

      // Version 2

      if (cart && container) {
        cart.style.top = "0px";
        cart.style.left = container.cumulativeOffset().left + container.getWidth() - cart.getWidth() + "px";
      }
    }
  }

  function update_cart_summary(response) {
    if ($("shopping_cart")) {
      run("/cart/summary", "", function(t) {
        $("shopping_cart").update(t.responseText);
        initialize_corners();
      });
    }
  }

  function open_cart() {
    update_cart_summary();
    // Open cart
    var link = document.createElement("a");
    link.href = "/cart";
    ajax_popup(link);
  }

  // function add_to_cart(element) {
  //   var cart_id = readCookie("cartid");
  //   if (!cart_id) cart_id = "";
  // 
  //   if (typeof(element.href) != "undefined") {
  //     // Get item info from link
  //     var values = new Array();
  //     var query = element.href.substring(element.href.indexOf('?')+1, element.href.length);
  //     var pairs = query.split("&");
  //     pairs.each(function(n) {
  //       args = n.split("=");
  //       values[args[0]] = args[1];
  //     });
  //     var iid  = values["iid"];
  //     var vrid = values["vrid"];
  //     var qid  = 1;
  //   } else {
  //     // Get item info from form
  //     var iid  = element.iid.value;
  //     var vrid = element.vrid.value;
  //     var qid  = element.qid.value;
  //   }
  // 
  //   var params = "iid=" + iid + "&vrid=" + vrid + "&qid=" + qid + "&cartid=" + cart_id + "&ajax=1";
  // 
  //   run("/cart/add", params, function(t) {
  //     open_cart();
  //   });
  // 
  //   return false;
  // }

  // function remove_from_cart(link) {
  //   run(link, "", function(t) {
  //     open_cart();
  //   });
  // 
  //   return false;
  // }

  //
  // --- END: Shopping Cart ---
  //

  //
  // --- BEGIN: Checkout ---
  //

  function update_order_information(element, update_function) {
    params = "";
    // Get form elements
    if (typeof(element) != "undefined") {
      form = element.form;
      params = $(form).serialize();
    }
    // // Submit form
    run("/checkout/save", params, function(t) {
      update_function(t);
      update_cart_summary(t);
    });
  }

  function update_order_details(response) {
    if ($("cartdetails")) {
      set_spinner($("cartdetails"));
      run("/checkout/details", "", function(t) {
        $("cartdetails").update(t.responseText);
      });
    }
  }

  function update_shipping_options(response) {
    if ($("shipping_options")) {
      set_spinner($("shipping_options"));
      run("/checkout/shipping", "", function(t) {
        $("shipping_options").update(t.responseText);
        update_order_details(t);
      });
    }
  }

  function save_order_information(element) {
    update_order_information(element, update_shipping_options);
  }

  function save_shipping_information(element) {
    update_order_information(element, update_order_details);
  }

  function save_order_quantity(element) {
    params = "";
    // Get form elements
    if (typeof(element) != "undefined") {
      form = element.form;
      params = $(form).serialize();
    }
    // // Submit form
    run("/cart/update", params, function(t) {
      open_cart();
    });
  }

  function set_spinner(element) {
    height = element.getHeight();
    element.update("<img src=\"/img/spinner-big.gif\" />");
    element.setStyle("min-height:" + height + "px;");
  }

  //
  // --- END: Checkout ---
  //
