$(function(){
	var jQ = $;
	// initialize trip dates fields
	jQ.each(jQ(".tdates"),function(i) {
		tdates.length += (i % 2);
		jQ("#"+this.id).bind("keyup focus blur change",{tdsrc: this.id},tdCheck); 
	});
	 
	// initialize accommodation subgroup radios
	jQ("input,select","#field-acc").not("[type=radio]").attr({ disabled: true });
	jQ.each(jQ("#field-acc .subgroup input[type=radio]"),function() {
		jQ("#"+this.id).bind("click",accCheck);
	});
	
	// activities
	jQ("input,select","#field-act").not(jQ("[type=checkbox]","#field-act .subgroup")).attr({ disabled: true });
	jQ.each(jQ("input[type=checkbox]","#field-act").not(jQ("[type=checkbox]","#field-act .subtext")),function() {
		jQ("#"+this.id).bind("click",actCheck);
	});
	
	// date picker
	$(".tdates").date_input();
});

var tdates = {
	length:0
};

function tdCheck(event) {
	var jQ = $;
	var id = event.data.tdsrc;
	var row = parseInt(id.replace(/arrive|depart/,''));
	
	if(row < tdates.length) {
		if(jQ("#arrive"+row)[0].value.length > 0 && jQ("#depart"+row)[0].value.length > 0) {
			var nrow = row+1;
			jQ("#arrive"+nrow+", #depart"+nrow).attr({ disabled: false });
		}
		else {
			for(i=row+1;i <= tdates.length;i++) {
				jQ("#arrive"+i+", #depart"+i).attr({ disabled: true });
			}
		}
	}
}

function lodgeCheck(v) {
	var lr = $("#lodge-rooms");
	if(v != "king") {
		lr.show();
		lr.attr({ disabled: false });
	}
	else {
		lr.attr({ disabled: true });
		lr.hide();
	}
}

var accTimer = 0;

function accCheck(yar) {
	if(yar !== true) {
		clearTimeout(accTimer);
		accTimer = setTimeout("accCheck(true)",150);
	}
	else {
		var jQ = $;
		var select = jQ("#"+jQ("#field-acc .subgroup input[checked]")[0].id.replace(/select\_/,''));
		var hidegrp = jQ("#field-acc ul").not(select);
		
		jQ("input,select",hidegrp).attr({ disabled: true });
		
		if(jQ.browser.msie) {
			hidegrp.hide();
			select.show();
			jQ("input,select",select).attr({ disabled: false });
		}
		else {
			hidegrp.slideUp("fast",function() {
				select.slideDown("fast");
				jQ("input,select",select).attr({ disabled: false });
			});
		}
	}
}

function actCheck(event) {
	var jQ = $;
	var select = jQ('#'+this.id.replace(/select\_/,''));
	var ch = !this.checked;
	var slide = "slide";
	var up = "Up";
	var down = "Down";
	var speed = "fast";
	
	if(jQ.browser.msie) {
		slide = '';
		up = "hide";
		down = "show";
		speed = '';
	}
		
	jQ("input,select",select).not(jQ("ul input",select)).attr({ disabled: ch });
	select[slide + (ch ? up : down)](speed);
}

function formSubmit(formID) {

	//Generic
	var jQ = $;
	var query = '';
	var amp = '';
	
	var submitURL = "form_check.php"; // may need to be changed per site.
	
	var responseDiv = jQ("#"+formID+"_response");
	
	responseDiv.hide();
	responseDiv.html('');
	
	jQ("[type=radio][checked],[type=checkbox][checked],[type=text],[type=hidden],textarea,select","#"+formID).not("[disabled]").each(function() {
		if( !(jQ(this).is("[type=text],textarea") && this.value == this.defaultValue) ) {
			query += amp+this.name+'='+this.value.replace('&','%26'); // hackish urlencoding
			amp = '&';
		}
	});

	$.ajax({
		type:'POST',
		url:submitURL,
		data:query,
		dataType:'xml',
		complete:function(xh,s) {
			var jQ = $;
			xd = xh.responseXML;
			
			defaultResponder(xd,formID,responseDiv);
		}
	});
}

var styleDefs = [];

function defaultResponder(xd,formID,responseDiv) {
	jQ = $;
	if(jQ("success",xd).length > 0) {
		jQ("#planForm").submit();
	}
	else {
		// Reset styles
		if(styleDefs.length > 0) {
			for(a in styleDefs) {
				var obj = jQ("#"+styleDefs[a]);
				var brdr = { border: "1px solid #00b6ee" };
				if(obj.is("ul")) {
					brdr.borderTop = "0px";
				}
				jQ("#"+styleDefs[a]).css(brdr);
			}
			styleDefs = [];
		}
		
		var plrl = (jQ("error",xd).length > 1) ? 's' : '';
		var errout = '<dl>Some fields are required. Please review the following:';
		var i;
		for(i=0; i < jQ("error",xd).length; i++) {
			errout += "<dd>&bull; "+jQ("error:eq("+i+")",xd).text()+"</dd>";
			// store element id's
			elemId = jQ("error:eq("+i+")",xd).attr("name");
			styleDefs[i] = elemId;
			elemObj = jQ("#"+elemId);
			// set new style
			if(elemObj.length > 0) {
				elemObj.css("border","1px solid #ff0000");
			}
		}
		errout += "</dl>";

		responseDiv.html(errout);
		responseDiv.show();
		var pos = jQ("#planForm").position();
		window.scrollTo(pos.left,pos.top);
	}
}