﻿
/*---------------------------------------------------------------------------------------------*/
//  TITLE:          AJAX GLOBAL BASKET ROUTING 
//  DESCRIPTION:    ADDS ITEM TO THE BASKET USING AJAX, [USING ASP.NET MVC/JQUERY]   
//  FRAMEWORKDS:    JQUERY 1.3.2, AND JQUERY.HOVERINTENT
//                                                                          AUTHOR:ASIF NISSAR 
//                                                                          DATE:15/01/2010 
/*---------------------------------------------------------------------------------------------*/

// --------Globals ------------------------
var ITEMSARRAY = [];
var VIR_PATH = "/";
var ROOT = "http://www.microdirect.co.uk";
var jBasket = jQuery.noConflict();
var IE6 = isIE6();
var VALID_PAGE = validPage();
var ITEMS = 0;
var BASKET_DEBUG = false;  
var ADDTOBASKET = false;

// --------- Function calls --------------
jBasket(document).ready(function() {

    loadBasket();
  
});


function loadBasket()
{
  GetBasketXml(); AddToBasket();  RemoveFromBasket(); 
     jBasket(".basket-td-class").hoverIntent({
             sensitivity: 1,            // number   = sensitivity threshold (must be 1 or higher)
             interval: 100,             // number   = milliseconds for onMouseOver polling interval
             over: hoverOverBasket,     // function = onMouseOver callback (required)
             timeout: 1000,             // number   = milliseconds delay before onMouseOut
             out: hoverOutBasket       // function  = onMouseOut callback (required)
           });
}

function GetBasketJson()
{
   jBasket.getJSON(VIR_PATH + "Basket/AjaxGetBasketJson", function(json) {   
        var ul = ""; var total = 0; removeAllLIs()
        var ojson = eval("(" + json + ')');  //TODO INSECURE METHOD OF CONVERTING TO JSON OBJECT ...CHANGE 
        jBasket.each(ojson,function(i,item){
        var dr = item.ItemId+";"+item.Name+";"+item.Quantity+";"+formatCurrency(item.Price);
        ITEMSARRAY.push(setLIClass(BuildAddToBasketLink(dr, item.ProductId),i));
        total = item.Total;
       });	
	   setTimeout('SumBasket(\'' + formatTotal(total) + '\')', 100);  	
   });
}

function GetBasketXml()
{
    var ul = ""; var total = 0; removeAllLIs(); count = 1; ITEMS = 0;

   jBasket.ajax({
        type: "POST",
        dataType: "xml",
        data:{},
        url: VIR_PATH + "Basket/AjaxGetBasketXml",
        success: function(result) {
              jBasket(result).find('SerializableBasket').each(function(){
                    var pId         =  jBasket(this).find('ProductId').text();
                    var itemId      =  jBasket(this).find('ItemId').text();
                    var price       =  jBasket(this).find('Price').text();
                    var q           =  jBasket(this).find('Quantity').text();
                    var name        =  jBasket(this).find('Name').text();
                    var t           =  jBasket(this).find('Total').text();   
                    var datarow     =  itemId + ";" + name + ";" + q + ";" + price;
                    var dataLink    =  BuildAddToBasketLink(datarow, pId);  

                    ITEMSARRAY.push(setLIClass(dataLink, count));
                    count = count + 1; total = t; ITEMS = ITEMS + parseInt(q);

            }); //close each
               setTimeout('jBasket(\'#notificationsLoader\').html(\'(' + ITEMS + ') items\');',10);
               setTimeout('SumBasket(\'' + formatTotal(total) + '\')', 10); 
        }  
   }); // end of ajax call 
}

function AddToBasket()
{   
	jBasket("input.btnajax").click(function() {

	}); //end of clcik function call
}

function ProxyClick(obj)
{

        var productIDValSplitter 	= (obj.id).split("_");
		var productIDVal 			= productIDValSplitter[1];
		var quantity                = jBasket("#Quantity_" + productIDVal).val();
		var dataString              = 'productId=' + productIDVal + "&q=" + quantity;
		
		
		jBasket('#notificationsLoader').html('<img src="/i/basket/spinner.gif">');
		jBasket.ajax({  
		type: "POST",  
		url: VIR_PATH + "Basket/AjaxAddToBasket",  
		data: dataString,  
		success: function(result) {  

            try 
            {
                var splitdata = result.split(";");   //split string into productId, itemId,name, items, totalprice, basktet quantity
                ITEMS = parseInt(splitdata[5]); 
		        var itemId = "id='itemID_" + splitdata[0] + "'";
		        appendLIs(itemId, BuildAddToBasketLink(result,productIDVal));
			    setTimeout('SumBasket(\'' + splitdata[4] + '\')', 100);  
			    setTimeout('jBasket(\'#notificationsLoader\').html(\'(' + ITEMS + ') items\');',1000);
			    setTimeout('hoverOverBasket()', 1000);
			    setTimeout('hoverOutBasket()', 4000);
			    setTimeout('scrollTo(0,0)', 1000);
            }
            catch(e) 
            {
                 if(BASKET_DEBUG) { alert("error in add to basket " + e.Message); }
            }
		  
		}  
		}); // end of ajax call 
	 
    return false;
}

