var sort = "date";
var site_base = '';
var keywords = "";
var industry = new Array();
var regions = "";
salaryMin = -1;
salaryMax = -1;

function isInteger(val) {
   return (val == null || isNaN(val)) ? false : 
	  (((1.0 * val) == Math.floor(val)) && (val.indexOf(".") == -1));
}

function myTimestamp(){
	tstmp = new Date();
	return tstmp.getTime();
}

function toggleEditor(id) {
	if (!tinyMCE.get(id))
		tinyMCE.execCommand('mceAddControl', false, id);
	else
		tinyMCE.execCommand('mceRemoveControl', false, id);
}

tinymceConfig_one = {
	mode : "textareas",
	theme : "advanced",
	plugins : "advimage,paste,phpimage,table,contextmenu,inlinepopups,fullscreen",
	paste_auto_cleanup_on_paste : true,
	paste_strip_class_attributes : "all",
	paste_remove_styles : true,
	convert_urls : false,
	theme_advanced_toolbar_align : "left",
	theme_advanced_statusbar_location : "bottom",
	theme_advanced_resizing : true,
	theme_advanced_toolbar_location : "top",
	theme_advanced_buttons1 : "removeformat,pastetext,|,bold,italic,underline,strikethrough,|,table,|,bullist,numlist,|,justifyleft,justifycenter,justifyright,justifyfull,|,formatselect,|,link,unlink,|,phpimage,|,fullscreen",
	theme_advanced_buttons2 : "",
	theme_advanced_buttons3 : "",
	theme_advanced_disable: "image,advimage"
}

function inputState (i) {
	if (i.attr("value").indexOf("ключевые слова")!=-1) {
	i.css({"color":"#414950","font-size":"14px","font-style":"normal"});
	i.attr("value","");
	} else if (i.attr("value")=="") {
	i.css({"color":"#666","font-size":"12px","font-style":"italic"});
	i.attr("value", "Ключевые слова (напр. \"ведущий\", \"редактор\", ...)");
	keywords='';
	}
}

$(document).ready(function(){

	$('#menuSpecial').css('width', $('#menuSpecial').offs)

	$("#vacSwitch span").click(function () {	//2do: whats that for?
		$("#vacSwitch a").css("color","#06c");
		$("#vacSwitch span").css("background","none");
		$(this).css("background-color","#f54a1f");
		$(this).children("a").css("color","white");
	});

	$('#menuContainer div.menuTop').hover(function(){
		$(this).addClass('menuMouseover');
		$('div.menuDropdown', this).show();
	}, function(){
		$(this).removeClass('menuMouseover');
		$('div.menuDropdown', this).hide();
	});
	
	$(".menuItem").hover(function(){
		$(this).find("a").css("background-color","#09557b");
	}, function(){
		$(this).find("a").css("background","none");
	});

	$.fn.tipsy.defaults = {
		delayIn: 0,		// delay before showing tooltip (ms)
		delayOut: 1000,	// delay before hiding tooltip (ms)
		fade: true,		// fade tooltips in/out?
		fallback: '--',	// fallback text to use when no tooltip text
		gravity: function() {
		//	console.log($(this).offset().left);
		//	console.log($(this).width());
		//	console.log($(document).scrollLeft() + $(window).width());
        	return $(this).offset().left + 300 > ($(document).scrollLeft() + $(window).width()) ? 'e' : 'w';
    	},	// gravity
		html: true,		// is tooltip content HTML?
		live: false,	// use live event support?
		offset: 0,		// pixel offset of tooltip from element
		opacity: 1,		// opacity of tooltip
		title: 'title',	// attribute/callback containing tooltip text
		trigger: 'hover'// how tooltip is triggered - hover | focus | manual
	};

});

