var base_url="http://www.craigandderricott.co.uk/";
(function($){
		
	var FastOrder={
		rowHtml:"<tr style='display:none' class='item $class'><td valign='top'><input type='text' class='p_code' name='product_code[$i]' /></td><td align='center' valign='top'><input type='text' class='p_qty' size='6' name='qty[$i]' /></td><td valign='top' align='center'></td></tr>",
		init:function(){
			this._table=$("#FastOrderTable");
			this._form=$("#FastOrderForm");
			this._submitBtn=$("#FastOrderSubmit");
			this._addLinesBtn=$("#FastOrderAddLines");
			
			this._errorIcon="<img src='"+base_url+"assets/images/error.gif' />";
			this._passIcon="<img src='"+base_url+"assets/images/tick.gif' />";
			this._warnIcon="<img src='"+base_url+"assets/images/warn.gif' />";
			this._loader="<img class='loader' src='"+base_url+"assets/images/admin/small_loader.gif' />";
			
			this.attachObservers();
			this._submitBtn.attr("value","Verify & Add to Cart");
		},
		attachObservers:function(){
			var _this=this;
			this.disableSubmission();
			this._addLinesBtn.bind("click",function(){
				_this.attachLines();
			});
			$(".p_qty",this._table).live("keyup",function(){
				this.value = this.value.replace(/[^0-9]/g,'');
			});
		},
		attachLines:function(){
			var len=$(".p_code",this._table).length;
			if(!len){
				len=0;
			}
			var $class="";
			for(var i=len;i<(len+6);i++){
				($class=="even")?($class="odd"):($class="even");
				this._table.append(this.rowHtml.replace("$class",$class).replace(/\$i/g,i));
			}
			$("tr:hidden",this._table).fadeIn("slow");
		},
		verifyCode:function(){
			var _this=this;
			var URL=base_url+"fastorder/process";
			var postdata=this._form.serializeArray();
			$.ajax({
				cache:false,
				type:"POST",
				dataType:"json",
				data:postdata,
				url:URL,
				success:function(data){
					if(data && data.length){//basic sanity check
						_this.parseVerification(data);
					}else{
						_this._submitBtn.attr("value","Verify & Add to Cart")
						.attr("disabled","");
						_this._addLinesBtn.attr("disabled","");
						$("img.loader",_this._table).remove();
						alert("There has been an error in the verification process...\nPlease Try again");
					}
					
				},
				error:function(){
					_this._submitBtn.attr("value","Verify & Add to Cart")
					.attr("disabled","");
					_this._addLinesBtn.attr("disabled","");
					$("img.loader",_this._table).remove();
					alert("There has been an error in the verification process...\nPlease Try again");
				}
				
			});
			return false;
		},
		disableSubmission:function(){
			var _this=this;
			//*
			this._form.bind("submit",function(){
				return false;
			});
			this._form.bind("submit",function(){
				_this._submitBtn.attr("value","Processing...")
				.attr("disabled","disabled");
				_this._addLinesBtn.attr("disabled","disabled");
				$("tr.item",_this._table).find("td:last").html(_this._loader);
				_this.verifyCode();
				return false;
			});
			//*/
		},
		parseVerification:function(data){
			var _this=this;
			var atLeastOneError=false;
			var atLeastOnePass=false;
			$("tr.item",this._table).each(function(i,el){
				if(data[i]){
					if(data[i].status=="error"){
						atLeastOneError=true;
						$(el).removeClass("error warn").addClass("error")
						.find("td:last")
						.html(_this._errorIcon)
						.end()
						.find("td:first").find("span").remove().end()
						.append("<span>"+data[i].errorText+"</span>")
						;
					}else if(data[i].status=="pass"){
						atLeastOnePass=true;
						$(el).removeClass("error warn").find("td:last")
						.html(_this._passIcon)
						.end()
						.find("td:first").find("span").remove();
					}else if(data[i].status=="warn"){
						atLeastOneError=true;
						$(el).removeClass("error warn").addClass("warn")
						.find("td:last")
						.html(_this._warnIcon)
						.end()
						.find("td:first").find("span").remove().end()
						.append("<span class='warn'>"+data[i].errorText+"</span>")
						;
					}else{
						$(el).removeClass("error warn").find("td:last")
						.empty()
						.end()
						.find("td:first").find("span").remove();
					}
				}
			});
			
			if(atLeastOnePass && !atLeastOneError){
				this._form.unbind("submit");
				this._form.attr("action",base_url+"shop/?mass_add_to_cart=true");
				this._form.submit();
			}else{
				_this._submitBtn.attr("value","Verify & Add to Cart")
				.attr("disabled","");
				_this._addLinesBtn.attr("disabled","");
			}
			
		}
		
		
	};
	
	var debounce=function(func, threshold, execAsap) {
	    var timeout;
	    return function debounced () {
	        var obj = this, args = arguments;
	        function delayed () {
	            if (!execAsap)
	                func.apply(obj, args);
	            timeout = null; 
	        };
	        if (timeout)
	            clearTimeout(timeout);
	        else if (execAsap)
	            func.apply(obj, args);
	        timeout = setTimeout(delayed, threshold || 100); 
	    }; 
	};
	
	window.fastOrderInit=function(){FastOrder.init.apply(FastOrder);};
	
})(jQuery);

$(function(){
	fastOrderInit();
});

