﻿Type.registerNamespace("PhotoSite.Framework");PhotoSite.Framework.CartItemSyncData=function(){};PhotoSite.Framework.CartItemSyncData.prototype={_groupID:null,_quantity:null,_options:null,_subItems:null,_objectRef:null,_lastSyncFrame:0,_readyForSync:false,_syncInProgress:false,_needsSync:false,createFromCartItem:function(A){this._groupID=A.GroupID;this._createFromObject(A);this._evaluateSubItems(A);},_createFromSubItem:function(A){this._createFromObject(A);},_createFromObject:function(A){this._encID=A.EncID;this._quantity=A.Quantity;this._objectRef=A;this._evaluateOptions(A);},_evaluateSubItems:function(B){if(B.SubItems){this._subItems=new Array();for(var C=0;C<B.SubItems.length;C++){var A=new PhotoSite.Framework.CartItemSyncData();A._createFromSubItem(B.SubItems[C]);this._subItems.push(A);}}},_evaluateOptions:function(B){this._options=new Array();for(var A in B){if(!B[A]){continue;}else{if(B[A].__type==="CartItemOptionValue:#PhotoSite.Framework.WebServices.DataModels"){this._options.push({EncOptionID:B[A].EncOptionID,EncOptionValueID:B[A].EncOptionValueID,Name:B[A].Name,Text:B[A].Text,OptionRef:B[A],Option:A});}}}},_getOptionByEncOptionID:function(B){if(this._options){for(var A=0;A<this._options.length;A++){if(this._options[A].EncOptionID==B){return this._options[A];}}}return null;},getObjectReference:function(){return this._objectRef;},getSubItemByRetailerProductID:function(B){if(this._subItems){for(var A=0;A<this._subItems.length;A++){if(this._subItems[A].getObjectReference().EncRetailerProductID==B){return this._subItems[A];}}}return null;},getGroupID:function(){return this._groupID;},getLastSyncFrame:function(){return this._lastSyncFrame;},incrementLastSyncFrame:function(){this._lastSyncFrame++;this._readyForSync=false;this._needsSync=true;},markReadyForSync:function(){this._readyForSync=true;},isReadyForSync:function(){return this._readyForSync;},isSyncInProgress:function(){return this._syncInProgress;},needsSync:function(){return this._needsSync;},hasValidQuantities:function(){if(this._subItems){for(var A=0;A<this._subItems.length;A++){if(this._subItems[A].hasValidQuantities()===true){return true;}}}else{return this._objectRef.Quantity!=0;}return false;},updateDataFromSyncItem:function(A){if(typeof(A.EncID)!=="undefined"&&A.EncID!==null){this._objectRef.EncID=A.EncID;}if(A.Quantity||A.Quantity==0){this._quantity=A.Quantity;}if(A.Options){for(var E=0;E<A.Options.length;E++){var D=A.Options[E];var C=this._getOptionByEncOptionID(D.EncOptionID);for(var G in D){C[G]=D[G];}}}if(A.SubItems){for(var E=0;E<A.SubItems.length;E++){var B=A.SubItems[E];var F=this.getSubItemByRetailerProductID(B.EncRetailerProductID);F.updateDataFromSyncItem(B);}}this._syncInProgress=false;},_createSyncItemOptions:function(D){var B=new Array();for(var E=0;E<this._options.length;E++){var A=this._options[E];var C=this._objectRef[A.Option];if(!D&&(A.EncOptionValueID===C.EncOptionValueID&&A.Text===C.Text)){continue;}B.push({EncOptionID:C.EncOptionID,EncOptionValueID:C.EncOptionValueID,Text:C.Text});}if(B.length>0){return B;}return null;},_createSyncItemSubItems:function(A){var B=new Array();if(this._subItems){for(var D=0;D<this._subItems.length;D++){var C=this._subItems[D].createSyncItem();if(C!=null){B.push(C);}}}if(B.length>0){return B;}return null;},_finalizeSyncItem:function(A){if(this._groupID){A.GroupID=this._groupID;}if(this._objectRef.EncID){A.EncID=this._objectRef.EncID;}if(this._objectRef.ProductType){A.ProductType=this._objectRef.ProductType;}if(this._objectRef.EncRetailerProductID){A.EncRetailerProductID=this._objectRef.EncRetailerProductID;}},createSyncItem:function(E,G){var B=new Object();if(!G){G=false;}if(this._objectRef.Quantity!=this._quantity){B.Quantity=this._objectRef.Quantity;}var A=(!this._objectRef.EncID||this._objectRef.EncID=="")&&this._objectRef.Quantity>0;var C=G;var F=this._createSyncItemOptions(A);var D=this._createSyncItemSubItems(C);if(F!==null){B.Options=F;}if(D!==null){B.SubItems=D;}if(B.Quantity||(B.Quantity==0)||B.Options||B.SubItems){if(B.SubItems&&G){B.UpdateSubItemEncIDs=true;}this._finalizeSyncItem(B);this._syncInProgress=true;this._needsSync=false;return B;}else{return null;}}};PhotoSite.Framework.ShoppingCartSyncManager=function(A){PhotoSite.Framework.ShoppingCartSyncManager.initializeBase(this);this._encUserID=A;};PhotoSite.Framework.ShoppingCartSyncManager.prototype={_encUserID:null,_syncDataItems:null,_syncCartItemDelegate:null,_syncGatherDelegate:null,_syncGatherIntervalID:null,_syncSuccessDelegate:null,_syncErrorDelegate:null,_delaySyncGather:5000,_delaySyncItem:1000,_allowZeroQuantityItems:false,_pendingSyncCount:0,_allowSyncToServer:true,_syncAllSubItemsGroupIDs:null,initialize:function(){this._syncDataItems=new Array();this._syncAllSubItemsGroupIDs=new Array();this._syncCartItemDelegate=Function.createDelegate(this,this._syncCartItem);this._syncGatherDelegate=Function.createDelegate(this,this._syncGather);this._syncSuccessDelegate=Function.createDelegate(this,this._onSyncSuccess);this._syncErrorDelegate=Function.createDelegate(this,this._onSyncError);PhotoSite.Framework.ShoppingCartSyncManager.callBaseMethod(this,"initialize",[this]);},dispose:function(){PhotoSite.Framework.ShoppingCartSyncManager.callBaseMethod(this,"dispose");},_getSyncDataItem:function(A){for(var B=0;B<this._syncDataItems.length;B++){if(this._syncDataItems[B].getGroupID()==A){return this._syncDataItems[B];}}return null;},_onSyncSuccess:function(A){for(var B=0;B<A.length;B++){var E=this._getSyncDataItem(A[B].GroupID);if(!E){continue;}E.updateDataFromSyncItem(A[B]);this.raiseEvent("syncCartItemSuccess",E.getObjectReference());if(A[B].SubItems){for(var C=0;C<A[B].SubItems.length;C++){var D=E.getSubItemByRetailerProductID(A[B].SubItems[C].EncRetailerProductID);this.raiseEvent("syncSubItemSuccess",{CartItem:E.getObjectReference(),SubItem:D.getObjectReference()});}}if(E.needsSync()==false){Array.remove(this._syncDataItems,E);}}this._pendingSyncCount--;},_onSyncError:function(C,B,A){this.raiseEvent("cartItemSyncError",C);this._pendingSyncCount--;},_syncGather:function(){if(this._allowSyncToServer==false){return;}var E=new Array();var A=false;var D=new Array();for(var F=0;F<this._syncDataItems.length;F++){var G=this._syncDataItems[F];if(G.isReadyForSync()&&G.isSyncInProgress()==false){if(this._allowZeroQuantityItems==false){if(G.hasValidQuantities()==false){continue;}}this.raiseEvent("syncCartItem",G.getObjectReference());var C=Array.contains(this._syncAllSubItemsGroupIDs,G.getGroupID());var B=G.createSyncItem(this._allowZeroQuantityItems,C);if(C){Array.remove(this._syncAllSubItemsGroupIDs,G.getGroupID());}if(B!==null){E.push(B);}else{D.push(G);}}else{if(G.isReadyForSync()==false){A=true;}}}if(E.length>0){this._pendingSyncCount++;PhotoSite.Framework.ICartService.UpdateCartItems(this._encUserID,E,this._syncSuccessDelegate,this._syncErrorDelegate);}for(var F=0;F<D.length;F++){Array.remove(this._syncDataItems,D[F]);}if(A==false){this._stopSyncGather();}},_syncCartItem:function(A,C){var B=this._getSyncDataItem(A);if(B!=null){if(B.getLastSyncFrame()===C){if(B.isReadyForSync()==false){B.markReadyForSync();}}}},_startSyncGather:function(){if(!this._syncGatherIntervalID){this._syncGatherIntervalID=setInterval(this._syncGatherDelegate,this._delaySyncGather);}},_stopSyncGather:function(){clearInterval(this._syncGatherIntervalID);this._syncGatherIntervalID=null;},prepareCartItemForSync:function(A){var B=this._getSyncDataItem(A.GroupID);if(B==null){B=new PhotoSite.Framework.CartItemSyncData();B.createFromCartItem(A);this._syncDataItems.push(B);}B.incrementLastSyncFrame();},scheduleCartItemForSync:function(B){var E=this._getSyncDataItem(B.GroupID);var D=this._syncCartItemDelegate;var A=B.GroupID;var C=E.getLastSyncFrame();setTimeout(function(G,F,H){return function(){G(F,H);};}(D,A,C),this._delaySyncItem);this._startSyncGather();},removeCartItem:function(A){var B=this._getSyncDataItem(A.GroupID);Array.remove(this._syncDataItems,B);},hasPendingRequests:function(){return this._pendingSyncCount>0;},hasItemsWaitingForSync:function(){for(var A=0;A<this._syncDataItems.length;A++){var B=this._syncDataItems[A];if((B.isReadyForSync()||B.needsSync())&&B.isSyncInProgress()==false){if(this._allowZeroQuantityItems==false&&B.hasValidQuantities()==false){continue;}return true;}}return false;},isCartItemSyncInProgress:function(A){var B=this._getSyncDataItem(A);if(B===null){return false;}return B.isSyncInProgress();},isCartItemWaitingForSync:function(A){var B=this._getSyncDataItem(A);if(B===null){return false;}return(B.isReadyForSync()||B.needsSync())&&(B.isSyncInProgress()===false);},isFullSyncRequiredForCartItem:function(A){return Array.contains(this._syncAllSubItemsGroupIDs,A);},syncCartItem:function(B){var A=B.GroupID;var C=this._getSyncDataItem(A);if(C!==null&&C.isSyncInProgress()===false){this._stopSyncGather();C.markReadyForSync();this._syncGather();}else{if(C===null&&this.isFullSyncRequiredForCartItem(A)){this.prepareCartItemForSync(B);this.scheduleCartItemForSync(B);this.syncAll();}}},syncAll:function(){this._stopSyncGather();for(var A=0;A<this._syncDataItems.length;A++){this._syncDataItems[A].markReadyForSync();}this._syncGather();},set_allowSyncToServer:function(A){this._allowSyncToServer=A;},get_allowSyncToServer:function(){return this._allowSyncToServer;},set_allowZeroQuantityItems:function(A){this._allowZeroQuantityItems=A;},get_allowZeroQuantityItems:function(){return this._allowZeroQuantityItems;},add_groupIDToSyncAllSubItems:function(A){this._syncAllSubItemsGroupIDs.push(A);}};PhotoSite.Framework.ShoppingCartSyncManager.descriptor={events:[{name:"syncCartItem"},{name:"syncCartItemSuccess"},{name:"syncSubItemSuccess"},{name:"syncError"}]};PhotoSite.Framework.ShoppingCartSyncManager.registerClass("PhotoSite.Framework.ShoppingCartSyncManager",PhotoSite.Framework.ComponentBase);
if(typeof(Sys)!=='undefined')Sys.Application.notifyScriptLoaded();