var $gclvc_questions;
var $gclvc_q_inputs;
var $gclvc_tab_links;
var $gclvc_steps;
var $gclvc_pages;
var $gclvc_msg_wrapper;
var gclvc_stepPosConclusion;
var gclvc_pagePosConclusion;
var validate_email;
var validate_phone;

var gclvc = {
	"qidCur"     : 0,
	"pagePosCur" : 0,
	"stepPosCur"  : 0,
	"isFinished" : false,
	"isDisabled" : false
};


$(document).ready(function(){
						   
	// Checks the browser and adds classes to the body to reflect it.
	// author: Jon Hobbs-Smith   http://www.tvidesign.co.uk/blog/CSS-Browser-detection-using-jQuery-instead-of-hacks.aspx
	var userAgent=navigator.userAgent.toLowerCase();$.browser.chrome=/chrome/.test(navigator.userAgent.toLowerCase());if($.browser.msie){$('body').addClass('msie');$('body').addClass('msie'+$.browser.version.substring(0,1))}if($.browser.chrome){$('body').addClass('chrome');userAgent=userAgent.substring(userAgent.indexOf('chrome/')+7);userAgent=userAgent.substring(0,1);$('body').addClass('chrome'+userAgent);$.browser.safari=false}if($.browser.safari){$('body').addClass('safari');userAgent=userAgent.substring(userAgent.indexOf('version/')+8);userAgent=userAgent.substring(0,1);$('body').addClass('safari'+userAgent)}if($.browser.mozilla){if(navigator.userAgent.toLowerCase().indexOf('firefox')!=-1){$('body').addClass('firefox');userAgent=userAgent.substring(userAgent.indexOf('firefox/')+8);userAgent=userAgent.substring(0,1);$('body').addClass('firefox'+userAgent)}else{$('body').addClass('mozilla')}}if($.browser.opera){$('body').addClass('opera')}
	
	
	$(".cssir").cssir();
	 
	$(".cssiroo").cssir({
	  onOver: true 
	});
	
	
	$gclvc_questions   = $("#gclvc_form .gclvc_q"); //$("#gclvc_form ol > li");
	$gclvc_tab_links   = $("#gclvc_form h2");
	$gclvc_steps       = $(".gclvc_steps");
	$gclvc_pages       = $(".gclvc_pages");
	$gclvc_q_inputs    = $("#gclvc_form li input");
	$gclvc_msg_wrapper = $("#gclvc_message");

	gclvc_stepPosConclusion = $gclvc_steps.length-1;
	gclvc_pagePosConclusion = $gclvc_pages.length-1;
	

	$gclvc_questions.each(function (i) {
		if(gclvc_q_data[i]) { 
			$(this).data("qid",gclvc_q_data[i][0]); 
			$(this).data("class",gclvc_q_data[i][5]);
			//$(this).prepend(" qid: " + gclvc_q_data[i][0] + " | class: " + gclvc_q_data[i][5] + " ");
		} 
		else { alert("Question #"+i+": "+$(this).find("input").attr("name")); }
	});

	$gclvc_q_inputs.each(function (i) {
		if(gclvc_opt_data[i]) {
			$(this).data("qid", gclvc_opt_data[i][0]);
			if(gclvc_opt_data[i][1]) { $(this).data("act",gclvc_opt_data[i][1]); }
		} 
		else { alert("Input #"+i+": "+ $(this).attr("name")); }
	});
	

	//$gclvc_pages.each(function (i) { $(this).append($(this).width()); });

/*
    jQuery.each(gclvc_chainedq[0], function(i, val) {
		toggle_q("hide", "class", val);
    });
	
	jQuery.each(gclvc_chainedq[1], function(i, val) {
		toggle_q("hide", "qid", val);
    });
*/	
	
	//$gclvc_questions.css("border", "1px blue solid");
	//$gclvc_q_inputs.css("border", "1px red solid");
	//$(".gclvc_btnsubmit_wrapper").clone().appendTo($gclvc_pages);
	//$(".gclvc_btnsubmit_wrapper").appendTo($gclvc_pages);
	
	//var maxHeight=100; var tempHeight;
	//$.each($gclvc_pages, function(){ tempHeight = $(this).height(); if(tempHeight > maxHeight) { maxHeight = tempHeight; } });
	//$gclvc_pages.height(maxHeight+20);


	$gclvc_tab_links.appendTo("#gclvc_tab_links").slice(1).hide().end().eq(0).addClass("gclvc_step_selected");
	$gclvc_steps.slice(1).hide();
	$gclvc_pages.slice(1).hide();
	
	
	$gclvc_tab_links.click(function () {
		var stepid = $gclvc_tab_links.index(this);
		if(gcl_step_pages[stepid][0]) {
			gclvc_go2page(gcl_step_pages[stepid][0]-1);
		}
		
		gclvc_go2step(stepid);
	});

	$("#gclvc_form :reset").click(function () {
		$.post("process_request.php?" + new Date().getTime(), { act: "reset" }, function(data){ document.location.href="index.php"; });
	});

	$("#gclvc_form").submit(function() {					
		
		validate_email = $("#gclvc_q1").val();
		if (validateRequired(validate_email) && !validateEmail(validate_email)) { 
			gclvc_field_validation_msg("gclvc_q1", "Email"); gclvc_go2step(0); gclvc_go2page(0); 
			return false;
		}
		
		validate_phone = $("#gclvc_q2").val();
		if (validateRequired(validate_phone) && !validatePhone(validate_phone)) { 
			gclvc_field_validation_msg("gclvc_q2", "Phone number"); gclvc_go2step(0); gclvc_go2page(0); 
			return false;
		}
		
		$('#gclvc_form').unblock({fadeOut:0}).block({ message: '<h1>Processing...</h1>', css: { border: '3px solid #a00' } });

		$.ajax({ 
			type: "POST",
			url:  "process_request.php?" + new Date().getTime(),
			data: "act=submit&page="+gclvc.pagePosCur+"&"+ $("#gclvc_form").serialize(),
			cache: false,
			async: true,
			success : function(data) { eval(data); },
			complete : function() { $("#gclvc_form").unblock(); }
		}); 

		return false;
	});
	
	
	$gclvc_q_inputs.click(function() {
		//data = $(this).parent().get(0).tagName;
		//var gclvc_qid = $gclvc_questions.index($(this).parents('li').eq(1));
		//$(this).parents('li.gclvc_question').eq(0).css("background-color", "green");
		
		gclvc.qidCur = $(this).data("qid");
		
		if(gclvc_q_data[(gclvc.qidCur)][2] != $(this).val()) {
			//new value submitted
			gclvc_q_data[(gclvc.qidCur)][2] = $(this).val();
			
			//if finished before, have to recalculate conclusion, so hide conclusion
			if(gclvc.isFinished){
				gclvc.isFinished = false;
				$gclvc_tab_links.eq(gclvc_stepPosConclusion).hide();
				$gclvc_pages.eq(gclvc_pagePosConclusion).hide();
			}
			
			if(gclvc.isDisabled){	
				gclvc.isDisabled = false;
				$gclvc_q_inputs.removeAttr("disabled").removeAttr("readonly");
			}
		

			if($(this).data("act")) {
				
				jQuery.each($(this).data("act"), function(actType, actParam) {

					switch (actType) {
						case "submit":
							$('#gclvc_form').unblock({fadeOut:0}).block({ message: '<h1>Processing...</h1>', css: { border: '3px solid #a00' } });
							$.ajax({ 
								type: "POST",
								url:  "process_request.php?" + new Date().getTime(),
								data: "act=dynamic&resubmit="+gclvc_q_data[(gclvc.qidCur)][1]+"&"+$(this).attr("name")+"="+$(this).val(),
								cache: false,
								async: true,
								success : function(data) { eval(data); },
								complete : function() { $("#gclvc_form").unblock(); }
							});		
							break;
	
						case "show_conclusion":
							gclvc.isFinished = true;
							//gclvc.isDisabled = true;
							//$gclvc_q_inputs.slice(gclvc_q_data[(gclvc.qidCur)][3]).attr("disabled","disabled").attr("readonly","readonly");
							
							gclvc_show_msg(1,null,actParam);
							break;
						
						case "show_popup":
							// msgtype: 1-conclusion, 2-popup, 3-info message, 4-error message
							gclvc_show_msg(2,null,actParam);
							//if (actParam.id) { gclvc_show_msg(2,null,actParam.id); } else if (actParam.msg) { gclvc_show_msg(2,actParam.msg,null); }
							break;
							
						case "show_msg":
							gclvc_show_msg(3,null,actParam);
						break;
						
						case "show_q_id":
							$.each( actParam, function(i, actObj){
								toggle_q("show", "qid", actObj);
							});
						break;
						
						case "show_q_class":
							$.each( actParam, function(i, actObj){
								toggle_q("show", "class", actObj);
							});	
						break;
						
						case "hide_q_id":
							$.each( actParam, function(i, actObj){
								toggle_q("hide", "qid", actObj);
							});
						break;
						
						case "hide_q_class":
							$.each( actParam, function(i, actObj){ 
								toggle_q("hide", "class", actObj);
							});
						break;
						
					}
					
				});
			}
		}
		
		gclvc_q_data[($(this).data("qid"))][1] = true;
		
	}); 
	
	
	$("#gclvc_q9_wrapper").hide();
	
	
	
}); 




