/**
 * 
 * Custom js (jQuery) functions of the application
 *
 */

String.prototype.ellipsis = function (limit) {
    var center = ' ... ';
    var len = this.length;
    if (len > limit) { 
        var half = Math.floor( (limit - center.length)/2 );
        return this.substr(0, half) + center + this.substr(len-half, half);
    }
    return this.toString();
}

jQuery.extend(jQuery.fn, {
    initCart : function () {
        var _this = $(this);
        _this.find('#pr_amount').tooltip({
            bodyHandler: function () {
                return _this.find('#cart_items').html();
            },
            showURL: false
        });
    },
    poller : function () {
        var _this = $(this);   
        var voted = $.cookie('CakeCookie[voted]');
        var inputs = _this.find('input');

        if (voted) {
            inputs.hide();
        } else {
            inputs.show();
            _this.ajaxForm({
                beforeSubmit : function () {
                    $.blockUI({message : false});
                },
                success : function (response) {
                    $.unblockUI();
                    inputs.hide();
                    response = eval('(' + response + ')');
                    for (var i=0; i < response.PollersOption.length; i++) {
                        _this
                            .find('#votes_' + response.PollersOption[i].id)
                            .text(response.PollersOption[i].votes_percentage);
                    }
                }
            });
        }
    },
    bpGallery : function () {
        var gallery  = $(this);
        var main_img = gallery.find('> a');
        main_img.attr('rel', 'gal');
        var container = $('<div style="display:none"></div>').appendTo(gallery);
        var thumbs   = gallery.find('> ul > li > img');
        thumbs.each(function (index) {
            $('<a></a>')
                .attr('href', $(this).attr('alt'))
                .text(index)
                .appendTo(container);
        });
        var links  = container.find('> a');
        thumbs.click(function () {
            var src = $(this).attr('alt');
            main_img.attr('href', src);
            main_img.find('img').attr('src', src);
            return false;
        });
        main_img.click(function () {
            links.attr('rel', 'gal');
            // don't repeat the main image in the gallery
            links.filter("[href='" + main_img.attr('href')  + "']").attr('rel', '');
        });
    },
    // simple accordeon menu
    accordeonMenu : function () {
        var menu = $(this);
        $('> li > a:not(.active) ~ .sub', menu).hide();
        var items = $('> li > a', menu).click(function () {
            items.removeClass('active');
            $(this).addClass('active').siblings('.sub').slideDown('normal');
            items.not('.active').siblings('.sub').slideUp('normal');
        });
        return menu;
    },
    digitsOnly : function () {
        var $this = $(this);
        $this.keypress(function (e) {
            // allow digits only
            if (e.which!=8 && e.which!=0 && (e.which<48 || e.which>57)) {
                return false;
            }
        });
        return $this;
    },
    advForm : function (options) {
        // main settings
        var settings = $.extend({
            validate          : false,
            ajax              : false,
            sent_message      : 'please wait...',
            error_message     : 'your message was rejected',
            highlight         : false,
            highlight_message : 'please fill the fields in red',
            highlight_class   : 'required'
        }, options);

        if (!settings.validate && !settings.ajax) {
            return true;
        }

        var _form = $(this);

        // params to pass to the validation plugin
        var validation_settings = {
            errorClass   : 'error-message',
            errorElement : 'div',
            highlight    : false
        };

        if (settings.highlight === true) {
            delete validation_settings.highlight;
            validation_settings = $.extend(validation_settings, {
                showErrors : function (errors) {
                    for ( var i = 0; this.errorList[i]; i++ ) {
                        var error = this.errorList[i];
                        if (typeof this.settings.highlight == 'function') {
                            this.settings.highlight.call( this, error.element, settings.highlight_class );
                        }
                    }
                    for ( var i = 0, elements = this.validElements(); elements[i]; i++ ) {
                        this.settings.unhighlight.call( this, elements[i], settings.highlight_class );
                    }
                    if (_form.find('.' + settings.highlight_class).length > 0) {
                        _form.find('.form_status').text(settings.highlight_message);
                    } else {
                        _form.find('.form_status').text('');
                    }
                }
            });
        }

        $.metadata.setType('attr', 'validation');

        if (settings.validate && !settings.ajax) {
            _form.validate(validation_settings);
            return true;
        }

        if (settings.ajax) {
            var createMessage = function (text) {
                return '<div class=\"wait_message\">' + text + '</div>';
            }
            _form.ajaxForm({
                beforeSubmit : function () {
                    if (settings.validate && !_form.validate(validation_settings).form()) {
                        return false;
                    }
                    $.blockUI({ message : createMessage(settings.sent_message) });
                },
                success : function (data, status) {
                    setTimeout(function () {
                        $.unblockUI();
                        _form.resetForm();
                    },2000);
                }
            });

            _form.ajaxError(function () {
                $.blockUI({ message : createMessage(settings.error_message) });
                $.unblockUI({ fadeOut : 4000});
            });

            return true;
        }
    },
    loadCart : function () {
        var $this = $(this);
        $.ajaxSetup({cache: false}); // need this for damned ies
        $this.load('/cart/show', function () {
            $('#pr_amount', this).tooltip({
                bodyHandler: function () {
                    return $('#cart_items', $this).html();
                },
                showURL: false
            });
        });
    }
});

