var one = one || [];


(function(element_id) {
    
    var elements = document.getElementsByClassName(element_id);
    var position = getElementAbsolutePos(elements[0]);
    var index_id = position.x + '_' + position.y;
    for (i = 0; i < elements.length; i++){
        element = elements[i];
        position = getElementAbsolutePos(element);
        index_id = position.x + '_' + position.y;
        ind = element_id + '_' + index_id;
        if(!this.one[ind]){
            this.one[ind] = new _ms_pt_lu120202(element_id, ind, element);
            this.one[ind]._trackPageview();
        }
    }
})(_ms_getTracker);


function getElementAbsolutePos(element) {
    var res = new Object();
    res.x = 0;
    res.y = 0;
    if (element !== null) { 
        if (element.getBoundingClientRect) {
            var box = element.getBoundingClientRect()
            var body = document.body
            var docElem = document.documentElement
            var scrollTop = window.pageYOffset || docElem.scrollTop || body.scrollTop
            var scrollLeft = window.pageXOffset || docElem.scrollLeft || body.scrollLeft
            var clientTop = docElem.clientTop || body.clientTop || 0
            var clientLeft = docElem.clientLeft || body.clientLeft || 0
            res.y  = box.top +  scrollTop - clientTop
            res.x = box.left + scrollLeft - clientLeft
        } else {
            res.x = element.offsetLeft;
            res.y = element.offsetTop;
            var parentNode = element.parentNode;
            var borderWidth = null;
            while (offsetParent != null) {
                res.x += offsetParent.offsetLeft;
                res.y += offsetParent.offsetTop;
                var parentTagName = 
                    offsetParent.tagName.toLowerCase();
                if ((__isIEOld && parentTagName != "table") || 
                    ((__isFireFoxNew || __isChrome) && 
                        parentTagName == "td")) {		    
                    borderWidth = kGetBorderWidth
                        (offsetParent);
                    res.x += borderWidth.left;
                    res.y += borderWidth.top;
                }
                if (offsetParent != document.body && 
                    offsetParent != document.documentElement) {
                    res.x -= offsetParent.scrollLeft;
                    res.y -= offsetParent.scrollTop;
                }
                if (!__isIE && !__isOperaOld || __isIENew) {
                    while (offsetParent != parentNode && 
                            parentNode !== null) {
                        res.x -= parentNode.scrollLeft;
                        res.y -= parentNode.scrollTop;
                        if (__isFireFoxOld || __isWebKit){
                                borderWidth = 
                                kGetBorderWidth(parentNode);
                                res.x += borderWidth.left;
                                res.y += borderWidth.top;
                            }
                            parentNode = parentNode.parentNode;
                        }    
                }

                parentNode = offsetParent.parentNode;
                offsetParent = offsetParent.offsetParent;
            }
        }
    }
    return res;
}