function gclvc_go2step(sid) 
{
	if(gclvc.stepPosCur != sid) {
		gclvc.stepPosCur = sid;
		$gclvc_tab_links.removeClass("gclvc_step_selected").eq(gclvc.stepPosCur).show().addClass("gclvc_step_selected");
		$gclvc_steps.fadeOut("fast").eq(gclvc.stepPosCur).fadeIn(800);
	}
}


function gclvc_go2page(pid)
{
	//$gclvc_pages.css("border", "3px white solid"); alert("pid : "+pid+ " | gclvc.pagePosCur : " + gclvc.pagePosCur); //setTimeout(function() {  $gclvc_pages.css("border", "0px none"); }, 1500); 
	
	if(gclvc.pagePosCur != pid) {
		gclvc.pagePosCur = pid;
		$gclvc_msg_wrapper.html("");
		$gclvc_pages.fadeOut("fast").eq(gclvc.pagePosCur).fadeIn(800);
	}
}


var gclvc_visibleTabPrePos;
// msgtype: 1-conclusion, 2-popup, 3-info message, 4-error message
function gclvc_show_msg(msgtype, msg, msgid) 
{
	//var msg = (msg == null || msg == "undefined") ? "default" : msg;	
	if (msg == null || msg == "" || msg == "undefined") { var msg = gclvc_messages[msgid]; }
	
	switch(msgtype) {
		case 1:
			//gclvc_visibleTabPrePos = gclvc.tabPosVisible; 
			//gclvc_go2step($gclvc_pages.length);
			//gclvc.tabPosVisible = gclvc_visibleTabPrePos;

			gclvc.stepPosCur = -1;
			
			$("#conclusion_paths").hide();
			$("#conclusion_custom").show().html(msg);
			gclvc_go2step(gclvc_stepPosConclusion);
			gclvc_go2page(gclvc_pagePosConclusion);
			
		break;    


		case 2:
		
		break;
			
			
		case 3:
			$gclvc_msg_wrapper.hide().html("<span class=\"three\" style=\"display:none\">"+ msg +"</span><span class=\"one\" style=\"display:inline\">"+ msg +"</span>")
				.animate( {opacity: "show"}, 1000, function(){	
					$("#gclvc_message span.one").animate( {opacity: "hide"}, 1000);
					$("#gclvc_message span.three").animate( {opacity: "show"}, 1000);
					$("#gclvc_message span.three").animate( {opacity: "hide"}, 1500);	 
					$("#gclvc_message span.one").animate( {opacity: "show"}, 1500);
				}
			);		
		break;
		
		
		case 4:
			$gclvc_msg_wrapper.hide().html("<span class=\"two\">"+ msg +"</span><span class=\"one\">"+ msg +"</span>")
				.animate( {opacity: "show"}, 1000, function(){
					$gclvc_msg_wrapper.animate( {marginLeft: "2em"}, 800);	
					$gclvc_msg_wrapper.animate( {marginLeft: "0"}, 800);									
					$("#gclvc_message span.one").animate( {opacity: "hide"}, 1000);
					$("#gclvc_message span.two").animate( {opacity: "show"}, 1000);	 
					$("#gclvc_message span.two").animate( {opacity: "hide"}, 1500);
					$("#gclvc_message span.one").animate( {opacity: "show"}, 1500);
				}
			);		
		break;		
	}

}



