(function ($) {
    $.fn.textHighlight = function (param) {
        var param = $.extend({
            color: '#000000',
            shift: '1px',
            tdouble: false,
            tdcolor: '#000000',
            tdshift: '2px'
        }, param);
        return this.each( function () {

            var textContent = $(this).html();

            $(this).wrapInner('<span class="z-wrap"><span class="z-top"></span></span>');
            $(this).find('.z-wrap').prepend('<span class="z-bot">'+textContent+'</span>');
            $(this).find('.z-bot').css({
                color: param.color,
                marginTop: param.shift
            });

            if (param.tdouble) {
                $(this).find('.z-wrap').prepend('<span class="z-bot-double">'+textContent+'</span>');
                $(this).find('.z-bot-double').css({
                    color: param.tdcolor,
                    marginTop: param.tdshift
                });

            }

        });
    }
})(jQuery);

(function ($) {
    $.fn.hideDefaultText = function (opt) {

        var opt = $.extend({
            classActive: ''
        }, opt);
        var obj = new Array();

        return this.each( function (e) {

            obj[e] = $(this);
            if ( obj[e].find('input').val() == "" ) {
                obj[e].find('cite').show();
            }
            obj[e].find('cite').click( function () {
                $(this).next('input').focus();
            });
            obj[e].find('input').focus( function () {
                $(this).parent().addClass(opt.classActive);
                $(this).prev('cite').hide();
            });
            obj[e].find('input').blur( function () {
                $(this).parent().removeClass(opt.classActive);
                if ( $(this).val() == "" ) {
                    $(this).prev('cite').show();
                }
            });

        });
    }
})(jQuery);

(function($){
    var openDZI = 1000;
    $.fn.dialogClose = function(settings) {

        if (!settings) {
            settings = {};
    }
    $('.error-tooltip').remove();

    $('#ovl'+settings.type).remove();
    $('#dlg'+settings.type).fadeOut(1, function () {
        $('#dlg'+settings.type).trigger('unload').remove();
    });

    if ( $.fn.dialog.isIE6 ) {
        $('#ifm'+settings.type).remove();
    }

    $(window).unbind('resize.dialog');

};

$.dialogClose = function(s){
    $.fn.dialogClose(s);
};

$.fn.dialog = function(instanceSettings) {

    var shortd = $.fn.dialog;

    shortd.defaultsSettings = {
        idContent: '#registration',
        closeBtn: '.close',
        mainClass: 'userStyle',
        overlayColor: '#fff',
        overlayOpacity: '40',
        modal:0,
        app: '#main',
        type: '',
        functionOnOpen: null,
        fixed: {
            element: null,
            position: 'bottom',
            shiftLeft: 0,
            shiftTop: 0
        }
    };

    var settings = $.extend({}, $.fn.dialog.defaultsSettings , instanceSettings || {});

    shortd.viewPortHeight = function(){
        return self.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
    };
    shortd.scrollOffsetHeight = function(){
        return self.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop;
    };
    shortd.isIE6 = typeof document.body.style.maxHeight === "undefined";

    var sizeOverlay = function() {
        ov = $('.overlay');
        if ( shortd.isIE6 ) { //if IE 6
            var overlayViewportHeight = $('#main').height();
            var overlayViewportWidth = document.documentElement.offsetWidth - 17;
            ov.css({
                'height': overlayViewportHeight+'px',
                'width':overlayViewportWidth+'px'
            });
        } else { //else Firefox, safari, opera, IE 7+
            ov.css({
                'height':'100%',
                'width':'100%',
                'position':'fixed'
            });
        }
    };

    var sizeIE6Iframe = function() {
        var overlayViewportHeight = document.documentElement.offsetHeight + document.documentElement.scrollTop - 0;
        var overlayViewportWidth = document.documentElement.offsetWidth - 17;
        $('.iframe').css({
            'height': overlayViewportHeight+'px',
            'width':overlayViewportWidth+'px'
            });
    };
    var centerDialog = function(el) {
        el.css('top', (Math.round(shortd.viewPortHeight()/2) + shortd.scrollOffsetHeight() - Math.round((el.outerHeight())/2))+'px');
    };
    var fixedDialog = function(el) {
        var relObj = $(settings.fixed.element)
        var offset = relObj.offset();
        if(!offset) return;
        switch(settings.fixed.position) {
            case 'top':
                el.css('top', ( offset.top - el.outerHeight() + (settings.fixed.shiftTop))+'px');
                el.css('left', ( offset.left + Math.round(relObj.outerWidth()/2) - Math.round(el.outerWidth()/2) + (settings.fixed.shiftLeft) )+'px');
                break;
            case 'right':
                el.css('top', ( offset.top + Math.round(relObj.outerHeight()/2) - Math.round(el.outerHeight()/2) + (settings.fixed.shiftTop))+'px');
                el.css('left', ( offset.left + relObj.outerWidth() + (settings.fixed.shiftLeft) )+'px');
                break;
            case 'bottom':
                el.css('top', ( offset.top + relObj.outerHeight() + (settings.fixed.shiftTop))+'px');
                el.css('left', ( offset.left + Math.round(relObj.outerWidth()/2) - Math.round(el.outerWidth()/2) + (settings.fixed.shiftLeft) )+'px');
                break;
            case 'left':
                el.css('top', ( offset.top + Math.round(relObj.outerHeight()/2) - Math.round(el.outerHeight()/2) + (settings.fixed.shiftTop))+'px');
                el.css('left', ( offset.left - el.outerWidth() + (settings.fixed.shiftLeft) )+'px');
                break;
        }
    }

    var run = function() {

        openDZI = openDZI+2;

        var ovl = 'ovl'+openDZI;
        var dlg = 'dlg'+openDZI;
        var ifm = 'ifm'+openDZI;


        $(settings.app).append('<div id="'+ovl+'" class="overlay" style="z-index:'+openDZI+';display:none;position:absolute;top:0;left:0;background-color:'+settings.overlayColor+';filter:alpha(opacity='+settings.overlayOpacity+');-moz-opacity: 0.'+settings.overlayOpacity+';opacity: 0.'+settings.overlayOpacity+';"></div>');
        if(shortd.isIE6){ //if IE 6
            $(settings.app).append('<iframe class="iframe" id="'+ifm+'" src="blank.html"  style="width:100%;height:100%;z-index:'+(openDZI-1)+';position:absolute;top:0;left:0;filter:alpha(opacity=0);"></iframe>');
            sizeIE6Iframe();
        }
        sizeOverlay();
        var overlay = $('.overlay');
        overlay.fadeIn(1)
        if (!settings.modal) {
            overlay.click( function () {
                var oNum = $(this).attr('id').match(/([a-zA-Z\-_]+)(\d+)/);
                $.dialogClose({
                    type: oNum[2]
                });
            });
        }

        $(settings.app).append('<div style="z-index:'+( openDZI + 2 )+'" id="'+dlg+'" class="dialog '+settings.mainClass+'"></div>');
        $('#' + dlg).append('<div class="dialogTop"></div><div class="dialogContent"></div><div class="dialogBot"></div><div class="close"></div>');

        $('#' + dlg).find('.close').click( function () {
            var iNum = $(this).parent('.dialog').attr('id').match(/([a-zA-Z\-_]+)(\d+)/);
            $.dialogClose({
                type: iNum[2]
            });
        });

        $('#' + dlg + ' .dialogContent').append( $(settings.idContent).children() );
        $('#' + dlg).unload(function(){
            $(settings.idContent).append( $('#' + dlg + ' .dialogContent').children() );
        });

        if (!settings.fixed.element) {
            centerDialog($('#' + dlg));
        }
        else {
            fixedDialog($('#' + dlg));
        }
        $(window).bind('resize.dialog', function(){
            fixedDialog($('#' + dlg));
        });


        if (settings.functionOnOpen) {
            settings.functionOnOpen();
        }

        var returnNum = dlg.match(/([a-zA-Z\-_]+)(\d+)/);

        return returnNum[2];
    };

    return run();
};

$.dialog = function(s){
    return $.fn.dialog(s);
};

})(jQuery);

