﻿// JavaScript Document
var basket = new function(){
	var ME = this
	ME.draw = function(ctrl, basket, cfg){
		
		var curr_basket = basketInit(basket)
		switch(ctrl){
			case "basketCount":
				var controll = new basketCounter(curr_basket)
				curr_basket.appendControll(controll)
			break;
			case "addRemoveUpdateButton" :
				var controll = new obj_productUpdater(curr_basket, cfg)
				curr_basket.appendControll(controll)
			break;
		}
		
	}	
	
	var basketInit = function(name){
		if(ME[name]) return ME[name]
		var _ME = this
		var domItems = []
		var UID
		
		_ME.products = []
		_ME.products.count = 0
		_ME.products.sum = 0
		
		var listHTML = {startHTM:"",itemHTM:'',endHTM:""}
		
		var onBasketLoad = function(){
			var coo = getCookie("basket"+name)
			if(coo.length > 5){
				getBasketItem(name,coo)
			}
			
			for(var n=0;n<domItems.length;n++ )domItems[n].onBasketLoad(_ME.products.count,_ME.products.sum)
		}
		
		var onBasketChange = function(){
			for(var n=0;n<domItems.length;n++ )domItems[n].onBasketChange(_ME.products.count,_ME.products.sum)	
		}  
		var getBasketItem = function(name, uid){
				var conn = new _service()
				var result = conn.invoke("test", "ibasket.returnBasket", name)
				if(result[0]>0){
					_ME.products.count = result[0]
					_ME.products.sum =  result[1]
				}
			//()
		} //getBasketItem
		
		_ME.appendControll = function(controll){
			domItems.push(controll)	
		}//appendControll
		
		_ME.updateProduct = function(id, amt){
			var conn = new _service()
			var result = conn.invoke("test", "iBasket.UpdateItem",name,  id, amt)
			if(result[0]>0){
				_ME.products.push({amt:result[0], unitPrice: result[1], inIndex: _ME.products.length}) 
				_ME.products["p"+id] = _ME.products[_ME.products.length-1]
				_ME.products.count = result[2]
				_ME.products.sum = result[3]
				onBasketChange()
				
				return _ME.products["p"+id]	
			}else if(result[0]==0){
				if(_ME.products["p"+id].inIndex>-1){
					_ME.products.splice(_ME.products["p"+id].inIndex,1)
					delete _ME.products["p"+id]
					_ME.products.count = result[2]
					_ME.products.sum = result[3]
					onBasketChange()
				}
			}
			return false
			
		}
		
		_ME.getProduct = function(id){
			
			if(_ME.products["p"+id]) return _ME.products["p"+id]
			var conn = new _service()
			var result = conn.invoke("test", "ibasket.getProduct", name, id)
			_ME.products.push({amt:result[0], unitPrice: result[1], inIndex: _ME.products.length}) 
			_ME.products["p"+id] = _ME.products[_ME.products.length-1]
			return _ME.products["p"+id]
		}
		onLoadArr.push(onBasketLoad)
		ME[name] = _ME
		return _ME
		
	}
	return ME
	
}()

function basketCounter(basket){
	var _ME= this
	var objName = "basketCounter_" +  parseInt(Math.random()*999999).toString()
	document.write('<SPAN id="'+objName+'"></SPAN>')
	var dom = document.createElement("SPAN")
	//dom.innerHTML = "(0)"
	_ME.onBasketLoad = _ME.onBasketChange = function(amt,price){
		dom.innerHTML = '(' + amt + ')'	
	}
	
	$(objName).appendChild(dom)
	return _ME
}

function obj_productUpdater(basket,cfg){
	var _ME = this
	var inpHasFocus
	var objName = "productUpdater" +  parseInt(Math.random()*999999).toString()
	var dom = document.createElement("DIV")
	dom.innerHTML = '<span>'+(cfg.amountTitle||'')+'</span>'
	var input = document.createElement("INPUT")
	input.type="text"
	input.maxLength = 4
	input.size=3
	input.value=1
	var tmf=input.onfocus
	_ME.dom = dom
	dom.appendChild(input)
	
	
	input.init = formElements.valuesOnly
	input.init(input,regNumbers)
	
	var buttonAdd =  document.createElement("BUTTON")
	
	buttonAdd.innerHTML = cfg.addTitle
	buttonAdd.className="ADD"
	dom.appendChild(buttonAdd)
	
	
	var buttonUpdate =  document.createElement("BUTTON")
	buttonUpdate.innerHTML = cfg.updateTitle
	buttonUpdate.className="UPDATE"
	buttonUpdate.disabled = true
	buttonUpdate.style.display = "none"
	dom.appendChild(buttonUpdate)
	
	
	var buttonRemove =  document.createElement("BUTTON")
	buttonRemove.innerHTML = cfg.removeTitle
	buttonRemove.className="DELETE"
	
	buttonRemove.style.display = "none"
	dom.appendChild(buttonRemove)
	
	
	
	
	_ME.onBasketChange = function(){
		checkInput()
	}
	_ME.onBasketLoad = function(){
		 product = basket.getProduct(cfg.productID)
		if(product.amt>0){
			input.value = product.amt
			buttonAdd.style.display = "none"
			buttonUpdate.style.display = ""
			buttonRemove.style.display = ""
			
		}else{
			
			
		}
	}
	
	var timer, product
	var checkInput = function(){
		if(regNumbers.test(input.value)){
			if(parseInt(input.value)>0  ){
				if(product.amt>0){
					if (parseInt(product.amt)!=parseInt(input.value)){
						buttonUpdate.disabled = false
						return true
					}
				}else{
					buttonAdd.disabled = false
					return true
				}
					
			}
			
		}
		buttonAdd.disabled=true
		buttonUpdate.disabled=true
		return false
	} //checkInput
	input.onfocus = function(){
		buttonRemove.disabled=true
		inpHasFocus = true
		if(tmf)tmf()
		timer=setInterval(checkInput, 250)
		
	}
	var tmb=input.onblur
	
	input.onblur = function(){
		buttonRemove.disabled=false
		if(tmb)tmb()
		clearInterval(timer)
		inpHasFocus = false
	}
	var add = function(){
		buttonAdd.disabled = true
		if(checkInput){
			product = basket.updateProduct(cfg.productID, input.value)
			if(product){
				buttonAdd.style.display = "none"
				buttonUpdate.style.display = ""
				buttonRemove.style.display = ""
			}
			buttonAdd.disabled = false
			buttonUpdate.disabled = true
		}
		buttonAdd.disabled = false
	}
	var remove = function(){
		buttonRemove.disabled = true
		if(checkInput){
			product = basket.updateProduct(cfg.productID, 0)
			if(!product){
				buttonAdd.style.display = ""
				buttonUpdate.style.display = "none"
				buttonRemove.style.display = "none"
			}
			buttonAdd.disabled = false
			buttonUpdate.disabled = true
		}
		if (cfg.onRemove){
			cfg.onRemove(_ME)	
		}
		buttonRemove.disabled = false
	}
	buttonAdd.onclick = add
	buttonUpdate.onclick = add
	buttonRemove.onclick = remove
	
	
	
	
	
	
	document.write('<FORM id="'+objName+'" class="'+cfg.className+'"></FORM>')
	$(objName).appendChild(dom)
	$(objName).onsubmit = function(){
		if (inpHasFocus) add()
		return false;
		
	}
	return _ME
	
}