function gclvc_field_validation_msg(fieldid, msg, msgid) 
{
	if (msg == null || msg == "" || msg == "undefined") { var msg = gclvc_messages[msgid]; }
	
	$gclvc_questions.removeClass("errfield").each(function(){
		if($(this).data("qid") == fieldid) { $(this).addClass("errfield").find("input").focus(); }
	});
	
	gclvc_show_msg(4, "Please fill the \""+ msg +"\" field.");
	
}

//[5, {"show_msg": "4", "show_qs": ["know_prescription"], "hide_qs": ["not_know_prescription"]}],
//[5, {"show_qs": ["not_know_prescription"], "hide_qs": ["know_prescription"]}],


// toggle_q("show", "class", "targetClassName") || toggle_q("show", "qid", "targetID") 
function toggle_q(act, type, target) 
{	
	if(isArray(target)) {
		jQuery.each(target, function(i, val) {
			toggle_q(act, type, val);
		});
	} 
	else {	
		switch (act) {
			case "show":
				$gclvc_questions.each(function (index, domEle) {
					if(isArray($(domEle).data(type))) {
						jQuery.each($(domEle).data(type), function(i, val) {
							if( val == target ) { $(domEle).show(); }
						});
					} else if( $(domEle).data(type) == target ) {
						$(domEle).show();
					}
					
				});
			break;
			
			case "hide":
				$gclvc_questions.each(function (index, domEle) {
					if(isArray($(domEle).data(type))) {
						jQuery.each($(domEle).data(type), function(i, val) {
							if( val == target ) { $(domEle).hide(); }
						});
					} else if( $(domEle).data(type) == target ) {
						$(domEle).hide();
					} 
				});	
			break;
		}
	}
	
}





