function bookFormHandler(container,defaults)
{
	if(container==null)
		return false;
		
		
	this.container = container;
	
	

	if(defaults!=null)
		this.defaults = defaults;
	else
	{
		this.defaults = {
			total:0.00,
			jobPickupZipcode:'',
			jobDropoffZipcode:'',
			jobDropoffBuilding:0,
			jobPickupBuilding:0,
			items:'',
            job_desc:'',
            meas_weights:'',
            misc_items:''
		}
	}
	
	// modified KJR 10/14/2009
	var buildingTypes =
	{
				0:"-select-",
				1:"elevator",
				2:"basement",
				3:"1st Floor",
				4:"2nd Floor",
				5:"3rd Floor",
				6:"4th Floor",
                7:"5th Floor",
                8:"Not Sure"
    }
	var numberMen =
	{
				0:"-select-",
				1:"One",
				2:"Two"
	}
	this.fields = {
		from_zip:{
			label:"From",
			name:"jobPickupZipcode",
			defaultValue:"Zip Code",
			data:null,
			method:'addZipcode',
			type:'input',
			db:'jobPickupZipcode'
		},
		to_zip:{
			label:"To",
			name:"jobDropoffZipcode",
			defaultValue:"Zip Code",
			data:null,
			type:'input',
			method:'addZipcode',
			db:'jobDropoffZipcode'
		},
		pickup:{
			label:"Pick-Up",
			name:"jobPickupBuilding",
			defaultValue:null,
			
			method:"addHint",
			data:buildingTypes,
			type:'select',
			db:'jobPickupBuilding'
		},
		dropoff:{
			label:"Drop-Off",
			name:"jobDropoffBuilding",
			defaultValue:null,
			
			data:buildingTypes,
			method:"addHintNoPopup",
			type:'select',
			db:'jobDropoffBuilding'
		},
		nr_men:{
			label:"# of Men",
			name:"jobMen",
			defaultValue:null,

			data:numberMen,
			method:"addHintNoPopup",
			type:'select',
			db:'jobMen'
		}/*,
		nr_items:{
            //Modified KJR 10/14/2008
            label:"Items/Desc",
			name:"jobItems",
			defaultValue:null,
			link:'method',
			method:'getItems',
			data:null,
			type:'hidden',
			db:'jobItems'
		}*/,
        items:{
			label:"",
			name:"items",
			defaultValue:"",

			data:null,
			method:null,
			type:'hidden',
			db:'items'
		},
        job_desc:{
			label:"",
			name:"job_desc",
			defaultValue:"",

			data:null,
			method:null,
			type:'hidden',
			db:'job_desc'
		},
        meas_weights:{
			label:"",
			name:"meas_weights",
			defaultValue:"",

			data:null,
			method:null,
			type:'hidden',
			db:'meas_weights'
		},
        misc_items:{
			label:"",
			name:"misc_items",
			defaultValue:"",

			data:null,
			method:null,
			type:'hidden',
			db:'misc_items'
		}
	};
		
	
	
} 

var tiperator = 0;

function addHint(item)
{
	
		var div = document.createElement("div");
	div.id = "tip" + tiperator;
	div.className="tip_itemlocation";
	div.innerHTML = "Choose Item Location";
	
	//link:'<a href="#" class="hint">?</a>',
	
	var a = document.createElement("a");
	a.href = "#";
	a.className="tiplink hint";
	a.innerHTML = "?";
	
	var data = [];
	data.push(div);
	data.push(a);
	tiperator++;
	return data;
	
}

function addHintNoPopup(item)
{

	//var div = document.createElement("div");
	//div.id = "tip" + tiperator;
	//div.className="tip_itemlocation";
	//div.innerHTML = "Choose Item Location";

	//link:'<a href="#" class="hint">?</a>',

	var a = document.createElement("a");
	a.href = "#";
	a.className="tiplink hint";
	a.innerHTML = "?";

	var data = [];
	//data.push(div);
	data.push(a);
	tiperator++;
	return data;

}
function blank(item)
{
    var spanElement = document.createElement("span");
    var data = [];
    //data.push(spanElement)
	return data;
}