function RemoveFromBasket()
{
    try 
    {
        jBasket("#basket-inner li a").live("click", function(event) { 
 													
            var itemIDValSplitter 	= (this.id).split("_");
		    var itemIDVal 			= itemIDValSplitter[1];	
		    var itemId              = "id='itemID_" + itemIDVal + "'";
		    var dataString          = 'itemID=' + itemIDVal; 
         
		    jBasket("#notificationsLoader").html('<img src="/i/basket/spinner.gif">');
		    jBasket.ajax({  
		    type: "POST",  
		    url: VIR_PATH + "Basket/AjaxBasketRemove",  
		    data: dataString,  
		    success: function(result) {	
                removeLI(itemId);   
                var splitdata = result.split(";"); 
                ITEMS = splitdata[1];
			    jBasket("#itemID_" + itemIDVal).hide("slow",  function() {jBasket(this).remove();});
			    setTimeout('jBasket(\'#notificationsLoader\').html(\'(' + ITEMS + ') items\');',1000);
		        setTimeout('SumBasket(\'' + splitdata[0] + '\')', 100); 
		        setTimeout('hoverOutBasket()', 500); 
		    }  
    		
		    });  // end of ajax call 	
	    }); //end of live click function call
	
	}
	catch (e) {  return; }  
}

function BuildAddToBasketLink(data, pId)
{
    try  {
        var splitdata       = data.split(";");   //split string into itemId, name, items, totalprice
        var price           = splitdata[3]; // return the price without the £ sign       
        var description     = shortDesc(splitdata[1], 20);
        var href            = ROOT + "/home/product/" + pId; //+ "/" + splitdata[1];                       
        var linkrow         = "<li id='itemID_" + splitdata[0] + "' class='even'><table><tr>" +
                              "<td class='divider'></td><td class='description'><a href='" + href + "'>" + description +"</a></td>" +
                              "<td class='divider'></td><td class='itemPrice'>£" + price + "</td>" +
                              "<td class='divider'><td class='items'>" + splitdata[2] + "</td>" + 
                              "<td class='divider'></td><td class='delete'>" + "<a id='deleteitemID_" + splitdata[0]+ "'" + "href='' onClick='return false;'>x</a></td>" +
                              "</tr></table></li>";      
        return linkrow;     
    }
    catch (e) 
    { 
      if(BASKET_DEBUG) {   alert("add to basket link error:" + e.message);  }
      return ""; 
    }                
}

function getHeader()
{
    return "<li id='listheader' class='header'><table><tr><td class='divider'></td><td class='description'>Description</td>" +
           "<td class='divider'></td><td class='itemPrice'>Price (£)</td><td class='divider'></td><td class='itemsTitle'>Items</td>" +
           "<td class='divider'></td><td class='delete'>-</td></tr></table></li>";             
}

function appendLIs(itemId, dataRow)
{         
    var update=false;; var pos = -1; var total = ITEMSARRAY.length; 
    if (total == 0) { ITEMSARRAY.push(dataRow); return; }
    jBasket.each(ITEMSARRAY, function(i,val)  { if (val.indexOf(itemId) > 0) { update=true; pos = i;}});  
    if (update) {ITEMSARRAY.splice(pos,1,setLIClass(dataRow, pos)); }
    else { dataRow = setLIClass(dataRow, total); ITEMSARRAY.push(dataRow);  }
}

function removeLI(itemId) 
{ 
    try 
    { 
        var q = 0;
        jBasket.each(ITEMSARRAY, function(i,val)  { 
        if (val.indexOf(itemId) > 0) { ITEMSARRAY.splice(i, 1); }}); 
    } catch (e) {  if(BASKET_DEBUG) { alert("remove error" + e); } } 
    
}
function removeAllLIs() { jBasket.each(ITEMSARRAY, function(i,val) { ITEMSARRAY.pop(); }); }
function getLIs(){ var li="";  jBasket.each(ITEMSARRAY, function(i,val) { li = li + val; }); return (li != "") ? (getHeader() + li): "";}
function setLIClass(val, i){ try { var check = isEven(i); if (!check){ var t = val.replace("class='even'", "class='odd'"); return t;} return val; } catch (e) { return  val; }}
function hoverOverBasket() { var li=getLIs(); var menu = jBasket(".basket-inner-class");   menu.html(""); if(li != "") { if((!IE6) && (VALID_PAGE)) { menu.append(li); menu.slideDown(); } } }
function hoverOutBasket() { var menu = jBasket(".basket-inner-class");  if(!IE6) { menu.slideUp(); }  }
function SumBasket(t) {  jBasket("#total_basket").html('total:' + t);   }
function formatTotal(t) { try {  var isNum = parseInt(t); if (isNum == 0) { return "£0.00"; } return t;} catch (e) { return t; }}
function isEven(i) {try { return (i%2 == 0) ? true : false; } catch (e) { return true; }}
function shortDesc(s, count){ try {if (s.length > count) { return s.substr(0, count); } return s; }  catch(e) { return s; }}
function formatCurrency(c) {try {var total = c.toFixed(2); return total;} catch(e) { return c; }}
function isIE6(){return ((window.XMLHttpRequest == undefined) && (ActiveXObject != undefined));}
function validPage(){try {var sPath = window.location.pathname.toLowerCase();var sPage = sPath.substring(sPath.lastIndexOf('/') + 1);switch(sPage){case "basket":return false;case "checkout":return false;default:return true;} }catch(e) { return false; } }

















