// JavaScript Document
$.fn.preloader = function (options) {

    var defaults = {
        delay: 200,
        preload_parent: "a",
        check_timer: 300,
        ondone: function () { },
        oneachload: function (image) { },
        fadein: 500
    };

    // variables declaration and precaching images and parent container
    var options = $.extend(defaults, options),
	 root = $(this), images = root.find("img").css({ "visibility": "hidden", opacity: 0 }), timer, counter = 0, i = 0, checkFlag = [], delaySum = options.delay,

	 init = function () {

	     timer = setInterval(function () {

	         if (counter >= checkFlag.length) {
	             clearInterval(timer);
	             options.ondone();
	             return;
	         }

	         for (i = 0; i < images.length; i++) {
	             if (images[i].complete == true) {
	                 if (checkFlag[i] == false) {
	                     checkFlag[i] = true;
	                     options.oneachload(images[i]);
	                     counter++;

	                     delaySum = delaySum + options.delay;
	                 }

	                 $(images[i]).css("visibility", "visible").delay(delaySum).animate({ opacity: 1 }, options.fadein,
					function () { $(this).parent().removeClass("preloader"); });




	             }
	         }

	     }, options.check_timer)


	 };

    images.each(function () {

        if ($(this).parent(options.preload_parent).length == 0)
            $(this).wrap("<" + options.preload_parent + " class='preloader' />");
        else
            $(this).parent().addClass("preloader");

        checkFlag[i++] = false;


    });
    images = $.makeArray(images);


    var icon = jQuery("<img />", {

        id: 'loadingicon',
        src: 'css/i/89.gif'

    }).hide().appendTo("body");



    timer = setInterval(function () {

        if (icon[0].complete == true) {
            clearInterval(timer);
            init();
            icon.remove();
            return;
        }

    }, 100);

}