$.fn.arrowsNavigation = function(options, callback) {

  this.options = options || {};
  var opt = this.options;
  this.callback = callback || null;
  var clbk = this.callback;
  /**
  *	param event
  */
  $(this).bind("keydown", function(event) {
    //By default link is empty
    var lnk = "";

    var left,right,up,down;

    //get link data from HTML DOM
    if(!opt.right) {
      right = $("#arr-nav-right-link").attr("href");
    } else {
      right = opt.right;
    }
    if(!opt.left) {
      left   = $("#arr-nav-left-link").attr("href");
    } else {
      left = opt.left;
    }
    if(!opt.up) {
      up     = $("#arr-nav-up-link").attr("href");
    } else {
      up = opt.up;
    }
    if(!opt.down) {
      down   = $("#arr-nav-down-link").attr("href");
    } else {
      down = opt.down;
    }

    //Check what arrows is pressed with contol key
    if(event.ctrlKey) {
            switch(event.keyCode) {
                case 0x27: lnk = right; break;
                case 0x25: lnk = left; break;
                case 0x28: lnk = down; break
                case 0x26: lnk = up; break;
            }
    }

    //If link exists go to that location
    if(lnk) {

      if(typeof clbk == 'function') {
        clbk();
        return false;
      } else {
        window.location = lnk;
        return true;
        //throw new Error("'callback' parameter should be a function");
      }
    }

    return true;
  });
}

jQuery.fn.extend({
insertAtCaret: function(myValue){
  return this.each(function(i) {
    if (document.selection) {
      //For browsers like Internet Explorer
      this.focus();
      sel = document.selection.createRange();
      sel.text = myValue;
      this.focus();
    }
    else if (this.selectionStart || this.selectionStart == '0') {
      //For browsers like Firefox and Webkit based
      var startPos = this.selectionStart;
      var endPos = this.selectionEnd;
      var scrollTop = this.scrollTop;
      this.value = this.value.substring(0, startPos)+myValue+this.value.substring(endPos,this.value.length);
      this.focus();
      this.selectionStart = startPos + myValue.length;
      this.selectionEnd = startPos + myValue.length;
      this.scrollTop = scrollTop;
    } else {
      this.value += myValue;
      this.focus();
    }
  })
}
});

