function makeIWUri(action) {
	uri = 'index.php?key=' + key + '&p=' + action;
	return uri;
}

function getOptions(loc,success,complete) {
	var go = {
		'type':'GET',
		'url':loc,
		'success':function(data){success(data);},
		'complete':function(){complete();}
	};
	
	return go
}

function postOptions(loc,success,complete,form) {
	var go = {
		'type':'POST',
		'dataType':'json',
		'data':$(form).serialize(),
		'url':loc,
		'success':function(data){success(data);},
		'complete':function(){complete();}
	};
	
	return go
}

function getIWForm(action,submit,back,submitCB,comCB) {
	var loc = makeIWUri(action);
	var com = function() {
		if(comCB) {
			comCB();
		}
		$("#"+submit).click(function() {
			submitCB();
			return false;
		});
		
		if(back) {
			$("#backup").click(function() {
				back();
				return false;
			});
		}
	}
	var suc = function(data) {
		$("#buyoffset").html(data);
		//$("#buyoffset").html('<h1>Hello</h1>');
		//find the grand parent 'iw_bubble'
		/*
		var bubble = $("#buyoffset").parents().map(function() {
			if($(this).hasClass('iw_bubble')) {
				return this;
			}
		})
		$(bubble).scrollTop(0);
		*/
	}
	var opts = getOptions(loc,suc,com);
	jQuery.ajax(opts,suc,com);
}

function postIWForm(action,formid,validCB,errorCB) {
	var loc = makeIWUri(action);
	var com = function() {
		//alert('complete');
	}
	var form = $("#" + formid);
	if(errorCB) {
		var suc = function(data) {
			if(data.error) {
				errorCB(data);
			} else {
				validCB(data);
			}
		}
	} else {
		var suc = function(data) {
			if(data.error) {
				//scroll to the top of the bubble
					var bubble = $("#buyoffset").parents().map(function() {
						if($(this).hasClass('iw_bubble')) {
							return this;
						}
					});
					$(bubble).scrollTop(0);
				$("#purchase_error").empty();
				for(var e in data.errortext) {
					$("#purchase_error").append(data.errortext[e] + '<br />');
				}
			} else {
				validCB(data);
			}
		}
	}
	var opts = postOptions(loc,suc,com,form);
	jQuery.ajax(opts);
}


function initPurchase(key) {
	getOffsetForm();

/*
	var action = 'impacts/chkbgnlogin';
	var submit = 'bgn_login';
	var cb = function(){chkLogin()};
	var com = function(){
		$("#noaccount").click(function(){
			getOffsetForm();
			return false;
		});
	}
	getIWForm(action,submit,false,cb,com);
*/
}

function chkLogin() {
	var action = 'impacts/chkbgnlogin';
	var form = 'bgn_account_info';
	var cb = function(){getOffsetForm()};
	postIWForm(action,form,cb);
}

function getOffsetForm() {
	var action = 'impacts/chooseoffset';
	var submit = 'impact_checkout';
	var cb = function(){chkOffset()};
	var addCB = function() {
		var tot = {};
		tot['windcount'] = Array('forestcount',3);
		tot['forestcount'] = Array('windcount',5);
		var additup = function(id) {
			other = tot[id];
			othertotal = Number($("#"+other[0]).attr('value')*other[1]);
			if(other[1] == 5) {
				mult = 3;
			} else {
				mult = 5;
			}
			mytotal = Number($("#" + id).attr('value')*mult);
			var total = Number(mytotal + othertotal);
			//alert(total);
			$("#total").html(total);
		}
		
		$(".offsetcount").each(function(){
			var id = $(this).attr('id');
			$(this).change(function() {
				additup(id);
			});
		});
	}
	var back = function(){initPurchase(key);}
	getIWForm(action,submit,back,cb,addCB);
}

function chkOffset() {
	var action = 'impacts/chooseoffset';
	var form = 'offset_form';
	var cb = function(data){var imp = data.imp; getPaymentForm(imp);}
	postIWForm(action,form,cb);
}

function getPaymentForm(imp) {
	var action = 'impacts/payment&imp=' + imp;
	var submit = 'impact_pay';
	var cb = function(){chkPayment(imp);}
	var back = function(){getOffsetForm();}
	getIWForm(action,submit,back,cb);
}

var i=0;
function chkPayment(imp) {
	if(i > 2) {
		getSorry(imp);
	} else {
		var action = 'impacts/payment&imp=' + imp;
		var form = 'payment_form';
		var cb = function(data){getApproved(data.access);};
		var eb = function(data){
			//clear all errors first
			$(".error").each(function() {
				$(this).empty();
			});
			var etext = data.errortext;
			if(etext.declined) {
				getSorry(imp);
			} else {
				for(var e in etext) {
					if(e == 'ccnumber') {
						i++;
					}
					$(".error","#pay_" + e).html(etext[e]);
				}
			}
		}
		postIWForm(action,form,cb,eb);
	}
}

function getSorry(imp) {
	var action = 'impacts/sorry&imp=' + imp;
	var submit = '';
	var cb = function(){}
	getIWForm(action,submit,false,cb);
}

function getApproved(access) {
	var action = 'impacts/approved&access=' + access;
	var submit = 'view_impact';
	var cb = function(){
		var form = $("#approved").serialize();
		alert(form);
		load_impact(form.impact_id);
	}
	getIWForm(action,submit,false,cb);
}







