﻿var LicenseItemModel = (function() {
	function fnLicenseModelConstructor() {
		/****************************************************/
		/*                                                  */
		/*                                                  */
		/*              Extend Observable Class             */
		/*                                                  */
		/*                                                  */
		/****************************************************/
		
		Observable.call(this);
		var SUPER = new Object();
		for (var sMember in this)
			SUPER[sMember] = this[sMember];
		for (var sMember in Observable.prototype)
			SUPER[sMember] = Observable.prototype[sMember];
			
		/****************************************************/
		/*                                                  */
		/*                                                  */
		/*                 Private Variables                */
		/*                                                  */
		/*                                                  */
		/****************************************************/
		
		var oLicenseDetailsDAO = new LicenseDetailsDAO();
		var oLicenseDetails;
		
		/****************************************************/
		/*                                                  */
		/*                                                  */
		/*          Class Level Priveleged Methods          */
		/*                                                  */
		/*                                                  */
		/****************************************************/
		
		this.addLicenseItem = function(sProductCategory, oLicenseItem) {
			oLicenseDetails.addLicenseItem(sProductCategory, oLicenseItem);
			this.setChanged();
			this.notifyObservers({event: "License Item Added", category: sProductCategory, index: oLicenseDetails.getLicenseItemsByProductCategory(sProductCategory).length - 1});
		}
		
		this.addLicenseItemAt = function(sProductCategory, iIndex, oLicenseItem) {
			oLicenseDetails.addLicenseItemAt(sProductCategory, iIndex, oLicenseItem);
			this.setChanged();
			this.notifyObservers({event: "License Item Added", index: iIndex});
		}
		
		this.modifyLicenseItemAt = function(sProductCategory, iIndex, iId, iQuantity) {
		    oLicenseDetails.modifyLicenseItemAt(sProductCategory, iIndex, iId, iQuantity);
		    this.setChanged();
			this.notifyObservers({event: "License Item Modified", category: sProductCategory, index: iIndex});
		}
		
		this.removeLicenseItem = function(sProductCategory) {
			oLicenseDetails.removeLicenseItem();
			this.setChanged();
			this.notifyObservers({event: "License Item Removed", category: sProductCategory, index: oLicenseDetails.getLicenseItemsByProductCategory(sProductCategory).length});
		}
		
		this.removeLicenseItemAt = function(sProductCategory, iIndex) {
		    oLicenseDetails.removeLicenseItemAt(sProductCategory, iIndex);
		    this.setChanged();
			this.notifyObservers({event: "License Item Removed", category: sProductCategory, index: iIndex});
		}
		
		this.getRegionByName = function(sRegion) {
		    return oLicenseDetails.getRegionByName(sRegion);
		}
		
		/****************************************************/
		/*                                                  */
		/*                                                  */
		/*                Accessors/Mutators                */
		/*                                                  */
		/*                                                  */
		/****************************************************/
		
		this.getNetSuiteItems = function() {
		    return oLicenseDetails.getNetSuiteItems();
		}
		
		this.getNetSuiteItemArray = function() {
		    return oLicenseDetails.getNetSuiteItemArray();
		}
		
		this.getPromotions = function() {
		    return oLicenseDetails.getPromotions();
		}
		
		this.getPromotionArray = function() {
		    return oLicenseDetails.getPromotionArray();
		}
		
		this.getRegions = function() {
		    return oLicenseDetails.getRegions();
		}
		
		this.getRegionArray = function() {
		    return oLicenseDetails.getRegionArray();
		}
		
		this.getSubsidiaries = function() {
		    return oLicenseDetails.getSubsidiaries();
		}
		
		this.getSubsidiaryArray = function() {
		    return oLicenseDetails.getSubsidiaryArray();
		}
		
		this.getRegion = function() {
		    return oLicenseDetails.getRegion();
		}
		
		this.setRegion = function(sNewRegion) {
		    oLicenseDetails.setRegion(sNewRegion);
		    this.setChanged();
			this.notifyObservers({event: "Region Changed", region: this.getRegion()});
		}
		
		this.getProductCategories = function() {
		    return oLicenseDetails.getProductCategories();
		}
		
		this.getLicenseItems = function() {
		    return oLicenseDetails.getLicenseItems();
		}
		
		this.getLicenseItemArray = function() {
		    return oLicenseDetails.getLicenseItemArray();
		}
		
		this.getLicenseItemsByProductCategory = function(sProductCategory) {
		    return oLicenseDetails.getLicenseItemsByProductCategory(sProductCategory);
        }
        
        this.getNetSuiteLinkString = function() {
            return oLicenseDetails.getNetSuiteLinkString();
        }
		
		
		this.getCurrentSubsidiaryAndCurrencyByRegion = function (current_region)
		{
		    var dataObject = { subsidiary:"1", currency:1};
		    
		    switch(current_region)
		    {
		        case "Africa":
		        case "Asia":
		        case "Middle East":
		            dataObject.subsidiary = "9";
		            dataObject.currency = 1;
		            break;
		        case "South America":
		        case "North America":
		            dataObject.subsidiary = "1";
		            dataObject.currency = 1;
		            break;
		        case "Europe":
		            dataObject.subsidiary = "9";
		            dataObject.currency = 4;
		            break;
		        case "United Kingdom":
	                dataObject.subsidiary = "9";
	                dataObject.currency = 2;
	                break;
		        default:
		            dataObject.subsidiary = "1";
		            dataObject.currency = 1;
		            break;
		    }
		    
		    return dataObject;
		}
		
		/****************************************************/
		/*                                                  */
		/*                                                  */
		/*                 Initialize Class                 */
		/*                                                  */
		/*                                                  */
		/****************************************************/
		
		oLicenseDetails = oLicenseDetailsDAO.retrieveLicenseDetails();
	}
	
	fnLicenseModelConstructor.prototype = new Observable();
	fnLicenseModelConstructor.prototype.constructor = LicenseItemModel;
	
	return fnLicenseModelConstructor;
})();