function browserCheck(locale) {
	var teststr = /MSIE 6\.0/;
	if(teststr.test(navigator.userAgent)) {
        $.nyroModalManual({
            url       : '/' + locale + '/pages/browser',
            endRemove : function() {
                browserCheck(locale);
            }
        });
	}
}

// custom validation rules and settings
if ($.validator) {

    $.validator.setDefaults({
        onkeyup      : false,
        highlight    : false,
        errorElement : 'div',
        errorClass   : 'error-message'
    });

}


$(document).ready(function () {
	var fancybox_selector = 'a.fancybox';

	if( $(fancybox_selector).length > 0 ) {
		$(fancybox_selector).fancybox({
			'transitionIn'	:	'elastic',
			'transitionOut'	:	'elastic',
			'speedIn'		:	600, 
			'speedOut'		:	200, 
			'easingIn'		:	'easeInExpo',
			'easingOut'		:	'easeOutExpo',
			'titleShow'		:	true,
			'titlePosition' :	'outside'
		});
	}


    $('#accordion').accordeonMenu();        

    $('#captcha_image').click(function () {
        var _this = $(this);
        var src = _this.attr('src').replace(/[^\/]+$/, Math.random());
        _this.attr('src', src);
    });

    $('#search_form').submit(function () {
        var criteria = $('#search_criteria').val();

        if (!criteria) {
            return false;
        }

        // append search criteria to uri
        var search_url = $(this).attr('action') + '/' + encodeURI(criteria);

        $(this).attr('action', search_url);

        return true;
    });

	jQuery('a.submitbtn').bind({
		mouseup: function() {
			$(this).parents('form:first').submit();
		}
	});    

    $('.gallery').bpGallery();

	$('.ref_thumb,.ref_gallery,.modules_gallery').click(function() {
		var images = $(this).attr('data-images').split(',');
		images.pop();
		for(i in images) {
			images[i] = 'http://' + document.location.host + images[i];
		}
		$.fancybox(images, {
			'transitionIn'		: 'elastic',
			'transitionOut'		: 'elastic',
			'type'              : 'image'
		});
		return false;
	});
    	
    $('.datepicker input').datepicker({
        dateFormat : 'dd-mm-yy'
    });
	
	$('#navigation #content > ul > li > a').filter(function(e){
		return $(this).parent('li').find('ul').length > 0;
	}).click(function(){
		$(this).parent('li').find('ul').slideToggle();
		return false;
	});
	
	$('#map_patershol > area').hover(function(){
		var koef = parseInt($(this).attr('id').replace('a',''))*-500;
		$('#mapdiv').css('background-position',koef+'px 0');
	}, function() {
		$('#mapdiv').css('background-position','0px 0px');
	});
	$('#map_meetingcenter > area').hover(function(){
		var koef = parseInt($(this).attr('id').replace('a',''))*-540;
		$('#mapdiv').css('background-position',koef+'px 0');
	}, function() {
		$('#mapdiv').css('background-position','0px 0px');
	});	
});


function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}
function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}
function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}


