function Signup(urlInfo)
{
	
	this._error = new Array();
	this._category = new Array();
	this._pStrength = 0;
	
	this._timeoutObj;
	
	this._urlInfo = urlInfo;
	
	if (this._urlInfo.hasKey)
	{
		this._ajaxUrl = 'handleAjax.php?key=' + this._urlInfo.key;
	}
	else
	{
		this._ajaxUrl = 'handleAjax.php?.rand=' + Math.random();
	}
	
	this._loading = '<img src="images/loading-thickbox.gif" />';
	this._wrong = '<img src="images/wrong_icon.gif" align="absmiddle" alt="Wrong" />';
	this._correct = '&nbsp;&nbsp;<img src="images/correct_icon.gif" align="absmiddle" alt="Correct" />';
	this._container = $j('#divContainer');
	this._tabs = $j('.tab');
	
	this._helper = $j('<div class="shiny_box"><span class="tl"></span><span class="tr"></span><div class="shiny_box_body"></div><span class="bl"></span><span class="br"></span></div>')
		.appendTo(this._container)
		.hide();
	
	this._userID = 0;
	this._countryID = 0;
	this._email = '';
	this._fname = '';
	this._lname = '';
	this._stepArray = new Array();
	
	this.preLoadImages();
}
Signup.prototype.block = function()
{
	this._container.block({
		message: this._loading,
		css: {
			border: 'none',
			background: 'transparent'
		}
	});
}
Signup.prototype.unblock = function()
{
	this._container.unblock();
}
Signup.prototype.preLoadImages = function()
{
	$j('<div></div>')
		.prependTo('body')
		.hide()
		.html(this._loading + this._wrong + this._correct);
}
Signup.prototype.setForm = function()
{
	var obj = this;
	this._category = new Array();
	this._container.find('[@empty], [@email], [@emptyCatrgory], [@photo], [@password], [@confirmpassword],[@accept]')
		.unbind('blur')
		.blur(function(){
					   
			obj.setBlur(this, true);
		});
	$j('#skip')
		.unbind('click')
		.click(function(){
			obj.skipForm(this);
			return false;
		});
	$j('#save, #continue')
		.unbind('click')
		.click(function(){
			obj.saveForm($j(this).attr('step'), $j(this).attr('id'));
			return false;
		});
	
	this._container.find('[@helper]').inputHintBox({
		div				:	this._helper,
		div_sub			:	'.shiny_box_body',
		source			:	'attr',
		attr			:	'helper',
		incrementLeft	:	10,
		incrementTop	:	0
	});
	
	var x = parseInt($j('#continue').attr('step'));
	switch(x)
	{
		case 1:
			this.setStep1();
			break;
		case 2:
			this.setStep2();
			break;
		case 3:
			this.setStep3();
			break;
		case 4:
			this.setStep4();
			break;
	}
}
Signup.prototype.setBlur = function(ctrl, isBlur)
{
	var obj = this;
	
	$j(ctrl)
		.removeClass('errorField')
		.nextAll('img[@alt="Correct"], img[@alt="Wrong"]')
			.remove();
			
			
	if(!$j(ctrl).isEmpty() && ($j(ctrl).attr('alp') != undefined) && !isAlpha($j(ctrl).val()))
	{
		
			$j(ctrl)
				.addClass('errorField')
				.parent()
					.append(this._wrong);
			
			this._error.push($j(ctrl).attr('alp'));
	}
	else if (($j(ctrl).attr('empty') != undefined) && $j(ctrl).isEmpty())
	{
	
		$j(ctrl)
			.addClass('errorField')
			.parent()
				.append(this._wrong);
		
		this._error.push($j(ctrl).attr('empty'));
	}
	
	else if(($j(ctrl).attr('email') != undefined))
	{
		if (!$j(ctrl).isEmpty())
		{
			if (!$j(ctrl).emailCheck())
			{
				$j(ctrl)
					.addClass('errorField')
					.parent()
						.append(this._wrong);
				this._error.push($j(ctrl).attr('email'));
			}
			else if(isBlur)
			{
				var elm = $j(this._correct)
					.appendTo($j(ctrl).parent());
				setTimeout(function(){
					$j(elm).fadeOut(800);
				}, 3000);
			}
		}
	}
	else if (($j(ctrl).attr('emptyCatrgory') != undefined) && this._category.length == 0)
	{
		$j(ctrl)
			.addClass('errorField')
			.parent()
				.append(this._wrong);
		
		this._error.push($j(ctrl).attr('emptyCatrgory'));
	}
	else if (($j(ctrl).attr('photo') != undefined) && $j(ctrl).isEmpty() == false && $j(ctrl).isValidFile(new Array('jpg', 'gif', 'png', 'jpeg')) == false)
	{
		$j(ctrl)
			.addClass('errorField')
			.parent()
				.append(this._wrong);
		
		this._error.push($j(ctrl).attr('photo'));
	}
	else if (($j(ctrl).attr('password') != undefined) && this._pStrength[0].score < 3)
	{
		$j(ctrl)
			.addClass('errorField')
			.parent()
				.append(this._wrong);
		
		this._error.push($j(ctrl).attr('password'));
	}
	else if (($j(ctrl).attr('confirmpassword') != undefined) && ($j(ctrl).val() != $j('#' + $j(ctrl).attr('confirmpassword')).val()))
	{
		$j(ctrl)
			.addClass('errorField')
			.parent()
				.append(this._wrong);
		
		this._error.push($j(ctrl).attr('confmessage'));
	}
	else if(isBlur)
	{
		var elm = $j(this._correct)
			.appendTo($j(ctrl).parent());
		setTimeout(function(){
			$j(elm).fadeOut(800);
		}, 3000);
	}
}
Signup.prototype.setStep1 = function()
{
	
}
Signup.prototype.setStep2 = function()
{
	var obj = this;
	$j('#d_birth').datepicker({
		showOn: 'both',
		buttonText: 'Choose',
		buttonImage: 'images/calendar.gif',
		buttonImageOnly: true,
		showStatus: true,
		dateFormat: 'mm/dd/yy',
		yearRange: this.setCalDate('yearRange'),
		maxDate: this.setCalDate('maxDate'),
		minDate: this.setCalDate('minDate'),
		mandatory: true,
		onSelect: function(){
			$j(this).blur();
		}
	});
	$j('#email').blur(function(){
		obj.duplicateEmailCheck(this);
	});
	$j('#username').blur(function(){
								  
		//alert("kkk");						  
		obj.duplicateUsernameCheck(this);
	});
	$j('#mobile_number')
		.unbind('keypress')
		.keypress(function(e){
			return $j(this).numbersOnly(e);
		});
	$j('#mobile_number').blur(function(){
								  
		//alert("kkk");						  
		obj.duplicateCheckMobile(this);
	});
	$j('#category')
		.unbind('change')
		.change(function(){
			obj.subCategoryList(this);
		});
	$j('#accept')
		.unbind('click')
		.click(function(){
						
			$j('#save, #continue').attr('disabled', (!$j(this).is(':checked')));
		});
	$j('#refreshCaptcha')
		.unbind('click')
		.click(function(){
			$j('#captcha').attr('src', 'captcha/captcha.png?sid=' + Math.random());
			
			
			/* SET value in session */
			
			
	
		var data = {
			sessionval : Math.random(),
			section: 'setcapchaval'
		};
		
		$j.ajax({
			type: "POST",
			url: 'setcapchaval.php',
			data: data,
			dataType: 'html',
			success: function(jData){
		
		//alert(jData);
				
				
			}
		});
		//return false;
	
			
			/* set val in session */
			
			
			return false;
		});
	$j('#downloadCaptcha')
		.unbind('click')
		.click(function(){
			window.location.href = 'captcha/captcha.wav';
			return false;
		});
	this._pStrength = $j('#password').passMeter({
		panelWidth: '350px',
		target: '#passmeter'
	});
	$j('#verCode').click(function(){
		alert('Yor code has been sent to mobile.');
	});
	$j('#validate').click(function(){
		alert('Thank you for verifying your mobile.');
	});
	
}
Signup.prototype.populatecity = function(val)
{
		var data = {
			ajax: true
			
		};
		//j('#TvFlash').html('<img src="images/loading.gif">');
		$j.ajax({
			type: "GET",
			url: this._ajaxUrl + '&module=CityPop&action=getCityList&country=' + val,
			data: data,
			dataType: 'json',
			success: function(jData){
				
				
			if(jData.flag)	
			  {
				
				$j('#cityHolder').html(jData.message); 
				
			  }
		    else
			  {
				
				 $j('#cityHolder').html('<label for="city">City :<span class="redstar">*</span></label><span><input alp="Field City accept only alphabets." onblur="JavaScript:signup.setBlur(this,true);"  type="text" name="city"  id="city" maxlength="100" empty="Please enter City" /></span>'); 
				  
			  }
				
				
			}
		});
		return false;
	
	
	
	//alert(this._ajaxUrl);
	//if(val == 100)
	//{
		/*$j('#cityHolder').html('<label for="city">City :<span class="redstar">*</span></label><span><input type="text" id="city" maxlength="100" empty="Please enter City" /></span><p class="spacer"></p>');
		$j("#city").autocomplete(this._ajaxUrl + '&module=signup&action=cityList&country=' + val, {
			multiple: false,
			max: 0,
			autoFill: true,
			matchContains: false,
			minChars: 0,
			parse: function(data) {
				return $j.map(eval(data), function(row) {
					return {
						data: row,
						value: row.city,
						result: row.city
					}
				});
			},
			formatItem: function(item) {
				return item.city;
			}
		});  */
		
/*	}
	else
	{
		
	} */
	
}
Signup.prototype.setStep3 = function()
{
	var obj = this;
	$j('.ph').keypress(function(e){
		return $j(this).numbersOnly(e);
	});
	$j('#website, #url_blog')
		.blur(function(){
		if (!$j(this).isEmpty())
		{
			var url = $j(this).val();
			if (url.indexOf('://') == -1)
			{
				$j(this).val('http://' + url);
			}
		}
	});
	$j("#city").autocomplete(this._ajaxUrl + '&module=signup&action=cityList&country=' + this._countryID, {
		multiple: false,
		max: 0,
		autoFill: true,
		matchContains: false,
		minChars: 0,
		parse: function(data) {
			return $j.map(eval(data), function(row) {
				return {
					data: row,
					value: row.city,
					result: row.city
				}
			});
		},
		formatItem: function(item) {
			return item.city;
		}
	});
	$j("#state").autocomplete(this._ajaxUrl + '&module=signup&action=stateList&country=' + this._countryID, {
		multiple: false,
		max: 0,
		autoFill: true,
		matchContains: false,
		minChars: 0,
		parse: function(data) {
			return $j.map(eval(data), function(row) {
				return {
					data: row,
					value: row.state,
					result: row.state
				}
			});
		},
		formatItem: function(item) {
			return item.state;
		}
	});
}
Signup.prototype.setStep4 = function()
{
	var obj = this;
	$j('.ph').keypress(function(e){
		return $j(this).numbersOnly(e);
	});
	$j('#website, #url_blog')
		.blur(function(){
		if (!$j(this).isEmpty())
		{
			var url = $j(this).val();
			if (url.indexOf('://') == -1)
			{
				$j(this).val('http://' + url);
			}
		}
	});
	$j("#city").autocomplete(this._ajaxUrl + '&module=signup&action=cityList&country=' + this._countryID, {
		multiple: false,
		max: 0,
		autoFill: true,
		matchContains: false,
		minChars: 0,
		parse: function(data) {
			return $j.map(eval(data), function(row) {
				return {
					data: row,
					value: row.city,
					result: row.city
				}
			});
		},
		formatItem: function(item) {
			return item.city;
		}
	});
	$j("#state").autocomplete(this._ajaxUrl + '&module=signup&action=stateList&country=' + this._countryID, {
		multiple: false,
		max: 0,
		autoFill: true,
		matchContains: false,
		minChars: 0,
		parse: function(data) {
			return $j.map(eval(data), function(row) {
				return {
					data: row,
					value: row.state,
					result: row.state
				}
			});
		},
		formatItem: function(item) {
			return item.state;
		}
	});
	$j('#category')
		.unbind('change')
		.change(function(){
			obj.subCategoryList(this);
		});
}
Signup.prototype.saveForm = function(step, button)
{
	
	var x = parseInt(step);
	switch(x)
	{
		case 1:
			this.saveStep1(button);
			break;
		case 2:
			this.saveStep2(button);
			break;
		case 3:
			this.saveStep3(button);
			break;
		case 4:
			this.saveStep4(button);
			break;
	}
}
Signup.prototype.saveStep1 = function(button)
{
	var obj = this;
	this._error = new Array();
	clearTimeout(this._timeoutObj);
	
	this._container.find('.errorBox').hide();
	this._container.find('[@empty]').each(function(){
		obj.setBlur(this, false);
	});
	
	if (this._container.find('img[@alt="Wrong"]').length == 0)
	{
		this._countryID = $j('#country').val();
		this._stepArray[0] = {
			country		:	$j('#country').val(),
			timeZone	:	$j('#time_zone').val()
		}
		
		var data = {
			module		:	'signup',
			action		:	'save',
			step		:	1
		};
		
		data = $j.extend(data, this._stepArray[0]);
		$j('#save, #continue').attr('disabled', true);
		$j.ajax({
			url: this._ajaxUrl,
			data: data,
			type: 'POST',
			success: function(hData){
				obj._container.slideUp(500, function(){
					obj._tabs
						.removeClass('active')
						.eq(1)
							.addClass('active');
					$j(this)
						.html(hData)
						.slideDown(500, function(){
							obj.setForm();
						});
				});
			},
			timeout: 60000,
			error: function(XMLHttpRequest, textStatus, errorThrown){
				obj._container.find('.errorBox')
					.text('Error: A critical error occured.')
					.show();
				$j('#save, #continue').attr('disabled', false);
			}
		});
	}
	else
	{
		this._container.find('.errorBox')
			.html(obj._error.join('<br>'))
			.show();
	}
}
Signup.prototype.saveStep2 = function(button)
{
	var obj = this;
	this._error = new Array();
	clearTimeout(this._timeoutObj);
	
	this._container.find('.errorBox').hide();
	this._container.find('[@empty], [@email], [@emptyCatrgory], [@photo], [@password], [@confirmpassword]').each(function(){
		obj.setBlur(this, false);
	});
	
	if (this._container.find('img[@alt="Wrong"]').length == 0)
	{			
		this._stepArray[1] = {};
		this._container.find(':text, select, :password').each(function(){
			obj._stepArray[1][$j(this).attr('id')] = $j(this).val();
		});
		this._stepArray[1]['accept'] ='Y';
		this._stepArray[1]['newsletter'] = ($j('#newsletter').is(':checked') ? 'Y' : 'N');
		this._stepArray[1]['sex'] = $j('[@name="sex"]:checked').val();
		this._stepArray[1]['marital_status'] = $j('[@name="marital_status"]:checked').val();
		this._stepArray[1]['photo'] = '';
		this._stepArray[1]['photo_name'] = '';
		this._stepArray[1]['flagsheep_url'] = $j('#flagsheep_url').val();
		this._stepArray[1]['address'] = $j('#address').val();
		this._stepArray[1]['city'] = $j('#city').val();
		this._stepArray[1]['affliate'] = $j('#affliate').val();
		
		
		
		
		
		$j.each (this._category, function(i){
			obj._stepArray[1]['category[' + i + ']'] = this.id;
		});
		$j('#save, #continue').attr('disabled', true);
		
		this._countryID = this._stepArray[1].country;
		this._email = this._stepArray[1].email;
		this._fname = this._stepArray[1].first_name;
		this._lname = this._stepArray[1].last_name;
		//alert(this._stepArray[1].captcha_code);
		//obj.saveGeneralInfo(button);		
/*		obj.duplicateEmailCheck($j('#email'));
		obj.duplicateUsernameCheck($j('#username'));
		obj.duplicateCheckMobile($j('#mobile_number'));
*/
		var data = {
			module		:	'signup',
			action		:	'validate',
			step		:	2,
			captcha		:	this._stepArray[1].captcha_code,
			email		:	this._stepArray[1].email
		};
		$j.ajax({
			url: this._ajaxUrl,
			data: data,
			type: 'POST',
			dataType: 'json',
			success: function(jData){				
				if (jData.isDuplicate)
				{
					$j('#captcha').attr('src', 'captcha/captcha.png?sid=' + Math.random());
					
								/* SET value in session */
			
			
	
		var data = {
			sessionval : Math.random(),
			section: 'setcapchaval'
		};
		
		$j.ajax({
			type: "POST",
			url: 'setcapchaval.php',
			data: data,
			dataType: 'html',
			success: function(jData){
		
		//alert(jData);
				
				
			}
		});
		//return false;
	
			
			/* set val in session */
					
					$j('#captcha_code').val('');
					$j('#email')
						.addClass('errorField')
						.parent()
							.append(obj._wrong);
				}
				if (!jData.isvalidCaptcha)
				{
					$j('#captcha').attr('src', 'captcha/captcha.png?sid=' + Math.random());
					
								/* SET value in session */
			
			
	
		var data = {
			sessionval : Math.random(),
			section: 'setcapchaval'
		};
		
		$j.ajax({
			type: "POST",
			url: 'setcapchaval.php',
			data: data,
			dataType: 'html',
			success: function(jData){
		
		//alert(jData);
				
				
			}
		});
		//return false;
	
			
			/* set val in session */
					
					/*$j('#captcha_code')
						.val('')
						.addClass('errorField')
						.parent()
							.append(obj._wrong); */
				}
				if (jData.messages.length > 0)
				{
					obj._container.find('.errorBox')
						.html(jData.messages.join('\n'))
						.show();
					$j('#save, #continue').attr('disabled', false);					
				}
				else
				{
					obj.saveGeneralInfo(button);
					
				}
			},
			timeout: 60000,
			error: function(XMLHttpRequest, textStatus, errorThrown){
				obj._container.find('.errorBox')
					.text('Error: A critical error occured.')
					.show();
				$j('#save, #continue').attr('disabled', false);
			}
		});
	}
	else
	{
		this._container.find('.errorBox')
			.html(obj._error.join('<br>'))
			.show();
	}
}
Signup.prototype.saveStep3 = function(button)
{
	var obj = this;
	this._error = new Array();
	clearTimeout(this._timeoutObj);
	
	this._container.find('.errorBox').hide();
	this._container.find('[@empty], [@email], [@emptyCatrgory], [@photo], [@password], [@confirmpassword]').each(function(){
		obj.setBlur(this, false);
	});
	if (this._container.find('img[@alt="Wrong"]').length == 0)
	{
		if ($j('#photo').isEmpty())
		{
			obj.saveGeneralInfo3(button,null,null);
		}
		else
		{
			obj.uploadPicture('photo', 2, {
				success: function(jData){
					if (jData.flag)
					{
						obj.saveGeneralInfo3(button,jData.photo,jData.photo_name);
					}
					else
					{
						$j('#captcha').attr('src', 'captcha/captcha.png?sid=' + Math.random());
						
						
									/* SET value in session */
			
			
	
		var data = {
			sessionval : Math.random(),
			section: 'setcapchaval'
		};
		
		$j.ajax({
			type: "POST",
			url: 'setcapchaval.php',
			data: data,
			dataType: 'html',
			success: function(jData){
		
		//alert(jData);
				
				
			}
		});
		//return false;
	
			
			/* set val in session */
						
						
						
						obj._container.find('.errorBox')
							.text(jData.message)
							.show();
						$j('#save, #continue').attr('disabled', false);
					}
				},
				error: function(XMLHttpRequest, textStatus, errorThrown){
					obj._container.find('.errorBox')
						.text('Error: A critical error occured.')
						.show();
					$j('#save, #continue').attr('disabled', false);
				}
			});
		}
		
	}
	else
	{
		this._container.find('.errorBox')
			.html(obj._error.join('<br>'))
			.show();
	}
}
Signup.prototype.saveGeneralInfo3 = function(button,p,pname)
{
	var obj = this;
	var data = {
			module:			'signup',
			action:			'save',
			step:			3,
			button:			button,
			country:		this._countryID,
			email:			this._email,
			userID:			this._userID,
			p:			p,
			pname:			pname,
			city: $j('#city').val(),
			fav_palyer: $j('#fav_player').val(),
			postal:$j('#postal_code').val(),
			sex:$j('#sex').val(),
			address:$j('#address').val(),
			email:obj._email,
			first_name:obj._fname,
			last_name:obj._lname
		};
		
		$j.ajax({
			url: this._ajaxUrl,
			data: data,
			type: 'POST',
			dataType: 'json',
			success: function(jData){
				if (button == 'save')
				{
					obj._container.slideUp(500, function(){
						$j(this)
							.html(jData.template)
							.slideDown(500);
						
						$j('#regheader').html('Welcome '+obj._fname+' '+obj._lname+' <img src="images/lion-icon-r.gif" width="22" height="22" align="absmiddle" alt="" />');
						/*$j('#step3').parent().addClass('active');
						$j('#step1').parent().removeClass('active');
						$j('#step2').parent().removeClass('active');*/
						
						obj.setForm();
					});
				}
				else
				{
					obj._container.slideUp(500, function(){
						obj._tabs
							.removeClass('active')
							.eq(3)
								.addClass('active');
						$j(this)
							.html(jData.template)
							.slideDown(500, function(){
								obj.setForm();
							});
					});
				}
			},
			timeout: 60000,
			error: function(XMLHttpRequest, textStatus, errorThrown){
				obj._container.find('.errorBox')
					.text('Error: A critical error occured.')
					.show();
				$j('#save, #continue').attr('disabled', false);
			}
		});
}
Signup.prototype.saveStep4 = function(button)
{
	var obj = this;
	this._error = new Array();
	clearTimeout(this._timeoutObj);
	
	this._container.find('.errorBox').hide();
	this._container.find('[@empty], [@email], [@emptyCatrgory], [@photo], [@password], [@confirmpassword]').each(function(){
		obj.setBlur(this, false);
	});
	if (this._container.find('img[@alt="Wrong"]').length == 0)
	{
		this._stepArray[3] = {};
		this._container.find(':text, select').each(function(){
			obj._stepArray[3][$j(this).attr('id')] = $j(this).val();
		});
		this._stepArray[3]['logo'] = '';
		this._stepArray[3]['logo_name'] = '';
		
		$j.each (this._category, function(i){
			obj._stepArray[3]['category[' + i + ']'] = this.id;
		});
		
		$j('#save, #continue').attr('disabled', true);
		
		if ($j('#company_logo').isEmpty())
		{
			obj.saveBusinessInfo(button);
		}
		else
		{
			obj.uploadPicture('company_logo', 4, {
				success: function(jData){
					if (jData.flag)
					{
						obj._stepArray[3]['logo'] = jData.photo;
						obj._stepArray[3]['logo_name'] = jData.photo_name;
						obj.saveBusinessInfo(button);
					}
					else
					{
						obj._container.find('.errorBox')
							.text(jData.message)
							.show();
						$j('#save, #continue').attr('disabled', false);
					}
				},
				error: function(XMLHttpRequest, textStatus, errorThrown){
					obj._container.find('.errorBox')
						.text('Error: A critical error occured.')
						.show();
					$j('#save, #continue').attr('disabled', false);
				}
			});
		}
	}
	else
	{
		this._container.find('.errorBox')
			.html(obj._error.join('<br>'))
			.show();
	}
}
Signup.prototype.setCalDate = function(option)
{
	var dt = new Date();
	if (option == 'yearRange')
	{
		return (dt.getFullYear() - 100) + ':' + dt.getFullYear();
	}
	else if (option == 'maxDate')
	{
		return dt;
	}
	else
	{
		var year = dt.getFullYear() - 100;
		dt.setFullYear(year);
		return dt;
	}
}
Signup.prototype.subCategoryList = function(elem)
{
	var obj = this;
	var catID;
	$j('#category_box').html('');
	if ($j(elem).children().filter(':selected').length == 0)
	{
		catID = 0;
	}
	else
	{
		catID = $j(elem).val().join(',');
	}
	var data = {
		module		:	'signup',
		action		:	'getSubCategoryList',
		catID		:	catID
	};
	$j.ajax({
		url: this._ajaxUrl,
		data: data,
		type: 'POST',
		success: function(hData){
			var cats = new Array();
			for (var i = 0; i < obj._category.length ; i++)
			{
				cats.push(obj._category[i].id);
			}
			
			$j('#category_box')
				.append(hData)
				.find('div :checkbox')
					.unbind('click')
					.click(function(){
						obj.bindCategoryClick(this);
					})
					.val(cats);
			$j(elem).attr('disabled', false);
		},
		timeout: 60000,
		error: function(XMLHttpRequest, textStatus, errorThrown){
			obj._container.find('.errorBox')
				.text('Error: A critical error occured.')
				.show();
			$j(elem).attr('disabled', false);
		}
	});
}
Signup.prototype.bindCategoryClick = function(elem)
{
	var obj = this;
	if ($j(elem).is(':checked'))
	{
		var category = {
			id: $j(elem).val(),
			name: $j.trim($j(elem).parent().text())
		};
		this._category.push(category);
	}
	else
	{
		var itm, cats = this._category;
		this._category = new Array();
		
		while (itm = cats.pop())
		{
			if (itm.id == $j(elem).val())
			{
				continue;
			}
			else
			{
				this._category.push(itm);
			}
		}
	}
	this.setBasket();
	$j('#category').blur();
}
Signup.prototype.setBasket = function()
{
	var obj = this;
	$j('#subcategory_box').html('<p class="section_head">Selected</p>');
	for (var i = 0; i < this._category.length ; i++)
	{
		$j('#subcategory_box').append('<div class="gen_left"><div style="float:left;">' + this._category[i].name + '</div> <div style="float:left;"><a href="#" style="color:#FF0000; font-weight:bold; font-family:Geneva, Arial, Helvetica, sans-serif; font-size:10px; background-color:#FFF0F0; display:block; width:12px; text-align:center; padding:1px; float:right; margin:0 0 10px 20px;" onclick="JavaScript: removeCategoryBusket(this, ' + this._category[i].id + '); return false;">X</a></div><div class="spacer"></div></div>');
	}
}
Signup.prototype.uploadPicture = function(fieldID, step, func)
{
	$j.ajaxFileUpload({
		url: this._ajaxUrl + '&module=signup&action=uploadFile&uploader=' + fieldID + '&step=' + step,
		secureuri: false,
		fileElementId: fieldID,
		dataType: 'json',
		success: function (jData, status){
			func.success(jData);
		},
		error: function (data, status, e){
			func.error(data, status, e);
		}
	});
}
Signup.prototype.saveGeneralInfo = function(button)
{
	var obj = this;
	var data = {
		module		:	'signup',
		action		:	'save',
		step		:	2,
		button		:	button
	};
	
	data = $j.extend(data, this._stepArray[1]);
	$j.ajax({
		url: this._ajaxUrl,
		data: data,
		type: 'POST',
		dataType: 'json',
		success: function(jData){
			obj._userID = jData.userID;
			//alert(obj._container);
			if (button == 'save')
			{
				obj._container.slideUp(500, function(){
					$j(this)
						.html(jData.template)
						.slideDown(500);
					
					$j('#regheader').html('Welcome '+jData.name+' <img src="images/lion-icon-r.gif" width="22" height="22" align="absmiddle" alt="" />');
					/*$j('#step3').parent().addClass('active');
					$j('#step1').parent().removeClass('active');
					$j('#step2').parent().removeClass('active');*/
					
					obj.setForm();
				});
			}
			else
			{
				obj._container.slideUp(500, function(){
					$j('#regheader').html('Registration Form - Step 2 <img src="images/lion-icon-r.gif" width="22" height="22" align="absmiddle" alt="" />');
					/*$j('#step2').parent().addClass('active');
					$j('#step1').parent().removeClass('active');
					$j('#step3').parent().removeClass('active');*/
					$j(this)
						.html(jData.template)
						.slideDown(500, function(){
							obj.setForm();
						});
				});
			}
		},
		timeout: 60000,
		error: function(XMLHttpRequest, textStatus, errorThrown){			
			obj._container.find('.errorBox')
				.text('Error: A critical error occured.')
				.show();
			$j('#save, #continue').attr('disabled', false);
		}
	});
}
Signup.prototype.saveBusinessInfo = function(button)
{
	var obj = this;
	var data = {
		module:			'signup',
		action:			'save',
		step:			4,
		button:			button,
		country:		this._countryID,
		email:			this._email,
		userID:			this._userID
	};
	data = $j.extend(data, this._stepArray[3]);
	
	$j.ajax({
		url: this._ajaxUrl,
		data: data,
		type: 'POST',
		dataType: 'json',
		success: function(jData){
			obj._container.slideUp(500, function(){
				obj._tabs
					.removeClass('active')
					.eq(4)
						.addClass('active');
				$j(this)
					.html(jData.template)
					.slideDown(500);
			});
		},
		timeout: 60000,
		error: function(XMLHttpRequest, textStatus, errorThrown){
			obj._container.find('.errorBox')
				.text('Error: A critical error occured.')
				.show();
			$j('#save, #continue').attr('disabled', false);
		}
	});
}
Signup.prototype.duplicateUsernameCheck = function(elem)
{
	var obj = this;
	this._container.find('.errorBox')
		.text('')
		.hide();
	
	if (!$j(elem).isEmpty())
	{
		var data = {
			module		:	'signup',
			action		:	'duplicateCheckUsername',
			step		:	2,
			username		:	$j(elem).val()
		};
		$j.ajax({
			url: this._ajaxUrl,
			data: data,
			type: 'POST',
			dataType: 'json',
			success: function(jData){
				if (jData.isDuplicate)
				{
					$j(elem)
						.removeClass('errorField')
						.nextAll('img[@alt="Correct"], img[@alt="Wrong"]')
							.remove();
					$j(elem)
						.addClass('errorField')
						.parent()
							.append(obj._wrong);
					
					obj._container.find('.errorBox')
						.html(jData.message)
						.show();
					obj._error.push(jData.errorMessage);
				}
			},
			timeout: 60000,
			error: function(XMLHttpRequest, textStatus, errorThrown){
				obj._container.find('.errorBox')
					.text('Error: A critical error occured.')
					.show();
			}
		});
	};
}
Signup.prototype.duplicateEmailCheck = function(elem)
{
	var obj = this;
	this._container.find('.errorBox')
		.text('')
		.hide();
	if (!$j(elem).isEmpty() && $j(elem).emailCheck())
	{
		var data = {
			module		:	'signup',
			action		:	'duplicateCheck',
			step		:	2,
			email		:	$j(elem).val()
		};
		$j.ajax({
			url: this._ajaxUrl,
			data: data,
			type: 'POST',
			dataType: 'json',
			success: function(jData){
				if (jData.isDuplicate)
				{
					$j(elem)
						.removeClass('errorField')
						.nextAll('img[@alt="Correct"], img[@alt="Wrong"]')
							.remove();
					$j(elem)
						.addClass('errorField')
						.parent()
							.append(obj._wrong);
					
					obj._container.find('.errorBox')
						.html(jData.message)
						.show();
					obj._error.push(jData.errorMessage);
				}
			},
			timeout: 60000,
			error: function(XMLHttpRequest, textStatus, errorThrown){
				obj._container.find('.errorBox')
					.text('Error: A critical error occured.')
					.show();
			}
		});
	}
}
Signup.prototype.duplicateCheckMobile = function(elem)
{
	var obj = this;
	this._container.find('.errorBox')
		.text('')
		.hide();
	
	if (!$j(elem).isEmpty())
	{
		var data = {
			module		:	'signup',
			action		:	'duplicateCheckMobile',
			step		:	2,
			mobile_number		:	$j(elem).val()
		};
		$j.ajax({
			url: this._ajaxUrl,
			data: data,
			type: 'POST',
			dataType: 'json',
			success: function(jData){
				if (jData.isDuplicate)
				{
					$j(elem)
						.removeClass('errorField')
						.nextAll('img[@alt="Correct"], img[@alt="Wrong"]')
							.remove();
					$j(elem)
						.addClass('errorField')
						.parent()
							.append(obj._wrong);
					
					obj._container.find('.errorBox')
						.html(jData.message)
						.show();
					obj._error.push(jData.errorMessage);
				}
			},
			timeout: 60000,
			error: function(XMLHttpRequest, textStatus, errorThrown){
				obj._container.find('.errorBox')
					.text('Error: A critical error occured.')
					.show();
			}
		});
	};
}
Signup.prototype.skipForm = function(elem)
{
	var obj = this;
	var step = parseInt($j(elem).attr('step'));
	var data = {
		module		:	'signup',
		action		:	'lastStep',
		step		:	(step + 1),
		email		:	obj._email,
		fname		:	obj._fname,
		lname		:	obj._lname
	};
	$j('#save, #continue').attr('disabled', true);
	$j.ajax({
		url: this._ajaxUrl,
		data: data,
		type: 'POST',
		dataType: 'html',
		success: function(hData){
			obj._container.slideUp(500, function(){
					$j(this)
						.html(hData)
						.slideDown(500);
					
					$j('#regheader').html('Welcome '+obj._fname+' '+obj._lname +' <img src="images/lion-icon-r.gif" width="22" height="22" align="absmiddle" alt="" />');
					$j('#step3').parent().addClass('active');
					$j('#step1').parent().removeClass('active');
					$j('#step2').parent().removeClass('active');
					
					obj.setForm();
				});
		},
		timeout: 60000,
		error: function(XMLHttpRequest, textStatus, errorThrown){
			obj._container.find('.errorBox')
				.text('Error: A critical error occured.')
				.show();
			$j('#save, #continue').attr('disabled', false);
		}
	});
}
Signup.prototype.removeCategoryBusket = function(elem, catId)
{
	var obj = this;
	
	var category;
	var dupCat = obj._category;
	var cats = new Array();
	obj._category = new Array();
	
	for (var i = 0; i < dupCat.length; i++)
	{
		if (dupCat[i].id == catId)
		{
			continue;
		}
		else
		{
			obj._category.push(dupCat[i]);
			cats.push(dupCat[i].id);
		}
	}
	$j('#category_box').find('div :checkbox').val(cats);
	obj.setBasket();
	$j('#category').blur();
}


