      
        // Change apperance in the frontpage calculator
        function ChangeProductView( o ) 
        {
            var ChosenIndex = o.value;
            ChosenProduct = ProductsCollection[ChosenIndex]; // ChosenProduct is defined in firmafrugtcalculatorfrontpage.xslt
                                   
            var ProductTitle = document.getElementById( 'ProductTitle' );
            var ProductAbstract = document.getElementById( 'ProductAbstract' );
            var ProductImage = document.getElementById( 'ProductImage' );
            var ProductDescription = document.getElementById( 'ProductDescription' );

            ProductTitle.innerHTML = ChosenProduct[2];
            ProductAbstract.innerHTML = ChosenProduct[3];
            ProductImage.src = ChosenProduct[5];
            ProductImage.title = ChosenProduct[3];
            
            document.getElementById('ChosenProductPrice').value = ChosenProduct[1];
        }
        
        // Get amount of fruit needed for the employee count request
        function CalculateAmountInKG(isAdult)
        {
            if (isAdult == null)
            {  isAdult = document.getElementById('rb_adults').checked;  }
            
            var CountDaysInWeek = 5;
            var OneKgFruitInItems = 7;
            var oCountEmployees = document.getElementById( 'CountEmployees' );
            if ( !Number ( oCountEmployees.value ) )
            {
                oCountEmployees.value = 0;
                return;
            }
            var PiecesOfFruitPerWeek = ( isAdult) ? Number ( oCountEmployees.value ) * CountDaysInWeek : Math.ceil ( Number ( oCountEmployees.value ) / 2 ) * CountDaysInWeek;
            
            if ((PiecesOfFruitPerWeek / OneKgFruitInItems % 5) != 0)
                return Math.floor((PiecesOfFruitPerWeek / OneKgFruitInItems)-(((PiecesOfFruitPerWeek / OneKgFruitInItems) % 5)-5));
            else
                return Math.floor(PiecesOfFruitPerWeek / OneKgFruitInItems);
         
        }

        // Get result and present it in the small Calculator
        function CalculateAmountSmall( isAdult )
        {
            var NeededKg = CalculateAmountInKG( isAdult );
            if ( !NeededKg ) return;
            var oCalculatoresult = document.getElementById( 'Calculatoresult' );
            var oResultLine = document.getElementById( 'ResultLine' );
            var oResultLinePrice = document.getElementById( 'ResultLinePrice' );
            var ResultLineDetails = document.getElementById( 'ResultLineDetails' );
            
            
            ResultLineDetails.innerHTML = ResultLineText.replace ( '{0}' , NeededKg );
            oResultLinePrice.innerHTML = ResultLinePriceText;
            oCalculatoresult.style.display = 'block';
        }


        // Get result and present it in the frontpage Calculator    
        function CalculateAmount( isAdult )
        {         
              
            var NeededKg = CalculateAmountInKG( isAdult );            
            var MultipleBoxesExtension = '';
            var oBoxesNeeded = document.getElementById( 'BoxesNeeded' );
            var oProductWeight = document.getElementById( 'ProductWeight' );
            var oProductPrice = document.getElementById( 'ChosenProductPrice' ).value;
            var oCalculatoresult = document.getElementById( 'Calculatoresult' );
            var oResultLine = document.getElementById( 'ResultLine' );
            var oResultLinePrice = document.getElementById( 'ResultLinePrice' );
            var ResultLineDetails = document.getElementById( 'ResultLineDetails' );
            var ResultLineDetailsError = document.getElementById( 'ResultLineDetailsError' );
            var ResultLineLabel = document.getElementById( 'ResultLineLabel' );
            var NextBtn = document.getElementById('but_Next');
            
            var DisplayedKg = 0;
            var ProductWeight = ChosenProduct [ 6 ];

            
            // Get Appopriate box size
            var BoxesNeeded = 0;
            
            if ( NeededKg != undefined )
            {
                if ( NeededKg <= ProductWeight )
                {
                    BoxesNeeded = 1;
                    MultipleBoxesExtension = '';
                    DisplayedKg = ProductWeight;
                }
                else
                {
                    MultipleBoxesExtension = 'r';
                    // Simple calc to get the amount of boxes;
                    BoxesNeeded = Math.round ( NeededKg / ProductWeight );
                                                    
                    DisplayedKg = ( ProductWeight % NeededKg > 0 ) ? ( ProductWeight * BoxesNeeded ) : ProductWeight;
                }    
                
                // DisplayResult;                  
                ResultLineDetails.innerHTML = '';
                if (ChosenProduct [ 7 ] == ItemNumber_BasisFrugtkasse5kg ||
                    ChosenProduct [ 7 ] == ItemNumber_DenGroenneFrugtkasse5kg)
                {
                    // Basis eller Den Groenne Frugtkasse 
                    if (BoxesNeeded / 2 >= 1)
                    {
                      var quantityLarge = (BoxesNeeded - (BoxesNeeded % 2))/2;
                      MultipleBoxesExtension = '';
                      var prodPriceLarge = Price_BasisFrugtkasse10kg;
                      if (ChosenProduct [ 7 ] == ItemNumber_DenGroenneFrugtkasse5kg)
                        prodPriceLarge = Price_DenGroenneFrugtkasse10kg;
                      if (quantityLarge > 1)
                        MultipleBoxesExtension = 'r';
                      var priceLarge = Math.round(prodPriceLarge * quantityLarge);
                      
                      ResultLineDetails.innerHTML += ResultLineText.replace( '{0}', quantityLarge).replace( '{1}' , ProductWeight*2 ).replace( '{2}' , MultipleBoxesExtension ).replace( '{3}' , FormatStrToCurrency(priceLarge));
                      alert((priceLarge == NaN));
                      document.getElementById( 'ChosenProductCountBoxesLarge' ).value = (BoxesNeeded - (BoxesNeeded % 2))/2;
                    }
                    if (BoxesNeeded % 2 != 0)
                    {
                      MultipleBoxesExtension = '';
                      if (ResultLineDetails.innerHTML != '')
                        ResultLineDetails.innerHTML += '<br/>';
                      ResultLineDetails.innerHTML += ResultLineText.replace( '{0}', 1 ).replace( '{1}' , ProductWeight ).replace( '{2}' , MultipleBoxesExtension ).replace( '{3}' , FormatStrToCurrency(oProductPrice));
                      document.getElementById( 'ChosenProductCountBoxes' ).value = 1;
                      oResultLinePrice.innerHTML = ResultLinePriceText;
                    }
                    else
                      document.getElementById( 'ChosenProductCountBoxes' ).value = 0;
                }
                else
                {
                    // Stor frugtkasse (there's only a 6 kg's version, so use the old code here
                    var Price = oProductPrice * BoxesNeeded;
                    Price = Math.round ( Price );
                    document.getElementById( 'ChosenProductCountBoxes' ).value = BoxesNeeded;
                    ResultLineDetails.innerHTML = ResultLineText.replace( '{0}', BoxesNeeded ).replace( '{1}' , ProductWeight ).replace( '{2}' , MultipleBoxesExtension ).replace( '{3}' , FormatStrToCurrency(Price));
                    oResultLinePrice.innerHTML = ResultLinePriceText;
                }
                
                oCalculatoresult.style.display = 'block';

                ResultLineLabel.style.display = 'block';
                ResultLineDetails.style.display = 'block';
                ResultLineDetailsError.style.display = 'none';
                // Show 'To Order Page' button
                NextBtn.style.display = 'block';
                
                // Transfer Product to Hiddenfields
                document.getElementById( 'ChosenProductId' ).value = ChosenProduct [ 0 ];
                document.getElementById( 'ChosenProductItemNumber' ).value = ChosenProduct [ 7 ];
            }
            else
            {
                // Undefined calculateAmount() result
                // DisplayResult;                  
                ResultLineLabel.style.display = 'none';
                ResultLineDetails.style.display = 'none';
                ResultLineDetailsError.style.display = 'block';
                oResultLinePrice.innerHTML = "";
                oCalculatoresult.style.display = 'block';
                
                // Hide 'To Order Page' button
                NextBtn.style.display = "none";
            }
        }
        
   		// Works on Array: SubscriptionEntriesCollection
   		// [item[SubscriptionNo, entries[Quantity, WeekNo], ..], ..]
		function SerializeSubscriptionFor8weeksCollection(SubscriptionEntriesCollection)
		{
		    var xml = '<SubscriptionEntriesCollection>';
    		for (var i=0; i < SubscriptionEntriesCollection.length; i++)
	    	{
		        xml+= '<item>';
        		xml+=   '<WeekNo>' + SubscriptionEntriesCollection[i][0] + '</WeekNo>';
		        xml+= '<entries>';
		        
        		for (var ii=1; ii < SubscriptionEntriesCollection[i].length; ii++)															   
                {
		            xml+= '<entry>';
            		xml+=   '<Quantity>' + SubscriptionEntriesCollection[i][ii][0] + '</Quantity>';
            		xml+=   '<SubscriptionNo>' + SubscriptionEntriesCollection[i][ii][1] + '</SubscriptionNo>';
            		xml+= '</entry>';
                }
		        xml+= '</entries>';
        		xml+= '</item>';
            }
		    xml+= '</SubscriptionEntriesCollection>';
            
            return xml
		}


        // Client helper object
        var Client = new function(){
	        this.Helper = new Object();		
        }

        /* START keyboard utilities */
        // Evaluates if the Enter button has been pressed in the current event
        Client.Helper.EnterPressed = function() {
            return ((window.event ? event.keyCode : event.which) == 13 ? true : false);
        }
        // Stops the event from going any further
        Client.Helper.StopEvent = function(event){
	        event = event ? event : window.event;
	        if(event.preventDefault){event.preventDefault();}
	        if(event.stopPropagation){event.stopPropagation();}
	        event.returnValue = false;
	        event.cancelBubble = true;
        }
        /* END keyboard utilities */

        /* START type utilities */
        // Check that a string contains only numbers
        Client.Helper.IsNumeric = function(value) {
            if (value == null || value == "") 
                return false;
            if (value.search)
                return (value.search(/\D/) == -1);
            return true;
        }
        // Checks if a string is a GUID
        Client.Helper.IsGUID = function(string) {
            if(null != string && 36 == string.length && "-" == string.substr(8,1) && "-" == string.substr(13,1) && "-" == string.substr(18,1) && "-" == string.substr(23,1))
                return true;    
            else
                return false;
        }
        // Gets the date is DD/MM/YYYY format
        Client.Helper.GetPresentationDate = function(value) {
            var date = Client.Helper.GetISODate(value);
            if (date.length > 0)
            {
                var year = date.substring(0, 4);
                var month = date.substring(4, 6);
                var day = date.substring(6, 8);
                return day + "/" + month + "/" + year;
            }
            return "";
        }
        // Gets the date in YYYYMMDDHHmm format
        Client.Helper.GetISODate = function(value)
        {
            // ISO Signature - must be checked with RegEx
            if (Client.Helper.IsNumeric(value) && value.length == 14)
                return value;
            
            // Streamlines the format to either pure ciffers or '/' dillimiters
            var date = value.replace(/\./g, "/")
            date = date.replace(/-/g, "/");
            var time = "000000";
                
            // Validate brazilian date formats: dd/mm/yyyy or d/m/yy or d.m.yyyy with separators: . - / Valid dates only! d (1-31)/ m (1-12)/ y (0..) (rizzipereira.com.br) For American date format: http://www.regexlib.com/REDetails.aspx?regexp_id=932 
            // Matches: 10/03/1979|||1-1-02|||01.1.2003 
            // Non-Matches: 10/03/197|||09--02--2004|||01 02 03 
            if (date.match(/^([0]?[1-9]|[1|2][0-9]|[3][0|1])[./-]([0]?[1-9]|[1][0-2])[./-]([0-9]{4}|[0-9]{2})$/))
            {
                var dateArr = date.split('/');
                var year = Client.Helper.GetYear(dateArr[2]);
                var month = Client.Helper.GetDayMonth(dateArr[1]);
                var day = Client.Helper.GetDayMonth(dateArr[0]);
                return year + month + day + time;
            }
            
            // Description: Matches dates with the following format Month - either MM (like 01) or M (like 1) - from 1 to 12 Day - either DD (like 01) or D ( like 1) - from 1 to 31 Year - either YYYY ( like 1998) or YY (like 98) Separater - either - or / 
            // Matches: 11-02-02|||1-25-2002|||01/25/2002 
            // Non-Matches: 13-02-02|||11.02.02|||11/32/2002 
            if (date.match(/^([1][12]|[0]?[1-9])[\/-]([3][01]|[12]\d|[0]?[1-9])[\/-](\d{4}|\d{2})$/))
            {
                var dateArr = date.split('/');
                var year = Client.Helper.GetYear(dateArr[2]);
                var month = Client.Helper.GetDayMonth(dateArr[0]);
                var day = Client.Helper.GetDayMonth(dateArr[1]);
                return year + month + day + time;
            }
            
            // This expression validates dates in the y/m/d format from 1600/1/1 - 9999/12/31. 
            // Matches: 04/2/29|||2002-4-30|||02.10.31 
            // Non-Matches: 2003/2/29|||02.4.31|||00/00/ 
            if (date.match(/^(?:(?:(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00)))(\/|-|\.)(?:0?2\1(?:29)))|(?:(?:(?:1[6-9]|[2-9]\d)?\d{2})(\/|-|\.)(?:(?:(?:0?[13578]|1[02])\2(?:31))|(?:(?:0?[1,3-9]|1[0-2])\2(29|30))|(?:(?:0?[1-9])|(?:1[0-2]))\2(?:0?[1-9]|1\d|2[0-8]))))$/i))
            {
                var dateArr = date.split('/');
                var year = Client.Helper.GetYear(dateArr[0]);
                var month = Client.Helper.GetDayMonth(dateArr[1]);
                var day = Client.Helper.GetDayMonth(dateArr[2]);
                return year + month + day + time;
            }
            
            return "";
        }
        
        Client.Helper.GetYear = function(value) { return (value.length == 2 ? (value > 50 ? "19" + value : "20" + value) : value); }
        Client.Helper.GetDayMonth = function(value) { return (value.length == 1 ? ("0" + value) : value); }
        /* END type utilities */

        /* START browser utilities */
        Client.Helper.IExplorer = function(){
	        return (document.all ? true : false);
        }
        Client.Helper.Safari = function(){
	        return (navigator.appVersion.indexOf("Safari") >= 0 ? true : false);
        }
        Client.Helper.Firefox = function(){
	        return (navigator.userAgent.indexOf("Firefox") >= 0 ? true : false);
        }
        /* END browser utilities */

        /* START position utilities */
        Client.Helper.AbsoluteLeft = function(e){
	        if(Client.Helper.safari() && e.nodeName == "TR"){
		        return e.getElementsByTagName("TD")[0].offsetLeft + Client.Helper.absoluteLeft(Client.Helper.getParentTag("TABLE",e));
	        }else if(e.offsetParent){
		        return e.offsetLeft + Client.Helper.absoluteLeft(e.offsetParent);
	        }
	        return e.offsetLeft;
        } 
        Client.Helper.AbsoluteTop = function(e){
	        if(Client.Helper.safari() && e.nodeName == "TR"){
		        return e.getElementsByTagName("TD")[0].offsetTop + Client.Helper.absoluteTop(Client.Helper.getParentTag("TABLE",e));
	        }else if(e.offsetParent){
		        return e.offsetTop + Client.Helper.absoluteTop(e.offsetParent);
	        }
	        return e.offsetTop;
        }
        Client.Helper.DocumentWidth = function(){
	        var width;
	        if(self.innerHeight){
		        width = self.innerWidth;
	        }else if(document.documentElement && document.documentElement.clientHeight){
		        width = document.documentElement.clientWidth;
	        }else if(document.body){
		        width = document.body.clientWidth;
	        }
	        return width;
        }
        Client.Helper.DocumentHeight = function(){
	        var height;
	        if(self.innerHeight){
		        height = self.innerHeight;
	        }else if(document.documentElement && document.documentElement.clientHeight){
		        height = document.documentElement.clientHeight;
	        }else if(document.body){
		        height = document.body.clientHeight;
	        }
	        return height;
        }
        /* END position utilities */

        /* START DOM utilities */
        Client.Helper.GetParentByTagName = function(tagName, element){
	         if(element.nodeName != tagName && element.nodeName != "BODY"){
		          element = Client.Helper.GetParentByTagName(tagName,element.parentNode);
	         } 
	         return element;
        }

        Client.Helper.GetElementsByClassName = function(classname, content){
	        var element, i, elements;
	        var returnArray = new Array();
	        elements = (typeof(content) == "string" ? document.getElementById(content).getElementsByTagName("*") : content.getElementsByTagName("*"));
	        elements = (elements.length ? elements : (Client.Helper.IExplorer() ? document.all : elements));
	        var regexp = new RegExp("(^|\\s)" + classname + "(\\s|$)");	
	        for(i = 0;(element = elements[i]); i++){
		        if(regexp.test(element.className)){
			        returnArray[returnArray.length] = element;
		        }
	        }
	        return returnArray;
        }

        Client.Helper.GetElementById = function(id){
	        return document.getElementById(id);
        }
        Client.Helper.GetFramesetElementById = function(id){
	        return window.top.document.getElementById(id);
        }

        Client.Helper.GetElementsByAttribute = function(attribute, content){
	        var element, i, elements;
	        var returnArray = new Array(); 
	        elements = (typeof(content) == "string" ? Client.Helper.GetElementById(content).getElementsByTagName("*") : content.getElementsByTagName("*"));
	        elements = (elements.length ? elements : (Client.Helper.IExplorer() ? document.all : elements));
	        for(i = 0;(element = elements[i]); i++){
		        if(element.getAttribute(attribute)){
			        returnArray[returnArray.length] = element;
		        }
	        }
	        return returnArray;
        }

        Client.Helper.PreviousRealSibling = function(element, exclude){
	        var regexp, previous;
	        exclude = typeof(exclude) != "undefined" ? exclude : false;
	        regexp = new RegExp("(^|\\s)" + exclude + "(\\s|$)");	
	        previous = element.previousSibling;
	        if(exclude){
		        while(previous && (previous.nodeType == 3 || previous.className.match(regexp) || previous.nodeName == exclude)){
			        previous = previous.previousSibling;
		        }
	        }else{
		        while(previous && previous.nodeType == 3){
			        previous = previous.previousSibling;
		        }
	        }
	        return previous;
        }

        Client.Helper.NextRealSibling = function(element, exclude){
	        var regexp, next;
	        exclude = typeof(exclude) != "undefined" ? exclude : false;
	        regexp = new RegExp("(^|\\s)" + exclude + "(\\s|$)");	
	        next = element.nextSibling;
	        if(exclude){
		        while(next && (next.nodeType == 3 || next.className.match(regexp) || next.nodeName == exclude)){
			        next = next.nextSibling;
		        }
	        }else{
		        while(next && next.nodeType == 3){
			        next = next.nextSibling;
		        }
	        }
	        return next;
        }
        /* END DOM utilities */

        /* START List utilities */

        Client.Helper.GetSelectedItem = function(element)
        {
            if(null == element)
                return null;
                
            var iterator = null;
            var currentlySelected = null;
            
            if("table" == element.nodeName.toLowerCase())
            {
                iterator = element.firstChild;
            }
            else if("tr" == element.nodeName.toLowerCase())
            {
                iterator = element.parentNode.firstChild;
            }
            
            if(null == iterator || "tr" != iterator.nodeName.toLowerCase())
            {
                return null;
            }
            
            while(null != iterator)
            {
                if(null != iterator.attributes["class"] && iterator.attributes["class"].value.indexOf("selected") != -1)
                {
                    currentlySelected = iterator;
                    break;
                }   
                
                iterator = Client.Helper.NextRealSibling(iterator);
            }
            
            return currentlySelected;
        }

        /* END List utilities */
        
        // Output: nnn,nn
        function FormatStrToCurrency(currencyStr)
        {
            currencyStr = currencyStr.toString().replace('.',',');

            if (currencyStr.indexOf(',') == -1)
                currencyStr  += ',00';
            else if (currencyStr.indexOf(',') == currencyStr.length-2)
                currencyStr  += '0';
            else if (currencyStr.indexOf(',') <= currencyStr.length-4)
            {
                   // Round up
                   currencyStr = currencyStr + 0.005;
                   currencyStr = currencyStr.substring(0, currencyStr.indexOf(',')+3);
            }            
                
            return currencyStr;
        }
        
        function ShowAjaxHourGlass(id)
        {
            if (document.getElementById(id) != null)
            {
                document.getElementById(id).className = '';
            }
        }
        
        /* This function is not used because there are issues with evalScripts and AJAX */
        function OutputAjaxTimerHTML(element)
        {
            if (document.getElementById(element))
            {
                document.getElementById(element).innerHTML = 
                    "<div style=\"height:1px; border:none; width:2px; float:left;\"></div>" +
			        "<div id=\"ajax_loading\" class=\"hideAjaxLoader\"" +
			        "style= \"height: 0px; border: 0px; position: relative; left: 245px; top: 10px; \">" +
				    "<img src=\"/images/firmafrugt/ajax-loader_big.gif\"/>" +
			        "</div>" +
			        document.getElementById(element).innerHTML;
            }
        }
        
        var dragapproved = false;
	    var z,x,y	
	    function move()
	    {
		    if ( event.button == 1 && dragapproved ){
			    z.style.pixelLeft = temp1 + event.clientX - x;
			    z.style.pixelTop = temp2 + event.clientY - y;
			    return false
		    }
	    }
    	
	    function drag()
	    {
		    var oNode = window.event.srcElement;
    		
		    if (oNode.className == 'dragable' || oNode.parentNode.className == 'dragable')
		    {
		        z = (oNode.className == 'dragable') ? oNode : oNode.parentNode;
                
			    dragapproved = true;
			    z.style.position = 'absolute'; 
			    //z.className = 'dragged';
			    z.style.zIndex = '1';

			    temp1 = z.offsetLeft;
			    temp2 = z.offsetTop;
			    x = event.clientX;
			    y = event.clientY;

			    document.onmousemove = move;
		    }
	    }