var message = {
   loading:                         'Loading...',
   connect_error:                   'Keine Verbindung zum Server, bitte versuche es später nochmals',
   title_connect_error:             'Server error',
   invalid_job:                     'Invalid job ad',
   register_form:                   'Please login / register first',
   title_favorite_error:            'Registration error',
   forward_success:                 'Email sent',
   title_forward_success:           'Successfully forwarded',
   title_forward_error:             'Forwarding error',
   comment_success:                 'Thanks for your feedback',
   title_comment_success:           'Feedback',
   login_success:                   'Welcome %user%',
   title_login_success:             'Successfully logged in',
   title_login_error:               'Login error',
   title_form_register_error:       'Registration error',
   login_username_error:            'Benutzername ist entweder leer oder zu kurz',
   login_password_error:            'Password too short or blank',
   register_name_error:             'Please fill in your name',
   register_companyname_error:      'Bitte gib den Namen Deiner Firma an',
   register_email_error:            'Please fill in your email',
   register_password_error:         'Please choose a password',
   register_confirm_password_error: 'Passwords do not match',
   register_success:                'Thank you for your registration. Before using Jobheidi you have to confirm your email address by clicking on the confirmation link that we sent you to your email address. Many thanks!',
   register_save_success:           'Dein Profil ist jetzt aktualisiert. Deine Daten werden natürlich vertraulich behandelt! Vielen Dank!',
   register_save_title_success:     'Änderungen gespeichert',
   title_register_success:          'Successfully registered',
   resetpw_success:                 'Ein neues Passwort wurde Dir zugesendet. Es sollte in den nächsten Minuten in Deiner Inbox eintreffen.',
   title_resetpw_success:           'Neues Passwort gesetzt',
   comment_save_success:            'Comment saved',
   title_comment_save_success:      'Comment saved',
   title_comment_save_error:        'Could not save comment',
   comment_error:                   'Could not save comment',
   title_favorite_save_success:     'Favorite saved',
   title_favorite_save_error:       'Fehler beim Speichern des Favorits',
   favorite_error:                  'Could not save job as favorite',
   tittle_forward:                  'Send job "%job_name%..." as e-mail',
   tittle_sending_forward:          'Send job "%job_name%..." as e-mail',
   comment_of:                      'Comment "%job_name%"',
   category_favorite:               'My favorite jobs (%total%)',
   city_text:                       'Search in a city',
   filter_text:                     'Suche z.B. Sales Manager oder "Sales Manager"',
   comment_twitter_error:           'Message too short',
   twitter_success:                 'Send twitter message',
   title_my_parameters:             'Save search subscription',
   title_parameters:                'My searches',
   parameters_save_success:         'Search subscription "%name%" has been saved',
   parameters_delete_success:       'Search subscription "%name%" has been deleted',
   title_add_job:                   'Add Job',
   add_job_success:                 'The job was saved and will be published shortly',
   deactive_job:                    'The job "%job_name%" has been deactivated',
   active_job:                      'The job "%job_name%" has been activated',
   add_job_error:                   'Registration error',
   delete_job:                      'Job löschen',
   delete_job_error:                'Stelleninserat konnte nicht gelöscht werden',
   delete_job_success:              'Stelleninserat %title% wurde gelöscht',
   title_news:                      "HEIDI'S NEWSCORNER",
   confirmed_user:                  'User erfolgreich bestätigt',
   pdf:                             'PDF',
   download:                        'Lädt PDF'
};;
function News (jl) {
   // Attributes
   var jobluigi      = jl;
   var dialog_news   = null;
   var urlShowNews   = '/news/show';
   var urlShowList   = '/news';

   // Private methods
   var showLoading = function() {$('#metacol_1 > #options_search > div.subsection:eq(1) > div#waiting_user_info').show('fast');};
   var hideLoading = function() {$('#metacol_1 > #options_search > div.subsection:eq(1) > div#waiting_user_info').hide('fast');};

   var showDialog  = function(e) {
      dialog_news.dialog('close');
      showLoading();
      jobluigi.connect(urlShowNews, {id:$(this).attr('id').substr(5)}, function (result, textStatus){
         hideLoading();
         if (result.success) {
            $('h2', dialog_news).html(result.data.title);
            if (result.data.is_external) {
               dialog_news.dialog('option', 'width', 1200);
               dialog_news.dialog('option', 'height', 850);
               $('p', dialog_news).load(result.data.content);
            }
            else {
               if (result.data.is_video) {
                  dialog_news.dialog('option', 'width', 1200);
                  dialog_news.dialog('option', 'height', 850);
               }
               else {
                  dialog_news.dialog('option', 'width', 600);
                  dialog_news.dialog('option', 'height', 450);
               }
               $('p', dialog_news).html(result.data.content);
            }
            dialog_news.dialog('open');
         }
         else
            jobluigi.showError(message.connect_error, message.title_news);
      });
   }

   var showList = function(e) {
      showLoading();
      jobluigi.connect(urlShowList, new Object(), function (result, textStatus){
         hideLoading();
         if (result.success) {
            dialog_news.dialog('option', 'width', 600);
            dialog_news.dialog('option', 'height', 450);
            var t = '<table>';
            for (var i=0; i <result.total; i++) t = t.concat('<tr><td><a href="javascript:void(0);" id="news_'+result.data[i].id+'">'+result.data[i].date+'</a></td><td><a href="javascript:void(0);" id="news_'+result.data[i].id+'">'+result.data[i].title+'</a></td></tr>');
            $('h2', dialog_news).html(message.title_news);
            $('p', dialog_news).html(t.concat('</table>'));
            dialog_news.dialog('open');
            $('p a', dialog_news).bind('click', e.data, showDialog);
         }
         else
            jobluigi.showError(message.connect_error, message.title_news);
      });
   }

   var showVideo = function(e) {
      dialog_news.dialog('option', 'width', 1200);
      dialog_news.dialog('option', 'height', 700);
      $('h2', dialog_news).text('Jobheidi.com mit Video');
      $('p', dialog_news).html('<object width="1200" height="575"> <param name="movie" value="http://content.screencast.com/users/jobheidi.com/folders/Jing/media/aecd5c05-da69-4cd3-8eea-4210af79bb24/jingswfplayer.swf"></param> <param name="quality" value="high"></param> <param name="bgcolor" value="#FFFFFF"></param> <param name="flashVars" value="thumb=http://content.screencast.com/users/jobheidi.com/folders/Jing/media/aecd5c05-da69-4cd3-8eea-4210af79bb24/FirstFrame.jpg&containerwidth=1440&containerheight=689&content=http://content.screencast.com/users/jobheidi.com/folders/Jing/media/aecd5c05-da69-4cd3-8eea-4210af79bb24/2010-01-14_1859.swf"></param> <param name="allowFullScreen" value="true"></param> <param name="scale" value="showall"></param> <param name="allowScriptAccess" value="always"></param> <param name="base" value="http://content.screencast.com/users/jobheidi.com/folders/Jing/media/aecd5c05-da69-4cd3-8eea-4210af79bb24/"></param>  <embed src="http://content.screencast.com/users/jobheidi.com/folders/Jing/media/aecd5c05-da69-4cd3-8eea-4210af79bb24/jingswfplayer.swf" quality="high" bgcolor="#FFFFFF" width="1440" height="689" type="application/x-shockwave-flash" allowScriptAccess="always" flashVars="thumb=http://content.screencast.com/users/jobheidi.com/folders/Jing/media/aecd5c05-da69-4cd3-8eea-4210af79bb24/FirstFrame.jpg&containerwidth=1440&containerheight=689&content=http://content.screencast.com/users/jobheidi.com/folders/Jing/media/aecd5c05-da69-4cd3-8eea-4210af79bb24/2010-01-14_1859.swf" allowFullScreen="true" base="http://content.screencast.com/users/jobheidi.com/folders/Jing/media/aecd5c05-da69-4cd3-8eea-4210af79bb24/" scale="showall"></embed> </object>');
      dialog_news.dialog('open');
   }
   var showVideo2 = function(e) {
      dialog_news.dialog('option', 'width', 1200);
      dialog_news.dialog('option', 'height', 700);
      $('h2', dialog_news).text('Jobheidi.com mit Video');
      $('p', dialog_news).html('<object id="scPlayer" width="1280" height="589"> <param name="movie" value="http://content.screencast.com/users/jobheidi.com/folders/Jing/media/76fc3f51-182a-42ea-84b2-5fe3d25b46ba/jingswfplayer.swf"></param> <param name="quality" value="high"></param> <param name="bgcolor" value="#FFFFFF"></param> <param name="flashVars" value="thumb=http://content.screencast.com/users/jobheidi.com/folders/Jing/media/76fc3f51-182a-42ea-84b2-5fe3d25b46ba/FirstFrame.jpg&containerwidth=1280&containerheight=589&content=http://content.screencast.com/users/jobheidi.com/folders/Jing/media/76fc3f51-182a-42ea-84b2-5fe3d25b46ba/2010-01-29_1928.swf"></param> <param name="allowFullScreen" value="true"></param> <param name="scale" value="showall"></param> <param name="allowScriptAccess" value="always"></param> <param name="base" value="http://content.screencast.com/users/jobheidi.com/folders/Jing/media/76fc3f51-182a-42ea-84b2-5fe3d25b46ba/"></param>  <embed src="http://content.screencast.com/users/jobheidi.com/folders/Jing/media/76fc3f51-182a-42ea-84b2-5fe3d25b46ba/jingswfplayer.swf" quality="high" bgcolor="#FFFFFF" width="1280" height="589" type="application/x-shockwave-flash" allowScriptAccess="always" flashVars="thumb=http://content.screencast.com/users/jobheidi.com/folders/Jing/media/76fc3f51-182a-42ea-84b2-5fe3d25b46ba/FirstFrame.jpg&containerwidth=1280&containerheight=589&content=http://content.screencast.com/users/jobheidi.com/folders/Jing/media/76fc3f51-182a-42ea-84b2-5fe3d25b46ba/2010-01-29_1928.swf" allowFullScreen="true" base="http://content.screencast.com/users/jobheidi.com/folders/Jing/media/76fc3f51-182a-42ea-84b2-5fe3d25b46ba/" scale="showall"></embed> </object>');
      dialog_news.dialog('open');
   }

   var initDialog  = function() {
      var name_dialog = 'dialog_news'+Math.round(Math.random()*1000);
      $('<div id="'+name_dialog+'">\
            <h2></h2><br/>\
            <p></p>\
         </div>').appendTo('body');
      dialog_news = $('div#'+name_dialog);
      dialog_news.dialog({
         autoOpen:      false,
         modal:         true,
         hide:          'fast',
         show:          'fast',
         width:         600,
         height:        450,
         title:         message.title_news,
         buttons:{
            'Close':   function() {$(this).dialog('close');}
         }
      });
   }

   var init = function() {
      initDialog();
      $('div#footer  div.footer_column:eq(3) > p > a.news').bind('click', this, showDialog);
      $('div#logo a.news').bind('click', this, showDialog);
      $('div#footer  div.footer_column:eq(3) > p > a.see_all').bind('click', this, showList);
      $('div>a#video').bind('click', this, showVideo);
      $('div>a#video2').bind('click', this, showVideo2);
   }


   // Public methods

   // Constructor
   init();
};;
function Contact(jb) {
   var urlContact = 'http://www.jobheidi.ch/home/contact';
   var jobluigi   = jb;

   var sendContact = function(e) {
      $('#dialog_contact').dialog('close');
      var datas = {
         name: $('#contact_name').val(),
         email: $('#contact_email').val(),
         message: $('#contact_message').val()
      };
      $('#dialog_waiting').dialog('option', 'title', message.loading);
      $('#dialog_waiting').dialog('open');
      jobluigi.connect(urlContact, datas, function(result, textStatus) {
         $('#dialog_waiting').dialog('close');
         if (result.success) jobluigi.showNotification(message.comment_success, message.title_comment_success);
         else jobluigi.showError(result.message.join('<br/>'), message.title_connect_error);
      });
   }

   this.getType      = function() {return 'contact';};
   this.showFormular = function() {
      $('#dialog_jobfamily_jobs').dialog('close');
      $('#dialog_service_support').dialog('close');
      $('#dialog_contact').dialog('open');
   };



   $('#dialog_contact').dialog({
      autoOpen:      false,
      buttons:{
         'Send':    function() {sendContact()},
         'Cancel':   function() {$(this).dialog('close');}
      },
      width:         300,
      closeOnEscape: true,
      modal:         true,
      position:      'center',
      resizable:     false
   });

};;
function Feedback(jb) {
   var urlFeedback   = 'http://www.jobheidi.ch/home/feedback';
   var jobluigi      = jb;

   var sendFeedback = function(e) {
      $('#dialog_feedback').dialog('close');
      var datas = {feedback: $('#dialog_feedback #feedback_commentaries').attr('value')};
      if ($('#dialog_feedback #feedback_email').attr('value') != 'Email (Optional)') datas.email = $('#feedback_email').attr('value');
      jobluigi.connect(urlFeedback, datas, function(result, textStatus) {
         if (result.success) jobluigi.showNotification(message.comment_success, message.title_comment_success);
      });
   }

   this.getType      = function() {return 'feedback';};



   $('#logo > img').bind('click', function() {$('#dialog_feedback').dialog('open');});
   $('a#feedback').bind('click', function() {$('#dialog_feedback').dialog('open'); return false;});
   $('#dialog_feedback').dialog({
         autoOpen:      false,
         buttons:       {'Send feedback': function() {sendFeedback();}},
         width:         180,
         closeOnEscape: true,
         draggable:     false,
         position:      [120, 20],
         resizable:     false
   });
   $('#dialog_feedback #feedback_email').bind('focus', this, function() {if ($('#dialog_feedback #feedback_email').attr('value') == 'Email (Optional)') $(this).attr('value', '');});

};;
function ViewPort(jl) {
   // Private attributes
   var user          = null;
   var jobluigi      = null;
   var documentWidth = 0;
   var documentHeigh = 0;
   var current       = this;
   var lastWidthCategory = 0;

   // Private method
   var setHeights = function() {
      $('.metacol').height(current.documentHeigh());
      $('.column').height(current.documentHeigh()-135);
      $('#metacol_3 #column_border_right .border').height(current.documentHeigh()-108);
      $('#metacol_3 #shadow').height(current.documentHeigh()-139);
      $('#job').height(current.documentHeigh());
      $('#results').height(current.documentHeigh());
//       $('#metacol_1').resizable('option', 'minHeight', current.documentHeigh());
      $('#metacol_2').resizable('option', 'minHeight', current.documentHeigh());
      // Calculate count of job for page
      var l = Math.round(($('.column').height()-35)/24);
      if (l < 19) l = 19;
      if (typeof(jobluigi) == 'object') jobluigi.setLimit(l);
   }

/*   var onMinimizeCategories = function() {
      var w = $('#metacol_1').width();
      if (w <= 180) {
         $('#metacol_1 #options_search .button_minimize').css({'background-position':'0px 0px'});
         w = lastWidthCategory;
         lastWidthCategory = 180;
      }
      else {
         $('#metacol_1 #options_search .button_minimize').css({'background-position':'-13px 0px'});
         lastWidthCategory = w;
         w = 180;
      }
      current.setWidthColumns({width_1: w});
   }*/

   var onChangeSize = function (e, ui) {
      if (typeof(ui) == 'object') {
//          if (e.data == '1' && typeof(ui.size) == 'object') current.setWidthColumns({width_1: ui.size.width, width_2:0});
         if (e.data == '2' && typeof(ui.size) == 'object') current.setWidthColumns({width_1: 0, width_2: ui.size.width});
      }
   }


   // Public method
   this.getType      = function() {return 'viewport';};
   this.setJobLuigi  = function(jl) { if (typeof(jl) == 'object') if (jl.getType() == 'jobluigi') jobluigi = jl; };
   this.setUser      = function(u) {
      if (typeof(u) == 'object') {
         if (u.getType() == 'user') {
            user = u;
//             $('#metacol_1').bind('resizestop', '1', user.SaveOptions);
            $('#metacol_2').bind('resizestop', '2', user.SaveOptions);
            u.setViewport(this);
         }
      }
   }


   this.documentHeigh = function(recalculate) {
      if (documentHeigh > 0 && !recalculate) return documentHeigh;
      if ($(window).height() < 620) documentHeigh = 620;
      else documentHeigh = $(window).height();
      return documentHeigh;
   }

   this.documentWidth = function(recalculate) {
      if (documentWidth > 0 && !recalculate) return documentWidth;
      documentWidth = $(window).width();
      return documentWidth;
   }

   this.getWidthColumns = function() {
      return {
         width_1: $('#metacol_1').width(),
         width_2: $('#metacol_2').width(),
         width_3: $('#metacol_3').width()
      }
   }

   this.setWidthColumns = function(widths) {
//       if (widths.width_1 > 0) {
//          $('#metacol_1').width(widths.width_1);
//       }
      $('#metacol_1').width(310);
      if (widths.width_2 > 0) {
         $('#metacol_2').width(widths.width_2);
         $('#metacol_2 #search').width(widths.width_2-10);
         $('#metacol_2 #column_results').width(widths.width_2-2);
         $('#results > .row').width(widths.width_2-2);
         $('#results .row > .title').width(widths.width_2-190);
         $('#column_results > div:first').css({marginRight: widths.width_2-230});
      }
      $('#metacol_3').width(this.documentWidth()-$('#metacol_1').width()-$('#metacol_2').width()-20);
      $('#shadow_metacols').width(this.documentWidth()-56);
      $('#column_job').width($('#metacol_3').width()-70);
   }


   // Viewport init
   /*$('#metacol_1').resizable({
      minWidth:         180,
      minHeight:        this.documentHeigh(),
      handles:          'e, se',
      animateDuration:  'fast',
      helper:           '.ui-state-highlight'
   });*/
   $('#metacol_2').resizable({
      minWidth:         (_ie6?392:396),
//       minWidth:         392,
      minHeight:        this.documentHeigh(),
      handles:          'e, se'
//       animateDuration:  'fast'
   });
   this.setJobLuigi(jl);
   setHeights();
   this.setWidthColumns({width_1:325, width_2: (_ie6?402:406)});
//    this.setWidthColumns({width_1:325, width_2: 402});
//    $('#metacol_1').bind('resize', '1', onChangeSize);
   $('#metacol_2').bind('resize', '2', onChangeSize);
//    $('#metacol_1 #options_search .button_minimize').bind('click', onMinimizeCategories);
   $(window).resize(function() {
      documentWidth = $(window).width();
      current.setWidthColumns({width_2: $('#metacol_2').width()});
      current.documentHeigh(true);
      setHeights();
      jobluigi.loadListJobs();
   });

}

