jQuery.noConflict();

jQuery(document).ready(function(){
	jQuery("#recaptcha_response_field").blur(function(event){
		OrderForm.getFocus("recaptcha");
	});	
	
	jQuery("#recaptcha_response_field").focus(function(event){
		OrderForm.setFocus("recaptcha");
	});
		
	jQuery("#recaptcha_reload").click(function(event){
		jQuery("#captchaError").hide().html("");
	});
});

var RecaptchaOptions = {
	theme : 'clean'
};

var OrderForm = {
	errorsArray : [],
	setFocus: function(id) {
		document.getElementById(id).className = "focus";	
	},
	getFocus: function(id) {
		document.getElementById(id).className = "_";	
		
		switch (id) {
			case 'inquiry4':	
				jQuery("#fairBagsError").hide();
				break;
			case 'inquiry6':
				jQuery("#postersError").hide();
				break;
			case 'inquiry7':
				jQuery("#inboundError").hide();
				break;
			case 'inquiry8':
				jQuery("#outboundError").hide();
				break;
			case 'inquiry9':
				jQuery("#phonecardsError").hide();
				break;
			case 'inquiry10':
				jQuery("#confirmationError").hide();
				break;
			case 'recaptcha':
				jQuery("#captchaError").hide();
				break;	
			default:
				jQuery("#" + id + "Error").hide();
				break;
		}
	},
	getFocusOnOthers: function(id) {
		switch (id) {
			case 'display':
				for (var i=2; i<10; i++)
					OrderForm.getFocus("inquiry" + i);
				OrderForm.getFocus("nextArrivalDateInquiry");
				OrderForm.getFocus("nextDepartureDateInquiry");
				OrderForm.getFocus("preDepartureMeetingDateInquiry");
				OrderForm.getFocus("discussIntlCallPhoneOptions");
				OrderForm.getFocus("fairDateInquiry");		
				break;
			case 'pamphlets':
				OrderForm.getFocus("inquiry1");
				for (var i=3; i<10; i++)
					OrderForm.getFocus("inquiry" + i);	
				OrderForm.getFocus("nextArrivalDateInquiry");
				OrderForm.getFocus("nextDepartureDateInquiry");
				OrderForm.getFocus("preDepartureMeetingDateInquiry");
				OrderForm.getFocus("discussIntlCallPhoneOptions");
				OrderForm.getFocus("fairDateInquiry");
				break;	
			case 'fairbags':
				for (var i=1; i<3; i++)
					OrderForm.getFocus("inquiry" + i);	
				for (var i=5; i<10; i++)
					OrderForm.getFocus("inquiry" + i);	
				OrderForm.getFocus("nextArrivalDateInquiry");
				OrderForm.getFocus("nextDepartureDateInquiry");
				OrderForm.getFocus("preDepartureMeetingDateInquiry");
				OrderForm.getFocus("discussIntlCallPhoneOptions");
				OrderForm.getFocus("fairDateInquiry");
				break;
			case 'posters':
				for (var i=1; i<5; i++)
					OrderForm.getFocus("inquiry" + i);	
				for (var i=7; i<10; i++)
					OrderForm.getFocus("inquiry" + i);	
				OrderForm.getFocus("nextArrivalDateInquiry");
				OrderForm.getFocus("nextDepartureDateInquiry");
				OrderForm.getFocus("preDepartureMeetingDateInquiry");
				OrderForm.getFocus("discussIntlCallPhoneOptions");
				OrderForm.getFocus("fairDateInquiry");
				break;
			case 'inbound':
				for (var i=1; i<7; i++)
					OrderForm.getFocus("inquiry" + i);	
				for (var i=8; i<10; i++)
					OrderForm.getFocus("inquiry" + i);	
				OrderForm.getFocus("nextArrivalDateInquiry");
				OrderForm.getFocus("nextDepartureDateInquiry");
				OrderForm.getFocus("preDepartureMeetingDateInquiry");
				OrderForm.getFocus("discussIntlCallPhoneOptions");
				OrderForm.getFocus("fairDateInquiry");	
				break;
			case 'outbound':
				for (var i=1; i<8; i++)
					OrderForm.getFocus("inquiry" + i);	
				OrderForm.getFocus("inquiry9");
				OrderForm.getFocus("nextArrivalDateInquiry");
				OrderForm.getFocus("nextDepartureDateInquiry");
				OrderForm.getFocus("preDepartureMeetingDateInquiry");
				OrderForm.getFocus("discussIntlCallPhoneOptions");
				OrderForm.getFocus("fairDateInquiry");
				break;
			case 'phonecards':
				for (var i=1; i<9; i++)
					OrderForm.getFocus("inquiry" + i);	
				OrderForm.getFocus("nextArrivalDateInquiry");
				OrderForm.getFocus("nextDepartureDateInquiry");
				OrderForm.getFocus("preDepartureMeetingDateInquiry");
				OrderForm.getFocus("discussIntlCallPhoneOptions");
				OrderForm.getFocus("fairDateInquiry");
				break;
			case 'preDepartureMailings':
				for (var i=1; i<10; i++)
					OrderForm.getFocus("inquiry" + i);	
				OrderForm.getFocus("nextArrivalDateInquiry");
				OrderForm.getFocus("nextDepartureDateInquiry");
				OrderForm.getFocus("preDepartureMeetingDateInquiry");
				OrderForm.getFocus("discussIntlCallPhoneOptions");
				OrderForm.getFocus("fairDateInquiry");
				break;
			case 'studyAbroadFairsDateInquiry':
				for (var i=1; i<10; i++)
					OrderForm.getFocus("inquiry" + i);
				OrderForm.getFocus("nextArrivalDateInquiry");
				OrderForm.getFocus("nextDepartureDateInquiry");
				OrderForm.getFocus("preDepartureMeetingDateInquiry");
				OrderForm.getFocus("discussIntlCallPhoneOptions");
				OrderForm.getFocus("fairDateInquiry");
				break;
			case 'discussIntlCallPhoneOptions':
				for (var i=1; i<10; i++)
					OrderForm.getFocus("inquiry" + i);
				OrderForm.getFocus("nextArrivalDateInquiry");
				OrderForm.getFocus("nextDepartureDateInquiry");
				OrderForm.getFocus("preDepartureMeetingDateInquiry");
				OrderForm.getFocus("fairDateInquiry");
				break;
			case 'nextArrivalDateInquiry':
				for (var i=1; i<10; i++)
					OrderForm.getFocus("inquiry" + i);
				OrderForm.getFocus("discussIntlCallPhoneOptions");
				OrderForm.getFocus("nextDepartureDateInquiry");
				OrderForm.getFocus("preDepartureMeetingDateInquiry");
				OrderForm.getFocus("fairDateInquiry");
				break;
			case 'nextDepartureDateInquiry':
				for (var i=1; i<10; i++)
					OrderForm.getFocus("inquiry" + i);
				OrderForm.getFocus("discussIntlCallPhoneOptions");
				OrderForm.getFocus("nextArrivalDateInquiry");
				OrderForm.getFocus("preDepartureMeetingDateInquiry");
				OrderForm.getFocus("fairDateInquiry");
				break;
			case 'preDepartureMeetingDateInquiry':
				for (var i=1; i<10; i++)
					OrderForm.getFocus("inquiry" + i);
				OrderForm.getFocus("discussIntlCallPhoneOptions");
				OrderForm.getFocus("nextArrivalDateInquiry");
				OrderForm.getFocus("nextDepartureDateInquiry");
				OrderForm.getFocus("fairDateInquiry");
				break;
			case 'fairDateInquiry':
				for (var i=1; i<10; i++)
					OrderForm.getFocus("inquiry" + i);
				OrderForm.getFocus("discussIntlCallPhoneOptions");
				OrderForm.getFocus("nextArrivalDateInquiry");
				OrderForm.getFocus("nextDepartureDateInquiry");
				OrderForm.getFocus("preDepartureMeetingDateInquiry");
				break;
		}	
	},
	setFocusOnForm: function(id) {
		var class_name = document.getElementById("" + id).className;
		
		switch (class_name) {
			case 'first_column multicolumn':
				document.getElementById(id).className = "first_column multicolumn focus";	
				break;
			case 'multicolumn':
				document.getElementById(id).className = "multicolumn focus";
				break;
		}	
	},
	getFocusOnForm: function(id) {
		if ("first_column multicolumn focus" == document.getElementById(id).className) {
			document.getElementById(id).className = "first_column multicolumn";
		} else if ("multicolumn focus" == document.getElementById(id).className) {
			document.getElementById(id).className = "multicolumn";
		} 
		
		jQuery("#" + id + "Error").hide();
	},
	disableComboForState: function() {
		if("United States" == document.getElementById("cmbCountry").value) {
			jQuery("#cmbState").removeAttr("disabled");
		} else {
			jQuery("#cmbState").attr("disabled", "disabled");
			OrderForm.getFocus("state");
			jQuery("#stateError").hide();
		}
	},
	disableTextfield: function(radioID,fieldID) {
		document.getElementById("" + fieldID).disabled = !(document.getElementById("" + radioID).checked);
	},
	disableOthersTextfield: function() {
		var universityID = jQuery('#cmbUniversity').val();
		
		if(0 == universityID) {
			jQuery('#txtOthers').removeAttr('disabled');	
			OrderForm.setFocus("others");
			
			jQuery('#cmbCountry').val("United States");
			jQuery('#cmbState').val(0).removeAttr('disabled');	
			
			if("United States" == jQuery("#cmbCountry").val()) {
				OrderForm.setFocus("state");
				jQuery("#stateError").show().html("State is required.");
			}
		} else {
			jQuery('#txtOthers').attr('disabled', 'disabled');
			jQuery('#othersError').hide();
			OrderForm.getFocus("others");
			OrderForm.getFocus("state");	
			
			OrderForm.ajax({
				url: "admin/usu/orderAction.php",
				data: "action=getUniversityState&universityID=" + universityID,
				complete: function (response,status) {
					var array = response.split("<<<>>>");
					jQuery('#cmbState').val(array[0]);
					jQuery('#cmbCountry').val(array[1]);
					
					if (0 == array[0]) {
						jQuery('#cmbState').attr('disabled', 'disabled');
					}
					else {
						jQuery('#cmbState').removeAttr('disabled');
					}
				}
			});	
		}
	},
	redirectPage: function() {
		window.location = "/orderform.php#errorsListAnchor";
	},
	recreateCaptcha: function() {
		Recaptcha.destroy();
		Recaptcha.create(
			jQuery("#hidPK").val(),
			"captcha",
			{	theme: "clean",
				callback: OrderForm.redirectPage
			}
		);
	},
	validateInput: function() {
		OrderForm.emptyErrorsOfArray();
		jQuery("#btnSubmitForm").attr("disabled", "disabled");
		
		var recaptchaResponse = jQuery("#recaptcha_response_field").val();
		var recaptchaChallenge = jQuery("#recaptcha_challenge_field").val();
		
		OrderForm.checkOrder();
		OrderForm.validateRequiredFields();
		OrderForm.ajax({
			url: "admin/usu/orderAction.php",
			data: "action=validate&recaptcha_response_field=" + recaptchaResponse + "&recaptcha_challenge_field=" + recaptchaChallenge,
			loading: function() {
				jQuery("#captchaError").hide();
				jQuery("#loading_image").show();	
			},
			complete: function (response) {
				jQuery("#loading_image").hide();
				
				if(response) {
					if (OrderForm.checkOrder() && OrderForm.validateRequiredFields()) {
						jQuery("#btnSubmitForm").attr("disabled", "disabled");
						OrderForm.getFocus("recaptcha");
						jQuery("#captchaError").hide();
						document.getElementById("orderForm").submit();
						return true;
					} else {
						jQuery("#btnSubmitForm").removeAttr("disabled");
						OrderForm.recreateCaptcha();
						OrderForm.setFocus("recaptcha");
						jQuery("#captchaError").hide();
						OrderForm.errorsArray.pop();
					}
				} else {
					jQuery("#btnSubmitForm").removeAttr("disabled");
					OrderForm.recreateCaptcha();
					OrderForm.setFocus("recaptcha");
					jQuery("#captchaError").show().html("Invalid security code.");
					OrderForm.insertToArrayOfErrors("Invalid security code.");
				}
				
				var errors = OrderForm.getArrayOfErrors();
				var html = '';
				
				for(var i=0; i< errors.length; i++)
					html += "<li>" + errors[i] + "</li>";
				
				jQuery("#errorsList").html(html);
				OrderForm.redirectPage();
			}
		});
		
		return false;
	},
	checkOrder: function() {
		var display 				= OrderForm.getCheckedValue(document.forms["orderForm"].elements["radDisplay"]);
		var pamphlet 				= OrderForm.getCheckedValue(document.forms["orderForm"].elements["radRefillPamphlet"]);
		var fairBags 				= OrderForm.getCheckedValue(document.forms["orderForm"].elements["radFairBags"]);
		var posters 				= OrderForm.getCheckedValue(document.forms["orderForm"].elements["radFairPosters"]);
		var discuss 				= OrderForm.getCheckedValue(document.forms["orderForm"].elements["radDiscuss"]);
		var phonecards 				= jQuery("#txtNumPhonecards").val();
		var numFairBags 			= jQuery("#txtNumFairBags").val();
		var numPosters 				= jQuery("#txtNumPosters").val();
		var numInbound 				= jQuery("#txtNumInboundStudents").val();
		var numOutbound 			= jQuery("#txtNumOutboundStudents").val();
		var numPreDepartureMailings = jQuery("#txtNumPreDepartureMailings").val();
		var fairDate				= jQuery("#txtFairDate").val();
		var flag1 = flag2 = flag3 = flag4 = false;
		
		if ("Yes" == display || "Yes" == pamphlet || "Yes" == fairBags || "Yes" == posters || "" != phonecards || "" != numInbound || "" != numOutbound || "" != numPreDepartureMailings || "Yes" == discuss || "" != fairDate) {
			OrderForm.getFocus("inquiry5");
			OrderForm.getFocus("inquiry9");
			
			for (var i=1; i<=3; i++) {
				OrderForm.getFocus("inquiry" + i);
			}
			
			if ("Yes" == display || "Yes" == pamphlet) {
				flag1 = true;	
			} 
			
			if ("Yes" == fairBags) {
				if (0 > numFairBags || !OrderForm.isInt(numFairBags) || "" == numFairBags) {
					OrderForm.setFocus("inquiry4");
					flag2 = false;
					
					if ("" == numFairBags) {
						jQuery("#fairBagsError").show().html("Number of fair bags is required.");
						OrderForm.insertToArrayOfErrors("Number of fair bags is required.");
					} else {
						jQuery("#fairBagsError").show().html("Only integers greater than 0 are accepted in this field.");
						OrderForm.insertToArrayOfErrors("Only integers greater than 0 are accepted as number of fair bags.");
					}
				} else {
					OrderForm.getFocus("inquiry4");
					flag2 = true;
				}	
			}
			
			if ("Yes" == posters) {
				if (0 > numPosters || !OrderForm.isInt(numPosters)) {
					OrderForm.setFocus("inquiry6");
					flag3 = false;
					
					if ("" == numPosters) {
						jQuery("#postersError").show().html("Number of fair posters is required.");
						OrderForm.insertToArrayOfErrors("Number of fair posters is required.");	
					} else {
						jQuery("#postersError").show().html("Only integers greater than 0 are accepted in this field.");
						OrderForm.insertToArrayOfErrors("Only integers greater than 0 are accepted as number of fair posters.");	
					}	
				} else {
					OrderForm.getFocus("inquiry6");
					flag3 = true;	
				}
			}
			
			if ("" != fairDate && ("No" == fairBags || "No" == posters)) {
				if ("No" == fairBags && "No" == posters) {
					OrderForm.setFocus("inquiry3");
					OrderForm.setFocus("inquiry5");
					flag3 = false;	
				} else {
					OrderForm.getFocus("inquiry3");
					OrderForm.getFocus("inquiry5");
					flag3 = true;	
				}
			} else {
				flag3 = true;	
			}
			
			if ("" != phonecards || "" != numInbound || "" != numOutbound || "" != numPreDepartureMailings || "Yes" == discuss) {
				flag4 = true;
				
				if ("" != phonecards && (0 > phonecards || !OrderForm.isInt(phonecards))) {
					OrderForm.setFocus("inquiry9");	
					jQuery("#phonecardsError").show().html("Only integers greater than 0 are accepted in this field.");	
					OrderForm.insertToArrayOfErrors("Only integers greater than 0 are accepted as number of phonecards and cell phone brochures.");
					flag4 = false;	
				}
				
				if ("" != numInbound && (0 > numInbound || !OrderForm.isInt(numInbound))) {
					OrderForm.setFocus("inquiry7");
					jQuery("#inboundError").show().html("Only integers greater than 0 are accepted in this field.");
					OrderForm.insertToArrayOfErrors("Only integers greater than 0 are accepted as number of inbound students.");	
					flag4 = false;	
				}
				
				if ("" != numOutbound && (0 > numOutbound || !OrderForm.isInt(numOutbound))) {
					OrderForm.setFocus("inquiry8");
					jQuery("#outboundError").show().html("Only integers greater than 0 are accepted in this field.");		
					OrderForm.insertToArrayOfErrors("Only integers greater than 0 are accepted as number of outbound students.");	
					flag4 = false;	
				}
				
				if ("" != numPreDepartureMailings && (0 > numPreDepartureMailings || !OrderForm.isInt(numPreDepartureMailings))) {
					OrderForm.setFocus("preDepartureMailings");
					jQuery("#preDepartureMailingsError").show().html("Only integers greater than 0 are accepted in this field.");
					OrderForm.insertToArrayOfErrors("Only integers greater than 0 are accepted as number of pre-departure mailings.");	
					flag4 = false;	
				}
			}
		} else {
			OrderForm.setFocus("inquiry5");
			OrderForm.setFocus("discussIntlCallPhoneOptions");
			
			for (var i=1; i<=3; i++)
				OrderForm.setFocus("inquiry" + i);
			for (var j=7; j<=9; j++)
				OrderForm.setFocus("inquiry" + j);
				
			flag1 = flag2 = flag3 = flag4 = false;
		}
		
		if (!flag1 && !flag2 && !flag3 && !flag4)
			OrderForm.insertToArrayOfErrors("Please select at least one from our resources below.");
		
		return (flag1 || flag2 || flag3 || flag4);
	},
	validateRequiredFields: function() {
		var firstName 		= OrderForm.trim(jQuery("#txtFirstName").val());
		var lastName 		= OrderForm.trim(jQuery("#txtLastName").val());
		var phone 			= OrderForm.trim(jQuery("#txtPhone").val());
		var email 			= OrderForm.trim(jQuery("#txtEmail").val());	
		var universityID 	= jQuery("#cmbUniversity").val();
		var others 			= OrderForm.trim(jQuery("#txtOthers").val());
		var country 		= OrderForm.trim(jQuery("#cmbCountry").val());
		var stateID 		= jQuery("#cmbState").val();
		var address1 		= OrderForm.trim(jQuery("#txtStreetAddress").val());
		var address2 		= OrderForm.trim(jQuery("#txtStreetAddress2").val());
		var city 			= OrderForm.trim(jQuery("#txtCity").val());
		var zip 			= jQuery("#txtZip").val();
		var flag1, flag2, flag3, flag4, flag5, flag6, flag7, flag8, flag9;
		
		if ("" == firstName) {
			OrderForm.setFocusOnForm("firstName");
			jQuery("#firstNameError").show().html("First name is required.");
			OrderForm.insertToArrayOfErrors("First name is required.");
			flag1 = false;
		} else {
			OrderForm.getFocusOnForm("firstName");
			flag1 = true;
		}
		
		if ("" == lastName) {
			OrderForm.setFocusOnForm("lastName");
			jQuery("#lastNameError").show().html("Last name is required.");
			OrderForm.insertToArrayOfErrors("Last name is required.");
			flag2 = false;
		} else {
			OrderForm.getFocusOnForm("lastName");
			flag2 = true;
		}
		
		if ("" == phone) {
			OrderForm.setFocusOnForm("phone");
			jQuery("#phoneError").show().html("Contact number is required.");
			OrderForm.insertToArrayOfErrors("Contact number is required.");
			flag3 = false;
		} else {
			OrderForm.getFocusOnForm("phone");
			flag3 = true;
		}
		
		if ("" == email || !OrderForm.isValidEmailAddress(email)) {
			OrderForm.setFocusOnForm("email");
			flag4 = false;
			
			if ("" == email) {
				jQuery("#emailError").show().html("Email address is required.");	
				OrderForm.insertToArrayOfErrors("Email address is required.");
			} else {
				jQuery("#emailError").show().html("Invalid email address.");
				OrderForm.insertToArrayOfErrors("Invalid email address.");
			}
		} else {
			OrderForm.getFocusOnForm("email");
			flag4 = true;
		}
		
		if (0 == universityID && "" == others) {
			OrderForm.setFocus("others");
			jQuery("#othersError").show().html("University name is required if you have not selected any university from our list.");
			OrderForm.insertToArrayOfErrors("University name is required.");
			flag5 = false;
		} else if (0 < universityID || ((0 == universityID && "" != others))) {
			OrderForm.getFocus("others");
			flag5 = true;	
		}
		
		if (0 == stateID && "United States" == country) {
			OrderForm.setFocus("state");
			jQuery("#stateError").show().html("State is required.");
			OrderForm.insertToArrayOfErrors("State is required.");
			flag6 = false;
		} else {
			OrderForm.getFocus("state");
			flag6 = true;
		}
		
		if ("" == address1) {
			OrderForm.setFocus("address1");
			jQuery("#address1Error").show().html("Street Address 1 is required.");
			OrderForm.insertToArrayOfErrors("Street Address 1 is required.");
			flag7 = false;	
		} else {
			OrderForm.getFocus("address1");
			flag7 = true;
		}
		
		if ("" == address2) {
			OrderForm.setFocus("address2");
			jQuery("#address2Error").show().html("Street Address 2 is required.");
			OrderForm.insertToArrayOfErrors("Street Address 2 is required.");	
			flag8 = false;
		} else {
			OrderForm.getFocus("address2");
			flag8 = true;
		}
		
		if ("" == city) {
			OrderForm.setFocus("city");
			jQuery("#cityError").show().html("City is required.");
			OrderForm.insertToArrayOfErrors("City is required.");
			flag9 = false;
		} else {
			OrderForm.getFocus("city");
			flag9 = true;
		}
		
		if ("" == zip) {
			OrderForm.setFocus("zip");
			jQuery("#zipError").show().html("Zip or postal code is required.");
			OrderForm.insertToArrayOfErrors("Zip or postal code is required.");
			flag10 = false;
		} else {
			if (!OrderForm.isInt(zip) || 0 > zip) {
				OrderForm.setFocus("zip");
				jQuery("#zipError").show().html("Only integers are accepted in this field.");
				OrderForm.insertToArrayOfErrors("Only integers are accepted as zip or postal code.");
				flag10 = false;
			} else {
				OrderForm.getFocus("zip");
				flag10 = true;
			}
		}
		
		return (flag1 && flag2 && flag3 && flag4 && flag5 && flag6 && flag7 && flag8 && flag9 && flag10);
	},
	getCheckedValue: function(radioObj) {
		for(var i = 0; i < radioObj.length; i++) {
			if(radioObj[i].checked) {
				return radioObj[i].value;
			}
		}
		return;
	},
	insertToArrayOfErrors: function(error) {
		OrderForm.errorsArray.push(error);
	},
	getArrayOfErrors: function() {
		return OrderForm.errorsArray;
	},
	emptyErrorsOfArray: function() {
		OrderForm.errorsArray = [];
	},
	trim: function(text) {
		return (text || "").replace( /^\s+|\s+$/g, "" );
	},
	isInt: function(s) {
		return (s.toString().search(/^-?[0-9]+$/) == 0);
	},
	isValidEmailAddress: function(str) {
		var at = "@";
		var dot = ".";
		var atIndex = str.indexOf(at);
		var length = str.length;
		var dotIndex = str.indexOf(dot);
		
		if (-1 == atIndex) {
		   return false;
		}

		if (-1 == atIndex || 0 == atIndex || length == atIndex){
		   return false;
		}

		if (-1 == dotIndex || 0 == dotIndex || length == dotIndex){
		   return false;
		}

		if (-1 != str.indexOf(at,(atIndex+1))){
		    return false;
		}

		if (dot == str.substring(atIndex-1,atIndex) || dot == str.substring(atIndex+1,atIndex+2)){
		    return false;
		}
	
		if (-1 == str.indexOf(dot,(atIndex+2))){
		    return false;
		}
		
		if (-1 != str.indexOf(" ")){
		    return false;
		}
	
	 	return true;
	},
	ajax: function(a) {
		var timer, send_and_abort = false, data = "", action = "GET";
		var complete = function (response){}
		
		if (!a.url) {
			alert("URL must be set!");
			return;
		} 
		
		if (a.data) {
			data = a.data;
		}
		
		if (a.send_and_abort) {
			send_and_abort = a.send_and_abort;
		}
		
		if (a.action) {
			action = a.action;
		}
		
		if (a.complete) {
			complete = a.complete;
		}
			
		a.url = a.url+"?sid="+Math.random()+"&"+data;
		var xhr = window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
		xhr.open(action, a.url, true);
		xhr.send(null);				
		var onreadystatechange = function(isTimeout) {
			if ("timed-out" == isTimeout) {
				if (4 == xhr.readyState) {
					complete(xhr.responseText,true);
				} else {
					complete(xhr.responseText,false);
				}
				clearInterval(timer);
				xhr = null;
			} else if (4 == xhr.readyState) {
				complete(xhr.responseText,true);
				clearInterval(timer);
				xhr = null;
			}
		}	
		
		timer = setInterval(onreadystatechange,13);
		if (a.timeout > 0) {
			setTimeout(function(){
				if (xhr) {
					xhr.abort();
					onreadystatechange("timed-out");
				}					
			},a.timeout);
		}
	}
}