function _ms_pt_lu120202(element_id, index_id_s, element_s){
    var element = element_s;
    var index_id = index_id_s;
    var self = this;
    var window_height;
    var window_width;
    var os;
    var mobile;
    var browser;
    var browser_version;
    var is_visible_element;
    var create_time = Math.round((new Date()).getTime() / 1000);
    var screen_height;
    var screen_width;
    var info_element;
    var row_id;
    var onclick_count = 0;
    var onMouseOver_count = 0;
    var frame = false;
    
    this._trackPageview = function(){
        if(window!=window.top){
            frame = true;
        //return false
        }
        init();
        //set_onload_hendler(init);
        set_onload_hendler(element_is_visible);
    }
    
    this.set_id = function(id){
        row_id = id;
    }
       
    function get_browser_os(){
        var BrowserDetect = {
            init: function () {
                this.browser = this.searchString(this.dataBrowser) || "";
                this.version = this.searchVersion(navigator.userAgent)
                || this.searchVersion(navigator.appVersion)
                || "";
                this.OS = this.searchString(this.dataOS) || "Other";
            },
            searchString: function (data) {
                for (var i=0;i<data.length;i++)	{
                    var dataString = data[i].string;
                    var dataProp = data[i].prop;
                    this.versionSearchString = data[i].versionSearch || data[i].identity;
                    if (dataString) {
                        if (dataString.indexOf(data[i].subString) != -1)
                            return data[i].identity;
                    }
                    else if (dataProp)
                        return data[i].identity;
                }
            },
            searchVersion: function (dataString) {
                var index = dataString.indexOf(this.versionSearchString);
                if (index == -1) return;
                return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
            },
            dataBrowser: [
            {
                string: navigator.userAgent,
                subString: "Chrome",
                identity: "Chrome"
            },
            {
                string: navigator.userAgent,
                subString: "OmniWeb",
                versionSearch: "OmniWeb/",
                identity: "OmniWeb"
            },
            {
                string: navigator.vendor,
                subString: "Apple",
                identity: "Safari",
                versionSearch: "Version"
            },
            {
                prop: window.opera,
                identity: "Opera",
                versionSearch: "Version"
            },
            {
                string: navigator.vendor,
                subString: "iCab",
                identity: "iCab"
            },
            {
                string: navigator.vendor,
                subString: "KDE",
                identity: "Konqueror"
            },
            {
                string: navigator.userAgent,
                subString: "Firefox",
                identity: "Firefox"
            },
            {
                string: navigator.vendor,
                subString: "Camino",
                identity: "Camino"
            },
            {		// for newer Netscapes (6+)
                string: navigator.userAgent,
                subString: "Netscape",
                identity: "Netscape"
            },
            {
                string: navigator.userAgent,
                subString: "MSIE",
                identity: "Explorer",
                versionSearch: "MSIE"
            },
            {
                string: navigator.userAgent,
                subString: "Gecko",
                identity: "Mozilla",
                versionSearch: "rv"
            },
            { 		// for older Netscapes (4-)
                string: navigator.userAgent,
                subString: "Mozilla",
                identity: "Netscape",
                versionSearch: "Mozilla"
            }
            ],
            dataOS : [
            {
                string: navigator.platform,
                subString: "Win",
                identity: "Windows"
            },
            {
                string: navigator.platform,
                subString: "Mac",
                identity: "Mac"
            },
            {
                string: navigator.userAgent,
                subString: "iPhone",
                identity: "iPhone/iPod"
            },
            {
                string: navigator.platform,
                subString: "iPad",
                identity: "iPad"
            },
            {
                string: navigator.userAgent,
                subString: "Android",
                identity: "Android"
            },
            {
                string: navigator.platform,
                subString: "Android",
                identity: "Android"
            },
            {
                string: navigator.platform,
                subString: "BlackBerry",
                identity: "BlackBerry"
            },
            {
                string: navigator.platform,
                subString: "Linux",
                identity: "Linux"
            }
            ]

        };
        BrowserDetect.init();
        os = BrowserDetect.OS;
        browser = BrowserDetect.browser;
        browser_version = BrowserDetect.version;
    }
    
    
    function is_mobile(){
        var a = navigator.userAgent||navigator.vendor||window.opera;
        if(/android.+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|e\-|e\/|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(di|rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|xda(\-|2|g)|yas\-|your|zeto|zte\-/i.test(a.substr(0,4))){
            mobile = 1;
        }else {
            mobile = 0;
        }
    }
    function get_window_size(){
        if (document.body && document.body.offsetWidth) {
            window_width = document.body.offsetWidth;
            window_height = document.body.offsetHeight;
        }
        if (document.compatMode=='CSS1Compat' &&
            document.documentElement &&
            document.documentElement.offsetWidth ) {
            window_width = document.documentElement.offsetWidth;
            window_height = document.documentElement.offsetHeight;
        }
        if (window.innerWidth && window.innerHeight) {
            window_width = window.innerWidth;
            window_height = window.innerHeight;
        }
        screen_height = screen.height;
        screen_width = screen.width;
    }
    
    
    function element_is_visible(){
        //var element = document.getElementById(element_id);
        if(!element){
            is_visible_element = 0;
            return false;
        }
        if(!element.offsetHeight || !element.offsetWidth){
            is_visible_element = 0;
            return false;
        }
        var position = getElementAbsolutePos(element);
        // var window_position = getScrollXY();////the end // 0 - x, 1 - y
        var window_position = [0,0];
        var max = {
            x:window_position[0]+window_width,
            y:window_position[1]+window_height
        };
        if(position.x >= window_position[0] && position.x <= max.x 
            && position.y >= window_position[1] && position.y <= max.y){
            
            is_visible_element = 1;
        } else {
            window.setInterval("search();", 500);
            is_visible_element = 0;
        }
    }
    
    function search(element_search) {
        //var oElm = document.getElementById(element_id)
        var a = findXY(oElm);
        var b = findScroll();
        var c = findSize();
        if ((a.y + a.h) < b.top || (a.x + a.w) < b.left || a.y > (b.top + c.height) || a.x > (b.left + c.width)) { 
            is_visible_element = 0;
        } else { 
            is_visible_element = 2;
        }
    }
    
    function findScroll () {
        return { top: self.pageYOffset || (document.documentElement && document.documentElement.scrollTop) || (document.body && document.body.scrollTop),
                 left: self.pageXOffset || (document.documentElement && document.documentElement.scrollLeft) || (document.body && document.body.scrollLeft) };
    }
    
    
    function findSize () {
        return {width: window.innerWidth?window.innerWidth:((document.all)?document.body.offsetWidth:null),
                height: window.innerHeight?window.innerHeight:((document.all)?document.body.offsetHeight:null)};
    }
    
    
    function findXY (oElm) {
        var x = 0; var y = 0; var w = oElm.offsetWidth; var h = oElm.offsetHeight;
        while (oElm) {
                x += oElm.offsetLeft;
                y += oElm.offsetTop;
                oElm = oElm.offsetParent;
        }
        return {x:x, y:y, w:w, h:h };
    }
    
    
    function __getIEVersion() {
        var rv = -1; // Return value assumes failure.
        if (navigator.appName == 'Microsoft Internet Explorer') {
            var ua = navigator.userAgent;
            var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
            if (re.exec(ua) != null)
                rv = parseFloat(RegExp.$1);
        }
        return rv;
    }

    function __getOperaVersion() {
        var rv = 0; // Default value
        if (window.opera) {
            var sver = window.opera.version();
            rv = parseFloat(sver);
        }
        return rv;
    }

    var __userAgent = navigator.userAgent;
    var __isIE =  navigator.appVersion.match(/MSIE/) != null;
    var __IEVersion = __getIEVersion();
    var __isIENew = __isIE && __IEVersion >= 8;
    var __isIEOld = __isIE && !__isIENew;

    var __isFireFox = __userAgent.match(/firefox/i) != null;
    var __isFireFoxOld = __isFireFox && ((__userAgent.match(/firefox\/2./i) != null) || 
        (__userAgent.match(/firefox\/1./i) != null));
    var __isFireFoxNew = __isFireFox && !__isFireFoxOld;

    var __isWebKit =  navigator.appVersion.match(/WebKit/) != null;
    var __isChrome =  navigator.appVersion.match(/Chrome/) != null;
    var __isOpera =  window.opera != null;
    var __operaVersion = __getOperaVersion();
    var __isOperaOld = __isOpera && (__operaVersion < 10);

    function __parseBorderWidth(width) {
        var res = 0;
        if (typeof(width) == "string" && width != null && width != "" ) {
            var p = width.indexOf("px");
            if (p >= 0) {
                res = parseInt(width.substring(0, p));
            }
            else {
                //do not know how to calculate other values 
                //(such as 0.5em or 0.1cm) correctly now
                //so just set the width to 1 pixel
                res = 1; 
            }
        }
        return res;
    }

    //returns border width for some element
    function __getBorderWidth(element) {
        var res = new Object();
        res.left = 0;
        res.top = 0;
        res.right = 0;
        res.bottom = 0;
        if (window.getComputedStyle) {
            //for Firefox
            var elStyle = window.getComputedStyle(element, null);
            res.left = parseInt(elStyle.borderLeftWidth.slice(0, -2));  
            res.top = parseInt(elStyle.borderTopWidth.slice(0, -2));  
            res.right = parseInt(elStyle.borderRightWidth.slice(0, -2));  
            res.bottom = parseInt(elStyle.borderBottomWidth.slice(0, -2));  
        }
        else {
            //for other browsers
            res.left = __parseBorderWidth(element.style.borderLeftWidth);
            res.top = __parseBorderWidth(element.style.borderTopWidth);
            res.right = __parseBorderWidth(element.style.borderRightWidth);
            res.bottom = __parseBorderWidth(element.style.borderBottomWidth);
        }

        return res;
    }

    
    
    
    function getScrollXY() {
        var scrOfX = 0, scrOfY = 0;
        if( typeof( window.pageYOffset ) == 'number' ) {
            //Netscape compliant
            scrOfY = window.pageYOffset;
            scrOfX = window.pageXOffset;
        } else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
            //DOM compliant
            scrOfY = document.body.scrollTop;
            scrOfX = document.body.scrollLeft;
        } else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
            //IE6 standards compliant mode
            scrOfY = document.documentElement.scrollTop;
            scrOfX = document.documentElement.scrollLeft;
        }
        return [ scrOfX, scrOfY ];
    }
                        
    function getXmlHttp(){
        var xmlhttp;
        try {
            xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
                xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (E) {
                xmlhttp = false;
            }
        }
        if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
            xmlhttp = new XMLHttpRequest();
        }
        return xmlhttp;
    }             
    function load_info(url)
    {
        var body = document.getElementsByTagName('body')[0];
        include(url);
        var pic = document.createElement('img');
        pic.style.width = '1px';
        pic.style.height = '1px'; 
        pic.style.top = '0px';
        pic.style.left = '0px'; 
        pic.style.position = 'fixed';
        pic.src = url;
        body.appendChild(pic);
        try {
            var xmlhttp = getXmlHttp();       
            xmlhttp.open('GET', url, false);
            xmlhttp.send(null);
        }catch (e) {

        }

    }

    function include(src, callback)
    {
        var head = document.getElementsByTagName('head')[0];
        var script = document.createElement('script');
        script.type = 'text/javascript';

        if(callback)
        {
            var userAgent = navigator.userAgent.toLowerCase();

            if(/msie/.test( userAgent ) && !/opera/.test( userAgent ))
            {
                script.onreadystatechange = function()
                {
                    if(script.readyState == 'complete' || script.readyState == 'loaded')
                        callback();
                }
            }
            else
            {
                script.onload = function ()
                {
                    callback();
                }
            }
        }
        script.src = src;
        head.appendChild(script);
        return script;
    }

    
    
    function set_onload_hendler(callback){
        if (/loaded|complete/.test(document.readyState)) {
            callback();
        } else {
            //ff / opera ...
            if (document.addEventListener) {
                document.addEventListener("DOMContentLoaded", callback, false);
            } else if (/WebKit/i.test(navigator.userAgent)) { //  Safari
                var _timer = setInterval(function() {
                    if (/loaded|complete/.test(document.readyState)) {
                        clearInterval(_timer);
                        callback();
                    }
                }, 10);
            } else {
                // ie
                /*@cc_on @*/
                /*@if (@_win32)
                        document.write("<script id=\"__ie_onload\" defer=\"defer\" src=\"javascript:void(0)\"><\/script>");
                        var script = document.getElementById("__ie_onload");
                if(script){
                                        script.onreadystatechange = function() {
                                if (this.readyState == "complete") {
                                callback(); 
                                }
                }

                        };
                      /*@else @*/
                window.onload = callback;
            /*@end @*/
            }


        }
    }
    
    function set_before_unload(){
        if(os == 'iPhone/iPod'){
            window.onunload = unload_event;
        } else {
            var type = "beforeunload";
            if (window.addEventListener){
                window.addEventListener(type, unload_event, false);
            }else if (window.attachEvent){
                window.attachEvent("on" + type, unload_event);
            }
        }
    }
    
    function load_event(){ 
        if(window!=window.top){
            frame = true;
        //return false
        }
        var from = document.URL;
        if(frame){
            from = document.referrer+'(iframe)'
        }
        var url = "http://metricscience.com/pagetracker"+
        '?r='+Math.random() + 
        '&element=' + element_id +
        '&browser=' + encodeURIComponent(browser) +
        '&browserver=' +  encodeURIComponent(browser_version) +
        '&mobile=' + mobile +
        '&from=' + encodeURIComponent( from ) +
        '&os=' + encodeURIComponent(os) + 
        '&sw=' + screen_width +
        '&sh=' + screen_height +
        '&index_id=' + index_id +
        '&visible=' + 0 +
        '&ua=' + encodeURIComponent( navigator.userAgent ) + 
        '&platform=' + encodeURIComponent( navigator.platform ) +
        '&active=' + 1;
        info_element = include(url,jsonp_call);
    }
    
    function unload_event(){ 
        // if(window!=window.top || !row_id){
        if(!row_id){
            return false
        }
        
        var now_time = Math.round((new Date()).getTime() / 1000);
        var script_work_time = now_time - create_time;
        if(script_work_time < 0 || isNaN(script_work_time)){
            script_work_time = 1;
        }
        //element_is_visible();

        var url = "http://metricscience.com/pagetracker"+
        '?r='+now_time + 
        '&has=' + row_id +
        '&active=' + script_work_time +
        '&visible=' + is_visible_element +
        '&onclick_count=' + onclick_count +
        '&onMouseOver_count=' + onMouseOver_count;
        load_info(url);
    }
    
    function jsonp_call(){
        //if(!pagetracker_new_row_id) {
        //    return false;
        //}
        //row_id = pagetracker_new_row_id;
        
        set_before_unload();
    }
    function init(){
        if(window!=window.top){
            frame = true;
        //return false
        }
        get_browser_os();
        is_mobile();
        get_window_size();
        load_event();
        element.onclick = function(){onclick_count = 1; };
        element.onmouseover = function(){onMouseOver_count = 1; };
    }
        
        
}
