﻿
/*
==============================================================================

  jQuery's onReady function (init)
  
  The main JS for all forms together.

==============================================================================
*/

var validator;

$(function(){

	//	build combos (selects) - list data come from "lists.js"
	$('#category').chainedSelects( categoryList, { nullOption:['-select category-'],grouping:[100] } );
	$('#country').add('#state').add('#region').chainedSelects( regionList, { nullOption:[null,'- entire country -','-entire state-'],grouping:[2,1],hardGrouping:true  } );
	$('#contactcountry').add('#contactstate').chainedSelects( busCountryList, { grouping:[1,1], nullOption:[]  } );
	$('#contactcountry').change();
	$('#billcountry').add('#billstate').chainedSelects( busCountryList, { grouping:[1,1], nullOption:[]  } );
	$('#billcountry').change();

	$('#lang').chainedSelects( languageList );


	// for miniwebsite
	$('#buscountry').add('#busstate').chainedSelects( busCountryList, { grouping:[1,1], nullOption:[]  } );
	$('#buscountry').change();



//  fill forms by given data (userData object in userdata.js)

	for (var k in userData) {
		$('form [name="'+k+'"]').each( function() {
			if (/*this.type=='checkbox' || */this.type=='radio') {
				this.checked = (userData[k]==this.value);
			}
			else if(this.type=='checkbox')this.checked=userData[k];
			else if (this.chainedSelect) this.chainedSelect.val(userData[k]);
			else $(this).val(userData[k]);
			});
		}

//	submit (next/back) buttons events
	$('#btnback').add('#btnnext')
		.mouseover( function(){ $(this).parent().addClass('button-over') } )
		.mousedown( function(){ $(this).parent().addClass('button-down') } )
		.mouseout( function(){ $(this).parent().removeClass('button-over button-down') } );

	$('#errorbox').hide();


// FORM - STEP #1

	// protocol & URL
	$('#url').bind('change keyup', function(){
		var str = stripWhitespace(this.value);
		if (str.match(/^http:\/\//i)) $('#protocol').val('http://');
		else if (str.match(/^https:\/\//i)) $('#protocol').val('https://');
		str = stripProtocol(str);
		if (this.value!=str) this.value = str;
		});

	$('#addregion').click( add_region );
	$('#addregion').parents('form').bind('submit',function(){
		if($('#region-box input').length==0) add_region();
		})

	$('#addareazip').click( get_area );

	$('#areazip').keypress( function(e){
		if (e.which == 13){
			get_area();
			return false;
		}
		
	});

	// load regions if given
	if ($('#country').length && userData.region && userData.region.length) {
		var i,l;
		for (i=0,l=userData.region.length;i<l;i++) {
			$('#country').get(0).chainedSelect.val(userData.region[i]);
			add_region();
			}
		}
	$('#rsbyzip').before('<div id="rsbyzip-info"></div>');

	if (userData.area && userData.area.length) {
		for (var i=0;i<userData.area.length;i++) {
			add_area(userData.area[i]);
			}
		}

// FORM - STEP #2 (ad preview)

	$('#adttl').after(' <span class="info">Max. <span id="adttl-info">'+$('#adttl').attr('maxlength')+'</span> characters.</span>').data('originalmaxlength',$('#adttl').attr('maxlength'));
	$('#adtxt1').after(' <span class="info">Max. '+$('#adtxt1').attr('maxlength')+' characters.</span>');
	$('#adtxt2').after(' <span class="info">Max. '+$('#adtxt2').attr('maxlength')+' characters.</span>');
	$('#adurl').after(' <span class="info">Max. '+$('#adurl').attr('maxlength')+' characters.</span>');	

	$('#adttl').bind('change keyup',function(){
		if(
			    $(this).val().search(/\{keyword\:/) != -1
			||  $(this).val().search(/\{Keyword\:/) != -1
			||  $(this).val().search(/\{KeyWord\:/) != -1
			||  $(this).val().search(/\{KeyWord\:/) != -1
			||  $(this).val().search(/\{KEYWord\:/) != -1
			||  $(this).val().search(/\{KeyWORD\:/) != -1
			||  $(this).val().search(/\{KEYWORD\:/) != -1
		)
			$(this).attr('maxlength',35);
		else
			$(this).attr('maxlength',25);
		$('#adttl-info').html($(this).attr('maxlength'));
		makeAdPreview();
	});
	$('#adtxt1').bind('change keyup',makeAdPreview);
	$('#adtxt2').bind('change keyup',makeAdPreview);
	$('#adurl').bind('change keyup', function(){
		var str = stripProtocol(stripWhitespace(this.value));
		if (this.value!=str) this.value = str;
		makeAdPreview();
		});
	// trigger the onchange-handler on load to strip protocol from URL read from userData
	$('#adttl, #adurl').trigger('change');

	$('#adurl-edit').before( '<span id="adurl-text">' + $('#adurl').val() + '<button class="smallbtn">Edit</button></span>' );
	$('#adurl-text button').click( function(){ $('#adurl-text').hide();$('#adurl-edit').show();return false } );
	$('#adurl-edit').hide();

	$('#adpresets .adpreview').click( function(){

		$('#adttl').val($(this).children(".ttl").eq(0).text());
		$('#adtxt1').val($(this).children(".txt").eq(0).text());
		$('#adtxt2').val($(this).children(".txt").eq(1).text()).trigger('change');
		return false
	});


// FORM - STEP #3 (keywords)

	// KW-functions specified below

	if($('#kwbycat-box').length){
		$('#kwbycat-box').empty();
		$('#kwbycat-box').append( makeKWList(userData.keywordsByCategory) );
	}
	if ($('#kwlist-box').length) {
		$('#kwlist').empty();
		$('#kwlist').append( makeKWList(userData.keywords,1) );

		if(userData.keywords && userData.keywords.length) {
			$('#kwlist').show();
			$('#kwlist-none').hide();
			}
		else {
			$('#kwlist').hide();
			$('#kwlist-none').show();
			}
		}
	$('#kwother').bind('change keyup', function(){
		if ($.trim(this.value)) $('#kwrel-link').show();
		else $('#kwrel-link').hide();
		});
	$('#kwrel-link').hide();


	//$('#kwlist-box').click(function(){ $('#kwother').focus() });
	$('#kwlist-box').click(function(){ $('#kwother').focus().select().scrollTo(this) });

// FORM - STEP #4 (date & budget)

	if(!userData.errors || (!userData.errors || !userData.errors.start)){
		$('#start-edit').before( '<span id="start-text">' + ($('#start').val() ? $('#start').val() : 'As soon as possible') + '<button class="smallbtn">Edit</button></span>' );
		$('#start-text button').click( function(){ $('#start-text').hide();$('#start-edit').show();return false } );
		$('#start-edit').hide();
	}

	if(!userData.errors || (userData.errors && !userData.errors.dend)){
		$('#end-edit').before( '<span id="end-text">' + ($('#dend').val() ? $('#dend').val() : 'When I stop it') + '<button class="smallbtn">Edit</button></span>' );
		$('#end-text button').click( function(){ $('#end-text').hide();$('#end-edit').show();return false } );
		$('#end-edit').hide();
	}

	$('#start').datepicker({ minDate: new Date() });
	$('#dend').datepicker({ minDate: new Date() });
	
	$('#bdggoomin').html( userData.bdgGooMin );
	$('#bdgyahmin').html( userData.bdgYahMin );
	$('#bdgclicks').html( userData.bdgClicks );

	if($('#bdgongoo').length){
		$('#bdgongoo').click( function(){
			if(this.checked) $('#bdggoo').val( userData.bdggoo ? userData.bdggoo : userData.bdgGooMin ).removeAttr('disabled');
			else $('#bdggoo').val( 0 ).attr('disabled',true);
			countBudget();
			}).triggerHandler('click');
	}
	if($('#bdgonyah').length){
		$('#bdgonyah').click( function(){
			if(this.checked) $('#bdgyah').val( userData.bdgyah ? userData.bdgyah : userData.bdgYahMin ).removeAttr('disabled');
			else $('#bdgyah').val( 0 ).attr('disabled',true);
			countBudget();
			}).triggerHandler('click');
	}


	$('#bdgclicks').after(' <a href="#" id="bdggetestimate">Get New Estimate</a>');
	$("#bdggetestimate").click(function(){
		var cl = $('#bdgclicks').get(0);

		$.ajax({
			type: 'GET',
			url: '../ajax/estimclicks.aspx',
			data:{bdggoo:$('#bdggoo').val()||0, bdgyah:$('#bdgyah').val()||0, cu:userData.crypt_id},
			dataType: 'json',
			beforeSend: function() {
				$('#bdgclicks').html('<em>Getting new estimate...</em>');
				},
			error: function() {
				$('#bdgclicks').html('<em>Error, please try again later.<'+'/em>');
				cl.lastEstimatedSum=0;
				$("#bdggetestimate").show();
				},
			success: function(data){
				if(data.message){
					$('#bdgclicks').html(data.message);
					cl.lastEstimatedSum=0;
					$("#bdggetestimate").show();
				}
				else{
					$('#bdgclicks').html(data.estimatedclick);
				}
			}
		});
		$("#bdggetestimate").hide();
		cl.lastEstimatedSum=cl.lastSum;
		return false;
	}).hide();

	function countBudget(){
		var sum = parseInt($('#bdggoo').val() || 0, 10) + parseInt($('#bdgyah').val() || 0, 10);
		$('#bdgdaily').html(sum);
		$('#bdgmonthly').html(30*sum);
		var cl = $('#bdgclicks').get(0);

		if(typeof(cl.lastSum)=="undefined")cl.lastEstimatedSum=sum;
		cl.lastSum=sum;


		if (cl.lastEstimatedSum==sum)
			$("#bdggetestimate").hide();
		else{
			$("#bdggetestimate").show();
		}
	};

	$('#bdggoo, #bdgyah').bind("change, keyup", countBudget);

	if($('#bdggoo, #bdgyah').length)
		countBudget();

// billing
$("#billinfoach, #billinfocredit").hide();
$("#billinfoswitch").hide();

if($("#billtypecredit").is(":checked")){
	$("#billinfocredit").show();
}
if($("#billtypeach").is(":checked")){
	$("#billinfoach").show();
	if(userData.editing)$("#billinfoswitch").show();
}

if($("#billtypecheck").is(":checked")){
	$("#billinfocheck").show();
	if(userData.editing)$("#billinfoswitch").show();
}

if(userData.salesrep)$("#billinfoswitch").show();



$("#billtypecredit").click(function(){
	if(this.checked){
		$("#billinfocredit").show("fast");
		$("#billinfoach").hide("fast");
	}
});

$("#billtypeach").click(function(){
	if(this.checked){
		$("#billinfoach").show("fast");
		$("#billinfocredit").hide("fast");
	}
});

$("#billtypecheck").click(function(){
	if(this.checked){
		$("#billinfoach").hide("fast");
		$("#billinfocredit").hide("fast");
	}
});

// MINIWEBSITE


	if($('#busurltld').length && tldList){
		$('#busurltld').chainedSelects( tldList, { grouping:[100]  } );
		$('.hideregdomain').removeClass('hideregdomain');
	}
	else{
		$('#busurltype1').attr('checked',1).parents('.radio').hide();
	}


	if(userData.busurl1||userData.busurl2)
		userData.userchosebusurl=true;

	$('#busname').change(function(){
		if(! userData.userchosebusurl ){

			if($('#busurltype1').is(':checked')){
				$('#busurl1').val(this.value.replace(/\s+/g,'').toLowerCase().substr(0,30)).change()
				$('#busurlbtn1').click()
			}
			else{
				$('#busurl2').val(this.value.replace(/\s+/g,'').toLowerCase().substr(0,62)).change()
				$('#busurlbtn2').click()
			}			
		}
	});

	$('#buspayother').click(function(){ if(this.checked) $('#buspaytxt').show(); else $('#buspaytxt').hide().valid() }).filter(':checked').triggerHandler('click');
	$('#bushours1').click(function(){ if(this.checked) $('#bushourstxt').hide().valid() });
	$('#bushours2').click(function(){ if(this.checked) $('#bushourstxt').show() }).filter(':checked').triggerHandler('click');



	$('#busurltype1').click(function(){
		$('#busurl2, #busurltld').valid();
		if ($('#busurl1').val()){
			$('#busurl1').valid();
			$('#busurlbtn1').show();
		}
		$('#busurlbtn2').hide();
		$('#busurl2result').hide();

		if($('#busurl1').val() != $('#busurl2').val()) $('#busname').triggerHandler('change');
		});
	$('#busurltype2').click(function(){
		$('#busurl1').valid();
		$('#busurlbtn1').hide();
		if ($('#busurl2').val()) {
			$('#busurl2').valid();
			$('#busurlbtn2').show();
		}
		$('#busurl1result').hide();

		if($('#busurl1').val() != $('#busurl2').val()) $('#busname').triggerHandler('change');
		});

	$('#busurltype2:checked').triggerHandler('click');

	$('#busurl1, #busurl2, #busurltld').click(function(){
		var n = (this.id=='busurl1') ? 1 : 2;
		if(! $('#busurltype'+n).is(":checked"))
			$('#busurltype'+n).attr('checked',1).triggerHandler('click');
	});


	$('#busurl1').bind('change keyup',function(){
		$('#busurl1result').hide();
		if (this.value) $('#busurlbtn1').show();
		else $('#busurlbtn1').hide();
		$('#busurl1').removeClass('available unavailable').valid();
		}).focus(function(){
			userData.userchosebusurl=true;
		});
	$('#busurl2, #busurltld').bind('change keyup',function(){
		$('#busurl2result').hide();
		if ($('#busurl2').val()) $('#busurlbtn2').show();
		else $('#busurlbtn2').hide();
		$('#busurl2, #busurltld').removeClass('available unavailable').valid();
		}).focus(function(){
			userData.userchosebusurl=true;
		});

	$('#busurlbtn1, #busurlbtn2').click(function(){
		var n = (this.id=='busurlbtn1') ? 1 : 2;
		$.ajax({
			type: 'GET',
			// change the URL to a real script to get an ad template from a server API
			url: '../ajax/checkdomain.aspx',
			data:{url:$("#busurl"+n).val(),tld: (n==1)? null : $("#busurltld").val()},
			dataType: 'json',
			beforeSend: function() {
				$('#busurl'+n+'result').html('<em>Checking...<'+'/em>').show();
				$('#busurlbtn'+n).hide();
				},
			error: function() {
				$('#busurl'+n+'result').html(' &larr; Checking error.').show();
				$('#busurlbtn'+n).show();
				},
			success: function(data){
				if(data.ok) {
					$('#busurl'+n+'result').html(' &larr; Domain is available').show();
					if (n==1) $('#busurl1').addClass('available');
					else $('#busurltld').addClass('available');
					}
				else{
					if(data.message){
						$('#busurl'+n+'result').html('&larr; '+data.message).show();
						$('#busurlbtn'+n).show();
					}
					else {
						$('#busurl'+n+'result').html(' &larr; Domain is <strong>NOT<'+'/strong> available').show();
					}
					if (n==1) $('#busurl1').addClass('unavailable');
					else $('#busurltld').addClass('unavailable');
					}
				}
			});
		return false
		});

	var initFileInput = function(){

		var testFileInput = function(){
				if ($('#buspicfile').get(0).value) 
					$('#buspic-btn').show();
				else
					$('#buspic-btn').hide();
		};

		$('#buspicfile').change(function(){
			testFileInput();
		}).change();

		
		$('#buspicfile').focus(function(){
				setTimeout(function(){
					testFileInput();
					$("#buspicfile").valid();
				},100);

				
		});

	};

	if($('#buspicfile').length){
		initFileInput();
		if(userData.buspic)
			busPicShow(userData.buspic);
	}

	$('#buspic-btn').click(function(){
		if (!$('#buspicfile').val()) return false;
		$.ajaxFileUpload({
			url:'../ajax/fileupload.aspx',
			secureuri:false,
			fileElementId:'buspicfile',
			dataType: 'json',
			success: function(data,status) {
				if (data.error) {
					$("#buspic-img").hide();
					$("#buspic-info").html("");
					$("#buspic-upload").show();
					validator.showErrors({"buspicfile":data.error});
					}
				else {
					busPicShow(data);
					}
				},
			error: function(data,status,e) {
				$("#buspic-img").hide();
				$("#buspic-info").html("");
				$("#buspic-upload").show();
				validator.showErrors({"buspicfile":"Error, please try to upload smaller picture."});
				}
			});
		$('#buspicfile').val('').change();
		$('#buspic').show();
		$("#buspic-upload").hide();
		$("#buspic-img").attr('src','../img/loading.gif').show();
		$("#buspic-info").html('<em>Uploading...</em>');

		//cos after uploading all binded events disapears
		initFileInput();

		return false;
		});


	$('#buslayout1').click(function(){ $('#buslaytxt-box').hide(); $('#buslaypic-box').show() });
	$('#buslayout2').click(function(){ $('#buslaytxt-box').show(); $('#buslaypic-box').hide();  $("#buspicfile").valid() })
	if($('#buslayout2').is(':checked')){
		$('#buslaytxt-box').show(); $('#buslaypic-box').hide();
	}

	$('#lnkpreviewminiwebsite').click(function(){
		$("form").addClass("showpreview").trigger('submit');
		return false;
	});

// Validation

	$.validator.addMethod('noprotocolurl',function(value,element){
		return this.optional(element) || /^(([a-z0-9_\-]{2,}\.)+[a-z]{2,})|((\d+\.){3}\d+)(:[a-z0-9]+)?(\/[a-z0-9\-\._\?\,\'\/\\\+&amp;%\$#\=~]*)?$/i.test(value);
		},'Please enter a valid URL');


	$.validator.addMethod('date2',function(value,element){
			if (this.optional(element)) return true;
			var v = value.split('/');
			if (v.length!=3 || (isNaN(v[0]) || v[0]<1 || v[0]>12) || (isNaN(v[1]) || v[1]<1 || v[1]>31) || isNaN(v[2])  ) return false;
			return true;
			},'Please enter a valid date as mm/dd/yyyy');

	$.validator.addMethod('notunavailable',function(value,element){
			if (this.optional(element)) return true;
			if ($(element).hasClass('unavailable')) return false;
			return true;
			},'The address is not available.');

	$.validator.addMethod('subdomain',function(value,element){
		return this.optional(element) || /^([a-z0-9]+\-?)*[a-z0-9]*$/i.test(value);
		},'Only letters, digits and a dash are available.');

	validator = $('form').validate({
		rules: {
			affweb: {
				required: true
			},
			url: {
				required: true,
				noprotocolurl: true
				},
			category: 'required',
			adttl: 'required',
			adtxt1: 'required',
			adtxt2: 'required',
			adurl: {
				required: true,
				noprotocolurl: true
				},
			start: 'date2',
			dend: 'date2',
			bdggoo: {
				required: true,
				number: true,
				min: userData.bdgGooMin,
				max: userData.bdgGooMax
				},
			bdgyah: {
				required: true,
				number: true,
				min: userData.bdgYahMin,
				max: userData.bdgYahMax
				},
			bdgongoo: {
				required: '#bdgonyah:unchecked'
				},
			bdgonyah: {
				required: '#bdgongoo:unchecked'
				},
			fname: 'required',
			lname: 'required',
			phone: 'required',
			email: {
				required:true,
				email: true
				},
			company:{
					minlength: 2
				},
			contactaddress: {
					minlength: 2
				},
			contactcity: {
					minlength: 2
				},
			contactzip: {
				digits: true,
				rangelength: [5,5]
				},
			areazip: {
				digits: true,
				rangelength: [5,5]
				},
			pwd: {
				required: true,
				minlength: 6
				},
			pwd2: {
				required: true,
				equalTo: '#pwd'
				},
			agree: 'required',
			billname: {
			  required: "#billtypecredit:checked"
			  },
			billaddress: {
					required: "#billtypecredit:checked",
					minlength: 2
				},
			billcity: {
					required: "#billtypecredit:checked",
					minlength: 2
				},
			billzip: {
				required: "#billtypecredit:checked",
				digits: true,
				rangelength: [5,5]
				},
			areazip: {
				digits: true,
				rangelength: [5,5]
				},
			cardtype: {
			  required: "#billtypecredit:checked"
			  },
			cardnr: {
				required : "#billtypecredit:checked",
				creditcard: true
				},
			cardexpm: {
				required: "#billtypecredit:checked"
				},
			cardexpy: {
				required: "#billtypecredit:checked"
				},
			cardsec: {
				required: "#billtypecredit:checked"
				},
			achabanumber: {
				required: "#billtypeach:checked",
				digits: true
				},
			achaccnumber: {
				required:"#billtypeach:checked",
				digits: true,
				minlength: 5
				},
			achowner: {
				required: "#billtypeach:checked"
				},
			login: 'required',
			subject: 'required',
			text: 'required',
			message: 'required',
			oldpwd:{
				required: true,
				minlength: 6
				},
			newpwd:{
				required: true,
				minlength: 6
				},
			newpwd2:{
				required: true,
				minlength: 6
				},
			busname: {
				required : true,
				rangelength: [2,64]
				},
			busstreet1: {
				required : true,
				rangelength: [2,58]
				},
			busstreet2: {
				rangelength: [2,58]
				},
			buscity: {
				required : true,
				rangelength: [2,20]
				},
			buszip: {
				required : true,
				digits: true,
				rangelength: [5,5]
				},
			buscountry: 'required',
			busemail: {
				required: true,
				email: true
				},
			busphone: 'required',
			buspaytxt: {
				required:'#buspayother:checked'
				},
			bushourstxt: {
				required:'#bushours2:checked'
				},
			busurl1: {
				required:'#busurltype1:checked',
				rangelength: [2,30],
				subdomain: true,
				notunavailable: true
				},
			busurl2: {
				required:'#busurltype2:checked',
				rangelength: [2,63],
				subdomain: true,
				notunavailable: true
				},
			busurltld: {
				required:'#busurltype2:checked',
				notunavailable: true
				},
			busdesc: 'required',
			buspicfile: {
				required: function(){
					return ($('#buslayout1').is(':checked') && $("#buspicurl").val());
					}
				}
			},
		messages: {
			affweb: "Please select one of these options",
			url: "A valid URL is required",
			category: "Please select the category of your business",
			areazip: 'You have entered an invalid ZIP code.<br /> Please enter a valid ZIP code, e.g., 04831.',
			adttl: 'This field is required',
			adtxt1: 'This field is required',
			adtxt2: 'This field is required',
			start: 'Enter a valid date or leave empty',
			dend: 'Enter a valid date or leave empty',
			bdgongoo: 'At least one of these checkboxes must be checked',
			bdgonyah: 'At least one of these checkboxes must be checked',
			agree: 'You must agree with the Terms and Policy before submit',
			busurl1ok: 'This address is not available',
			busurl2ok: 'This address is not available'
			},
		submitHandler: function(form) {

			if ( !$('#buslayout1').is(':checked') || $("#buspicurl").val() ) $('#buspicfile').attr('disabled',true);

			if(form.id=="form3"){
				checkKeywords(form);
			}
			else if($(form).is(".showpreview")){
				openMiniwebsitePreview();
				$("#clickedshowpreview").val('1');
				form.submit();
			}
			else{
				form.submit()
			}
			},
		errorClass: 'error',
		errorElement: 'div',
		errorPlacement: function(error,element) {
			var par = element.parents('.fldbox');
			error.appendTo(par);
			var p = $.iUtil.getPosition($(element).get(0));
			var p2 = $.iUtil.getPosition($(par).get(0));
			var s = $.iUtil.getSize($(error).get(0));
			var s2 = $.iUtil.getSize($(element).get(0));
			error.css('left',(p.x-p2.x+s2.wb+5)+'px').css('top',Math.floor(p.y-p2.y-s.hb/2+s2.hb/2)+'px');
			},
		showErrors:function(errorMap,errorList){
				
				//for budged
				if(errorList.length)
					$("#bdggetestimate").hide();




				this.defaultShowErrors();
			}
		});

		if (userData.errors) {
				validator.showErrors(userData.errors);
		}
});


// functions


function stripWhitespace(str) { return str.replace(/\s/g,'') }
function stripProtocol(url) { return url.replace(/^.*:\/\/(.*)/,'$1') }
function makeFullURL() {
	$('#fullurl').val($('#protocol').val()+$('#url').val());
	}
function makeAdPreview() {
	var ttl = $('#adttl').val() || userData.defaultAdTitle;
	var txt1 = $('#adtxt1').val() || userData.defaultAdText1;
	var txt2 = $('#adtxt2').val() || userData.defaultAdText2;
	var url = $('#adurl').val() || userData.defaultAdURL;
	$('#adpreview').empty()
		.append('<div class="ttl"><a href="http://'+url+'" target="_blank">'+ ttl +'</a></div>')
		.append('<div class="txt">'+ txt1 +'</div>')
		.append('<div class="txt">'+ txt2 +'</div>')
		.append('<div class="url"><a href="http://'+url+'" target="_blank">'+ url +'</a></div>');
	}

function add_region() {
	var e = $('#country').get(0).chainedSelect;
	var id = e.val();
	var idArr = e.val2arr(id);
	var txt = e.text();
	e.disableData(id,1,0);
	if (idArr.length>1) {
		if (idArr[0]=='US') e.disableData('CA',1,0);
		else if (idArr[0]=='CA') e.disableData('US',1,0);
		}
	else {
		e.disableData('US',1,1);
		e.disableData('CA',1,1);
		}
	e.rebuild(regionList,0);

//	if ($('#region-box #reg-'+id).length>0) alert('This region has been already added!')
	if ($('#region-box input').filter( function(){var p = new RegExp('^'+this.value+'.*');return id.match(p)} ).length>0) alert('More common region has been already added!')
	else $('#region-box').append('<li id="reg-'+id+'"><button class="smallbtn smallremovebtn" onclick="removeRegion(\''+id+'\');return false"><'+'/button> '+ txt + '<input type="hidden" name="region" value="'+id+'"><'+'/li>');
	if ($('#country').attr('disabled')) $('#addregion').hide();

	$("#rsor, #rsbyzip").hide();
	$("#areazip").attr("disabled",1);
	return false;
	}

function get_area(){
	if (! $('#areazip').val()){
		validator.showErrors({"areazip":"Please enter a valid ZIP code, e.g., 04831."});
		return false;
	}

	if ( 	$('#areazip').valid() ) {

		var zip=$('#areazip').val();

		if($('#area-'+zip).length ){
			validator.showErrors({"areazip":"This local (ZIP) area has already been added."});
		}

		else{


			$.ajax({
				type: 'GET',
				url: '../ajax/getzip.aspx',
				data: { zip: zip, range: $('#arearange').val() ,cu:userData.crypt_id  },
				dataType: 'json',
				beforeSend: function() {
					$('#rsbyzip').hide();
					$('#rsbyzip').before('<p id="rsbyzip-loading"><img src="../img/loading.gif" alt="" /> <em>Adding...</em></p>');
				},
				success: function(data){
					$('#rsbyzip-loading').remove();
					$('#rsbyzip').show();

					if(data.error){
						validator.showErrors({"areazip":data.error});

						if(	$('#region-box input[type=hidden]').length==0 ){
							$("#rsor, #rssel").show();
						}

					}
					else{
						add_area(data);		
					}
						
					},
				error: function(){
						$('#rsbyzip-loading').remove();
						$('#rsbyzip').show();
						validator.showErrors({"areazip":"Error, please try again later."});
						
						if(	$('#region-box input[type=hidden]').length==0 ){
							$("#rsor, #rssel").show();
						}
					}
				});
				$('#areazip').val("");
				$("#rsor, #rssel").hide();
		}
	}		
}


function add_area(area){
	var zip=area.zip;
	var txt=area.name;


	var areavalue=zip;
	var areatxt=txt;

	if(area.range){
		areavalue+='/'+area.range;
		areatxt+=' - Range: '+area.range+' miles';
	}

	$('#region-box').append('<li id="area-'+zip+'"><button class="smallbtn smallremovebtn" onclick="removeArea(\''+zip+'\');return false"><'+'/button> '+ areatxt + '<input type="hidden" name="area" value="'+areavalue+'"><'+'/li>');
	$("#rsor, #rssel").hide();

	check_area_count();
}




function removeRegion(id) {
	$('#reg-'+id).remove();
	var e = $('#country').get(0).chainedSelect;
	e.disableData(id,0,0);
	var vUSsub = 0, vCAsub = 0, vUS = 0, vCA = 0;
	$('#region-box input').each(function(){
		var v = e.val2arr(this.value);
		if (v.length>1) {
			if (v[0]=='US') vUSsub++;
			else if (v[0]=='CA') vCAsub++;
			}
		else {
			if (v[0]=='US') vUS++;
			else if (v[0]=='CA') vCA++;
			}
		});
	if (!vUS && !vCAsub) e.disableData('US',0,0);
	if (!vCA && !vUSsub) e.disableData('CA',0,0);
	if (!vUS && !vCA) {
		e.disableData('US',0,1);
		e.disableData('CA',0,1);
		}
	e.rebuild(regionList,0);
	if (!$('#country').attr('disabled')) $('#addregion').show();

	if(	$('#region-box input[type=hidden]').length==0 ){
		$("#rsor, #rssel, #rsbyzip").show();
			$("#areazip").attr("disabled",0);


	}

	}

function removeArea(zip) {
	$('#area-'+zip).remove();
	if(	$('#region-box input[type=hidden]').length==0 ){
		$("#rsor, #rssel, #rsbyzip").show();
		$('#areazip').val("").valid();
	}

	check_area_count();
}

function check_area_count(){
	var max=44;
	if($('#region-box li').length >= max){
		$('#rsbyzip').hide();
		$('#rsbyzip-info').html("You have exceeded the maximum limit of 44 ZIP codes. If you want to enter another one, you must delete one of the previously entered ZIP codes.").show();
	}
	else{
		$('#rsbyzip').show();
		$('#rsbyzip-info').html('').hide();
	}
}


// *****************
//  Keywords
// *****************

function makeKWList(data,remove,onlybad) {
	var i,l,bf = '<table class="kwlist"><col class="c1"></col><col class="c2"></col><col class="c3"></col><tbody>';

	if (!remove && data.length>0) {
		bf += '<tr><td colspan="2"></td><td><button class="smallbtn smalladdallbtn" onclick="$(this).parents(\'table\').eq(0).find(\'.smalladdbtn\').click();return false">Add all &raquo;</button></td></tr>';
		}

	
	for (i=0,l=data.length;i<l;i++) {
		bf += makeKWRow(data[i].kw,data[i].st,remove,onlybad);
		}

	if (!remove && data.length>0) {
		bf += '<tr><td colspan="2"></td><td style="padding-top:15px"><button class="smallbtn smalladdallbtn" onclick="$(this).parents(\'table\').eq(0).find(\'.smalladdbtn\').click();return false">Add all &raquo;</button></td></tr>';
		}

	bf += '</tbody></table>';



	var list=$(bf);

	if(!onlybad)
		list = addBadTooltip(list);


	return list;
	}


function makeKWRow(kw,st,remove,onlybad) {
	var kwTxt = kw.replace(/["\[\]]/g,'');
	kw = kw.replace(/"/g,'&quot;');
	var bf = '<tr'+ ( (onlybad && st != "-1")? ' style="display:none"':''  ) +'><td>'+kwTxt+'</td><td>'+putKWListImage(st)+'</td><td>';
	if (remove) bf += '<button class="smallbtn smallremovebtn" onclick="return '+ ((onlybad) ? 'removekwmodal' : 'removekw') +'(this)"></button><input type="hidden" name="keywords" value="'+kw+'">';
	else bf += '<button class="smallbtn smalladdbtn" onclick="return addkw(\''+kw.replace(/'/,'\\\'')+'\','+st+')">Add &raquo;</button>';
	bf += '</td></tr>';
	return bf;
	}


function putKWListImage(st){
	var image=$("<div>").addClass("kwd-sign");
	switch(st){
		case 0:
			image.addClass("kwd-sign-good");
		break;
		case -1:
			image.addClass("kwd-sign-bad");
		break;
		case +1:
			image.addClass("kwd-sign-great");
		break;
	}

	var c=$("<div>")
	image.appendTo(c);
	return c.html();
}

function addkw(kw,st) {
	var found = false;
	$('#kwlist input').each(function(i){ if(this.value==kw) found = true });

	if (!found) {
		$('#kwlist tbody').append( makeKWRow(kw,st,true) );
		$('#kwlist').show();
		$('#kwlist-none').hide();
//		$.scrollTo('#kwlist',800);
		}

	addBadTooltip($('#kwlist'));

	return false;
	}

function addotherkw(kw) {
	var kw = $.trim( $('#kwother').val().replace(/[\!\@\%\^\*\(\)\=\{\}\;\~\`\<\>\,\?\\\|\"\[\]]/g,' ').replace(/\s+/g,' ') );
	if (kw) return addkw(kw,0);
	else return false;
	}

function removekw(btn) {
	$(btn).parent().parent().remove();
	if ($('#kwlist tbody input').length==0) {
		$('#kwlist').hide();
		$('#kwlist-none').show();
		}
	}

function removekwmodal(btn){

	$(btn).parent().parent().remove();
	if ($('#modal-kwlist tr:visible').length==0) {
		setTimeout($('#modal-continue').trigger('click'),10);
		}
	
	return false;
}

function addBadTooltip(list){
	$(".kwd-sign-bad",list).tooltip({
	bodyHandler:function(){
		/*
		$("#tooltip").css("visibility","hidden");

		var fce=function(){
				$.tooltip.update();
				$("#tooltip").css("visibility","visible")

				$("#tooltip-in").hide();
				$("#tooltip-in").slideDown("slow");
		}

		setTimeout(fce,500);
		*/

		return "<div id=\"tooltip-in\"><h4>Keyword Too Generic</h4><p>These keywords are frequently searched and may contribute to an increase of visitor load on your website, but may lower conversions. We recommend that you choose more specific keywords that are more likely to increase conversions.</p></div>";
		}
	});
	return list;
}


// An example how to load & display related keywords

function searchrelatedkw() {
	var kw = $.trim($('#kwother').val());
	$.ajax({
		type: 'GET',
		// change the URL to a real script to get the related kw from a server API
		url: '../ajax/relatedkw.aspx',
		data: { kw: kw, cu:userData.crypt_id  },
		dataType: 'json',
		beforeSend: function() {
			$('#kwrel-link').hide();
			$('#kwrel-box').html('<img src="../img/loading.gif" alt="" /> <em>Searching...</em>');
		},
		success: function(data){
			if(data.length>0){
				$('#kwrel-box').html( '<h4>Related keywords to "'+kw+'"</h4>');
				$('#kwrel-box').append(makeKWList(data));
			}
			else{
				$('#kwrel-box').html( '<em>No related keywords were found for "'+kw+'".</em>');
			}
			$.scrollTo('#kwrel-box',800);
			}
		});
	}
	




function checkKeywords(form){
	if($("#form3").attr("overide")=="1"){
		form.submit()
	}
	else {

		var kwcheck_win_html=$('<div class="modal-win"><div class="modal-t"><div class="modal-i"></div></div><div class="modal-m"><div class="modal-i"><div class="modal-header">Keyword Check Results</div><div class="modal-loading">Loading</div><div class="modal-in"><p>These keywords are frequently searched and may contribute to an increase of visitor load on your website, but may lower conversions. We recommend that you choose more specific keywords that are more likely to increase conversions.</p> <div id="modal-kwlist"></div> </div></div></div><div class="modal-b"><div class="modal-i"></div></div></div>');

		var kwcheck_win=$(kwcheck_win_html).modal({
			overlay:80,
			overlayId: 'modal-overlay',
			containerId: 'modal-container',
			onOpen:function(dialog){
				$(".modal-in",dialog.data).hide();

				/*fix IE bug, no :hover for a without href*/
				$(".modalCloseImg",dialog.container).attr("href","#");

				var kw = [];
				$('#kwlist input').each(function(){
					kw.push(this.value);
					});
				kw=kw.join(',');

				$.ajax({
					type: 'POST',
					url: '../ajax/checkkw.aspx',
					data: { kw: kw, cu:userData.crypt_id },
					dataType: 'json',
					success: function(data){
						$('#modal-kwlist',kwcheck_win_html).empty();
						$('#modal-kwlist',kwcheck_win_html).append(makeKWList(data,1,1)).css("max-height",$(window).height()*0.4+"px");

						if($('#modal-kwlist tr:visible',kwcheck_win_html).length==0){
							kwcheck_win.close(false);$('#form3').attr("overide","1").trigger('submit',1);
						}

						else{
							$('.modal-in',kwcheck_win_html).append($('<div class="btnset"><span class="button button-small"><span><button type="button" id="modal-back">Edit Keywords</button></span></span><span class="button button-green"><span><button type="submit" id="modal-continue">Continue</button></span></span></div>'));
							
							//buttons hover fx
							$('.button button',kwcheck_win_html)
								.mouseover( function(){ $(this).parent().addClass('button-over') } )
								.mousedown( function(){ $(this).parent().addClass('button-down') } )
								.mouseout( function(){ $(this).parent().removeClass('button-over button-down') } );

							//button actions
							$('#modal-back',kwcheck_win_html).click(function(){kwcheck_win.close(false);$.scrollTo('#kwlist',800);return false});
							$('#modal-continue',kwcheck_win_html).click(function(){kwcheck_win.close(false);$('#form3').attr("overide","1").trigger('submit',1);return false});

							//hide loading, show data
							$(".modal-loading",dialog.data).hide();
							$(".modal-in",dialog.data).slideDown("slow");
						}
					}
				});

		
			
				dialog.data.show();
				$("#modal-overlay").fadeIn();
				$("#modal-container").slideDown();
			},
			onClose:function(){

				$('#kwlist').empty().append($('#modal-kwlist',kwcheck_win_html).children());
				$('#kwlist tr').attr("style","");
				addBadTooltip($('#kwlist'));

				$("#modal-overlay").fadeOut();
				$("#modal-container").slideUp("slow",function(){
					$.modal.close();
				});
			}
		});
		
	}
}

function openMiniwebsitePreview(){
	userData.miniWebsitePreviewIsLoading=true;
	var win=window.open('../ajax/miniwebsiteloading.htm','miniwebsitepreview',"");
	try{win.focus()}catch(e){};

}

function busPicShow(data){
	$("#buspic-img").attr('src',data.url).show();
	$("#buspic-info").html(data.info || '');
	$("#buspicurl").val(data.url);
	$("#buspic-del").html('<a href="#">Remove and upload other picture<'+'/a>');
	$("#buspic-del a").click(function(){ $("#buspicurl").val("");$("#buspic-del").empty(); $('#buspic').hide(); $("#buspic-upload").show(); return false; });
	$('#buspic').show();
	$('#buspic-upload').hide();
}