/**
* Wizard
*/

//declare global defaults
var agentURL = "/domains/jasa.nl_2/modules/wizard/agent.php";
var slider_images = new Array();


function hideWizardAlert(){
	if($("#wizard_ui").hasClass('alerted')){
		$("#wizard_ui div.alert_box").hide('slow');
		$("#wizard_ui div.list .options .overlay").css('overflow','auto');
		$("#wizard_ui").removeClass('alerted');
	}
}

function callAgent(url,action,optionIDs){
	if(!url)
		url = agentURL;
	if(!optionIDs)
		optionIDs = '';
	hideWizardAlert();

	//use loading trigger to kill dubble calls from IE7 clicks.
	if(!$("#wizard_ui").hasClass('loading')){
		$("#wizard_ui").addClass('loading').block({  
												message: '<img src="/domains/jasa.nl_2/images/loading.gif" border="0" /><br />Please wait while accessing database...',  
												css: {
													border: '3px solid #B1C13F',
													padding: '5px',
													textAlign: 'center'
													}  
											});
			
		//get json data
		$.post(url, {action:action, option:optionIDs, init:$("#wizard_ui").hasClass('slider_images')}, function(JSONdata){
			//init slider images
			if(!$("#wizard_ui").hasClass('slider_images')){
				$("#wizard_ui").addClass('slider_images');
				slider_images = JSONdata['images'];
				if(JSONdata['selected'].length > 0)
					for(i in JSONdata['selected'])
						$("#option_" + JSONdata['selected'][i] + " label.opt span.checkbox").addClass("checked");
			}
			
			//reset all checks
			if(JSONdata['action'] == 'reset'){
				$(".wizard_module .step .option label.opt span.checkbox").removeClass('checked');
			}

			//change options and option blocks
			$("#wizard_ui div.options div.option").each(function(){
				v = parseInt($(this).attr('id').split('_')[1]);
				if($.inArray(v,JSONdata['selected']) >= 0){
					$(this).find('span.checkbox').addClass('checked');
				}else{
					if($.inArray(v,JSONdata['options']) >= 0 && $(this).hasClass('disabled') && !$(this).hasClass('hidden')){
						$(this).removeClass('disabled').slideDown();
					}else if($.inArray(v,JSONdata['options']) < 0 && !$(this).hasClass('disabled')){
						$(this).addClass('disabled').slideUp();
					}
				}

				//get values
				o = parseInt($(this).parents("div.options").find('div.option').length);
				p = parseInt($(this).parents("div.options").find('div.disabled').length);
				a = parseInt($(this).parents("div.options").find('div.option:not(.disabled,.hidden)').length);
				c = parseInt($(this).parents("div.options").find('label.opt span.checked').length);

				//disable single options
				if((o - (p - c)) <= 1 && o > 0 && p > 0)
					$(this).parents("div.options").find('div.option:not(.disabled,.hidden)').slideUp().addClass('hidden');
				else if(o > 0)
					$(this).parents("div.options").find('div.option:has(.hidden)').slideDown().removeClass('hidden');
	
				//set not available sign
				if((o - (p - c)) <= 1 && o > 0 && p > 0){
					$(this).parents("div.options").addClass('not_available').parent().css('opacity',0.5);
					$(this).parents("div.options").parent().find('div.selected_images').css('display','none');
				}else{
					$(this).parents("div.options").removeClass('not_available').parent().css('opacity',1.0);
					$(this).parents("div.options").parent().find('div.selected_images').css('display','block');
				}

				//hide properties that have only disabled options...
				$("#wizard_ui div.options div.property").each(function(){
					o = $(this).children('div.option').length;
					p = $(this).children('div.disabled').length + $(this).children('div.hidden').length;
		
					if(o != p && o > 0 && $(this).hasClass('disabled')){
						$(this).removeClass('disabled').slideDown('slow');
					}else if(o == p && o > 0 && !$(this).hasClass('disabled')){
						$(this).addClass('disabled').slideUp('slow');
					}
				});
			});

			//parse stats
			if(JSONdata['action'] != 'init'){
				$("#wizard_ui div.stats .found_machines span").html(JSONdata['machines'].length);
				if(JSONdata['action'] != 'reset'){
					if($("#wizard_ui div.stats").is(':hidden') && JSONdata['machines'].length > 0)
						$("#wizard_ui div.stats").show('slow');
					else if($("#wizard_ui div.stats").not(':hidden') && JSONdata['machines'].length == 0)
						$("#wizard_ui div.stats").hide('slow');
				}
			}
				
			//reload listing, if we have one...
			if($(".machine_module .machine_listing").length){
				var loadMachineListing = function(u){
					$("#middle .machine_module").load(u,function(){
						$(".middle_3col .machine_module .machine_listing .machine_row").addClass('gray_3col').wrapInner('<div class="gray_3col_top clear"><div class="gray_3col_bottom clear"></div></div>');
						$('.machine_listing h2').each(function(){
							jquery_sifr_replacement($(this));
						});
						$(".page_menu a").click(function(e){
							e.preventDefault();
							loadMachineListing($(this).attr('href'));
							return false;
						});
					});
				}
				loadMachineListing("/domains/jasa.nl_2/modules/machines/index.php?wizard_list=true&skip=" + $(document).getUrlParam("skip"));
			}

			//set selected images
			if(JSONdata['selected'].length){
				$("div.selected_images div.selected").remove();
				for(i in JSONdata['selected']){
					//add selected image
					u = slider_images['option_' + JSONdata['selected'][i]];
					if(!u)
						u = "/domains/jasa.nl_2/images/no_image.gif";
					$("div#option_" + JSONdata['selected'][i]).parents("div.step").find("div.selected_images").append($('<div class="selected" id="selected_option_' + JSONdata['selected'][i] + '"></div>').css('background-image','url(' + u + ')'));
		
					//set width of all selected
					o = $("div#option_" + JSONdata['selected'][i]).parents("div.step").find("div.selected");
					o.width(150 / o.length);
				}
			}
			
			//found only one machine? popup alert
			if(JSONdata['machines'].length == 1){
				//disable scrols under this layer...
				$("#wizard_ui div.list .options .overlay").css('overflow','hidden');
	
				//show alert box
				$("#wizard_ui div.alert_box").height($("#wizard_ui div.list").height()).load('/domains/jasa.nl_2/modules/wizard/alert.php?machineID=' + JSONdata['machines'][0],function(){$(this).show('slow');});
				$("#wizard_ui").addClass('alerted');
			}

			//kill loading trigger...
			$("#wizard_ui").removeClass('loading').unblock();
		
		//end of ajax load call...
		},'json');
	}
}