;;
function User(jl) {
   // Privates attributes
   var current             = this;
   var jobluigi            = jl;
   var viewport            = null;
   var isAuthenticated     = false;
   var urlLogin            = 'http://www.jobheidi.ch/user/login';
   var urlLogout           = 'http://www.jobheidi.ch/user/logout';
   var urlFavorite         = 'http://www.jobheidi.ch/user/favorite';
   var urlRegister         = 'http://www.jobheidi.ch/user/register';
   var urlRegisterSave     = 'http://www.jobheidi.ch/user/registerSave';
   var urlIsAuthenticated  = 'http://www.jobheidi.ch/user/isAuthenticated';
   var urlSaveCommentary   = 'http://www.jobheidi.ch/user/saveCommentary';
   var urlSaveOptions      = 'http://www.jobheidi.ch/user/saveOptions';
   var urlSaveParameters   = 'http://www.jobheidi.ch/user/saveParameters';
   var urlMarkRecruiter    = '/job/markAsRecruiter';
   var urlResetPw		   = '/user/resetPw';
   var urlCityList         = '/user/cities';
   var urlZipList		   = '/user/zip';
   var opts = { name: '', width_1: 378, width_2: 396, width_4: 0,  favorites: 0};


   // Private methods
   var showLoading = function() {$('#metacol_1 > #options_search > div.subsection:eq(1) > div#waiting_user_info').show('fast');};
   var hideLoading = function() {$('#metacol_1 > #options_search > div.subsection:eq(1) > div#waiting_user_info').hide('fast');};

   var settingAsLogin = function(o) {
      var f = $('#metacol_1 > #options_search > div.subsection >#form_login');
      var ma = $('#metacol_1 > #options_search > div.subsection > #myasambo');
      f.hide();
      ma.show();
      isAuthenticated = true;
      opts = $.extend(opts, o);
      viewport.setWidthColumns(opts);
      $('div.division:eq(0) > span').text(message.category_favorite.replace('%total%', opts.favorites));
      $('#metacol_1 > #options_search > div.subsection:eq(1) > span:eq(0)').show();
   }

   var settingAsLogout = function() {
      var f = $('#metacol_1 > #options_search > div.subsection > #form_login');
      var ma = $('#metacol_1 > #options_search > div.subsection > #myasambo');
      ma.hide();
      f.show();
      opts.favorites = 0;
      isAuthenticated = false;
      $('#metacol_1 > #options_search > div.subsection:eq(1) > span:eq(0)').hide();
   }

   var userAccess = function() {
      var email = $('#metacol_1 > #options_search > div.subsection >#form_login > input#email');
      var password = $('#metacol_1 > #options_search > div.subsection >#form_login > input#password');
      if (email.attr('value').length > 3 && password.attr('value').length > 3) {
         if (email.attr('value') != 'Email' && password.attr('value') != 'password') {
            showLoading();
            jobluigi.connect(urlLogin,{email: email.attr('value'), password:password.attr('value')}, function(result) {
               hideLoading();
               if (result.success) {
                  settingAsLogin(result.options);
                  jobluigi.loadListJobs();
                  jobluigi.showNotification(message.login_success.replace('%user%', result.options.name), message.title_login_success, true);
                  $('#dialog_register').dialog("option","buttons",{
				         'Save':  function() {registerSave();},
				         'Cancel':   function() {$(this).dialog('close');}
                  });
                  if (result.options.language != 'en_GB') {
                     if (result.options.language.substr(0, 2) == 'en') window.location = '/en';
                     if (result.options.language.substr(0, 2) == 'de') window.location = '/';
                  }
                  if (!result.options.company) {
                  	$('div.companyonly').hide();
                  } else {
                  	$('div.companyonly').show();
                  }
                  if (!result.options.preliminary) {
                  	$('div.preliminaryonly').hide();
                  } else {
                  	$('div.preliminaryonly').show();
                  	$('div.companyonly').hide();
                  }
                  $('#dialog_register').empty().append(result.options.register_form_html);
                  eval(result.options.job_form_js);
                  registerRegisterHandlers();
               }
               else {
                  settingAsLogout();
                  jobluigi.showError(result.errors.reason, message.title_login_error);
               }
            });
         }
      }
      else {
         if (email.attr('value').length < 4) jobluigi.showError(message.login_username_error, message.title_login_error);
         else jobluigi.showError(message.login_password_error, message.title_login_error);
      }
      return false;
   }

   var userLogout = function() {
      $('#dialog_close').dialog('close');
      if (isAuthenticated) jobluigi.connect(urlLogout,{Abmelden: true},function(result) {
      	settingAsLogout();
      	jobluigi.clearAll();
      	$('#dialog_register').empty().append(result.register_form_html);
      	registerRegisterHandlers();
		$('#dialog_register').dialog("option","buttons",{
	         'Register':  function() {register();},
	         'Cancel':   function() {$(this).dialog('close');}
        });

       });
      isAuthenticated = false;
   }
	
   var resetPassword = function() {
		var params = {
			email:      $('#reset_email').attr('value')
		};
		$('#dialog_resetpw').dialog('close');
		showLoading();
		jobluigi.connect(urlResetPw, params, function(result) {
			hideLoading();
			if (result.success) {
				jobluigi.showNotification(message.resetpw_success, message.title_resetpw_success)
			}
			else {
				if (result.errors.reason.length > 0) jobluigi.showError(result.errors.reason, message.title_register_error);
				else jobluigi.showError(result.errors.reason, message.connect_error);
			}
		});   		
   }

   var register = function() {
      var success = true;
      var msg = '';
      if ($('#register_als').val() == "stellensuchender") {
	      if ($('#register_name').attr('value').length < 4 || $('#register_vorname').attr('value').length < 4) {
	         success = false;
	         if (msg.length > 0) msg = msg.concat('<br>');
	         msg = msg.concat(message.register_name_error);
	      }
	      if ($('#register_email').attr('value').length < 4) {
	         success = false;
	         if (msg.length > 0) msg = msg.concat('<br>');
	         msg = msg.concat(message.register_email_error);
	      }
	      if ($('#register_password').attr('value').length < 4) {
	         success = false;
	         if (msg.length > 0) msg = msg.concat('<br>');
	         msg = msg.concat(message.register_password_error);
	      }
	      if ($('#register_password').attr('value') != $('#register_confirm_password').attr('value')) {
	         success = false;
	         if (msg.length > 0) msg = msg.concat('<br>');
	         msg = msg.concat(message.register_confirm_password_error);
	      }
	  } else {
	      if ($('#register_company_name').attr('value').length < 4) {
	         success = false;
	         if (msg.length > 0) msg = msg.concat('<br>');
	         msg = msg.concat(message.register_companyname_error);
	      }
	      if ($('#register_companyuser_vorname').attr('value').length < 4 || $('#register_companyuser_name').attr('value').length < 4) {
	         success = false;
	         if (msg.length > 0) msg = msg.concat('<br>');
	         msg = msg.concat(message.register_name_error);
	      }
	      if ($('#register_companyuser_email').attr('value').length < 4) {
	         success = false;
	         if (msg.length > 0) msg = msg.concat('<br>');
	         msg = msg.concat(message.register_email_error);
	      }
	      if ($('#register_companyuser_password').attr('value').length < 4) {
	         success = false;
	         if (msg.length > 0) msg = msg.concat('<br>');
	         msg = msg.concat(message.register_password_error);
	      }
	      if ($('#register_companyuser_password').attr('value') != $('#register_companyuser_confirm_password').attr('value')) {
	         success = false;
	         if (msg.length > 0) msg = msg.concat('<br>');
	         msg = msg.concat(message.register_confirm_password_error);
	      }
	  }

      if (success) {
         var datas = {
         	type: $('#register_als').attr('value'),
         	
         	// standard user fields
            name:       			$('#register_name').attr('value'),
            vorname:       			$('#register_vorname').attr('value'),
            email:      			$('#register_email').attr('value'),
            password:   			$('#register_password').attr('value'),
            street1:       			$('#register_address1').attr('value'),
            street2:       			$('#register_address2').attr('value'),
            country:       			$('#register_country').attr('value'),
            city_id:       			$('#register_city_id').attr('value'),
            phone:       			$('#register_tel').attr('value'),
            
            // company fields
            company_name: 			$('#register_company_name').attr('value'),
            company_street1: 		$('#register_company_address1').attr('value'),
            company_street2: 		$('#register_company_address2').attr('value'),
            company_country: 		$('#register_company_country').attr('value'),
            company_city_id: 		$('#register_company_city_id').attr('value'),
            company_phone: 			$('#register_company_tel').attr('value'),
            company_url: 			$('#register_company_website').attr('value'),
            company_user_vorname: 	$('#register_companyuser_vorname').attr('value'),
            company_user_name: 		$('#register_companyuser_name').attr('value'),
            company_user_email: 	$('#register_companyuser_email').attr('value'),
            company_user_password: 	$('#register_companyuser_password').attr('value')
            
         };

         $('#dialog_register').dialog('close');
         showLoading();
         jobluigi.connect(urlRegister, datas, function(result) {
            hideLoading();
            if (result.success) {
//                settingAsLogin();
//                jobluigi.loadListJobs();
               jobluigi.showNotification(message.register_success.replace('%user%', result.name), message.title_register_success)
            }
            else {
               if (result.errors.reason.length > 0) jobluigi.showError(result.errors.reason, message.title_register_error);
               else jobluigi.showError(result.errors.reason, message.connect_error);
            }
         });
      }
      else jobluigi.showError(msg, message.title_form_register_error);
   }

   var registerSave = function() {
      var success = true;
      var msg = '';
      if ($('#register_als').val() == "stellensuchender") {
	      if ($('#register_name').attr('value').length < 4 || $('#register_vorname').attr('value').length < 4) {
	         success = false;
	         if (msg.length > 0) msg = msg.concat('<br>');
	         msg = msg.concat(message.register_name_error);
	      }
	      if ($('#register_email').attr('value').length < 4) {
	         success = false;
	         if (msg.length > 0) msg = msg.concat('<br>');
	         msg = msg.concat(message.register_email_error);
	      }
	      if ($('#register_password').attr('value').length != 0 && $('#register_password').attr('value').length < 4) {
	         success = false;
	         if (msg.length > 0) msg = msg.concat('<br>');
	         msg = msg.concat(message.register_password_error);
	      }
	      if ($('#register_password').attr('value').length != 0 && $('#register_password').attr('value') != $('#register_confirm_password').attr('value')) {
	         success = false;
	         if (msg.length > 0) msg = msg.concat('<br>');
	         msg = msg.concat(message.register_confirm_password_error);
	      }
	  } else {
	      if ($('#register_company_name').attr('value').length < 4) {
	         success = false;
	         if (msg.length > 0) msg = msg.concat('<br>');
	         msg = msg.concat(message.register_companyname_error);
	      }
	      if ($('#register_companyuser_vorname').attr('value').length < 4 || $('#register_companyuser_name').attr('value').length < 4) {
	         success = false;
	         if (msg.length > 0) msg = msg.concat('<br>');
	         msg = msg.concat(message.register_name_error);
	      }
	      if ($('#register_companyuser_email').attr('value').length < 4) {
	         success = false;
	         if (msg.length > 0) msg = msg.concat('<br>');
	         msg = msg.concat(message.register_email_error);
	      }
	      if ($('#register_companyuser_password').attr('value').length != 0 && $('#register_companyuser_password').attr('value').length < 4) {
	         success = false;
	         if (msg.length > 0) msg = msg.concat('<br>');
	         msg = msg.concat(message.register_password_error);
	      }
	      if ($('#register_companyuser_password').attr('value').length != 0 && $('#register_companyuser_password').attr('value') != $('#register_companyuser_confirm_password').attr('value')) {
	         success = false;
	         if (msg.length > 0) msg = msg.concat('<br>');
	         msg = msg.concat(message.register_confirm_password_error);
	      }

	  }
      if (success) {
         var datas = {
         	type: $('#register_als').attr('value'),
         	
         	// standard user fields
            name:       			$('#register_name').attr('value'),
            vorname:       			$('#register_vorname').attr('value'),
            email:      			$('#register_email').attr('value'),
            password:   			$('#register_password').attr('value'),
            street1:       			$('#register_address1').attr('value'),
            street2:       			$('#register_address2').attr('value'),
            country:       			$('#register_country').attr('value'),
            city_id:       			$('#register_city_id').attr('value'),
            phone:       			$('#register_tel').attr('value'),
            
            // company fields
            company_street1: 		$('#register_company_address1').attr('value'),
            company_street2: 		$('#register_company_address2').attr('value'),
            company_country: 		$('#register_company_country').attr('value'),
            company_city_id: 		$('#register_company_city_id').attr('value'),
            company_phone: 			$('#register_company_tel').attr('value'),
            company_url: 			$('#register_company_website').attr('value'),
            company_user_vorname: 	$('#register_companyuser_vorname').attr('value'),
            company_user_name: 		$('#register_companyuser_name').attr('value'),
            company_user_email: 	$('#register_companyuser_email').attr('value'),
            company_user_password: 	$('#register_companyuser_password').attr('value')
            
         };

         $('#dialog_register').dialog('close');
         showLoading();
         jobluigi.connect(urlRegisterSave, datas, function(result) {
            hideLoading();
            if (result.success) {
//                settingAsLogin();
//                jobluigi.loadListJobs();
               jobluigi.showNotification(message.register_save_success.replace('%user%', result.name), message.register_save_title_success)
            }
            else {
               if (result.errors.reason.length > 0) jobluigi.showError(result.errors.reason, message.title_register_error);
               else jobluigi.showError(result.errors.reason, message.connect_error);
            }
         });
      }
      else jobluigi.showError(msg, message.title_form_register_error);
   }

   var saveCommentary = function() {
      $('#dialog_commentary').dialog('close');
      if (isAuthenticated) {
         if ($('#job').data('id') > 0) {
            showLoading();
            jobluigi.connect(urlSaveCommentary, {id: $('#job').data('id'), commentary:$('#dialog_commentary > #commentary_text').attr('value')}, function(result) {
               hideLoading();
               if (result.success) {
                  $('#job').data('commentary', result.commentary);
                  if ($('#job').data('commentary').length > 0) current.iconCommentaryMark($('#job').data('commentary'));
                  else current.iconCommentaryUnmark();
                  jobluigi.showNotification(message.comment_save_success, message.title_comment_save_success);
               }
               else {
                  current.iconCommentaryUnmark();
                  jobluigi.showError(result.errors.reason, message.title_comment_save_error);
               }
            });
         }
         else jobluigi.showError(message.invalid_job, message.title_comment_save_error);
      }
      else jobluigi.showError(message.comment_error+'<br><a href="#" onClick="jobluigi.loginForm();">'+message.register_form+'</a>', message.title_comment_save_error);
   }

   var showCommentary = function(e) {
      if (isAuthenticated) {
         if ($('#job').data('id') > 0) {
            $('#dialog_commentary > #commentary_text').attr('value', $('#job').data('commentary').replace(new RegExp('&lt;br&gt;', 'g'), "\n"));
            $('#dialog_commentary').dialog('open');
         }
         else jobluigi.showError(message.invalid_job, message.title_comment_save_error);
      }
      else jobluigi.showError(message.comment_error+'<br><a href="#" onClick="jobluigi.loginForm();">'+message.register_form+'</a>', message.title_comment_save_error);
   }

   var markFavorite = function(e) {
      if (isAuthenticated) {
         if ($('#job').data('id') > 0) {
            jobluigi.connect(urlFavorite, {id: $('#job').data('id')}, function(result, textStatus) {
               if (result.success) {
                  if (result.action == 'marked') { current.iconFavoriteMark(); opts.favorites +=1;}
                  else { current.iconFavoriteUnmark(); ; opts.favorites -=1; }
                  $('#category_favorite > span').html(message.category_favorite.replace('%total%', opts.favorites));
               }
               else jobluigi.showError(result.errors.reason, message.title_favorite_save_error);
            });
         }
         else jobluigi.showError(message.invalid_job, message.title_favorite_save_error);
      }
      else jobluigi.showError(message.favorite_error+'<br><a href="#" onClick="jobluigi.loginForm();">'+message.register_form+'</a>', message.favorite_error);
   }


   // Public methods
   this.getType      = function () {return 'user';};
   this.setJobLuigi  = function (jl) { if (typeof(jl) == 'object') if (jl.getType() == 'jobluigi') jobluigi = jl; };
   this.setViewport  = function (vp) { if (typeof(vp) == 'object') if (vp.getType() == 'viewport') viewport = vp; };

   this.isAuthenticated       = function() {return isAuthenticated;}
   this.checkAuthentication   = function() {
      jobluigi.connect(urlIsAuthenticated, {'language':'en_GB'}, function(result) {
         if (result.success) settingAsLogin(result.options);
         else settingAsLogout();
      });
   }

   this.saveOptions = function(e, ui) {
      if (isAuthenticated) {
         jobluigi.connect(
            urlSaveOptions,
            {width_1: $('#metacol_1').width(), width_2: $('#metacol_2').width(), width_3: $('#metacol_3').width(), 'language':'en_GB'},
            function(result, textStatus) {return;}
         );
      }
   }


   this.registerForm = function() {
      $('#dialog_info').dialog('close');
      $('#dialog_error').dialog('close');
      $('#dialog_access').dialog('close');
      $('#dialog_resetpw').dialog('close');
      $('#dialog_register').dialog('open');
   }
   
   this.resetPassword = function() {
      $('#dialog_info').dialog('close');
      $('#dialog_error').dialog('close');
      $('#dialog_access').dialog('close');
      $('#dialog_resetpw').dialog('open');
   }

   this.loginForm = function() {
      $('#dialog_info').dialog('close');
      $('#dialog_error').dialog('close');
      $('#dialog_register').dialog('close');
      $('#dialog_resetpw').dialog('close');
      $('#dialog_access').dialog('open');
   }

   this.iconFavoriteMark = function() {
      $('#button_favorite').unbind('mouseenter mouseleave');
      $('#button_favorite').hover(function() {$(this).css({backgroundPosition: '-78px 0px'});}, function() {$(this).css({backgroundPosition: '-52px 0px'});});
      $('#button_favorite').css({'background-position':'-52px 0px'});
      if (!$('#job').data('is_from_user')) $('#results > #job_'+$('#job').data('id')+' > .favorite').css({'background-position':'-8px 0px'});
   }

   this.iconFavoriteUnmark = function() {
      $('#button_favorite').unbind('mouseenter mouseleave');
      $('#button_favorite').hover(function() {$(this).css({backgroundPosition: '-26px 0px'});}, function() {$(this).css({backgroundPosition: '0px 0px'});});
      $('#button_favorite').css({'background-position':'0px 0px'});
      if (!$('#job').data('is_from_user')) $('#results > #job_'+$('#job').data('id')+' > .favorite').css({'background-position':'0px 0px'});
   }

   this.iconCommentaryMark = function(commentary) {
      var pos = $('#metacol_3').offset();
      pos.left += 20;
      pos.top += 10;
      $('#dialog_comment').dialog('option', 'position', [pos.left, pos.top]);
      $('#dialog_comment').dialog('option', 'title', message.comment_of.replace('%job_name%', $('#job').data('title')));
      $('#dialog_comment').html(commentary.replace(new RegExp('&lt;br&gt;', 'g'), '<br>'));
      $('#button_commentary').unbind('mouseenter mouseleave');
      $('#button_commentary').hover(
         function() {
            $('#dialog_comment').dialog('open');
            $(this).css({backgroundPosition: '-78px 0px'});
         },
         function() {
            $('#dialog_comment').dialog('close');
            $(this).css({backgroundPosition: '-52px 0px'});
         }
      );
      $('#button_commentary').css({'background-position':'-52px 0px'});
      $('#results > #job_'+$('#job').data('id')+' > .commentary').css({'background-position':'-9px 0px'});
   }

   this.iconCommentaryUnmark = function() {
      $('#button_commentary').unbind('mouseenter mouseleave');
      $('#button_commentary').hover(function() {$(this).css({backgroundPosition: '-26px 0px'});}, function() {$(this).css({backgroundPosition: '0px 0px'});});
      $('#button_commentary').css({'background-position':'0px 0px'});
      $('#results > #job_'+$('#job').data('id')+' > .commentary').css({'background-position':'0px 0px'});
   }

   this.markAsRecruiter = function(e) {
      if ($('div#job').data('id') > 0 && $('div#job a#mark_as_recruiter').attr('rel').length > 0) {
         jobluigi.connect(urlMarkRecruiter, {id: $('div#job').data('id'), recruiter: $('div#job a#mark_as_recruiter').attr('rel')}, function(result, textStatus) {
            if (result.success) {
               jobluigi.reloadCurrentJob();
            }
         });
      }
   }


   // Init Dialogs
   $('#metacol_1 > #options_search > div.subsection > #form_login').bind('submit', this, userAccess);
   $('#dialog_close').dialog({
      autoOpen:      false,
      buttons:{
         'Logout':   function() {userLogout();},
         'Cancel':   function() {$(this).dialog('close');}
      },
      width:         200,
      closeOnEscape: true,
      draggable:     false,
      modal:         true,
      position:      'center',
      resizable:     false
   });
   $('#metacol_1 > #options_search > div.subsection:eq(1) > span:eq(0)').bind('click', this, function(){$('#dialog_close').dialog('open');});
   $('#button_favorite').bind('click', this, markFavorite);
   $('#button_commentary').bind('click', this, showCommentary);
   $('#dialog_commentary').dialog({
      autoOpen:      false,
      buttons:{
         'Save': function() {saveCommentary();},
         'Cancel':   function() {$(this).dialog('close');}
      },
      width:         300,
      closeOnEscape: true,
      draggable:     false,
      modal:         true,
      position:      'center',
      resizable:     false
   });
	$('#link_success_dialog').dialog({
      autoOpen:      false,
      buttons:{
         'Ok':   function() {$(this).dialog('close');}
      },
      width:         200,
      closeOnEscape: true,
      draggable:     false,
      modal:         true,
      position:      'center',
      resizable:     false
   });
   $('#dialog_register').dialog({
      autoOpen:      false,
      width:         650,
      closeOnEscape: false,
      draggable:     false,
      modal:         true,
      position:      'center',
      resizable:     false,
      buttons: {
         'Register':  function() {register();},
         'Cancel':   function() {$(this).dialog('close');}
      }
   });
   
   $('#register_als').live('change',function() {
   		$('div.form',$('#dialog_register')).hide();
   		$('div.'+$(this).val(),$('#dialog_register')).show();
   });

   $('#dialog_resetpw').dialog({
      autoOpen:      false,
      width:         300,
      closeOnEscape: false,
      draggable:     false,
      modal:         true,
      position:      'center',
      resizable:     false,
      buttons: {
         'Send':  function() {resetPassword();},
         'Cancel':   function() {$(this).dialog('close');}
      }
   });


   $('#dialog_help_parameters').dialog({
      autoOpen:      false,
      modal:         true,
      hide:          'fast',
      show:          'fast',
      width:         300,
      height:        200,
      buttons:       {'Close': function() {$(this).dialog("close");}}
   });
   $('div#myasambo > .division:eq(2)>img#icon_help_parameters').bind('click', this, function(){$('#dialog_help_parameters').dialog('open');});
   var confirmed_msg = false;
   if (confirmed_msg) jobluigi.showInfo(message.confirmed_user, message.title_register_success);
   
	$(document).ready(function() {
	
		registerRegisterHandlers();
	});
	
	function registerRegisterHandlers() {
		$("#register_company_stadt").autocomplete(urlCityList,{
			onItemSelect: function(item) {
				$('#register_company_city_id').val(item.extra[0]);
			},
			selectOnly: true,
			countryField: $('#register_company_country'),
			cityIdField: $('#register_company_city_id')
		});
		$("#register_stadt").autocomplete(urlCityList,{
			onItemSelect: function(item) {
				$('#register_city_id').val(item.extra[0]);
			},
			selectOnly: true,
			countryField: $('#register_country'),
			cityIdField: $('#register_city_id')
		});
		$('#register_company_country').live('change',function() {
			$('#register_company_city_id').val("");
		});
		$('#register_country').live('change',function() {
			$('#register_city_id').val("");
		});
	}
	$('#link_success_dialog').dialog("open");
}
;;
function hideTwitterMessage() {
   $('#twitter_div_result').hide('slow');
   $('#twitter_div_access').fadeIn('fast');
   $('#twitter_div_message').fadeIn('fast');
}