function addZipcode(item)
{
	/*
					link:"<div class=\"tip\" id=\"tip0\">Click to find zip code</div><a href=\"" + PATH.base + "/zip-help.php\" class=\"tiplink hint floatbox\" rev=\"theme: blue; width:410; height:260; outsideClickCloses:false; showClose:true; enableDrag:true; padding: 12;\" id=\"from_zip_link\">?</a>",
			link:"<div class=\"tip\" id=\"tip1\">Click to find zip code</div>",

			*/
	
	
	
	var div = document.createElement("div");
	div.id = "tip" + tiperator;
	div.className="tip";
	div.innerHTML = "Click to find zip code";
	
	/*
	<a href=\"" + PATH.base + "/zip-help.php\" class=\"tiplink hint floatbox\" rev=\"\" id=\"to_zip_link\">?</a>
	*/
	
	var a = document.createElement("a");
	a.href = PATH.base + "/zip-help.php";
	a.className="tiplink hint floatbox";
	a.setAttribute("rev","theme: blue; width:410; height:260; outsideClickCloses:false; showClose:true; enableDrag:true; padding: 12;");
	a.id = item.db + "_link";
	a.innerHTML = "?";
	a.db = item.db;
	
	var data = [];
	data.push(div);
	data.push(a);
	tiperator++;
	
	
	return data;
	
}


function getItems(info)
{
	var anchor = document.createElement("a");
	
	anchor.href = PATH.base + "/quotebox/itemform";
	anchor.setAttribute("rev","theme: blue; width:410; height:450; outsideClickCloses:false; showClose:true; enableDrag:true; padding: 2;");
	// Modified KJR 10/14/2008
    anchor.innerHTML = "Click&nbsp;To&nbsp;Describe";
    $(anchor).addClass("floatbox");
	$(anchor).addClass("choselink");
	
	/** attach floatbox **/
	
	var data = [];
	data.push(anchor);
	return data;
}


bookFormHandler.prototype.setField = function(fieldname,value)
{
	this.f.setField(fieldname,value);
}
bookFormHandler.prototype.setJobItemsField = function(fieldname,value){
    this.f.setJobItemsField(fieldname,value);
}
bookFormHandler.prototype.saveItems = function(data)
{
	this.f.saveItems(data);
}

bookFormHandler.prototype.initFields = function(data)
{
	this.f.initFields(data);
}

bookFormHandler.prototype.clearAllFields = function()
{
	this.f.clearAllFields();
}

bookFormHandler.prototype.display = function()
{
	//this.total = document.createElement("h3");
    //Commented out KJR 10/14/2009
    //this.total.innerHTML = "Total: <span>" + Math.round(this.defaults.total) + "</span>";
	this.clearAll = document.createElement("img");
	this.clearAll.src = PATH.img + "/clear-button.gif";
	this.clearAll.style.width = "199";
	this.clearAll.style.height = "24";
    this.clearAll.style.cursor = "hand";
	this.clearAll.style.cursor = "pointer";
	this.clearAll.alt = "Clear Quick Quote Form";
	this.submitButton = document.createElement("img");
	this.submitButton.src = PATH.img + "/book-now.png";
	this.submitButton.style.width = "199";
	this.submitButton.style.height = "57";
	this.submitButton.style.cursor = "hand";
	this.submitButton.style.cursor = "pointer";
	this.submitButton.alt = "Request a quote";
	
	this.f = initForm(this,this.fields);
	
	this.container.appendChild(this.f);
    //Commented out KJR 10/14/2009
    //this.container.appendChild(this.total);
	this.container.appendChild(this.clearAll);
	this.container.appendChild(this.submitButton);
	
	// retag the anchors so infobox gets a popup.
	
	try
	{
		fb.tagAnchors(document);
	}
	catch(e)
	{
		
	}
}