function removeCategoryBusket(elem, catId)
{
	signup.removeCategoryBusket(elem, catId);
}

Signup.prototype.checkIfAvailable = function(elem)
{
	var obj = this;
	obj._container.find('.errorBox').hide();
	$j(elem).nextAll('img[@alt="Correct"], img[@alt="Wrong"]').remove();
	$j.ajax({
		data:		{
			module:		'signup',
			action:		'checkURLAvailability',
			url:		$j(elem).val()
		},
		url:		this._ajaxUrl,
		type:		'post',
		dataType:	'json',
		success:	function(jData){
			if (jData.flag)
			{
				$j(elem).after(obj._correct);
				$j(elem).next().fadeOut("slow");
			}
			else
			{
				$j(elem).after(obj._wrong);
				obj._container.find('.errorBox')
					.text(jData.message)
					.show();
			}
		}
	});
}

function isNumeric(form_value) 
{ 
    if (form_value.match(/^\d+$/) == null) 
        return false; 
    else 
        return true; 
} 

var numb = '0123456789';
var lwr = 'abcdefghijklmnopqrstuvwxyz';
var upr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';

function isValid(parm,val) {
	if (parm == "") return true;
		for (i=0; i<parm.length; i++) {
			if (val.indexOf(parm.charAt(i),0) == -1) return false;
		}
	return true;
}

function isAlpha(parm) {
	
	return isValid(parm,lwr+upr);
}