var login_regexp = /^[a-zA-Z0-9_]{2,30}$/;
var pass_regexp = /^[a-zA-Zа-яА-Я0-9_\-+=\)\(*&\^%\$#@!"'№;:\?\\|\/]{2,30}$/;
var mail_regexp = /^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;
var name_regexp = /^[a-zA-Zа-яА-Я]+[a-zA-Zа-яА-Я\. -'"«»]*$/;
var digits_regexp = /^\d+$/;
var dummy_regexp = /^.*$/m;
var date_regexp = /^(16|17|18|19).(11).(10) 1[2-6]{1}:(00|30) - 1[2-6]{1}:(00|30)$/;
var date_profile_regexp = /^(19|20)[0-9]{2}-(0[1-9]|1[12])-([0-2][0-9]|3[01])$/;
var captcha_regexp = /^[a-zA-Z0-9]+$/;
var url_regexp = /^(http(s?):\/\/)?(www.)?(\w|-)+(\.(\w|-)+)*((\.[a-zA-Z]{2,3})|\.[a-zA-Z]{2,4})+(\/)?$/;
var phone_regexp = /^[\d (\-)\+]+$/;
var common_regexp = /^[a-zA-Zа-яА-Я\. -«»0-9]*$/;
// ^https?://(www)?([\w\d-]+\.)*[\w\d-]+\.\w{2,4}(/[\w\d-\.]+)*/?\??([\w\d%-]+=[\w\d%-]*&?)?#?([\w\d/\.=-]+)?$


function loadVacancy() {
	$("#vacLoading").css("display","block");
	$.ajax({ 
		type:"GET", 
		url:"blocks/main_vac_list.php", 
		datatype:"html", 
		data: { 
			sort:sort, 
			keywords:keywords, 
			salarymin:salaryMin, 
			salarymax:salaryMax, 
			industry:industry.join(','), 
			regions:regions, 
			pgn:pgn, 
			tstamp:myTimestamp()
		}, 
		complete: function(data){
			$("#vacLoading").css("display","none"); 
			$("#vac_list").html(data.responseText);
		} 
	});
	//$.get ("blocks/main_vac_list.php", {sort:sort, keywords:keywords, industry:industry, regions:regions}, function(data){
	//	$("#vac_list").load("blocks/main_vac_list.php", {sort:sort, keywords:keywords, industry:industry, regions:regions}, function(responseText, textStatus, XMLHttpRequest){	$("#vacLoading").css("display","none"); });
	//});
}

function trim(str, chars) {
	return ltrim(rtrim(str, chars), chars);
}

function ltrim(str, chars) {
	chars = chars || "\\s";
	return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}

function rtrim(str, chars) {
	chars = chars || "\\s";
	return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}

function disableEnterKey(e)
{
	 var key;	  
	 if(window.event)
		  key = window.event.keyCode; //IE
	 else
		  key = e.which; //firefox	  

	 return (key != 13);
}

function intval (mixed_var, base) {
	var tmp;

	var type = typeof( mixed_var );

	if (type == 'boolean'){
		if (mixed_var == true) {
			return 1;
		} else {
			return 0;
		}
	} else if (type == 'string'){
		tmp = parseInt(mixed_var * 1, 10);
		if (isNaN(tmp) || !isFinite(tmp)){
			return 0;
		} else{
			return tmp.toString(base || 10);
		}
	} else if (type == 'number' && isFinite(mixed_var) ){
		return Math.floor(mixed_var);
	} else{
		return 0;
	}
}

function makePass(n) {
	symbols = "qwertyupasdfghjkzxcvbnm123456789";
	pass = '';
	for (i=0; i<n; i++) {
		r = Math.round(Math.random());
		if (r==0) s = symbols[Math.round(Math.random()*symbols.length)-1].toUpperCase(); else
				s = symbols[Math.round(Math.random()*symbols.length)-1];
		pass += s;
	}
	alert ("Запишите пароль:\n \n"+pass);
	return pass;
}

function strings_val (s, minL, maxL, regex) {
	$(s).val(trim($(s).val()));
	if (minL==0 && $(s).val().length==0) {
		$(s).css('background-color',''); return true;
	} else {
		if ($(s).val().length < minL || $(s).val().length > maxL || (regex!='none' && $(s).val().match(regex)==null)) {
			$(s).css('background-color','#FFCCCC'); 
			$(s).focus(); 
			$(s+"-errmsg").show(200);
			$(s).one("click keyup", function(){
				$(this).css('background-color',''); 
				$(s+"-errmsg").hide(200);
			});
			return false;
		} else {
			$(s).css('background-color',''); 
			return true;
		}
	}
}

$.fn.insertAtCaret = function (tagName) {
		return this.each(function(){
			if (document.selection) {
				//IE support
				this.focus();
				sel = document.selection.createRange();
				sel.text = tagName;
				this.focus();
			}else if (this.selectionStart || this.selectionStart == '0') {
				//MOZILLA/NETSCAPE support
				startPos = this.selectionStart;
				endPos = this.selectionEnd;
				scrollTop = this.scrollTop;
				this.value = this.value.substring(0, startPos) + tagName + this.value.substring(endPos,this.value.length);
				this.focus();
				this.selectionStart = startPos + tagName.length;
				this.selectionEnd = startPos + tagName.length;
				this.scrollTop = scrollTop;
			} else {
				this.value += tagName;
				this.focus();
			}
		});
	}

Array.prototype.remove = function (subject) {
	var r = new Array();
	for(var i = 0, n = this.length; i < n; i++)
	{
		if(!(this[i]==subject))
		{
			r[r.length] = this[i];
		}
	}
	return r;
}

window.viewport = {

	height: function() { 
		return $(window).height(); 
	},
	
	width: function() {
		return $(window).width();
	},
	
	scrollTop: function() {
		return $(window).scrollTop();
	},
	
	scrollLeft: function() {
		return $(window).scrollLeft();
	}
};


/* fancySelect plugin. 

DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
                   Version 2, December 2004
 
Copyright (C) 2011 lashtal
Everyone is permitted to copy and distribute verbatim or modified
copies of this license document, and changing it is allowed as long
as the name is changed.
 
           DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
  TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
 
 0. You just DO WHAT THE FUCK YOU WANT TO.
 */
(function( $ ){
	var methods = {
		init : function( options ) {
			var settings = {
				'maxLength'				: 50,
				'firstOptionIsTitle'	: false,
				'dropDownListWidth'		: 235,
				'dropDownListMaxHeight'	: 200,
				'highlightSelected'		: true,
				'multiSelectText'		: 'Выбрано: '
			};

			var optionTitleTemplate = '<a href="#"><span class="text"></span>&nbsp;<div class="arr inline-fix"></div></a>';
			var optionTemplate = '<p />';
			if (options) $.extend( settings, options );

			return this.each(function() {	// each <select> element...
				var currentSelect = this;
				var firstOptionTitle = $('option:first', currentSelect).html();
				var dropdownOptionsArrayElements = $('option', this);
				if (dropdownOptionsArrayElements.length > 0) {
					var fancyDropDown = $('<span class="fancySelectTitle" />');
					var mouse_is_inside = false; 
					var fancyDropMenu = $('<div class="fancySelectMenu"><div class="fancySelectMenuInner" /></div>'); //.css('width': settings.dropDownListWidth);
					var multiSelect = $(currentSelect).attr('multiple') ? true : false;

					//default option
					var defaultValue = multiSelect ?
						settings.multiSelectText + $('option:selected', currentSelect).length :
						this.value;
					
					if (multiSelect) {
						var optionString = $(':selected', this).length == 0 ? firstOptionTitle : settings.multiSelectText + $(':selected', this).length;
					} else {
						var optionString = $(':selected', this).length == 0 ? dropdownOptionsArrayElements[0].innerHTML : $(':selected', this).html();
						if (settings.maxLength > 0) if (optionString.length > settings.maxLength) optionString = optionString.substr(0, settings.maxLength) + '&hellip;';
					}
					$(fancyDropDown).append( $(optionTitleTemplate) ).find('span.text').html(optionString);
					
					//dropdown options (skips first one if firstOptionIsTitle = true)
					var firstOptionFlag = true;
					dropdownOptionsArrayElements.each(function(){
						if (settings.firstOptionIsTitle && firstOptionFlag) {
							firstOptionFlag = false;
						} else {
							var optionEl = $(optionTemplate);
							if (multiSelect) {
									var optionText = $('<label />').html(this.innerHTML);
									var optionCheck = $('<input type="checkbox" />').attr('value', this.value);
									if (this.selected) {
										optionCheck.attr('checked', 'checked');
										optionText.addClass('fancySelectMenuActive');
									}
									$(optionText).prepend(optionCheck);

								} else {
									var optionText = $('<a />').attr( { optval: this.value, href: '#' } ).html( this.innerHTML );
								}


								if (this.value === defaultValue) $('a', optionEl).addClass('fancySelectMenuActive');
								$(optionText).appendTo($(optionEl));
								$('.fancySelectMenuInner', fancyDropMenu).append($(optionEl));
						}
					});

					//adjusts dropdown menu position every time mouse hovers over the dropdown title
					$(fancyDropDown).bind('mouseover.fancySelect', function(){
						var currentSelectPosition = $(this).offset();
						var windowRightOffset = window.viewport.scrollLeft() + window.viewport.width();
						var leftOffset = (windowRightOffset < currentSelectPosition.left + settings.dropDownListWidth + 10) ? windowRightOffset - settings.dropDownListWidth - 10 : currentSelectPosition.left;
						$(fancyDropMenu).css( { left: leftOffset + 'px', top: (currentSelectPosition.top+20) + 'px'} );
					});

					//dropdown open-close
					$(fancyDropDown).bind('click.fancySelect', function(event){	
						event.preventDefault();
						$(fancyDropMenu).slideToggle(100);
						return false;
					});

					// closes dropdown on click anywhere outside it			
					$(fancyDropDown).add(fancyDropMenu).hover(function(){ 
						mouse_is_inside=true; 
					}, function(){ 
						mouse_is_inside=false; 
					});

					$('body').mouseup(function(){ 
						if(!mouse_is_inside) $(fancyDropMenu).hide();
					});

					// option clicked
					$('a, input[type=checkbox]', fancyDropMenu).bind('click.fancySelect', function(event){
						var clickedItem = this;
						if (clickedItem.checked) $(clickedItem).parent().addClass('fancySelectMenuActive'); 
						else $(clickedItem).parent().removeClass('fancySelectMenuActive'); 
						$(currentSelect).empty();
						if (multiSelect) {
							$('input[type=checkbox]:checked', fancyDropMenu).each(function(){
								$(currentSelect).append($('<option />').val(this.value).attr('selected', 'selected'));
							});
							var optionsSelected = $('input[type=checkbox]:checked', fancyDropMenu).length;
							var optionString = settings.firstOptionIsTitle && optionsSelected == 0 ? firstOptionTitle : settings.multiSelectText + $('input[type=checkbox]:checked', fancyDropMenu).length;
							$('span.text', fancyDropDown).html(optionString);
							return true;
						} else {
							// <a> element clicked
							event.preventDefault();
							var optionString = clickedItem.innerHTML;
							$(currentSelect).append($('<option />').val($(clickedItem).attr('optval')));
							if (settings.maxLength > 0) if (optionString.length > settings.maxLength) optionString = optionString.substr(0, settings.maxLength) + '&hellip;';
							if (settings.highlightSelected) {
							$('a', fancyDropMenu).removeClass('fancySelectMenuActive'); 
								$(this).addClass('fancySelectMenuActive'); 
							}else {
								$('a', fancyDropMenu).show();
								$(this).hide();
							}

							$('span.text', fancyDropDown).html(optionString);
							$(fancyDropMenu).hide();
							return false;
						}
					});
					
					$(currentSelect).hide().after($(fancyDropDown));
					$(fancyDropMenu).appendTo($('body'));			//adding dropdown options to DOM	

					if ($(fancyDropMenu).height() > settings.dropDownListMaxHeight)  $(fancyDropMenu).css({'height':settings.dropDownListMaxHeight + 'px', 'overflow':'auto', 'overflow-y':'scroll'});
				}
			});
		}
	};


	$.fn.fancySelect = function( method ) {
		if ( methods[method] ) {
			return methods[method].apply( this, Array.prototype.slice.call( arguments, 1 ));
		} else if ( typeof method === 'object' || ! method ) {
			return methods.init.apply( this, arguments );
		} else {
			$.error( 'Method ' +  method + ' does not exist on jQuery.fancyDropMenu' );
		}
	};
})( jQuery );


jQuery.fn.liveUpdate = function(list, options){
	list = jQuery(list);
	var settings = {
		itemSelector: "li",
		liveSearchSelector: null,
		simpleSearchSelector: null
	}
	if (options) $.extend( settings, options );

	if ( list.length ) {
		var rows = list.children(settings.itemSelector);
		var	cache = rows.map(function(){
				return settings.liveSearchSelector === null ? this.innerHTML.toLowerCase() : $(settings.liveSearchSelector, this)[0].innerHTML.toLowerCase();
			});
		var cache2 = rows.map(function(){
				return settings.simpleSearchSelector === null ? this.innerHTML.toLowerCase() : $(settings.simpleSearchSelector, this).text().toLowerCase();
			});
			
		this
			.keyup(filter).keyup()
			.parents('form').submit(function(){
				return false;
			});
	}
		
	return this;
		
	function filter(){
		var term = jQuery.trim( jQuery(this).val().toLowerCase() ), scores = [];
		
		if ( !term ) {
			rows.show();
		} else {
			rows.hide();

			cache.each(function(i){
				var score = this.score(term);
				if (score > 0) { scores.push([score, i]); }
			});

			cache2.each(function(i){
				var score = this.indexOf(term) >= 0 ? 0.5 : 0;
				if (score > 0) { scores.push([score, i]); }
			});

			jQuery.each(scores.sort(function(a, b){return b[0] - a[0];}), function(){
				jQuery(rows[ this[1] ]).show();
				jQuery(settings.simpleSearchSelector, rows[ this[1] ]).show();
			});
		}
	}
};


// qs_score - Quicksilver Score
// 
// A port of the Quicksilver string ranking algorithm
// 
// "hello world".score("axl") //=> 0.0
// "hello world".score("ow") //=> 0.6
// "hello world".score("hello world") //=> 1.0
//
// Tested in Firefox 2 and Safari 3
//
// The Quicksilver code is available here
// http://code.google.com/p/blacktree-alchemy/
// http://blacktree-alchemy.googlecode.com/svn/trunk/Crucible/Code/NSString+BLTRRanking.m
//
// The MIT License
// 
// Copyright (c) 2008 Lachie Cox
// 
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
// 
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
// 
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.


String.prototype.score = function(abbreviation,offset) {
  offset = offset || 0 // TODO: I think this is unused... remove
 
  if(abbreviation.length == 0) return 0.9
  if(abbreviation.length > this.length) return 0.0

  for (var i = abbreviation.length; i > 0; i--) {
    var sub_abbreviation = abbreviation.substring(0,i)
    var index = this.indexOf(sub_abbreviation)


    if(index < 0) continue;
    if(index + abbreviation.length > this.length + offset) continue;

    var next_string       = this.substring(index+sub_abbreviation.length)
    var next_abbreviation = null

    if(i >= abbreviation.length)
      next_abbreviation = ''
    else
      next_abbreviation = abbreviation.substring(i)
 
    var remaining_score   = next_string.score(next_abbreviation,offset+index)
 
    if (remaining_score > 0) {
      var score = this.length-next_string.length;

      if(index != 0) {
        var j = 0;

        var c = this.charCodeAt(index-1)
        if(c==32 || c == 9) {
          for(var j=(index-2); j >= 0; j--) {
            c = this.charCodeAt(j)
            score -= ((c == 32 || c == 9) ? 1 : 0.15)
          }

          // XXX maybe not port this heuristic
          // 
          //          } else if ([[NSCharacterSet uppercaseLetterCharacterSet] characterIsMember:[self characterAtIndex:matchedRange.location]]) {
          //            for (j = matchedRange.location-1; j >= (int) searchRange.location; j--) {
          //              if ([[NSCharacterSet uppercaseLetterCharacterSet] characterIsMember:[self characterAtIndex:j]])
          //                score--;
          //              else
          //                score -= 0.15;
          //            }
        } else {
          score -= index
        }
      }
   
      score += remaining_score * next_string.length
      score /= this.length;
      return score
    }
  }
  return 0.0
}
