﻿// JScript File
var subscription;
/*
subscription.countries = [0];
subscription.salaryRanges = [0];
subscription.jobSectors = [0];
subscription.email = "";
subscription.frequency = "d";
subscription.status = 0;
*/

function pageLoad()
{
	jQuery.noConflict();
	
	if(jQuery("#lbx_JobCountry").length == 0)	return;
	
	disableAll();
	
	JobBankAlerts.GetSubscription(OnWSGetSubscriptionComplete, OnWSRequestFailed);
	var lbx_JobCountry = $get("lbx_JobCountry");
	var btn_JBPrefSave = $get("btn_JBPrefSave");
	var btn_JBPrefSuspend = $get("btn_JBPrefSuspend");
	
	$addHandler(lbx_JobCountry, "change", OnCountriesChange);
	$addHandler(btn_JBPrefSave, "click", SaveSubscription);
	$addHandler(btn_JBPrefSuspend, "click", SuspendSubscription);
	
	subscription = new Subscription();
	subscription.countries = ["0"];
	subscription.salaryRanges = ["0"];
	subscription.jobSectors = ["0"];
	subscription.email = "";
	subscription.frequency = "d";
	subscription.status = 0;
}

function SaveSubscription(evt)
{
	if(isValid())
	{
		subscription.email = jQuery("#tb_JobBankEmail").val();
		subscription.frequency = jQuery("#dpl_Frequency").val();
		
		subscription.countries = jQuery("#lbx_JobCountry").val();
		subscription.salaryRanges = jQuery("#lbx_SalaryRange").val();
		subscription.jobSectors = jQuery("#lbx_JobSector").val();
		
		//alert(Sys.Serialization.JavaScriptSerializer.serialize(subscription));
	
		JobBankAlerts.SaveSubscription(subscription, OnWSSaveSubscriptionComplete, OnWSRequestFailed);
	}
}

function isValid()
{
	var status = true;
	var re = new RegExp("[A-Za-z0-9._%+-]+@(?:[A-Za-z0-9-]+\.)+[A-Za-z]{2,6}");
	
	var eml = jQuery("#err_email");
	var ecr = jQuery("#err_country");
	var esr = jQuery("#err_salaryrange");
	var ejs = jQuery("#err_jobsector");
		
	if(	!re.test(jQuery("#tb_JobBankEmail").val())	)
	{
			eml.show();
			status = false;
	}
	else
	{
		eml.hide();
	}
	
	if(jQuery("#lbx_JobCountry").val() == null)
	{
		ecr.show();
		status = false;
	}
	else
	{
		ecr.hide()
	}
	
	if(jQuery("#lbx_SalaryRange").val() == null)
	{
		esr.show();
		status = false;
	}
	else
	{
		esr.hide();
	}
	
	if( jQuery("#lbx_JobSector").val() == null)
	{
		ejs.show();
		status = false;
	}
	else
	{
		ejs.hide();
	}
	
	return status;
}

function OnWSSaveSubscriptionComplete(result)
{
	if(result === true)
		subscription.status = 1;
	
	updateSatusUI();
}

function SuspendSubscription()
{
	JobBankAlerts.SuspendSubscription(OnWSSuspendSubscriptionComplete, OnWSRequestFailed);
}

function OnWSSuspendSubscriptionComplete(result)
{
	if(result === true)
		subscription.status = 0;
	
	updateSatusUI();
}

function OnCountriesChange(evt)
{
	var sr =  jQuery("#lbx_SalaryRange");
	var js =  jQuery("#lbx_JobSector");
	
	subscription.countries = jQuery(evt.target).val() ? jQuery(evt.target).val() : ["0"];
	subscription.salaryRanges = sr.val() ? sr.val() : ["0"];
	subscription.jobSectors = js.val() ? js.val() : ["0"];
	
	sr.empty();
	js.empty();
	sr.append(jQuery("<option>").html("Loading..."));
	js.append(jQuery("<option>").html("Loading..."));
	
	disableAll();
	
	JobBankAlerts.GetSalaryRangesByCountry(subscription.countries, OnWSGetSalaryRangesComplete, OnWSRequestFailed);
	JobBankAlerts.GetJobSectorsByCountry(subscription.countries, OnWSGetJobSectorsComplete, OnWSRequestFailed);
}

function disableAll()
{
	jQuery("#lbx_JobCountry").attr("disabled", true);
	jQuery("#lbx_SalaryRange").attr("disabled", true);
	jQuery("#lbx_JobSector").attr("disabled", true);
}

function enableAll()
{
	jQuery("#lbx_JobCountry").attr("disabled", false);
	jQuery("#lbx_SalaryRange").attr("disabled", false);
	jQuery("#lbx_JobSector").attr("disabled", false);
}


function OnWSGetSubscriptionComplete(results)
{
	subscription = results;
	
	jQuery("#tb_JobBankEmail").val(subscription.email);
	jQuery("#dpl_Frequency").val(subscription.frequency);
		
	updateSatusUI();
	
	JobBankAlerts.GetCountries(OnWSGetCountriesComplete, OnWSRequestFailed);
	JobBankAlerts.GetSalaryRangesByCountry(subscription.countries, OnWSGetSalaryRangesComplete, OnWSRequestFailed);
	JobBankAlerts.GetJobSectorsByCountry(subscription.countries, OnWSGetJobSectorsComplete, OnWSRequestFailed);
}

function updateSatusUI()
{
	switch(subscription.status)
	{
		case -1:
			jQuery("#btn_JBPrefSuspend").hide();
			jQuery("#li_Suspended").hide();
			break;
		case 0:
			jQuery("#btn_JBPrefSuspend").hide();
			jQuery("#li_Suspended").show();
			break;
		case 1:
			jQuery("#btn_JBPrefSuspend").show();
			jQuery("#li_Suspended").hide();
			break;
	}
}

function OnWSGetCountriesComplete(results)
{
	var items = eval(results);
	var select = jQuery($get("lbx_JobCountry"));
	for(var i=0; i<items.length; i++)
	{
		var option = jQuery("<option>")
		option.attr("value", items[i].ccID);
		option.html(items[i].ccCountry);
		select.append(option);
	}
	select.val(subscription.countries);
}

function OnWSGetSalaryRangesComplete(results)
{
	var items = eval(results);
	var select = jQuery($get("lbx_SalaryRange"));
	select.empty()
	for(var i=0; i<items.length; i++)
	{
		var option = jQuery("<option>")
		option.attr("value", items[i].sbID);
		option.html(items[i].sbRange);
		select.append(option);
	}
	select.val(subscription.salaryRanges);		
}

function OnWSGetJobSectorsComplete(results)
{
	var items = eval(results);
	var select = jQuery($get("lbx_JobSector"));
	select.empty()
	for(var i=0; i<items.length; i++)
	{
		var option = jQuery("<option>")
		option.attr("value", items[i].jsID);
		option.html(items[i].jsName);
		select.append(option);
	}
	select.val(subscription.jobSectors);		
	enableAll();
}

function OnWSRequestFailed(error) 
{
	 alert("Stack Trace: " + error.get_stackTrace() + "/r/n" +
	       "Error: " + error.get_message() + "/r/n" + 
	       "Status Code: " + error.get_statusCode() + "/r/n" +
	       "Exception Type: " + error.get_exceptionType() + "/r/n" +
	       "Timed Out: " + error.get_timedOut());
}

if (typeof(Sys) !== "undefined") Sys.Application.notifyScriptLoaded();