function Twitter(jb) {
   var jobluigi = jb;
   var urlTwitter = 'http://www.jobheidi.ch/home/twitter';
   var time_message = 3000;

   var showNotification = function(msg) {
      $('#twitter_div_result').html('<div class="ui-state-highlight ui-corner-all" style="padding: 0 .7em;"><span class="ui-icon ui-icon-alert" style="float: left; margin-right: .3em;"></span><span class="info_text">'+msg+'</span></div>');
      setTimeout("hideTwitterMessage()", time_message);
   }
   var showError = function(msg) {
      $('#twitter_div_result').html('<div class="ui-state-error ui-corner-all" style="padding: 0 .7em;"><span class="ui-icon ui-icon-alert" style="float: left; margin-right: .3em;"></span><span class="info_text">'+msg+'</span></div>');
      setTimeout("hideTwitterMessage()", time_message);
   }

   var showLoading = function() {
      $('#twitter_div_result').html('<div style="left:45%; top:40%; z-index:20001; height:auto;"><img src="/images/loading.gif" />'+message.loading+'</div>');
      $('#twitter_div_access').fadeOut('fast');
      $('#twitter_div_message').fadeOut('fast');
      $('#twitter_div_result').show('fast');
   }

   var sendPost = function() {
      user = $('#twitter_username').val();
      pass = $('#twitter_password').val();
      mesg = $('#twitter_message').val();
      if (user.length > 0 && pass.length > 0 && mesg.length > 0) {
         showLoading();
         jobluigi.connect(urlTwitter, {username: user, password:pass, message:mesg}, function(result) {
            if (result.success) {
               showNotification(message.twitter_success);
               $('#twitter_message').val('');
            }
            else {
               hideTwitterMessage();
               jobluigi.showError(result.errors.reason, message.title_login_error);
            }
         });
      }
      else {
         if (user.length == 0) jobluigi.showError(message.login_username_error, message.title_login_error);
         if (pass.length == 0) jobluigi.showError(message.login_password_error, message.title_login_error);
         if (mesg.length == 0) jobluigi.showError(message.comment_twitter_error, message.title_login_error);
      }
   }

   this.getType      = function() {return 'twitter';};

   $('#twitter_send').bind('click', sendPost);
};;
function PersonalJob(jl) {
   // Privates attributes
   var current             = this;
   var jobluigi            = jl;
   var dialog_new_job      = null;
   this.setDialog = function(d) {
      dialog_new_job = d;
   }
   var urlCityList         = '/user/cityList';
   var urlSaveJob          = '/job/save';
   var urlDeactiveJob      = 'http://www.jobheidi.ch/job/deactivateJob';
   var urlDeleteJob        = 'http://www.jobheidi.ch/job/delete';
   var urlEditJob          = '/job';
   var content             = '';
   var keywordList = null;
   var cityList = null;
   var cantonList = null;
   var categoryList = null;
   
   this.getDialog = function() { return dialog_new_job; }

   // Private methods
   var showLoading = function() {$('#metacol_1 > #options_search > div.subsection:eq(1) > div#waiting_user_info').show('fast');};
   var hideLoading = function() {$('#metacol_1 > #options_search > div.subsection:eq(1) > div#waiting_user_info').hide('fast');};

   var showFormJob = function (e) {
      if (dialog_new_job != null)
         dialog_new_job.remove();
      initDialog();
      $('select#canton_id', jobluigi.getJob().getDialog()).bind('change',jobluigi.getJob(), jobluigi.getJob().changeCanton);
      if (e.data.mode == 'create') $('form#form_new_job > select, form#form_new_job > input, form#form_new_job > checkbox, form#form_new_job > textarea', dialog_new_job).val('');
      else {
         $.each(e.data, function(i, item) {$('#'+i, dialog_new_job).val(item);});
         $('select#canton_id', dialog_new_job).val(e.data.canton_id);
         jobluigi.getJob().changeCanton(e.data);
         activeRecruiter();
      }
      for (var key in dialogData) {
      	$('#'+key).val(dialogData[key]);
      }
      $('form#form_new_job input#mode').val(e.data.mode);
      $('select#city_id', dialog_new_job).html('<option value=""></option>');
      dialog_new_job.dialog('open');
      $('div.ui-dialog:visible').css({overflowX: 'auto'});
      content = tinyMCE.init({
         mode:                               'exact',
         elements:                           'content',
         language:                           'de',
         width:                              470,
         height:                             380,
         theme:                              'advanced',
         theme_advanced_buttons1:            'bold,|,bullist,numlist',
         theme_advanced_buttons2:            '',
         theme_advanced_buttons3:            '',
         theme_advanced_buttons4:            '',
         theme_advanced_toolbar_location:    'top',
         theme_advanced_toolbar_align:       'left',
         theme_advanced_statusbar_location:  'bottom',
         theme_advanced_resizing:            true,
         forced_root_block:                  false,
         force_br_newlines:                  false,
         force_p_newlines:                   false,
         plugins:                            'paste',
         paste_remove_styles:                false,
         paste_remove_styles_if_webkit:      false,
         paste_remove_spans:                 true,
         paste_strip_class_attributes:       'all',
         paste_use_dialog:                   false,
         setup: function(ed) {
            // Force Paste-as-Plain-Text
            /* ed.onPaste.add( function(ed, e, o) {
                  ed.execCommand('mcePasteText', true);
                  return tinymce.dom.Event.cancel(e);
            }); */
         }
      });
   }

   var setFocusForm = function() {$('input#title', dialog_new_job).focus();}

   var validJob = function() {
      var result = true;
      var msg = '';
      var title = $('input#title', dialog_new_job).val();
      var email = $('input#email', dialog_new_job).val();
      var company_id = $('select#company_id', dialog_new_job).val();
      var company = $('input#recruiter', dialog_new_job).val();
      var url = $('input#url', dialog_new_job).val();
      if (title.length <= 3) {result = false; msg = msg.concat('<li>Jobtitel ist entweder leer oder zu kurz</li>');}
      if (email.length <= 4) {result = false; msg = msg.concat('<li>Email ist entweder leer oder zu kurz</li>');}
      if (company_id == 0 && company.length <= 1) {result = false; msg = msg.concat('<li>Anbieter ist entweder leer oder zu kurz</li>');}
      if (url.length <= 6) {result = false; msg = msg.concat('<li>Url ist entweder leer oder zu kurz</li>');}
      else if (!(url.substr(0, 7) == 'http://' || url.substr(0, 8) == 'https://')) {result = false; msg = msg.concat('<li>Url ungÃ¼ltig (zb. http://www.example.com)</li>');}
      if (!result) jobluigi.showError('There are error in form:<br/><ul>'+msg+'</ul>', message.add_job_error, setFocusForm);
      return result;
   }

   function updatePriorityPrice() {
      var total = $('#prio_keyword_list').attr('x-cost') * 1;
      if (isNaN(total)) total = 0;
      total = total + cityList.getPrice();
      total = total + cantonList.getPrice();
      total = total + categoryList.getPrice();
      total = (Math.round(total * 100) / 100);
      $('#prio_total b').text(total+' CHF');
      $('#paypal_total').val(total);
   }

   var checkMgr = function (list,total,price,source,items,target) {
      this.list = list;
      this.total = total;
      this.price = price;
      this.source = source;
      this.items = items;
      this.target = target;

	  	this.load = function(o) {
	  		$(this.list).empty();
	  		if (o.length == 0 || o[0].text.length == 0) {
				$(this.list).append('<li><label><em>Keine Auswahl vorhanden</em></label></li>');
	  		} else {
				for (var i=0;i<o.length;i++) {
					var chkid = "prio_chkbx_"+(Math.round(Math.random()*1000));
					var chk = $('<input type="checkbox" name="prio_city" class="chkbx" id="'+chkid+'" value="'+o[i].text+'" x-id="'+o[i].id+'" />').bind('click',{ptr: this},function(e) {
						e.data.ptr.updateTotal();
						e.data.ptr.commit();
						updatePriorityPrice();
					});
					chk.attr('checked',this.isChecked(o[i].text) ? 1 : 0);
					$(this.list).append(
						$('<li></li>').append(
							chk
						).append(
							$('<label for="'+chkid+'">'+o[i].text+'</label>')
						)
					);
				}
			}
	  		this.cleanItems(o);
	  		this.updateTotal();
	  		this.commit();
	  	}

	  	this.cleanItems = function(o) {
	  		var itms = [];
	  		for (var i=0;i<this.items.length;i++) {
	  			var found = false;
	  			for (var j=0;j<o.length;j++) {
	  				if (o[j].text == this.items[i].text) {
	  					found = true;
	  				}
	  			}
	  			if (found) {
	  				itms.push(this.items[i]);
	  			}
	  		}

	  		this.items = itms;
	  	}
	  	this.isChecked = function(text) {
	  		for (var i=0;i<this.items.length;i++) {
				if (this.items[i].text == text) {
					return true;
				}
	  		}
	  		return false;
	  	}
	  	this.getPrice = function() {
			return (Math.round(this.price * this.items.length * 100)/100);
	  	}
	  	this.updateTotal = function() {
	  		var items = [];
	  		$('input.chkbx:checked',$(this.list)).each(function() {
	  			items.push({text: $(this).attr('value'), id: $(this).attr('x-id') });
	  		});
	  		this.items = items;

	  		var price = this.getPrice();

	  		$(this.total).text(price+' CHF');

	  		return price;
	  	}
	  	this.getOptions = function() {
	  		var options = [];
			if (this.source[0].tagName.toLowerCase() == "select") {
				if (this.source[0].selectedIndex >= 0) {
					options = [ { id: this.source.val(), text: this.source[0].options[this.source[0].selectedIndex].text } ];
				}
			}
			return options
	  	}

	  	this.commit = function() {
	  		var cmit = [];
	  		for (var i=0;i<this.items.length;i++) {
	  			cmit.push(this.items[i].id);
	  		}
			$(this.target).val(cmit.join(","));
	  	}

		this.load(this.getOptions());
	  }

      var listMgr = function (list,total,price,source,items) {
      	this.items = items;
      	this.list = list;
      	this.price = price;
      	this.total = total;
      	this.source = source;

      	this.add = function(item) {
      		if (this.items.length == 0) {
      			$(this.list).empty();
      		}
      		if (!this.found(item) && item.indexOf(',') == -1 && item.length > 0) {
	      		this.items.push(item);
				$(this.source).val('');
			}
			this.rebuild();
			this.drawTotal();
      	}
      	this.found = function(item) {
      		var found = false;
      		for (var i=0;i<this.items.length;i++) {
      			if (this.items[i] == item) {
      				return true;
      			}
      		}
      		return false;
      	}
      	this.del = function(item) {
      		var itms = [];
      		for (var i=0;i<this.items.length;i++) {
      			if (this.items[i] != item) {
      				itms.push(this.items[i]);
      			}
      		}
      		this.items = itms;
      		this.rebuild();
      		this.drawTotal();
      	}
      	this.commit = function() {
			$('#prio_keyword_count').val(this.items.length);
			$('#prio_keywords').val(this.items.join(","));
      	}
      	this.draw = function(item) {
			$(this.list).append($('<li>'+item+'</li>').append($('<img src="/images/ui/delete.png" class="delete" />').bind('click',{ptr: this},function(e) { e.data.ptr.del($(this).parent().text()); })));
		}
		this.getPrice = function() {
			var price = (this.items.length * this.price);
			$(this.list).attr('x-cost',price);
			return price;
		}
		this.drawTotal = function() {
			$(this.total).text((Math.round(this.getPrice() * 100)/100)+' CHF');
			updatePriorityPrice();
			this.commit();
		}
      	this.rebuild = function() {
      		var drawn = false;
      		$(this.list).empty();
      		for (var i=0;i<this.items.length;i++) {
				this.draw(this.items[i]);
				drawn = true;
      		}
      		if (!drawn) {
      			$(this.list).append($('<li><em>keine Keywords</em></li>'));
      		}
      	}
      }
   this.saveJob = function() {
      if (validJob()) {
       	dialog_new_job.dialog('close');
       	showLoading();
         var params = new Object();
         $('select, input, checkbox', dialog_new_job).each(function(idx, item){params[$(this).attr('id')] = $(this).val();});
         if (!$('input#is_recruiter', dialog_new_job).attr('checked')) params['is_recruiter'] = 0;

         params.content = tinyMCE.get('content').getContent();

         jobluigi.connect(urlSaveJob, params, function(val, textStatus) {
            hideLoading();
            if (val.success) {
            	if (params['paypal_total'] == 0 || !val.data.prio_id) {
					jobluigi.showNotification(message.add_job_success, message.title_add_job);
					jobluigi.listMyJobs({data: jobluigi});
            	} else {
            		$('#custom').val(val.data.prio_id);
					$('#form_new_job').submit();
            	}
            }
            else jobluigi.showError(val.errors.reason, message.title_add_job);
         });
      } else return false;

      	// wipe prioritization menu
		keywordList = new listMgr($('#prio_keyword_list'),$('#prio_keyword_total'), 1, $('#prio_keyword'), []);
		cityList = new checkMgr($('#city_checklist'),$('#prio_city_total'), 2, $('#city_id'),[],$('#prio_city_data'));
		cantonList = new checkMgr($('#canton_checklist'),$('#prio_canton_total'), 10, $('#canton_id'),[],$('#prio_canton_data'));
		categoryList = new checkMgr($('#category_checklist'),$('#prio_category_total'), 10, $('#category_id'),[],$('#prio_category_data'));

		return true;
   }

   this.changeCanton = function(e) {
      var canton_id = $('select#canton_id', dialog_new_job).val();
      if (canton_id > 0) {
         $('span#city_loading', dialog_new_job).show();
         $('select#city_id', dialog_new_job).load(urlCityList, {id:canton_id}, function(responseText, textStatus, XMLHttpRequest){$('span#city_loading', dialog_new_job).hide(); if (e.city_id > 0) $('select#city_id', dialog_new_job).val(e.city_id);});
      }
      else $('select#city_id', dialog_new_job).html('');
   }

   var activeRecruiter = function(e) {
      if ($('select#company_id', dialog_new_job).val() == 0) $('input#recruiter, input#is_recruiter', dialog_new_job).attr('disabled', '');
      else $('input#recruiter, input#is_recruiter', dialog_new_job).attr('disabled', 'disabled');
   }
      var dialogData = {
      	cmd: "_xclick",
      	business: "km@firegroup.ch",
      	item_name: "Job priorization (Firegroup GmbH)",
      	custom: "-1",
      	currency_code: "CHF",
      	notify_url: "http://www.jobluigi.com/job/ipn/"
      }
   var initDialog = function() {
		  var name_dialog = 'dialog_new_job'+Math.round(Math.random()*1000);
      $('body').append($('<div id="'+name_dialog+'" style="overflow-x:none;overflow:10000;">\
            <form id="form_new_job" class="formal_form" action="" method="post">\
            <div id="create_job">\
                  <table border=0 cellspacing=0 cellpadding=0><tr><td width="475"><textarea name="content" id="content" rows="5" cols="40"></textarea><br/></div>\
                  </td><td valign="top">\
                     <label for="title">Job title</label><input type="text" id="title"/><br/>\
                     <label for="email">Email</label><input type="text" id="email"/><br/>\
                     <label for="recruiter">Company</label><input type="text" id="recruiter"/><br/>\
                     <label for="is_recruiter">Is recruiter?</label><input type="checkbox" id="is_recruiter" value="1"/>&nbsp;&nbsp;Yes<br clear="left"/>\                     <label for="category_id">Industry</label><select id="category_id"><option value="5">Commercial / Administration / Organisation</option><option value="3">Consulting / Law / Fiduciary / Tax</option><option value="4">Design</option><option value="15">Distribution / Sales / Customer Service</option><option value="12">Editorial / Journalism / Documentation</option><option value="2">Education</option><option value="13">Executive / (Top-)Management</option><option value="7">Finances / Controlling / Accounting / Insurance</option><option value="16">Gastronomy / Hotel Industry / Tourism</option><option value="14">Human Resources</option><option value="9">IT / Telecommunications</option><option value="6">Marketing / PR / Media / Communication / Advertising</option><option value="10">Medicine / Pharma / Psychology / Social</option><option value="1">Other</option><option value="8">Purchasing / Transportation / (Material) Logistics</option><option value="11">Research / Science</option><option value="17">Technical Industry / Craftsmanship / Car / Engineering</option></select><br/>\
                     <label for="canton_id">Kanton</label><select id="canton_id"><option value=""></option><option value="1">Aargau (AG)</option><option value="2">Appenzell Ausserrhoden (AR)</option><option value="3">Appenzell Innerrhoden (AI)</option><option value="5">Basel-Landschaft (BL)</option><option value="4">Basel-Stadt (BS)</option><option value="6">Bern (BE)</option><option value="7">Freiburg (FR)</option><option value="8">Genève (GE)</option><option value="9">Glarus (GL)</option><option value="10">Graubünden (GR)</option><option value="11">Jura (JU)</option><option value="12">Luzern (LU)</option><option value="13">Neuchâtel (NE)</option><option value="14">Nidwalden (NW)</option><option value="15">Obwalden (OW)</option><option value="19">Sankt Gallen (SG)</option><option value="16">Schaffhausen (SH)</option><option value="17">Schwyz (SZ)</option><option value="18">Solothurn (SO)</option><option value="20">Thurgau (TG)</option><option value="21">Ticino (TI)</option><option value="22">Uri (UR)</option><option value="23">Valais (VS)</option><option value="24">Vaud (VD)</option><option value="25">Zug (ZG)</option><option value="26">Zürich (ZH)</option></select><br/>\
                     <label for="city_id">City</label><select id="city_id"></select><span id="city_loading" style="display:none"><img src="/images/loading.gif"/></span><br/>\
                     <label for="speed_referenz">Ref.-No.</label><input type="text" id="speed_referenz"/><br/>\
                     <label for="url">URL inkl. http://</label><input type="text" id="url"/>\
                     <input type="hidden" id="mode" value="create"/><input type="hidden" id="id" value=""/>\
                  </td></tr></table>\
               </div>\ </form>\
         </div>'));dialog_new_job = $('div#'+name_dialog);
      dialog_new_job.dialog({
         autoOpen:      false,
         modal:         true,
         hide:          'fast',
         show:          'fast',
         width:         950,
         height:        550,
         title:         message.title_add_job,
         draggable:     false,
         resizable:     false,
         buttons:{
            'Save': function() { this.saveJob(); },
            'Cancel':   function() {$(this).dialog('close');}
         }
      });
      	
         }
   
   this.setInitDialog = function(id) {
   	initDialog = id;
   }

   var init = function () {
      initDialog();
      $('div#metacol_1 > div#options_search > div.subsection:eq(1) > div#myasambo > div.division:eq(4)').bind('click', {mode: 'create', data:{}}, showFormJob);
   }

   // Public methods
   this.getType      = function () {return 'PersonalJob';};
   this.setJobLuigi  = function (jl) { if (typeof(jl) == 'object') if (jl.getType() == 'jobluigi') jobluigi = jl; };

   this.edit         = function(id) {
      $('#metacol_1 > #options_search > div.subsection:eq(1) > div#waiting_user_info').show('fast');
      jobluigi.connect(urlEditJob, {id:id}, function(val, textSuccess){
         $('#metacol_1 > #options_search > div.subsection:eq(1) > div#waiting_user_info').hide('fast');
         if (val.success) {
            var d = val.data;
            d.url = val.data.along_url;
            d.email = val.data.along_email;
            d.speed_referenz = val.data.reference;
            d.mode = 'edition';
            showFormJob({data: d});
         }
         else jobluigi.showError(val.errors.reason, message.title_add_job);
      });
   }

   this.deleteJob    = function(id) {
      $('#metacol_1 > #options_search > div.subsection:eq(1) > div#waiting_user_info').show('fast');
      jobluigi.connect(urlDeleteJob, {id:id}, function(val, textSuccess){
         $('#metacol_1 > #options_search > div.subsection:eq(1) > div#waiting_user_info').hide('fast');
         if (val.success){
            jobluigi.showNotification(message.delete_job_success.replace('%title%', val.title), message.title_add_job);
            $('#job').removeData('id');
            jobluigi.loadListJobs();
         }
         else jobluigi.showError(val.errors.reason, message.title_add_job);
      });
   }

   this.deactive     = function(id) {
      $('#metacol_1 > #options_search > div.subsection:eq(1) > div#waiting_user_info').show('fast');
      jobluigi.connect(urlDeactiveJob, {id:id}, function(val, textSuccess){
         $('#metacol_1 > #options_search > div.subsection:eq(1) > div#waiting_user_info').hide('fast');
         if (val.success){
            if (val.active) {
               jobluigi.showNotification(message.active_job.replace('%job_name%', val.title), message.title_add_job);
               $('a#deactive_job_'+val.id).html('<img src="/images/ui/deactivate_job.png" border="0" style="margin-right:2px;"/>Deactivate');
            }
            else {
               jobluigi.showNotification(message.deactive_job.replace('%job_name%', val.title), message.title_add_job);
               $('a#deactive_job_'+val.id).html('<img src="/images/ui/activate_job.png" border="0" style="margin-right:2px;"/>Activate');
            }
         }
      });
   }



   init();
};;
function Search(jb, usr) {
   // Privates attributes
   var jobluigi            = jb;
   var user                = usr;
   var dialog_new_search   = null;
   var dialog_list_search  = null;
   var urlSaveSearch       = 'http://www.jobheidi.ch/search/save';
   var urlListSearch       = 'http://www.jobheidi.ch/search/list';
   var urlDeleteSearch     = 'http://www.jobheidi.ch/search/delete';

   // Private methods
   var showLoading = function() {$('#metacol_1 > #options_search > div.subsection:eq(1) > div#waiting_user_info').show('fast');};
   var hideLoading = function() {$('#metacol_1 > #options_search > div.subsection:eq(1) > div#waiting_user_info').hide('fast');};
   var transformTime = function(time) {
      switch(time) {
         case 1: return 'Today'; break;
         case 2: return '1 day'; break;
         case 3: return '2 days'; break;
         case 4: return '3 days'; break;
         case 7: return '1 week'; break;
         default: return 'All';
      }
   }
   var transformCategories = function(categories) {
      var names = '';
      var categories = categories.split(',');
      for(var i = 0; i < categories.length; i++) {
         if (names.length > 0) names = names.concat(', ');
         switch (categories[i]) {case '2': names = names.concat('Aus- / Weiterbildung');break;case '3': names = names.concat('Consulting / Recht / Treuhand / Steuern');break;case '4': names = names.concat('Design / Gestaltung');break;case '7': names = names.concat('Finanzen / Controlling / RW / Versicherungen / Krankenkassen');break;case '11': names = names.concat('Forschung / (Natur-)Wissenschaft');break;case '16': names = names.concat('Gastronomie / Hotellerie / Tourismus');break;case '13': names = names.concat('Geschäftsleitung / Top-Management / Unternehmensführung');break;case '14': names = names.concat('HR / Personalwesen');break;case '9': names = names.concat('IT / Telekommunikation');break;case '5': names = names.concat('Kaufmännische Berufe / Administration / Organisation / Verwaltung');break;case '8': names = names.concat('Logistik / Einkauf / Materialwirtschaft / Transport / Verkehr');break;case '6': names = names.concat('Marketing / PR / Medien / Kommunikation / Werbung');break;case '10': names = names.concat('Medizin / Pharma / Psychologie / Soziales');break;case '12': names = names.concat('Redaktion / Journalismus / Dokumentation');break;case '1': names = names.concat('Sonstige / Diverse');break;case '17': names = names.concat('Technisches / Industrie / Gewerbe / Auto / Handwerk / Ingenieur');break;case '15': names = names.concat('Vertrieb / Verkauf / Kundenberatung');break;}
      }
      return names;
   }
   var showParameters = function(p) {
      return '<label>Place</label><div class="search_parameter">'+(p.locations.length > 0?p.locations:'All cantons')+'</div><br clear="all"/>'+
      (p.city.length > 0?'<label>City</label><div class="search_parameter">'+p.city+'</div><br clear="all"/>':'')+
      '<label>Resultate von Recruitern ausschliessen</label><div class="search_parameter" style="width:50px;">'+(p.no_recruiter?'ja':'nein')+'</div><br clear="all"/>'+
      '<label>Age job ad</label><div class="search_parameter">'+transformTime(p.time)+'</div><br clear="all"/>'+
      (p.text.length > 0?'<label>Search words</label><div class="search_parameter">'+p.text+'</div><br clear="all"/>':'')+
      '<label>Industry</label><div class="search_parameter">'+(p.categories.length > 0?transformCategories(p.categories):'All industries')+'</div><br clear="all"/>'
   }


   var saveSearch = function() {
      $(this).dialog('close');
      if (user.isAuthenticated()) {
         showLoading();
         var param = jobluigi.getParameters();
         param.name = $('input#name', dialog_new_search).val();
         param.frecuency = $('select#frecuency', dialog_new_search).val();
         jobluigi.connect(urlSaveSearch, param,
            function(result, textStatus) {
               hideLoading();
               if (result.success) jobluigi.showNotification(message.parameters_save_success.replace('%name%', result.name), message.title_parameters);
               else jobluigi.showError(result.errors.reason, message.title_favorite_save_error);
            }
         );
      }
   }

   var deleteSearch = function(e) {
      if (e.data.id > 0) {
         showLoading();
         jobluigi.connect(urlDeleteSearch, {id: e.data.id},
            function(val, textStatus) {
               hideLoading();
               if (val.success) {
                  listSearch(e);
                  jobluigi.showNotification(message.parameters_delete_success.replace('%name%', val.name), message.title_parameters);
               }
               else jobluigi.showError(val.errors.reason, message.title_favorite_save_error);
            }
         );
      }
   }

   var listSearch = function (e) {
      if (user.isAuthenticated()) {
         showLoading();
         jobluigi.connect(urlListSearch, new Object(),
            function(val, textStatus) {
               hideLoading();
               if (val.success) {
                  var table = '<table id="list_search" cellpadding="0" cellspacing="0"><tr><th>Name</th><th>Frecuency</th><th>Parameters</th><th></th></tr>';
                  for(var i=0; i<val.total; i++) {
                     var s = val.searchs[i];
                     table = table.concat('<tr><td colspan="4" height="1" bgcolor="#000000"></td></tr>');
                     table = table.concat('<tr><td valign="top">'+s.name+'</td><td valign="top">'+s.frecuency+'</td><td valign="top">'+showParameters(s.parameters)+'</td><td valign="top"><a id="delete_search_'+s.id+'" href="javascript:void(0)">[Delete]</a></td></tr>');
                  }
                  table = table.concat('<tr><td colspan="4" height="1" bgcolor="#000000"></td></tr></table>');
                  dialog_list_search.html(table);
                  dialog_list_search.dialog('open');
                  for(var i=0; i<val.total; i++) {
                     var s = val.searchs[i];
                     $('a#delete_search_'+s.id, dialog_list_search).bind('click', s, deleteSearch);
                  }
               }
               else jobluigi.showError(result.errors.reason, message.title_favorite_save_error);
            }
         );
      }
   }

   var showAddSearch = function(e) {
      if (dialog_new_search != null) {
         dialog_new_search.dialog('open');
         $('input#name', dialog_new_search).val('');
         $('div#parameters_search', dialog_new_search).html(showParameters(jobluigi.getParameters()));
      }
   }

   var init = function() {
      var name_dialog = 'dialog_new_search'+Math.round(Math.random()*1000);
      $('<div id="'+name_dialog+'">\
            <form id="form_new_search" class="formal_form">\
               <label for="name">Name subscription</label><input type="text" id="name"/><br/>\
               <label for="frecuency">Frecuency</label><select id="frecuency"><option value="1">Daily</option><option value="7">Weekly</option></select><br/>\
               <div id="parameters_search"><div>\
            </form>\
         </div>').appendTo('body');
      dialog_new_search = $('div#'+name_dialog);
      dialog_new_search.dialog({
         autoOpen:      false,
         modal:         true,
         hide:          'fast',
         show:          'fast',
         width:         450,
         height:        350,
         draggable:     false,
         resizable:     false,
         title:         message.title_my_parameters,
         buttons:{
            'Save': saveSearch,
            'Cancel': function() {$(this).dialog('close');}
         }
      });
      var name_dialog = 'dialog_list_search'+Math.round(Math.random()*1000);
      $('<div id="'+name_dialog+'">\
            <table id="list_search" width="100%">\
               <tr>\
                  <th>Name subscription</th>\
                  <th>Frecuency</th>\
                  <th>Parameters</th>\
               </tr>\
            </table>\
         </div>').appendTo('body');
      dialog_list_search = $('div#'+name_dialog);
      dialog_list_search.dialog({
         autoOpen:      false,
         modal:         true,
         hide:          'fast',
         show:          'fast',
         width:         800,
         height:        400,
         draggable:     false,
         resizable:     false,
         title:         message.title_parameters,
         buttons:{'Close':   function() {$(this).dialog('close');}}
      });
      $('div#myasambo > .division:eq(2) > span').bind('click', this, showAddSearch);
      $('div#myasambo > .division:eq(3)').bind('click', this, listSearch);
   }


   // Public methods
   this.getType      = function () {return 'search';};
   init();
};;
function ExternalLink(element) {
   var dialog = null;


   // Private methods
   var showLoading = function() {$('#metacol_1 > #options_search > div.subsection:eq(1) > div#waiting_user_info').show('fast');};
   var hideLoading = function() {$('#metacol_1 > #options_search > div.subsection:eq(1) > div#waiting_user_info').hide('fast');};

   var showDialog = function(e) {
      var iframe = '<iframe src="'+ e.data.l+'" name="'+ e.data.l +'" frameborder="0" scrolling="auto" hspace="0" width="100%" height="100%"></iframe>';
      dialog.html(iframe);
      dialog.dialog('open');
      $('div.ui-dialog:visible').css({overflowX: 'auto'});
      return false;
   }

   var init = function() {
      var w = Math.round($(window).width()*.80);
      var h = Math.round($(window).height()*.80);
      var name_dialog = 'dialog_links'+Math.round(Math.random()*1000);
      $('<div id="'+name_dialog+'">\
            <iframe></iframe>\
         </div>').appendTo('body');
      dialog = $('div#'+name_dialog);
      dialog.dialog({
         autoOpen:      false,
         modal:         true,
         hide:          'fast',
         show:          'fast',
         width:         w,
         height:        h,
         title:         message.loading,
         buttons:{
            'Close':   function() {$(this).dialog('close');}
         }
      });
   }

   init();
   $(element).each(function(i, item) {
      var t = $(this);
      if (t.attr('href').length > 0) t.bind('click', {l:t.attr('href')}, showDialog);
   });
};;
function PDF(jb) {
   var jobluigi = jb;
   var dialog_pdf = null;
   var name_dialog = '';

   var pdfJob = function(e) {
      if ($('#job').data('id') > 0) {
         window.open('/pdf/'+$('#job').data('id')+'/934385f53d1bd0c1b8493e44d0dfd4c8e88a04bb', '_blank');
      }
   }

   var validCaptcha = function(d, st) {
      dialog_pdf.dialog('close');
      $('#'+name_dialog+'_form').show();
      $('#waiting_pdf').hide();
      if (d.valid) pdfJob();
      else jobluigi.showError('Captcha ERROR');
   }

   var sendCaptcha = function(e) {
      var text_captcha = $('#recaptcha_response_field').val();
      var text_challenge = $('#recaptcha_challenge_field').val();
      if (text_captcha.length > 0 && typeof(text_captcha) == 'string' && text_challenge.length > 0 && typeof(text_challenge) == 'string') {
         $('#'+name_dialog+'_form').hide();
         $('#waiting_pdf').show();
         $.getJSON('/job/validCaptcha', {tcp: text_captcha, tcl: text_challenge}, validCaptcha);
      }
      else {
         Recaptcha.reload();
      }
   }

   var createDialogPDF = function () {
      name_dialog = 'pdf_captcha_'+Math.round(Math.random()*1000);
      $('<div id="'+name_dialog+'">\
            <div id="'+name_dialog+'_form"><input type="hidden" name="recaptcha" value="manual_challenge"></div>\
            <div id="waiting_pdf" style="display:none;"><div style="float:left;margin-right: 4px;"><img src="/images/loading.gif" alt=" " title="Loading..." /></div><span class="msg">'+message.download+'</span></div>\
        </div>\
      ').appendTo('body');
      Recaptcha.create("6LdgVggAAAAAAKiQ7TmcisCEj5KAiwyXLCv0N4D8", name_dialog+'_form', {lang: 'de', custom_theme_widget: 'recaptcha'});
      dialog_pdf = $('div#'+name_dialog);
      dialog_pdf.dialog({
         autoOpen:      false,
         modal:         true,
         hide:          'fast',
         show:          'fast',
         width:         500,
         height:        300,
         title:         message.pdf,
         draggable:     false,
         resizable:     false,
         buttons:{
            'OK': sendCaptcha,
            'Cancel':   function() {$(this).dialog('close');}
         }
      });
   }

   this.show = function (e) {
      dialog_pdf.dialog('open');
      $('#'+name_dialog+'_form').show();
      $('#waiting_pdf').hide();
      Recaptcha.reload();
   }


   createDialogPDF();

};;
function JobLuigi() {
   var version          = "1.0";
   var user             = null;
   var personalJob      = null;
   var userSearch       = null;
   var viewport         = null;
   var feedback         = null;
   var twitter          = null;
   var contact          = null;
   var news             = null;
   var current          = this;
   var current_page     = 1;
   var isLoading        = false;
   var isQueueActive    = false;
   var pdf              = null;
   var textLoading      = '<img alt="Please wait while" src="/images/loading.gif" />'+message.loading;
   var codeLoading      = '<div class="loading">'+textLoading+'</div>';
   var urlList          = 'http://www.jobheidi.ch/job/list';
   var urlJob           = 'http://www.jobheidi.ch/job';
   var urlForward       = 'http://www.jobheidi.ch/job/forward'
   var dialog_wait      = null;
   var parameters = {
      sort:          'created_at',
      dir:           'DESC',
      start:         0,
      limit:         19,
      categories:    '',
      text:          '',
      locations:     '',
      city:          '',
      time:          '',
      no_recruiter:  0
   };
   var ignoreTimeHandler = false;

   var filters = {
      categories: new Array(),
      query:      new Array(),
      locations:  new Array()
   }

   this.getParameters = function() {return parameters};

   this.setLimit = function(l) {parameters.limit = l;};

   this.connect = function (url, d, f) {
      $.ajax({
         url:        url,
         data:       d,
         success:    f,
         cache:      false,
         dataType:   'json',
         type:       'POST'
      });
   }
   
   this.personalJob = personalJob;

   this.showError = function(msg, title, onclose) {
      if (typeof(title) == 'String') if (title.length > 0) $('#dialog_error').dialog('option', 'title', title);
      if (typeof(onclose) == 'function') $('#dialog_error').bind('dialogclose', onclose);
      else $('#dialog_error').bind('dialogclose', function(){});
      if (msg.length > 0) {
         $('#dialog_error .info_text').html(msg);
         $('#dialog_error').dialog('open');
      }
   }

   this.showWaiting = function(msg, title) {
      if (title.length > 0) dialog_wait.dialog('option', 'title', title);
      if (msg.length > 0) {
         if (dialog_wait.dialog('isOpen')) dialog_wait.dialog('close');
         $('.msg', dialog_wait).html(msg);
         dialog_wait.dialog('open');
      }
   }

   this.hideWaiting = function() {if (dialog_wait.dialog('isOpen')) dialog_wait.dialog('close');}

   var createWaitingDialog = function() {
      $('<div id="dialog_wait"><div class="waiting_img" style="float:left;margin-right: 4px;"><img src="/images/loading.gif" alt=" " title="Loading..." /></div><span class="msg"></span></div>').appendTo('body');
      dialog_wait = $('div#dialog_wait');
      dialog_wait.dialog({
         autoOpen:      false,
         modal:         true,
         hide:          'fast',
         show:          'fast',
         width:         120,
         height:        60,
         draggable:     false,
         resizable:     false
      });
   }

   this.showInfo = function(msg, title) {
      if (title.length > 0) $('#dialog_info').dialog('option', 'title', title);
      if (msg.length > 0) {
         $('#dialog_info .info_text').html(msg);
         $('#dialog_info').dialog('open');
      }
   }

   this.showNotification = function(msg, title, near_to_userarea) {
      var d = $('#dialog_notification');
      var t = 10000;
      if (title.length > 0) d.dialog('option', 'title', title);
      if (near_to_userarea === true) {
         var e = $('#metacol_1  div.subsection');
         var p = $(e[1]).position();
         p.left = $('#metacol_1').width();
         d.dialog('option', 'position', new Array($('#metacol_1').width(), p.top));
         t = 5000;
      }
      else d.dialog('option', 'position', new Array('left', 'top'));
      if (msg.length > 0) {
         if (d.dialog('isOpen')) d.dialog('close');
         $('#dialog_notification .info_text').html(msg);
         d.dialog('open');
         setTimeout("jobluigi.closeNotification();", t);
      }
   }

   this.closeNotification = function() {if ($('#dialog_notification').dialog('isOpen')) $('#dialog_notification').dialog('close');}

   var defineTooltips = function() {
      $('#button_favorite').tipbox('Favorite', 1);
      $('#button_commentary').tipbox('Comment', 1);
      $('#button_print').tipbox('Print', 1);
      $('#button_pdf').tipbox('PDF', 1);
      $('#button_forward').tipbox('E-mail job', 1);
   }

   this.filtersToParameters = function() {
      parameters.text = '';
      $.each(filters.query, function(index, id) {
         if (parameters.text.length > 0) parameters.text = parameters.text.concat(',');
         parameters.text = parameters.text.concat(id);
      });
      
      // show/hide search limit
      if (parameters.text.length > 0) $(".exclude_body").show();
      else $(".exclude_body").hide();
      
      parameters.locations = '';
      $.each(filters.locations, function(index, id) {
         if (parameters.locations.length > 0) parameters.locations = parameters.locations.concat(',');
         parameters.locations = parameters.locations.concat(id);
      });
      if (parameters.text.length > 0 || parameters.locations.length > 0 || parameters.city.length > 0 || parameters.time > 0) {
         var pos = $.inArray('fav', filters.categories);
         if (pos >= 0) {
            filters.categories.splice(pos, 1);
            $('#category_all').addClass('row_selected');
            $('#category_all .checkbox').css({backgroundPosition: "-11px 0px"});
         }
      }
      parameters.categories = '';
      $.each(filters.categories, function(index, id) {
         if (parameters.categories.length > 0) parameters.categories = parameters.categories.concat(',');
         parameters.categories = parameters.categories.concat(id);
      });
      
      return parameters;
   }

   var markWords = function(content) {
      var result = content;
      $.each(filters.query, function(i, item) {result = result.replace(new RegExp(item, 'gi'), '<span class="found">'+item+'</span>');});
      return result;
   }

   var correctLinks = function(content) {
      var result = content.replace(new RegExp('&quot;', 'g'), '"');
      result = result.replace(new RegExp('&gt;', 'g'), '>');
      result = result.replace(new RegExp('mailto:%3Ca%20href=" ', 'g'), '');
      result = result.replace(new RegExp('=""', 'g'), '"');
      result = result.replace(new RegExp('>">', 'g'), '>');
      result = result.replace(new RegExp('<a href="mailto:<a href="', 'g'), '<a href="');
      return result;
   }

   var changeJob = function (result, textStatus) {
      if (result.success) {
         user.checkAuthentication();
         if ($('#job').data('id') > 0) {
            var older = $('#results > #job_'+$('#job').data('id'))
            $('#column_icons').hide('fast');
            older.removeClass('row_selected');
            $('#results > #job_'+$('#job').data('id')+' > .column_data ').css({'color':''});
            $('#results > #job_'+$('#job').data('id')+' > .column_data ').addClass('visited');
            $('#results > #job_'+$('#job').data('id')+' > .icon_job ').removeClass('mark_icon_job');
         }
         $('#column_icons').show('fast');
         $('#job').data('id', result.data.id);
         $('#job').data('title', result.data.title);
         $('#job').data('is_from_user', result.data.is_from_user);
         $('#job').data('is_revised', result.data.is_revised);
         $('#job').data('commentary', result.data.commentary);
         $('#job').data('scroll', 0);
         var mark_as_recruiter = '';
         if (!result.data.is_recruiter && !result.data.marked_as_recruiter && $('#exclude_recuiter').attr('checked')) mark_as_recruiter = '<span class="mark_as_recruiter"><a href="javascript:void(0);" id="mark_as_recruiter" rel="'+result.data.recruiter+'"><img src="/images/ui/flag_green.png" border="0"></a></span>';
         $('#job').html(
            '<h2>'+mark_as_recruiter+markWords(result.data.title)+'</h2><hr/>'+
            '<table class="job_table">'+
               '<tr>'+
                  '<th>Company</th>'+
                  '<td><div class="upper_text">'+markWords(result.data.recruiter)+'</div></td>'+
                  '<td colspan="2" width="40%">'+result.data.email+'</td>'+
               '</tr>'+
               '<tr>'+
                  '<th>Place</th>'+
                  '<td>'+result.data.city+(result.data.city.length > 0?' (':'')+result.data.canton+(result.data.city.length > 0?')':'')+'</td>'+
                  '<th>Ref.-No.</th>'+
                  '<td>'+(result.data.reference != null?result.data.reference:'')+'</td>'+
               '</tr>'+
            '</table>'+
               (result.data.to_direct_url?'<hr/><table class="job_table"><tr><th colspan="4">'+result.data.url_forward+'</th></tr></table>':'')+
            '<hr/><div class="job_detail">'+markWords(correctLinks(result.data.content))+'</div><hr/>'+
            '<table class="job_table" width="100%">'+
               '<tr>'+
                  '<td width="70%"><strong>Link job ad</strong></td>'+
                  (result.data.is_from_user?'<td width="30%" align="center"><a href="javascript:void(0);" id="edit_job'+result.data.id+'" onclick="jobluigi.editJob('+result.data.id+');"><img src="/images/ui/edit_job.png"/>Edit</a> <a href="javascript:void(0);" id="delete_job'+result.data.id+'" onclick="jobluigi.deleteJob('+result.data.id+');">'
                  			+(result.data.platform.length == 0 ? '<img src="/images/ui/delete.png"/>Delete</a>' : '')+'<a id="deactive_job_'+result.data.id+'" href="javascript:void(0)" onclick="jobluigi.deactiveJob('+result.data.id+', this)">'+(result.data.active?'<img src="/images/ui/deactivate_job.png" border="0" style="margin-right:2px;"/>Deactivate':'<img src="/images/ui/activate_job.png" border="0" style="margin-right:2px;"/>Activate')+'</a></td>':'')+
                  (result.data.is_from_user?'':'<td width="30%"><strong>Source/s</strong></td>')+
               '</tr>'+
               '<tr>'+
                  '<td valign="top">'+result.data.url+'</td>'+
                  '<td>'+result.data.platform_url+'</td>'+
               '</tr>'+
            '</table>');
		$('#mark_as_recruiter').tipbox('Please click here to flag this company as a recruiter', 1);

         var job = $('#job_'+result.data.id)
         job.removeClass('visited');
         job.addClass('row_selected');
         $('#results > #job_'+result.data.id+' > .column_data ').css({'color':'white'});
         $('#results > #job_'+result.data.id+' > .icon_job').addClass('mark_icon_job');
         if (user.isAuthenticated()) {
            if (!result.data.is_from_user){
               if (result.data.is_favorite) user.iconFavoriteMark();
               else user.iconFavoriteUnmark();
            }
            if (result.data.commentary.length > 0) user.iconCommentaryMark(result.data.commentary);
            else user.iconCommentaryUnmark();
         }
         else {
            user.iconFavoriteUnmark();
            user.iconCommentaryUnmark();
         }
         if (result.data.to_direct_url) var h = viewport.documentHeigh()-340;
         else var h = viewport.documentHeigh()-280;
         $('#job').height(h);
         $('#job > .job_detail').height(h-$('#job > table').height()-$('#job > h2').height()-$('#job > hr').height()*2);
         if (result.data.platform != 'JobScout24') {
            new ExternalLink('a.extern_link_'+result.data.id);
         }
         $('#job a#mark_as_recruiter').bind('click', user.markAsRecruiter);
      }
      else $('#job').html('<h1>'+result.errors.reason+'</h1>');
   }

   this.chageResults = function (result, textStatus) {
      if (result.success) {
         if (result.total == 0) {
            $('#results').html('No jobs');
            $('#search > #resume_results').html('No jobs');
         }
         else {
         	if (result.only_actives) {
         		$('#search > #resume_results').html(result.total+' aktive von '+result.total_jobs+' Jobinseraten insgesamt gefunden');
         	} else {
            	$('#search > #resume_results').html(result.total+' von '+result.total_jobs+' Jobinseraten gefunden');
            }
            $('#results').html('');
            var current_job = $('#job').data('id');
            // Show add list of jobs
            $.each(result.jobs, function(index, job) {
               if (job.id > 0) {
                  var location = job.city+(job.city.length > 0?' (':'')+job.canton+(job.city.length > 0?')':'');
                  var visited = '';
                  var cls = '';
                  var stl = '';

                  if (current_job == job.id) {visited = ''; cls = ' row_selected'; stl = 'color:#FFFFFF'; }
                  else {cls = ''; visited = (job.was_visited?' visited':''); stl = '';}
                  $('#results').append(
                     '<div id="job_'+job.id+'" class="row'+cls+' '+(job.prioritized ? 'prioritized' : '')+'">'+
                        '<div class="column_data title'+visited+'" style="width:193px;'+stl+'">'+job.title+'</div>'+
                        '<div class="column_data favorite'+(job.is_from_user?(job.is_revised?' mark_revised':' mark_unrevised'):(job.is_favorite?' mark_favorite':''))+'"></div>'+
                        '<div class="column_data commentary '+(job.have_commentary?' mark_commentary':'')+'" style="'+stl+'"></div>'+
                        '<div class="column_data'+visited+'" style="width:68px; margin-left:3px;'+stl+'">'+location+'</div>'+
                        '<div class="column_data'+visited+'" style="width:63px; margin-left:5px;'+stl+'">'+job.created_at+'</div>'+
                        '<div class="column_data icon_job"></div>'+
                     '</div>');
                  $('#results > .row:last').data('id', job.id);
                  $('#results > .row:last').data('title', job.title);
                  if (index == 0 && $('#job').data('id') == null) {
                     $('#job').html(codeLoading);                     current.connect(urlJob, {id: job.id}, changeJob);                  }
               }
            });
            $('#results > .row').bind('click', function(e) {
               if ($(this).data('id') > 0) {
                  $('#job').html(codeLoading);
                  current.connect(urlJob, {id: $(this).data('id')}, changeJob);
               }
               else $('#job').html('Invalid job ad');
            });
            // Show Pagging
            var pages = Math.ceil(result.total/parameters.limit);
            if (parameters.start > 0) var current_page = Math.ceil((parameters.start+1)/parameters.limit);
            else var current_page = 1;
            var html_pages = '<div id="job_pagging" class="row" style="text-align:center; border-style:none; margin-top:5px;">';
            if (pages > 1 && current_page > 1) html_pages = html_pages.concat('<a href="javascript:void(0);" onClick="jobluigi.loadListJobs('+(current_page-1)+');">&nbsp;Previous&nbsp;</a>');
            if (pages > 10) {
               if (current_page >= 10) {var start = current_page-5; var limit = start+10;}
               else {var start = 1; var limit = 10;}
            }
            else {var start = 1; var limit = 10;}
            for (var i = start; i <= pages && i <= limit; i++) {
               if (i == current_page) html_pages = html_pages.concat('&nbsp;<span class="selected_page">&nbsp;'+i+'&nbsp;</span>');
               else html_pages = html_pages.concat('&nbsp;<a href="javascript:void(0);" onClick="jobluigi.loadListJobs('+i+');">&nbsp;'+i+'&nbsp;</a>');
            }
            if (pages > 1 && pages > current_page) html_pages = html_pages.concat('&nbsp;<a href="javascript:void(0);" onClick="jobluigi.loadListJobs('+(current_page+1)+');">&nbsp;Next&nbsp;</a>');
            html_pages = html_pages.concat('</div>');
            $('#results').append(html_pages);
            viewport.setWidthColumns({width_1:$('#metacol_1').width(), width_2:$('#metacol_2').width()});
         }
      }
      else current.showError(message.connect_error, message.title_connect_error);
      isLoading = false;
      if (isQueueActive) {
         isQueueActive = false;
         current.loadListJobs();
      }
   }

   this.loadListJobs = function(page) {
      $('#results > .row').unbind('click');
      $('#results > .row').remove();
      $('#results').html(codeLoading);
      if (page > 0) parameters.start = parameters.limit*(page-1);
      else parameters.start = 0;
      if (!isLoading) {
         isLoading = true;
         $('#search > h1').html(message.loading);
         current.connect(urlList, this.filtersToParameters(), this.chageResults);
      }
      else isQueueActive = true;
   }

   this.registerForm = function() {user.registerForm();};
   this.resetPassword = function() {user.resetPassword();};
   this.loginForm = function() {user.loginForm();};

   var removeTextFilter = function() {
      filters.query = [];
      $('#search > .filters > .filter_text > .close_filter').each(function(i, item) {
         var id = '#'+$(this).data('id');
         var text = $(this).data('text');
         filters.query.splice($.inArray(text, filters.query), 1);
         $(id+' > .close_filter').unbind('click');
         $(id).remove();
      });
   }

   var removeTimeFilter = function() {
      $('#column_time > .filters').html('');
      $("#list_options_time > li").css({backgroundColor: '#FFFFFF', color: '#000000'});
      $("#list_options_time > li[value='"+parameters.time+"']").hover(function() {$(this).css({backgroundColor: '#EFEFEF'});}, function() {$(this).css({backgroundColor: '#FFFFFF'});});
      $('#column_time > .filter_text > .close_filter').unbind('click');
      $('#column_time > .filter_text').remove();
      parameters.time = 0;
   }

   var removeLocationFilter = function() {
      filters.locations = [];
      $('#list_cantons > li').each(function(i, item) {
         if ($(this).attr('value') != 'all') {
            $(this).css({'background-color': '#FFFFFF', 'color': '#000000'});
            $(this).hover(function() {$(this).css({'background-color': '#EFEFEF'});}, function() {$(this).css({'background-color': '#FFFFFF'});});
            $('.checkbox', this).css({'background-position': '0px 0px'});
            var div = $('#column_location #lk_'+$(this).attr('title'));
            $('.close_filter', div).unbind('click');
            $(div).remove();
         }
      });
      $('#options_location > #city_filter > :text').attr('value', message.city_text);
      $('#column_location #lk_city > .close_filter').unbind('click');
      $('#column_location #lk_city').remove();
      parameters.city = '';
   }


   var unMarkAllCategory = function() {
      $.each(filters.categories, function(i, item) {
         if (item != 'fav' && item != 'myjobs') {
            $('ul#list_branches > li[value="'+item+'"]> .checkbox').css({backgroundPosition: '0px 0px'});
            $('ul#list_branches > li[value="'+item+'"]').removeClass('row_selected');
            $('ul#list_branches > li[value="'+item+'"]').hover(function() {$(this).addClass('row_hover');}, function() {$(this).removeClass('row_hover');});
            $('#ct_'+item+' > .close_filter').unbind('click');
            $('#ct_'+item).remove();
         }
      });
      filters.categories = [];
      $('ul#list_branches > li[title="all"] > .checkbox').css({backgroundPosition: '-11px 0px'});
      $('ul#list_branches > li[title="all"]').addClass('row_selected');
      $('ul#list_branches > li[title="all"]').removeClass('row_hover');
      $('ul#list_branches > li[title="all"]').unbind('mouseenter mouseleave');
   }

   var clearAllParameters = function(e) {
      removeTextFilter();
      unMarkAllCategory();
      removeLocationFilter();
      removeTimeFilter();
      if ($('#exclude_recuiter').attr('checked') == true) { parameters.no_recruiter = 0; $('#exclude_recuiter').attr('checked', false);}
      if ($('#exclude_body').attr('checked') == true) { parameters.title_only = 0; $('#exclude_body').attr('checked', false);}
      if (!e || !e.doNotLoad) current.loadListJobs();
   }

   this.clearAll = clearAllParameters;

   this.markCategory = function(e) {
      if (e == null) {
         unMarkAllCategory();
         this.loadListJobs();
         return;
      }
      var $this = $(this);
      var id = $this.attr('value');
      var ctitle = $this.text();
      if (typeof(id) == 'number' && id > 0) {
         if (typeof(filters.categories) == 'array') if (filters.categories[0] == 'fav' || filters.categories[0] == 'myjobs') filters.categories = [];
         if ($.inArray(id, filters.categories) == -1) {
            if (filters.categories.length == 0) {
               $('ul#list_branches > li[title="all"] > .checkbox').css({'background-position': '0px 0px'});
               $('ul#list_branches > li[title="all"]').removeClass('row_selected');
               $('ul#list_branches > li[title="all"]').hover(function() {$(this).addClass('row_hover');}, function() {$(this).removeClass('row_hover');});
            }
            if (filters.categories[0] == 'fav' || filters.categories[0] == 'myjobs') {
               $('#category_favorite .checkbox').css({'background-position': '0px 0px'});
               $('#category_favorite').removeClass('row_selected');
               filters.categories = [];
            }
            filters.categories.push(id);
            $('ul#list_branches > li[value="'+id+'"]').addClass('row_selected');
            $('ul#list_branches > li[value="'+id+'"] > .checkbox').css({'background-position': '-11px 0px'});
            $('ul#list_branches > li[value="'+id+'"]').removeClass('row_hover');
            $('ul#list_branches > li[value="'+id+'"]').unbind('mouseenter mouseleave');
            $('#column_branches > .filters').append('<div id="ct_'+id+'" class="filter_text"><div class="close_filter"></div>'+ctitle+'</div>');
            var div = $('#column_branches > .filters > .filter_text:last > .close_filter');
            div.data('id', id);
            div.bind('click', e.data, function(e) {
               var id = $(this).data('id');
               filters.categories.splice($.inArray(id, filters.query), 1);
               $('#ct_'+id+' > .close_filter').unbind('click');
               $('#ct_'+id).remove();
               var cb = $('ul#list_branches > li[value="'+id+'"]');
               cb.removeClass('row_selected');
               cb.hover(function() {$(this).addClass('row_hover');}, function() {$(this).removeClass('row_hover');});
               $('.checkbox', cb).css({'background-position': '0px 0px'});
               if (filters.categories.length == 0) {
                  $('ul#list_branches > li[title="all"] > .checkbox').css({'background-position': '-11px 0px'});
                  $('ul#list_branches > li[title="all"]').addClass('row_selected');
               }
               e.data.loadListJobs();
            });
         }
         else {
            filters.categories.splice($.inArray(id, filters.categories), 1);
            $('ul#list_branches > li[value="'+id+'"]').removeClass('row_selected');
            $('ul#list_branches > li[value="'+id+'"] > .checkbox').css({'background-position': '0px 0px'});
            $('ul#list_branches > li[value="'+id+'"]').hover(function() {$(this).addClass('row_hover');}, function() {$(this).removeClass('row_hover');});
            var div = $('#column_branches #ct_'+id);
            $('.close_filter', div).unbind('click');
            $(div).remove();
            if (filters.categories.length == 0) {
               $('ul#list_branches > li[title="all"] > .checkbox').css({'background-position': '-11px 0px'});
               $('ul#list_branches > li[title="all"]').addClass('row_selected');
            }
         }
         current.loadListJobs();
      }
      else {
         unMarkAllCategory();
         current.loadListJobs();
      }
   }

   var markFavorite = function(e) {
      if (user.isAuthenticated()) {
         clearAllParameters({doNotLoad: true});
         unMarkAllCategory();
         $('ul#list_branches > li[title="all"] > .checkbox').css({'background-position': '0px 0px'});
         $('ul#list_branches > li[title="all"]').removeClass('row_selected');
         $('ul#list_branches > li[title="all"]').hover(function() {$(this).addClass('row_hover');}, function() {$(this).removeClass('row_hover');});
         removeTextFilter();
         removeLocationFilter();
         removeTimeFilter();
         filters.categories = ['fav'];
         e.data.loadListJobs();
      }
      else current.showError(message.favorite_error+'<br/><a href="javascript:void(0);" onClick="jobluigi.loginForm();">'+message.register_form+'</a>', message.title_favorite_error);
   }

   var markRegisterForm = function() {
   		user.registerForm();
   }


   var markMyJobs = function(e) {
      if (user.isAuthenticated()) {
         clearAllParameters({doNotLoad: true});
         unMarkAllCategory();
         $('ul#list_branches > li[title="all"] > .checkbox').css({'background-position': '0px 0px'});
         $('ul#list_branches > li[title="all"]').removeClass('row_selected');
         $('ul#list_branches > li[title="all"]').hover(function() {$(this).addClass('row_hover');}, function() {$(this).removeClass('row_hover');});
         removeTextFilter();
         removeLocationFilter();
         removeTimeFilter();
         filters.categories = ['myjobs'];
         e.data.loadListJobs();
      }
      else current.showError(message.favorite_error+'<br/><a href="javascript:void(0);" onClick="jobluigi.loginForm();">'+message.register_form+'</a>', message.title_favorite_error);
   }


   this.listMyJobs = markMyJobs;

   this.enterTextFilter = function(e) {if (e.which == 13) e.data.addTextFilter(e);}


   this.addTextFilter = function(e) {
      var t = (e.value ? e.value : $('#text_filter_text').attr('value'));
      if (typeof(t) == 'string' && t.length > 0 && t != message.filter_text) {
         var texts = null;
         var exacts = new Array();
         while (t.search('"') > -1) {
            var exact = t.substr(t.search('"')+1);
            t = t.replace('"', '');
            if (exact.length > 0 && exact.search('"') > -1) {exact = exact.substr(0, exact.search('"')); t = t.replace('"', '');};
            var exact_to_replace = exact.replace(/\\/g, '\\');
            exact_to_replace = exact_to_replace.replace(/\(/g, '\\\(');
            exact_to_replace = exact_to_replace.replace(/\)/g, '\\\)');
            exact_to_replace = exact_to_replace.replace(/\./g, '\\\.');
            exact_to_replace = exact_to_replace.replace(/\^/g, '\\\^');
            exact_to_replace = exact_to_replace.replace(/\$/g, '\\\$');
            exact_to_replace = exact_to_replace.replace(/\?/g, '\\\?');
            t = $.trim(t.replace(new RegExp(exact_to_replace), ''));
            if (exact.length > 0) exacts.push(exact);
         }
         if (t.length > 0) {
            var texts = t.split(' ');
            $.merge(texts, exacts);
         }
         else texts = exacts;
         $.each(texts, function (idx, t) {
            filters.query.push(t);
            var id = 'tf_'+Math.round(Math.random()*10000);
            $('#search > .filters').append('<div id="'+id+'" class="filter_text"><div class="close_filter"></div>'+t+'</div>');
            var div = $('#search .filter_text:last > .close_filter');
            div.data('id', id);
            div.data('text', t);
            div.bind('click', e.data, function(e) {
               var id = '#'+$(this).data('id');
               var text = $(this).data('text');
               filters.query.splice($.inArray(text, filters.query), 1);
               $(id+' > .close_filter').unbind('click');
               $(id).remove();
               e.data.loadListJobs();
            });
            $('#text_filter_text').attr('value', '');
            $('#job').data('id', null);
         });
         e.data.loadListJobs();
      }
   }

   this.changeSort = function(e) {
      var info = $(this).attr('id').split('-');
      if (info.length == 2) {
         var older = $('#'+parameters.dir.toLowerCase()+'-'+parameters.sort);
         older.css({'background-position': '0px 0px'});
         older.hover(function() {$(this).css({'background-position': '-5px 0px'});}, function() {$(this).css({'background-position': '0px 0px'});});
         older.removeClass('current_sort');
         if (parameters.sort == info[0]) {
            if (parameters.dir == 'ASC') parameters.dir = 'DESC';
            else parameters.dir = 'ASC';
         }
         else parameters.dir = 'ASC';
         parameters.sort = info[0];
         var newer = $('#'+parameters.dir.toLowerCase()+'-'+parameters.sort);
         newer.addClass('current_sort');
         newer.css({'background-position': '-5px 0px'});
         e.data.loadListJobs();
      }
   }

   this.showTimeOptions = function(e) {
      if ($('#options_location').css('display') != "none")
         e.data.hideLocationOptions(e);
      if ($('#options_time').css('display') == "none") {
         var pos = $('#time_filter_text').offset();
         var x = pos.left;
         var y = pos.top+$('#time_filter_text').innerHeight();
         $('#options_time').css({top:y, left:x});
         $('#options_time').show('fast');
      }
      else e.data.hideTimeOptions(e);
   }

   this.hideTimeOptions = function(e) {
      $('#options_time').hide('fast');
   }

   this.markTime = function(e) {
      if ($(this).attr('value') >= 0) {
         // if (parameters.time > 0) {
            $("#list_options_time > li[value='"+parameters.time+"']").css({'background-color': '#FFFFFF', 'color': '#000000'});
            $("#list_options_time > li[value='"+parameters.time+"']").hover(function() {$(this).css({'background-color': '#EFEFEF'});}, function() {$(this).css({'background-color': '#FFFFFF'});});
            $('#column_time > .filter_text > .close_filter').unbind('click');
            $('#column_time > .filter_text').remove();
         // }
         $(this).unbind('mouseenter mouseleave');
         $(this).css({'background-color': '#797979', 'color': '#FFFFFF'});
         parameters.time = $(this).attr('value');
         e.data.hideTimeOptions(e);
         if ($(this).attr('value')>0) {
            $('#column_time > .filters').html('<div class="filter_text"><div class="close_filter"></div>'+$(this).html()+'</div>');
            $('#column_time > .filters > .filter_text > .close_filter').bind('click', e.data, function(e) {
               $("#list_options_time > li[value='"+parameters.time+"']").css({'background-color': '#FFFFFF', 'color': '#000000'});
               $("#list_options_time > li[value='"+parameters.time+"']").hover(function() {$(this).css({'background-color': '#EFEFEF'});}, function() {$(this).css({'background-position': '#FFFFFF', 'color': '#000000'});});
               $(this).unbind('click');
               $('#column_time > .filters >.filter_text').remove();
               parameters.time = 0;
               if (!ignoreTimeHandler) e.data.loadListJobs();
            });
         }
         else $('#column_time > .filters').html('');
         if (!ignoreTimeHandler) e.data.loadListJobs();
      }
   }

   this.showCategoryOptions = function(e) {
      if ($('#options_branche').css('display') == "none") {
         var pos = $('#branche_filter_text').offset();
         var x = pos.left;
         var y = pos.top+$('#location_filter_text').innerHeight();
         $('#options_branche').css({top:y, left:x});
         $('#options_branche').show('fast');
      }
      else e.data.hideCategoryOptions(e);
   }

   this.hideCategoryOptions = function(e) {
      $('#options_branche').hide('fast');
   }



   this.showLocationOptions = function(e) {
      if ($('#options_time').css('display') != "none") e.data.hideTimeOptions(e);
      if ($('#options_location').css('display') == "none") {
         var pos = $('#location_filter_text').offset();
         var x = pos.left;
         var y = pos.top+$('#location_filter_text').innerHeight();
         $('#options_location').css({top:y, left:x});
         $('#options_location').show('fast');
      }
      else e.data.hideLocationOptions(e);
   }

   this.hideLocationOptions = function(e) {
      $('#options_location').hide('fast');
   }

   var locationToText = function() {
      var locations = '';
      $.each(filters.locations, function(i, val){
         if (locations.length > 0) locations = locations.concat(', ');
         locations = locations.concat($("#list_cantons > li[value='"+val+"'] > span").attr('title'));
      });
      if (parameters.city.length > 0) {
         if (locations.length > 0) locations = locations.concat(', ');
         locations = locations.concat(parameters.city);
      }
      return locations;
   }

   this.markCanton = function(e) {
      var abbreviation = (e.value ? e.value : $(this).attr('title'));
      var $this = $(this);
      if (abbreviation.length > 0) {
         if (abbreviation == 'all') {
            removeLocationFilter();
            e.data.loadListJobs();
         }
         else {
            if ($.inArray(abbreviation, filters.locations) == -1) {
               // If canton is not marked
               $this.unbind('mouseenter mouseleave');
               $this.css({'background-color': '#797979', color: '#FFFFFF'});
               $('.checkbox', this).css({'background-position': '-11px 0px'});
               filters.locations.push(abbreviation);
               $('#column_location > .filters').append('<div id="lk_'+abbreviation+'" class="filter_text"><div class="close_filter"></div>'+abbreviation+'</div>');
               var div = $('#column_location > .filters > .filter_text:last > .close_filter');
               div.data('id', abbreviation);
               div.bind('click', e.data, function(e) {
                  var id = $(this).data('id');
                  filters.locations.splice($.inArray(id, filters.query), 1);
                  $('#lk_'+id+' > .close_filter').unbind('click');
                  $('#lk_'+id).remove();
                  var cb = $('#list_cantons > li[title="'+id+'"]');
                  cb.css({'background-color': '#FFFFFF', 'color': '#000000'});
                  cb.hover(function() {$(this).css({'background-color': '#EFEFEF'});}, function() {$(this).css({'background-color': '#FFFFFF'});});
                  $('.checkbox', cb).css({'background-position': '0px 0px'});
                  e.data.loadListJobs();
               });
            }
            else {
               // If canton is marked before
               filters.locations.splice($.inArray(abbreviation, filters.locations), 1);
               $this.css({'background-color': '#FFFFFF', 'color': '#000000'});
               $this.hover(function() {$(this).css({'background-color': '#EFEFEF'});}, function() {$(this).css({'background-color': '#FFFFFF'});});
               $('.checkbox', this).css({'background-position': '0px 0px'});
               var div = $('#column_location #lk_'+abbreviation);
               $('.close_filter', div).unbind('click');
               $(div).remove();
            }
            e.data.loadListJobs();
         }
      }
   }

   this.addCity = function(e) {
      if (e.type == 'click' || (e.type=='keypress' && e.which == 13)) {
      	 doNotReload = false;
         if (message.city_text != $('#options_location > #city_filter > :text').attr('value') && $('#options_location > #city_filter > :text').attr('value').length > 0) parameters.city = ''+$('#options_location > #city_filter > :text').attr('value');
         else if (e.value) {
         	parameters.city = e.value
         	doNotReload = true;
         }
         else parameters.city = '';
         if (parameters.city.length > 0) {
            var div = $('#column_location #lk_city > span').html();
            if (div != null) {
               $('#column_location #lk_city > span').text(parameters.city);
            }
            else {
               $('#column_location > .filters').append('<div id="lk_city" class="filter_text"><div class="close_filter"></div><span>'+parameters.city+'</span></div>');
               var div = $('#column_location #lk_city > .close_filter');
               div.bind('click', e.data, function(e) {
                  parameters.city = '';
                  $('#options_location > #city_filter > :text').attr('value', message.city_text);
                  $('#column_location #lk_city > .close_filter').unbind('click');
                  $('#column_location #lk_city').remove();
                  e.data.loadListJobs();
               });
            }
         }
         else {
            var div = $('#column_location #lk_city').html();
            if (div != null) {
               $('#column_location #lk_city > .close_filter').unbind('click');
               $('#column_location #lk_city').remove();
            }
         }
         if (!doNotReload) {
         	e.data.hideLocationOptions(e);
         	e.data.loadListJobs();
         }
      }
   }




   var printJob = function(e) {
      if ($('#job').data('id') > 0) {
         window.open('/job/print/id/'+$('#job').data('id'), '_blank', 'width=400, height=600, location=no, menubar=no, scrollbars=yes, resizable=no, status=no, toolbar=no');
      }
   }


   var forwardJob = function(e, ui) {
      if ($('#job').data('id') > 0) {
         $('#dialog_forward').dialog('option', 'title', message.tittle_forward.replace('%job_name%', $('#job').data('title').substr(0, 15)));
         $('#dialog_forward').dialog('open');
      }
   }

   var sendJobToFriend = function () {
      if ($('#job').data('id') > 0 && $('#email_friend').attr('value').length > 0) {
         $('#dialog_forward').dialog('close');
         $('#dialog_waiting').dialog('option', 'title', message.tittle_sending_forward.replace('%job_name%', $('#job').data('title').substr(0, 15)));
         $('#dialog_waiting').dialog('open');
         var params = {
            id: $('#job').data('id'),
            email:$('#email_friend').attr('value'),
            name:$('#name_friend').attr('value'),
            message:$('#message_friend').attr('value')
         };
         current.connect(urlForward, params, function(result, textStatus) {
            $('#dialog_waiting').dialog('close');
            if (result.success) current.showNotification(message.forward_success, message.title_forward_success);
            else current.showError(result.errors.reason, message.title_forward_error);
         });
      }
   }

   var markOnlyRecruiter = function() {
      if ($('#exclude_recuiter').attr('checked') == true) parameters.no_recruiter = 1;
      else parameters.no_recruiter = 0;
      current.loadListJobs();
   }
   
   var markTitleOnly = function() {
      if ($('#exclude_body').attr('checked') == true) parameters.title_only = 1;
      else parameters.title_only = 0;
      current.loadListJobs();  
   }



   var defineDialogs = function() {
      $('#button_print').bind('click', this, printJob);
      $('#button_pdf').bind('click', this, pdf.show);

      $('#dialog_waiting').dialog({
         autoOpen:      false,
         width:         300,
         closeOnEscape: false,
         draggable:     false,
         modal:         true,
         position:      'center',
         resizable:     false
      });

      $('#dialog_error').dialog({
         autoOpen:      false,
         width:         300,
         closeOnEscape: true,
         draggable:     false,
         position:      'center',
         resizable:     false,
         buttons:       {'Close': function() {$(this).dialog("close");}}
      });

      $('#dialog_info').dialog({
         autoOpen:      false,
         width:         200,
         closeOnEscape: true,
         draggable:     false,
         modal:         true,
         position:      'center',
         resizable:     false,
         buttons:       {'Close': function() {$(this).dialog("close");}}
      });

      $('#button_forward').bind('click', this, forwardJob);
      $('#dialog_forward').dialog({
         autoOpen:      false,
         buttons:{
            'Send':    function() {sendJobToFriend();},
            'Cancel':   function() {$(this).dialog('close');}
         },
         width:         300,
         closeOnEscape: true,
         draggable:     false,
         modal:         true,
         position:      'center',
         resizable:     false
      });



      $('#dialog_comment').dialog({
         autoOpen:      false,
         draggable:     false,
         hide:          'slide',
         resizable:     false,
         width:         300,
         minHeight:     120,
         position:      ['right','top']
      });

      $('#dialog_notification').dialog({
         autoOpen:      false,
         closeOnEscape: false,
         draggable:     false,
         hide:          'slide',
         show:          'slide',
         minWidth:      250,
         minHeight:     120,
         resizable:     false
      });

      $('#dialog_jobfamily_about').dialog({
         autoOpen:      false,
         modal:         true,
         hide:          'fast',
         show:          'fast',
         width:         600,
         height:        450,
         buttons:       {'Close': function() {$(this).dialog("close");}}
      });

      $('#dialog_jobfamily_strength').dialog({
         autoOpen:      false,
         modal:         true,
         hide:          'fast',
         show:          'fast',
         width:         600,
         height:        450,
         buttons:       {'Close': function() {$(this).dialog("close");}}
      });

      $('#dialog_jobfamily_jobs').dialog({
         autoOpen:      false,
         modal:         true,
         hide:          'fast',
         show:          'fast',
         width:         300,
         height:        200,
         buttons:       {'Close': function() {$(this).dialog("close");}}
      });

      $('#dialog_service_support').dialog({
         autoOpen:      false,
         modal:         true,
         hide:          'fast',
         show:          'fast',
         minWidth:      500,
         minHeight:     200,
         buttons:       {'Close': function() {$(this).dialog("close");}}
      });

      $('#dialog_twitter_info').dialog({
         autoOpen:      false,
         modal:         true,
         hide:          'fast',
         show:          'fast',
         width:         300,
         height:        200,
         buttons:       {'Close': function() {$(this).dialog("close");}}
      });


   }

   this.editJob            = function(id) {personalJob.edit(id);};
   this.deleteJob          = function(id) {personalJob.deleteJob(id);};
   this.deactiveJob        = function(id) {personalJob.deactive(id);};
   this.getJob 			   = function() { return personalJob; };


   this.showJobFamilyAbout = function() {$('#dialog_jobfamily_about').dialog('open'); return false;}
   this.showJobFamilyStrength = function() {$('#dialog_jobfamily_strength').dialog('open'); return false;}
   this.showJobFamilyJobs  = function() {$('#dialog_jobfamily_jobs').dialog('open'); return false;}
   this.showServiceSupport = function() {$('#dialog_service_support').dialog('open'); return false;}
   this.showContactForm    = function() {contact.showFormular(); return false;}
   this.showTwitterInfo    = function() {$('#dialog_twitter_info').dialog('open'); return false;}


   this.getType = function() {return 'jobluigi';};
   this.reloadCurrentJob = function() { if ($('#job').data('id') > 0) current.connect(urlJob, {id: $('#job').data('id')}, changeJob); };

   this.init = function() {
      feedback    = new Feedback(this);
      user        = new User(this);
      viewport    = new ViewPort(this, user);
      contact     = new Contact(this);
      twitter     = new Twitter(this);
      personalJob = new PersonalJob(this);
      userSearch  = new Search(this, user);
      news        = new News(this);
      pdf         = new PDF(this);
      viewport.setUser(user);
      defineTooltips();
      defineDialogs();
      createWaitingDialog();
      var limit = $('#column_categories > .row > span').length;
      if (limit > 0) parameters.limit = limit;
      $('.icons').hover(function() {$(this).css({'background-position': '-26px 0px'});}, function() {$(this).css({'background-position': '0px 0px'});});

      $('#branche_filter_text, #branche_filter_button').bind('click', this, this.showCategoryOptions);
      $('#options_branche > .title > .close_filter').bind('click ', this.hideCategoryOptions);
      $('#options_branche > .ok').bind('click ', this.hideCategoryOptions);
      $('#list_branches > li').hover(function() {$(this).addClass('row_hover');}, function() {$(this).removeClass('row_hover');});
      $('#list_branches > li').bind('click', this, this.markCategory);
      $('div#myasambo > .division:eq(0)').bind('click', this, markFavorite);
      $('div#myasambo > .division:eq(1)').bind('click', this, markRegisterForm);
      $('div#myasambo > .division:eq(5)').bind('click', this, markMyJobs);

      $('#time_filter_text, #time_filter_button').bind('click', this, this.showTimeOptions);
      $('#time_filter_text, #time_filter_button').bind('mouseenter mouseleave', this, function(e){
         if (e.type=='mouseenter') {
            $('#time_filter_text').css({'background-position':'0px -20px'});
            $('#time_filter_button').css({'background-position':'-17px 0px'});
         }
         else {
            $('#time_filter_text').css({'background-position':'0px 0px'});
            $('#time_filter_button').css({'background-position':'0px 0px'});
         }
      });
      $('#options_time').bind('mouseleave', this.hideTimeOptions);
      $('#options_location > .title > .close_filter').bind('click ', this.hideLocationOptions);
      $('#list_options_time > li').hover(function() {$(this).css({'background-color': '#EFEFEF'});}, function() {$(this).css({'background-color': '#FFFFFF'});});
      $('#list_options_time > li').bind('click', this, this.markTime);
      $('#location_filter_text, #location_filter_button').bind('click', this, this.showLocationOptions);
      $('#location_filter_text, #location_filter_button').bind('mouseenter mouseleave', this, function(e){
         if (e.type=='mouseenter') {
            $('#location_filter_text').css({'background-position':'0px -20px'});
            $('#location_filter_button').css({'background-position':'-17px 0px'});
         }
         else {
            $('#location_filter_text').css({'background-position':'0px 0px'});
            $('#location_filter_button').css({'background-position':'0px 0px'});
         }
      });
      $('#list_cantons > li').hover(function() {$(this).css({'background-color': '#EFEFEF'});}, function() {$(this).css({'background-color': '#FFFFFF'});});
      $('#list_cantons > li').bind('click', this, this.markCanton);
      $('#city_filter > .ok').hover(function() {$(this).addClass('ui-state-focus');}, function() {$(this).removeClass('ui-state-focus');});;
      $('#city_filter > .ok').bind('click', this, this.addCity);
      $('#city_filter > input').bind('keypress', this, this.addCity);
      $('#city_filter > input').bind('focus', this, function(e) {$(this).css({'color':'#000000'});if ($(this).attr('value') == message.city_text) $(this).attr('value', '');});
      $('#city_filter > input').bind('blur', this, function(e) {$(this).css({'color':'#ACACAC'});if ($(this).attr('value') == '') $(this).attr('value', message.city_text);});
      $('#city_filter > input').attr('value', message.city_text);

      $('#text_filter_button').bind('click', this, this.addTextFilter);
      $('#text_filter_text').bind('keypress', this, this.enterTextFilter);
      $('#text_filter_text').attr('value', message.filter_text);
      $('#text_filter_text').css({'color': '#ACACAC'});
      $('#text_filter_text').data('focus', false);
      $('#text_filter_text, #text_filter_button').bind('focus blur mouseenter mouseleave', this, function(e) {
         var tfilter = $('#text_filter_text');
         var bfilter = $('#text_filter_button');
         if (e.type=='focus' || e.type=='mouseenter') {
            if (e.type == 'focus') {
               tfilter.data('focus', true);
               tfilter.css({'color':'#000000'});
               if (tfilter.val() == message.filter_text) tfilter.val('');
            }
            tfilter.css({'background-position':'0px -27px'});
            bfilter.css({'background-position':'-26px 0px'});
         }
         else {
            if (tfilter.data('focus')) {
               if (e.type=='blur') {
                  tfilter.data('focus', false);
                  tfilter.css({'color':'#ACACAC'});
                  tfilter.css({'background-position':'0px 0px'});
                  bfilter.css({'background-position':'0px 0px'});
                  if (tfilter.val() == '') tfilter.val(message.filter_text);
               }
            }
            else {
               tfilter.css({'background-position':'0px 0px'});
               bfilter.css({'background-position':'0px 0px'});
            }
         }
      });
      $('#column_results > h1').bind('click', this, this.changeSort);
      $('#column_results > h1').css({'cursor':'pointer'});

      $('#footer').width($(window).width());
      $('#title-0, #canton-1, #created_at-2').hover(function() {$(this).css({'color':'#50CA1E'});}, function(){$(this).css({'color':'#656565'});});
      $('#column_user_panel .lenguage > a').hover(function() {$(this).css({'color':'#00CC00'});}, function(){$(this).css({'color':'#656565'});});
      $('#exclude_recuiter').attr('checked', false);
      $('#exclude_recuiter').bind('change click', markOnlyRecruiter);
      $('#exclude_body').attr('checked', false);
      $('#exclude_body').bind('change click', markTitleOnly);
      $('button.reset_all_parameters').click(clearAllParameters);

      this.markCategory(null);
      ignoreTimeHandler = true;
      $('#list_options_time > li[value="30"]').click();
      ignoreTimeHandler = false;
      
      // this.chageResults(jobheidi_global_jobs,"200");
      $.superbox.settings = {
         loadTxt: message.loading,
         closeTxt:'X Close',
         prevTxt: 'Previous',
         nextTxt: 'Next'
      };
      $('div.ui-dialog').css({overflowX: 'auto'});
   }
};;
