/**
 * بسم الله الرحمن الر حيم
 *صلى الله على سيدنا محمد عليه افضل الصلاة والتسليم
 *مكتبة  BK للجافا سكربت
 * تقوم المكتبة على بناء oop
 * للتعامل مع عناصر الهوتمل
 * تاريخ البدء  بالبرمجة 30/2/1430
 * قام بالتطوير المكتبة
 * عبد الكافي الحسن
 * بشيير الحسن
 * www.dwal.biz
 * almhajer@hotmail.com
 * php0@hotmail.com
 * والله ولي التوفيق
 **/
(function() {

    var BK = window.BK = window.$ = function(selector) {
        return new BK.prototype.init(selector);
    };
    BK.prototype = {
        // متغير الذي سيحمل المقابض
        selector: [],
        // تهيئة العنصر
        init: function(selector) {
            if (typeof selector == 'string') {
              	Array.prototype.push.call(this.selector, document.getElementById(selector));
              	
            } else
                if (typeof selector == 'object') {
                    for (var k in selector) {
                        Array.prototype.push.call(this.selector, document.getElementById(selector[k]));
                    }
                }
            return this;
        },
        //الحصول على قيمة صفة
        attr: function($attr, $v) {
            this[$attr] = $v;
            return this;

        },
        setStyle: function($t, $v) {
            this.style[$t] = $v;
            return this;
        },
        //الحصول على قيمة العنصر
        val: function($v) {
            this.attr.call(this.selector, 'value', $v);
            return this;
        },
        //تنفبذ امر على كافة المصفوفة
        each: function(fun) {
            for (var i = 0, len = this.length; i < len; ++i) {
                fun.apply(this[i], Array.prototype.slice.call(arguments, 1));
            }

            return this;
        },

        //  اضافة حدث لعنصر
        addEvent:function(ele, type, fun) {

            if (ele.addEventListener) {
                ele.addEventListener(type, fun, false);
            }
            else if (ele.attachEvent) {
                ele.attachEvent("on" + type, fun);
            }
            else {
                ele['on' + type] = fun;
            }
        },


        //ازالة الحدث

        removeEvent:function (evt, fn) {
            if (this.removeEventListener) {
                this.removeEventListener(evt, fn, false);
            }
            else if (this.detachEvent) {
                this.detachEvent('on' + evt, fn);
            }
        },

        // ازالة الحدث على ابناء او فروع النعصر

        stopEventChild:function(event) {
            event = event || window.event;
            if (event.stopPropagation) {
                event.stopPropagation();
            } else if (event.cancelBubble) {
                event.cancelBubble = true;
            } else if (event.returnValue) {
                event.returnValue = false;
            }
        },


        // الحصول على المعرف
        id:function($id) {
            return (typeof $id == 'string') ? document.getElementById($id) : $id;
        },

        // الحصول على الوسوم الاخرى
        $_tag:function ($tag) {
            return document.getElementsByTagName($tag);
        },
        /**
         * تقوم هذه الدالة بمعرفة نوع  البارمتر المضاف اليها
         * @param {Object} how تاخذ بارمتر لها وهو الكائن اما نص او دالة وغيرها
         * مثال  slid.is(/[0-9]+/);  وتعيد Regexp
         * @return String|Object|Function|RegExp|Function|Init|Boolean|Float|....
         */
        is: function(how) {
            return how.constructor.toString().split(/\s+/)[1].replace('()', '');
        },
        /*
         * جمع المتغيرات  في مصفوفة
         *
         */
        makeArray:function() {
            return (function($e) {
                var A = [];
                for (var i = 0; i < $e.length; i++) {
                    A.push($e[i]);
                }
                return A;
            })(arguments);
        },
        //#--------------قسم تطبيق الدوال-------------
        /**
         * اخفاء العنصر
         * @return this
         */
        hide: function() {
            this.each.apply(this.selector, [BK.prototype.setStyle, 'display', 'none']);
            return this;
        },

        /**
         *عرض العنصر
         * @rerurn this
         */
        show: function() {
            this.each.apply(this.selector, [BK.prototype.setStyle, 'display', '']);
            return this;
        },


        /**
         *   موضع الكائن الافقي
         * @param $e     مقبض العنصر
         * @return int   الموقع الافقي
         */
        offsetleft:function ($e) {
            return $e.offsetParent ?
                   $e.offsetLeft + arguments.callee($e.offsetParent) :
                   $e.offsetLeft;
        },
        /**
         * الموضع العامودي
         * @param $e  مقبض العنصر
         * @return int موقع الكائن العامودي
         */
        offsetTop:function ($e) {
            return $e.offsetParent ?
                   $e.offsetTop + arguments.callee($e.offsetParent) :
                   $e.offsetTop;
        },
        /**
         * الحصول على التنسيق من العنصر
         * @param elem  الكائن
         * @param name     اسم الخاصية المراد جلبها
         * @return style att
         */
        getStyle: function (elem, name) {
            if (elem.style[name])
                return elem.style[name];

            else if (elem.currentStyle)
                return elem.currentStyle[name];

            else if (document.defaultView && document.defaultView.getComputedStyle) {

                    name = name.replace(/([A-Z])/g, "-$1");
                    name = name.toLowerCase();
                    var s = document.defaultView.getComputedStyle(elem, "");
                    return s && s.getPropertyValue(name);
                } else
                    return null;
        },

        /**
         * اعطاء الشفافية للكائن
         * @param elem
         * @param level
         */
        setOpacity:function (level) {

            if (this.filters)
                this['style'].filters = 'alpha(opacity=' + level + ')';
            else
                this['style'].opacity = level / 100;
            return this;
        }




    };//END prrototpe

    BK.prototype.init.prototype = BK.prototype;


})();