function initForm(wrapper,fields)
{
	bookForm = document.createElement('form');
	bookForm.id = "qqform";
	bookForm.name = "qqform";
	bookForm.wrapper = wrapper;
	bookForm.button = wrapper.submitButton;
	
	bookForm.requestquotelink = document.getElementById("requestquote");

	bookForm.setSubmitButton = function(button)
	{
		button.f = this;
		$(button).click(function() 
		{
			if(this.f)
				this.f.submit();
		});
	}

	bookForm.clearButton = wrapper.clearAll;
	bookForm.setClearAll = function(button)
	{
		button.f = this;
		$(button).click(function()
		{
			bookForm.clearAllFields();
		});
	}
			
	bookForm.setJobItemsField = function(fieldname,value){
        var field = null;
        var jobItems = value.split("|");
        for (var alpha = 0; alpha < jobItems.length; alpha++){
            var fieldItems = jobItems[alpha].split(":");
            var fieldId = fieldItems[0];
            var fieldValue = fieldItems[1];
            if(this.elements[fieldId])
            {
                field = this.elements[fieldId];
            }
            else
            {
                for(var j=0;j<this.elements.length;j++)
                    if(field.name == fieldId)
                    {
                        field.value = fieldValue;
                        break;
                    }
            }

            if(field!=null)
            {
                field.setAttribute('value',fieldValue);
                field.value = fieldValue;
            }
        }
        this.setField(fieldname,value);
    }
	bookForm.setField = function(fieldname,value)
	{
		var field = null;
        if(this.elements[fieldname])
		{
			var field = this.elements[fieldname];
		}
		else
		{
			for(var j=0;j<this.elements.length;j++)
				if(field.name == fieldname)
				{
					field.value = value;
					break;
				}
		}
		
		if(field!=null)
		{
			field.setAttribute('value',value);
			field.value = value;
		}
	}
	
		bookForm.initFields = function(data)
	{
        for(var index in data)
		{
			var i = data[index];

			var ctr = document.createElement("div");
            //KJR
            if (i.type == "hidden" && i.label==""){
                ctr = document.createElement("span");
            }
			ctr.className = "formrow";

			var label = document.createElement("label");
			label.setAttribute("for",i.name);
			label.innerHTML = i.label + ":";



			switch(i.type)
			{
				case "select":
					var ipt = document.createElement("select");


					for(var j in i.data)
					{
						var opt = document.createElement("option");
						opt.text = i.data[j];



						opt.value = j;
						ipt.add(opt,(navigator.isBrowser(browser.IE)?(j):null));
						//
						/*
						if(this.defaults[i.name] == j)
						{
							opt.selected = true;
							ipt.selectedIndex = j;
						}
						*/

					}


					$(ipt).bind('change.book',function()
					{
						this.form.calculatePrice();
					});	

					$(ipt).bind('blur.book',function(){
						if(document.bookie!=null)
							this.form.calculatePrice();
					});


				break;
				case "input":
					var ipt = document.createElement("input");
					ipt.type = "text";
				break;
				default:
					var ipt = document.createElement("input");
					ipt.type = "hidden";	
			}


			ipt.name = i.name;
			ipt.db = i.db;
			ipt.setAttribute("db",i.db);
			ipt.id = i.name;
			ipt.default_value = i.defaultValue;
			if(i.defaultValue!=null)
			{

				ipt.setAttribute("value",i.defaultValue.toString());
				ipt.default_value = i.defaultValue.toString();

				$(ipt).focus(function()
				{
					var dvalue = this.default_value;

					if(this.value == dvalue)
						this.value = "";
				});

				$(ipt).blur(function()
				{
					var dvalue = this.default_value;

					if((this.value == dvalue)||(!this.value))
						this.value = dvalue;
				});
			}



            if (i.label != ""){
			    ctr.appendChild(label);
            }
			ctr.appendChild(ipt);


			if(i.method!=null)
			{
				var extra = eval(i.method + "(i)");

				while(extra.length>0)
					ctr.appendChild(extra.pop());
			}


			this.appendChild(ctr);
		}
	}
		
	bookForm.clearAllFields = function()
	{
		/* for(var index in data)
		{
			var i = data[index];
		    bookForm.setField(i.name,i.defaultValue);
			
						
			
		} */
		
		document.qqform.jobPickupZipcode.value = "Zip Code";
		document.qqform.jobDropoffZipcode.value = "Zip Code";
		document.qqform.jobPickupBuilding.selectedIndex = 0;
		document.qqform.jobDropoffBuilding.selectedIndex = 0;
		document.qqform.jobMen.selectedIndex = 0;
        document.qqform.items.value = "";
        document.qqform.job_desc.value = "";
        document.qqform.meas_weights.value = "";
        document.qqform.misc_items.value = "";

        //this.setField('jobItems',null);
		// this.calculatePrice();
        //Commented out KJR 10/14/2009
        //this.wrapper.total.innerHTML = "Total: 0";
		
			
	}
			

	
	
	
	
	
	bookForm.submit = function()
	{
		/** finds out if all the fields are found, and if so, we run a request to store the content **/
		
		try
		{
			data = this.requestElements();
			
			data['action'] = "bookJob";
		}
		catch(e)
		{
			alert(e.message);
			
		}		
		var callbackParams = {object:this,method:"realSubmit"}
		var aRequest = new AjaxRequest(PATH.ajax + "job_requests.php",callbackParams,data,"POST");
		//var adtlParams = {useLoader:true,loaderParent:this.container,loaderClass:"loader_results"}
		aRequest.makeRequest();
	}
	
	bookForm.realSubmit = function(data)
	{
        if(data.error)
		{
			alert(data.error);		
		}
		else 
		{
			if(data.prices)
				bookForm.setTotal(data.prices,1);
				
			$(this.requestquotelink).click();
		}				
	}
	
	bookForm.requestElements = function()
	{
		var data = new Array();
		
		for(j=0;j<this.elements.length;j++)
		{
			var field = this.elements[j];
			
			
			switch(this.elements[j].type)
			{
				case "select-one":
        			data[field.name] = this.elements[j].options[this.elements[j].selectedIndex].value
				break;
				case "checkbox":
				case "radio":
					data[field.name] = (this.elements[j].checked==true?this.elements[j].value:0);
				break;
				default:
				
					if(field.default_value!=null)
						data[field.name] = (field.default_value!=field.value?field.value:'');
					else
						data[field.name] = (field.value);
					
					
			}
		}
					
		return data;
	}
	
	bookForm.saveItems = function(data)
	{
		// calculate cost;
		var aggregate = [];
//		this.jobItems.data = new Array();
		var total = 0;
        //alert("saving data enter: ")
        while(data.length>0)
		{
			var item = data.pop();

			//total += item.price;
			//alert("saving data: "+item.id)
	//		this.jobItems.data[item.id] = item;

			//aggregate.push(item.id + ":" + item.qty + ":" + item.price);
            //modified KJR 10/15/2009
            aggregate.push(item.id + ":" + item.itemdata);
        }

	//this.total.val = total;

		this.setJobItemsField('jobItems',aggregate.join("|"));
        //modified KJR 10/15/2009
        //this.calculatePrice();
	}
	
	bookForm.calculatePrice = function()
	{
			try
			{
				data = this.requestElements();
				data['action'] = "calculatePrice";
			}
			catch(e)
			{
				alert(e.message);
			}		
			
			var callbackParams = {object:this,method:"setTotal"}
			var aRequest = new AjaxRequest(PATH.ajax + "job_requests.php",callbackParams,data,"POST");
			//var adtlParams = {useLoader:true,loaderParent:this.container,loaderClass:"loader_results"}
			aRequest.makeRequest();
		
	}
		
	bookForm.setTotal = function(data,ifbooking)
	{
		// this.wrapper.setTotal
		//Commented out KJR 10/14/2009
		/*if(data.total!=null)
		{
			this.wrapper.total.val = data.total;
			if(!ifbooking)
				this.wrapper.total.innerHTML = "Total: " + data.total;
		}
		else
		{
			this.wrapper.total.innerHTML = "Total: N/A";
		}*/
	}
	
	bookForm.initFields(fields);
	bookForm.setSubmitButton(bookForm.button);
    bookForm.setClearAll(bookForm.clearButton);
	return bookForm;
}



        