//NOTE: All the utility functions are dependent from jQuery!

function newWindow(url) {
    window.open(url);
    return false;
}

jQuery.preloadImages = function() {
  for(var i = 0; i<arguments.length; i++) {
    jQuery("<img>").attr("src", arguments[i]);
  }
};

function reloadImg(id) {
	var obj = document.getElementById(id);
	var src = obj.src;
	var pos = src.indexOf('?');
	if (pos >= 0) {
		src = src.substr(0, pos);
	}
	var date = new Date();
	obj.src = src + '?v=' + date.getTime();
	return false;
}

function updateFrameSize(from, to) {
     //calculate width and height as they change with error messages
    var frame = $(from);
    var width = frame.width();
    var paddingLeft = frame.css('paddingLeft');
    if (paddingLeft.search('px')) {
        paddingLeft = paddingLeft.substr(0, paddingLeft.length-2);
        width += parseInt(paddingLeft);
    }
    var paddingRight = frame.css('paddingRight');
    if (paddingRight.search('px')) {
        paddingRight = paddingRight.substr(0, paddingRight.length-2);
        width += parseInt(paddingRight);
    }
    var height = frame.height();
    var paddingTop = frame.css('paddingTop');
    if (paddingTop.search('px')) {
        paddingTop = paddingTop.substr(0, paddingTop.length-2);
        height += parseInt(paddingTop);
    }
    var paddingBottom = frame.css('paddingBottom');
    if (paddingBottom.search('px')) {
        paddingBottom = paddingBottom.substr(0, paddingBottom.length-2);
        height += parseInt(paddingBottom);
    }
    $(to).attr({width: width, height: height});
}

$(document).ready(function() {
//    //adding the event listerner for Mozilla
//    if(window.addEventListener) document.addEventListener('DOMMouseScroll', wheel, false);
    //for IE/OPERA etc
    var IE6 = false /*@cc_on || @_jscript_version <= 5.7 @*/;
    if (IE6) {
        document.onmousewheel = wheel;
    }

});


function wheel(event){
        var delta = 0;
        if (!event) event = window.event;
        if (event.wheelDelta) {

                delta = event.wheelDelta/120;
                if (window.opera) delta = -delta;
        }
        //not needed for ie6
        else if (event.detail) {
            alert('Z');
                delta = -event.detail/3;
        }

    var scrollTop = document.getElementsByTagName("html")[0].scrollTop;
    if (delta < 0) {
        //calculating the current screen parameters
        var dimentions = getScreenSize();
        var dimHeight = dimentions.height;

        //calculating document's end (ignores the dialogs)
        var bottom = $('#site-info');
        var bottomPos = bottom.attr('offsetTop');
        var documentHeight = bottomPos + bottom.height() + 45; //45 px is a constant to scroll down

        var currentHeight = dimHeight + scrollTop;
        if (currentHeight >= documentHeight) {
            $.scrollTo(documentHeight - dimHeight, 0);
        } else {
            $.scrollTo(scrollTop + 120, 0);
        }
        return false;
    } else if (delta > 0) {
        $.scrollTo(scrollTop - 120, 0);
    }
    return false;
}

/*
 Tries to log the messages string to debug bar
 */
function log(str) {
    debug_log&&debug_log(str);
}

function logMs(str) {
    if (debug_log) {
        var d = new Date();
        debug_log(str + ' at ' + d.getSeconds()+":"+d.getMilliseconds());
    }
}

function getScreenSize() {
    var dimensions = {width: 0, height: 0};
    if (document.documentElement) {
        dimensions.width = document.documentElement.offsetWidth;
        dimensions.height = document.documentElement.offsetHeight;
    } else if (window.innerWidth && window.innerHeight) {
        dimensions.width = window.innerWidth;
        dimensions.height = window.innerHeight;
    }
    return dimensions;
}

function newClass(parent, prop) {
    // Dynamically create class constructor.
    var clazz = function() {
        // Stupid JS need exactly one "operator new" calling for parent
        // constructor just after class definition.
        if (clazz.preparing) return delete(clazz.preparing);
        // Call custom constructor.
        if (clazz.constr) {
            this.constructor = clazz; // we need it!
            clazz.constr.apply(this, arguments);
        }
    };
    clazz.prototype = {}; // no prototype by default
    if (parent) {
        parent.preparing = true;
        clazz.prototype = new parent;
        clazz.prototype.constructor = parent;
        clazz.constr = parent; // BY DEFAULT - parent constructor
    }
    if (prop) {
        var cname = "constructor";
        for (var k in prop) {
            if (k != cname) clazz.prototype[k] = prop[k];
        }
        if (prop[cname] && prop[cname] != Object)
            clazz.constr = prop[cname];
    }
    return clazz;
}

function enableLoadingBlock(block) {
    if (block) {
        $('#loading-pane').css('display', 'block');
    } else {
        $('#loading-pane').css('display', 'none');
    }
}

function countSymbolsLeftForTextArea(maxLength, textAreaSelector, symbolCounterSelector) {
    var inputArea = $(textAreaSelector);
    var inputSize = parseInt(inputArea.val().length);
    var left = maxLength - inputSize;
    if (left < 0) {
        left = 0;
        inputArea.addClass("wrong-field");
    } else {
        inputArea.removeClass("wrong-field");
    }
    var counterObj = $(symbolCounterSelector);
    counterObj.html(left.toString());

    if (left < 10) {
        counterObj.addClass("textarea-counter-alert");
    } else {
        counterObj.removeClass("textarea-counter-alert");
    }
}

function hideOtherDialogs(dialog) {
        // all other dialogs except "rate-popup" should be hidden before open this
    $(".dialog-window-dev").not(dialog).hide();
    $(this).find(".dialog-draggable").css({left:'',top:''});
}

/**
 * Returns a string of numbers from the current string.
 * So from 'ab234dc!e2We3sd' it should extract '23423'
 * @param st string with numbers
 */
function retrieveNumbersFromString(st) {
    if (st) {
        return st.match(/\d+/g).join('');
    }
    return st;
}