//start wizard UI
$(document).ready(function(){

	//set blockUI prefs
	$.blockUI.defaults.overlayCSS = {  
									backgroundColor:'#fff',  
									opacity:        '0.6'  
								};

	//show UI
	if($("#middle div.whole div.machine_module div.machine_listing").text()){
		$("#wizard_ui").css('display','block');
	}
	
	//init wizard
	if($("#wizard_ui").css("display") != 'none'){
		
		//change layout...
		$("#wizard_ui").wrapInner('<div class="wizard_ui_top clear"><div class="wizard_ui_bottom clear"></div></div>');
		$("#wizard_ui div.list").before('<div class="alert_box"></div>');
		$("#wizard_ui div.stats .actions a.reset").click(function(){
			callAgent(agentURL,'reset');
			return false;
		});
		if($(".machine_module .machine_listing").length)
			$("#wizard_ui .stats .actions a.list").css('display','none');
	
		//reset wizard
		if(self.location.href.indexOf('wizard_list') < 0)
			callAgent(agentURL,'reset');
	
		//parse image slider and selector container
		$(".wizard_module .step").append('<div class="step_background"><div class="selected_images"></div><div class="image"></div></div>');

		//open image slider
		$(".wizard_module .step div.options")
			.wrapInner('<div class="overlay"></div>')
			.hover(
				function(){
					//hide an show right image frame for mouse overs.
					$(".wizard_module .step_background").find(".image").css('display','none');
					if(!$(this).hasClass('not_available')){
						$(this).next(".step_background").find(".selected_images").css('opacity',0.5);
						$(this).next(".step_background").find(".image").css('display','block');
						//open slider
						if(!$(".wizard_module .step_background:eq(0)").is(".open")){
							$(".wizard_module .step_background").addClass('open').animate({height: '100px',marginTop:'5px'},1000,function(){
								$("#wizard_ui .wizard_module .list div.step .step_background .image").height('100px');
							});
						}
					}
				},
				function(){
					$(this).next(".step_background").find(".selected_images").css('opacity',1);
					$(this).next(".step_background").find(".image").css('display','none');
				}
			);
						
		//propery label
		$(".wizard_module .step .property label.prop").click(function(){
			o = $(this).parent().find(".option label.opt span.checkbox");
			o.removeClass('checked');
			$(this).find("span.checkbox").removeClass('checked');
			
			var s = "";
			$(this).parent().find("div.option").each(function(){
				s+= ',' + $(this).attr('id').split('_')[1];
			});
			callAgent(agentURL,'remove',s.substring(1));
		}).mouseover(
			//do background change
			function(){
				//get path from array...
				s = slider_images[$(this).parent().attr('id')];
				if(!s)
					s = "/domains/jasa.nl_2/images/no_image.gif";
				$(this).parents("div.options").next(".step_background").find('.image').css('background-image','url(' + s + ')').html('<b>' + $(this).text() + '</b>');
				$(this).parents("div.options").next(".step_background").find('b').css('opacity',0.6);
			}
		);
	
		//option label click
		$(".wizard_module .step .option label.opt").click(function(){
			if($(this).find("span.checkbox").hasClass('checked')){
				$(this).find("span.checkbox").removeClass('checked');
				callAgent(agentURL,'remove',$(this).parent().attr('id').split('_')[1]);
			}else{
				$(this).find("span.checkbox").addClass('checked');
				callAgent(agentURL,'add',$(this).parent().attr('id').split('_')[1]);
			}
		}).mouseover(
			function(){
				//do background change
				s = slider_images[$(this).parent().attr('id')];
				if(!s)
					s = "/domains/jasa.nl_2/images/no_image.gif";
				$(this).parents("div.options").next(".step_background").find('.image').css('background-image','url(' + s + ')').html('');
			}
		);

	}
});