function isArray(testObject) {   
    return testObject && !(testObject.propertyIsEnumerable('length')) && typeof testObject === 'object' && typeof testObject.length === 'number';
}


/* VALIDATION FUNCTIONS */
function validateRequired(fieldValue) { if (fieldValue == "") { return false; } else { return true; }}
		
function validateEmail(fieldValue, fieldObj) {
	if (fieldValue == "") return true;
	return /\w{1,}[@][\w\-]{1,}([.]([\w\-]{1,})){1,3}$/.test(fieldValue);
}
function validateNumber(fieldValue, fieldObj) {
	if (fieldValue == "") return true;
	return (!isNaN(fieldValue) && !/^\s+$/.test(fieldValue));
}	
function validateDigit(fieldValue, fieldObj) {
	if (fieldValue == "") return true;
	return !/[^\d]/.test(fieldValue);
}	

function validatePhone(fieldValue) {
	var error = "";
    var stripped = fieldValue.replace(/[\(\)\.\-\ ]/g, '');
    if (isNaN(parseInt(stripped))) {
        error = "The phone number contains illegal characters.\n";
    } else if (!(stripped.length == 10)) {
        error = "The phone number is the wrong length. Make sure you included an area code.\n";
    }
	
	if (error != "") {
    	alert("Some fields need correction:\n" + error);
    	return false;
  	}
	else {
		return true;
	}
}


///////////////////////////////////////////////////////////////////////////////
// [JQuery CSS Image Replacement Plugin] //////////////////////////////////////
(function($) {
$.fn.cssir = function(options) {
	
	var defaults = {
		spanClassName :null,
		spanClassNameFromParent:null,
		onOver        : false,
		onOverSuffix  : "_oo"
	},
    settings = $.extend({}, defaults, options);
	
	return this.each(function() {
		var $this = $(this),
		$span, className;
		
		if(settings.spanClassName != null && settings.spanClassName != "") {
			className = settings.spanClassName;
		} else if(settings.spanClassNameFromParent != null && settings.spanClassNameFromParent != "") {
			className = $this.parents(settings.spanClassNameFromParent).attr("id") + "_span";
		} else {
			className = $this.attr("id") + "_span"; //$("#debug").append("<br />" + className);
		}
		
		$span = $('<span class="'+className+'"> </span>'); //$span = $(document.createElement("span"));
		$this.append($span);
		if(settings.onOver) {
			$this.hover(function () {
				$span.removeClass(className).addClass(className+settings.onOverSuffix);
			},function () {
				$span.removeClass(className+settings.onOverSuffix).addClass(className);
			});			
		}

	});
};
})(jQuery);