var productsCart;
addEvent(window,"load",function(){
	productsCart = new function()
	{
		this.items  = {};
		
		this.add = function (product){
			this.query("add", product, function(r){
				productsCart.box.refresh();
			});
		}
	
		this.remove = function (product){
			this.query("remove", product, function(r){
				productsCart.box.refresh();
			});
		}

		this.box = new function(){

			this.htmlBox 						= document.getElementById("productsCart");
			this.htmlContainer 					= document.getElementById("productsCartContainer");
			this.queryDataPagesList 			= document.getElementById("queryDataPagesList");
			this.queryInfoList 					= document.getElementById("queryInfoList");
			this.queryPublicationsList 			= document.getElementById("queryPublicationsList");
			this.refresh = function(){
				productsCart.query("getSessionData","",function(session){
					
					//productsCart.box.setHTML("aktualisiertung...");
					productsCart.query("getItemsTable","",function(r){
						
						var k = null;for(k in r.items)break;
						productsCart.items = r.items;
						
							if(k != null){
								productsCart.box.setHTML(r.html);
								if(session.minimized == "1"){
									productsCart.box.minimize();
								}else{
									productsCart.box.restore();
								}
								productsCart.box.open();
							}else{
								productsCart.box.close();
							}
						
					})
					
					if(productsCart.box.queryDataPagesList != null){
						productsCart.query("queryDataPagesList","",function(r){
						
							if(r.items.length > 0){
								productsCart.box.queryDataPagesList.innerHTML = r.html;
								productsCart.box.queryDataPagesList.style.display ="";
							}else{
								productsCart.box.queryDataPagesList.innerHTML = "";
								productsCart.box.queryDataPagesList.style.display = "none";
							}
								 
							
						})
					}
					
					if(productsCart.box.queryInfoList != null){
						productsCart.query("queryInfoList","",function(r){
							if(r.items.length > 0){
								productsCart.box.queryInfoList.innerHTML = r.html;
								productsCart.box.queryInfoList.style.display ="";
							}else{
								productsCart.box.queryInfoList.innerHTML = "";
								productsCart.box.queryInfoList.style.display = "none";
							}
						})
					}
					
					if(productsCart.box.queryPublicationsList != null){
						productsCart.query("queryPublicationsList","",function(r){
							if(r.items.length > 0){
								productsCart.box.queryPublicationsList.innerHTML = r.html;
								productsCart.box.queryPublicationsList.style.display ="";
							}else{
								productsCart.box.queryPublicationsList.innerHTML = "";
								productsCart.box.queryPublicationsList.style.display = "none";
							}
						})
					}
				})
			}
			
			this.open 		= function(){
				this.htmlBox.style.display = "";
			}
			
			this.close		= function(){
				this.htmlBox.style.display = "none";
			}
			this.setHTML 	= function(html){
				this.htmlContainer.innerHTML = html;
			}
			
			this.minimized 	= false;
			this.minimize 	= function(){
				this.htmlContainer.style.display = "none";
				document.getElementById("boxDescAsc").style.display ="none";
				document.getElementById("boxDescBtn").style.display ="";
				productsCart.box.minimized = true;
			}
			
			this.restore	= function(){
				this.htmlContainer.style.display = "";
				document.getElementById("boxDescAsc").style.display ="";
				document.getElementById("boxDescBtn").style.display ="none";
				productsCart.box.minimized = false;
			}
			this.switchViewMode = function(){
				productsCart.box.minimized?productsCart.box.restore():productsCart.box.minimize();
				productsCart.query("setSessionData",{minimized: productsCart.box.minimized},function(r){

				})
			}
		}	
	
	
		/**
		 * comminicate server
		 */
		this.query = function(act,data,onComplete)
		{
			JsHttpRequest.query("/events.php?jsHttpRequest=1",{act:act,manager:"CMSCartProductsManager", data:data}, function(r,text){
			    if(!r.hasOwnProperty("status")){
			    	var errMsg = "Server warn:" + r.responce;
			    	if(window.console)
			    		console.warn(errMsg);
			    	else
			    		alert(errMsg);
			    	return;
			    }

			    onComplete(r.responce);
			},true);
		}
		
		/**
		 * User form check
		 * 
		 */
		this.checkUserForm = function(onComplete){
		
			var form = this.getForm("productCartUserForm");

			this.query('checkUserForm',form.values,function(r){
				var hasErrors = false;
				
				// check fields
				for(var k in form.elements)
				{
					if(form.elements[k].type == "radio" || form.elements[k].type == "checkbox" )
					{
						var radioButtons = document.getElementsByName(k);
						for(var rk = 0; rk < radioButtons.length; rk++){
							radioButtons[rk].parentNode.style.backgroundColor = r.errors.hasOwnProperty(k)?"#FF8888":'';
						}
					}else{
						form.elements[k].style.backgroundColor = r.errors.hasOwnProperty(k)?'#FF8888':'';
					}
					
					if(r.errors.hasOwnProperty(k)){
						hasErrors = true;	
					}
				}
				
				// no error, go forth
				if(!hasErrors){
					if(onComplete != null)	onComplete();	
				}
			})
		}
		/**
		 * Contact form check
		 * 
		 */
		this.checkContactForm = function(onComplete){
		
			var form = this.getForm("contactForm");

			this.query('checkContactForm',form.values,function(r){
				var hasErrors = false;
				
				// check fields
				for(var k in form.elements)
				{
					if(form.elements[k].type == "radio" || form.elements[k].type == "checkbox" )
					{
						var radioButtons = document.getElementsByName(k);
						for(var rk = 0; rk < radioButtons.length; rk++){
							radioButtons[rk].parentNode.style.backgroundColor = r.errors.hasOwnProperty(k)?"#FF8888":'';
						}
					}else{
						form.elements[k].style.backgroundColor = r.errors.hasOwnProperty(k)?'#FF8888':'';
					}
					
					if(r.errors.hasOwnProperty(k)){
						hasErrors = true;	
					}
				}
				
				// no error, go forth
				if(!hasErrors){
					if(onComplete != null)	onComplete();	
				}
			})
		}
		
		this.getForm = function(formName)
		{
			var form = document.getElementById(formName);
			
			if(!form)
				return null;
				
			var elements 		= form.elements;
			var namedElements 	= {}; 
			var values 			= {};
			var o;
			
			for(var i = 0; i< elements.length; i++ ){
				o = elements[i];
				switch(o.type)
				{
					case 'checkbox':		
						values[o.name] = o.checked?1:0; 
						break;
						
					case 'radio':
						if(!values.hasOwnProperty(o.name))
							values[o.name] = false;							
						
						if(o.checked)
							values[o.name] = o.value;
						break;
								
					default:		
						values[o.name] = o.value;
				}	
				namedElements[o.name] = o;			
			}
			
			return {'values':values,'elements':namedElements};
		}

	}
	
	/**
	 * checkOnStart
	*/
	productsCart.box.refresh();
})