﻿///<reference path="../scripts/jquery-1.4.1-vsdoc.js" />
///<reference path="../scripts/json2.js" />

String.prototype.toInt = function() { var val = parseInt(this.toString(), 10); return isNaN(val) ? 0 : val; };
String.prototype.toIntFilter = function() { var str = this.toString(); var val = 0; for (var i = 0; i < str.length; i++) { var chr = str[i]; if (chr >= '0' && chr <= '9') { val *= 10; val += chr - '0'; } } return val; };
String.prototype.contains = function(str, start) { if (!start) { start = 0; } return this.toString().indexOf(str, start) > -1; };
String.prototype.trim = function(chrs) {
    if (!chrs) { chrs = ' \t'; }
    var i, str = this;
    for (i = 0; i < str.length; i++) {if (!chrs.contains(str[i])) { break; }}
    if (i > 0) { str = str.substr(i); }
    for (i = str.length - 1; i >= 0; i--) {if (!chrs.contains(str[i])) { break; }}
    if (i < str.length - 1) { str = str.substr(0, i + 1); }
    return str;
};

(function($) {
    $.WSget = function(url, data, callback, dtype) {
        ///	<summary>
        ///		Ajax 'GET' request to the web service
        ///     Data serialized as querystring
        ///	</summary>
        ///	<returns type="xhr" />
        ///	<param name="url" type="String">
        ///		The url to web service
        ///	</param>
        ///	<param name="data" type="Object">
        ///		The object to serialize
        ///	</param>
        ///	<param name="callback" type="Function">
        ///		Callback function
        ///	</param>
        ///	<param name="dtype" type="Object">
        ///		Data type for response 'xml', 'json', 'html'
        ///	</param>
        return $.WSajax(url, "GET", data, callback, dtype);
    };

    $.WSpost = function(url, data, callback, dtype) {
        ///	<summary>
        ///		Ajax 'POST' request to the web service
        ///     Data serialized as JSON string
        ///	</summary>
        ///	<returns type="xhr" />
        ///	<param name="url" type="String">
        ///		The url to web service
        ///	</param>
        ///	<param name="data" type="Object">
        ///		The object to serialize
        ///	</param>
        ///	<param name="callback" type="Function">
        ///		Callback function
        ///	</param>
        ///	<param name="dtype" type="Object">
        ///		Data type for response 'xml', 'json', 'html'
        ///	</param>
        return $.WSajax(url, "POST", data, callback, dtype);
    };

    $.WSajax = function(url, type, data, callback, dtype) {
        if ($.isFunction(data)) {
            callback = data;
            data = null;
        }
        var jxset = $.extend({
            type: type,
            contentType: "application/json; charset=utf-8",
            url: url,
            dataType: dtype || "json"
        }, callback ? ($.isFunction(callback) ? { success: callback} : callback) : {});

        if (type == "GET") {
            jxset.beforeSend = function(xhr, s) { xhr.setRequestHeader("Content-Type", s.contentType); return true; };
            jxset.data = data;
        } else {
            jxset.data = JSON.stringify(data);
        }
        return $.ajax(jxset);
    };
})(jQuery);

(function($) {
    $.fn.scrollTo = function(speed) {
        var obj = $(this);
        if (!obj.length) { return this; }

        $('html, body').animate({
            scrollTop: $(obj[0]).offset().top
        }, speed || 700);

        return this;
    };
    $.fn.scrollpages = function() {
        var pr = $(this).css({ position: "relative", overflow: "hidden" });
        var prw = pr.width();
        var ch = pr.children(":first-child").css("position", "relative");
        var chw = ch.width();
        if (chw <= prw) { return this; }

        var arwl = $("<div class='scrl scLeft'/>").appendTo(pr);
        var arwr = $("<div class='scrl scRight'/>").appendTo(pr);

        var loffset = ch.offset().left;

        var scrl = function(prfx) {
            var to = loffset - ch.offset().left + (prw * prfx);
            if (to < 0) { to = 0; }
            if (to > chw - prw) { to = chw - prw; }
            ch.animate({ left: -to }, 1000);
            return to;
        };
        $(arwl).css("visibility", "hidden").click(function() {
            var to = scrl(-1);
            if (to <= 0) { $(this).css("visibility", "hidden"); }
            $(arwr).css("visibility", "visible");
        });
        $(arwr).css("visibility", "visible").click(function() {
            var to = scrl(1);
            if (to + prw + 1 >= chw) { $(this).css("visibility", "hidden"); }
            $(arwl).css("visibility", "visible");
        });
        return this;
    };
    $.fn.cloneTo = function(hld, lim, t) {
        var srco = $(this);
        if (srco.length === 0) { return; }
        var hlo = $(hld);
        var cnt = ($(hlo.length === 0 ? hlo : srco[srco.length - 1]).attr("cnt") + "").toInt();
        if (lim && lim <= cnt) { return $(); }

        var retArr = [];
        srco.each(function(i, e) {
            var eClone = $(e).clone(true).attr("id", "").val('');
            if (hld && hlo.length) {
                hlo.append(eClone);
            } else {
                $(e).after(eClone);
            }
            retArr.push(eClone);
        });
        $(srco[srco.length - 1]).attr("cnt", ++cnt);
        if (lim && lim <= cnt) { $(t).hide(); }
        return $(retArr);
    };
})(jQuery);
var watermark = (function($) {
    var elArray = [];
    $.fn.watermark = function(opt) {
        if (typeof opt === 'string') { opt = { text: opt }; }
        opt = $.extend({}, $$.globcfg, opt);
        
        var form = $(this).parents("form");
        if (!form.attr("wtrmark")) {
            form.submit(function() { $$.clear(); }).attr("wtrmark", "set");
        }
        elArray.push({ obj: this, opt: opt });

        $(this).each(function(i, el) {
            el = $(el);

            if (!el.val() || el.val() === opt.text) {
                el.addClass(opt.css).val(opt.text);
            }
            el.focus(function() {
                if ($(this).removeClass(opt.css).val() === opt.text) {
                    $(this).val("");
                }
            }).blur(function() {
                if (!$(this).val()) {
                    $(this).addClass(opt.css).val(opt.text);
                }
            });
        });
        return this;
    };
    var $$ = $.fn.watermark;
    $$.clear = function() {
        if (elArray !== null) {
            $.each(elArray, function(i, o) {
                $(o.obj).each(function(i, el) {
                    el = $(el);
                    if (el.hasClass(o.opt.css) || el.val() === o.opt.text) {
                        el.val("");
                    }
                });
            });
        }
    };

    $$.globcfg = { css: "wtrMark", text: "Enter here..." };

    return $$;
})(jQuery);
