﻿// NW Utilities
// Author(s): Nehal Shah, Paul Waldschmidt, Michael Trythall, David Johnson
// Version: 1.0
// Created: 9/11/2007
// Updated: 10/9/2007




function getPointerX(e)
{  
	return ((e != null) ? e.pageX : getMouseX(window.event));
}

function getPointerY(e)
{  
	return ((e != null) ? e.pageY : getMouseY(window.event));
}

function move(el, left, top)
{
	// Moves an element vertically and horizontally
	el.style.top =  top + "px";
	el.style.left = left + "px"; 
}

// returns left position of an element w/o offset
function getRealLeft(div)
{
	thisObj = div;
	xPos = getRealLeftByObj(div);
	return xPos;
}

// returns top position of an element w/o offset
function getRealTop(div)
{
	thisObj = div;
	yPos = getRealTopByObj(div);
	return yPos;
}

// returns true top position of an element
function getRealTopByObj(thisObj)
{
	yPos = 0;
	if(thisObj)
	{
		yPos = thisObj.offsetTop;
		tempEl = thisObj.offsetParent;
		while(tempEl != null)
		{
			yPos += tempEl.offsetTop;
			tempEl = tempEl.offsetParent;
		}
	}
	return yPos;
}

// returns true left position of an element
function getRealLeftByObj(thisObj)
{
	xPos = 0;
	if(thisObj)
	{
		xPos = thisObj.offsetLeft;
		tempEl = thisObj.offsetParent;
		while(tempEl != null)
		{
			xPos += tempEl.offsetLeft;
			tempEl = tempEl.offsetParent;
		}
	}
	return xPos;
}

// Returns mouse Y Position 
function getMouseY(e)
{
    if(e == null){e = event};
	
	return e.clientY + document.documentElement.scrollTop; // true yPos mouse event, exclusive to ie
}

// Returns mouse X Position
function getMouseX(e)
{
    if(e == null){e = event};
    
	return e.clientX + document.documentElement.scrollLeft; // true xPos mouse event, exclusive to ie
}

// Returns scroll top
function getScrollTop() 
{
	if (document.documentElement && document.documentElement.scrollTop)
	{
		return document.documentElement.scrollTop;
	}
	else if (document.body)
	{
		return document.body.scrollTop;
	}
	else if (window.pageYOffset)
	{
		return window.pageYOffset;
	}
	return 0;
}

// Returns the coordinates of and element
function GetEventXY(e) {
    var x, y;

    if (document.all)
    {
        x = event.clientX + document.body.scrollLeft;
        y = event.clientY + document.body.scrollTop;
    }
    else
    {
        x = e.pageX;
        y = e.pageY;
    }

    if (x < 0){
        x = 0;
    }

    if (y < 0){
        y = 0;
    }

    return [x, y];
}

//Returns the true offset position of an element
function GetPos(Obj) {
	var curleft = curtop = 0;

	if (Obj.offsetParent)
	{
		curleft = Obj.offsetLeft;
		curtop = Obj.offsetTop;

		while (Obj == Obj.offsetParent)
		{
			curleft += Obj.offsetLeft;
			curtop += Obj.offsetTop;
		}
	}

	return [curleft, curtop];
}

function evalScripts(html)
{
	var re = /<script.*?>([\s\S]*?)<\//igm;
	var match;
	while (match = re.exec(html)) {
		eval(match[1]);
	}
}






var Newsweek = window.Newsweek || {};

Newsweek.namespace = function(ns)
{
  if(!ns || !ns.length)
  {
      return null;
  }

  var nw_2 = ns.split(".");
  var nw_3 = Newsweek;

   for(var i=(nw_2[0]=="Newsweek")?1:0;i<nw_2.length;++i)
   {
       nw_3[nw_2[i]] = nw_3[nw_2[i]] || {};
       nw_3 = nw_3[nw_2[i]];
   }
   return nw_3;
};

Newsweek.namespace("Widget");
Newsweek.namespace("Util");


$(document).ready(function(){
 
$('#page .displayContent').css('font-size', '1em');
	
});



Newsweek.Widget.FontSizeSlider = {

    init : function(obj, width, caretWidth) //args: obj, width, caretWidth, onAfterResize
    {
        var slider = {
            dragging       : false,
            width          : width,
            percent        : 0,
            origFontSize   : 1,
            lineHeightRate : 0.416667,
            container      : obj,
            caret          : $('div', obj).slice(0, 1),
            caretWidth     : caretWidth
        }

        $(slider.caret).mousedown(function(){
            if(slider.dragging) {return;};

            slider.dragging = true;
        });

        $(document).mousemove(function(e){
            Newsweek.Widget.FontSizeSlider.onSliderMouseMove(e, slider);
        });

        $(document).mouseup(function(e){
            Newsweek.Widget.FontSizeSlider.onSliderMouseUp(e, slider);
        });
    },

    slideToStart : function(slider)
    {
        this.slideTo(0, slider)
    },

    slideToEnd : function(slider)
    {
        var X = slider.width - slider.caretWidth
        this.slideTo(X, slider);
    },

    slideTo : function(X, slider)
    {
        $(slider.caret).css('left', X + 'px');
        slider.percent = (X / slider.width);
        //this.Percent = ((X + (this.Caret.Width / 2)) / this.Width) * 100;
    },

    onSliderMouseUp : function(e, slider)
    {
        if (slider.dragging)
        {
            slider.dragging = false;

            //if (slider.OnAfterResize != null)
            //{
               this.onAfterResize(slider);
            //}
        }
    },

    onSliderMouseMove : function(e, slider)
    {
        if (!slider.dragging) {return;};

        var MouseP = GetEventXY(e);
        var MouseX = MouseP[0];
        var MouseY = MouseP[1];

        var SliderP = GetPos(slider.container);
        SliderX = getRealLeft(slider.container);

        //var SliderX = SliderP[0];
        //var SliderY = SliderP[1];

        if (MouseX < (SliderX + (slider.caretWidth / 2))) // left of slider
        {
            this.slideToStart(slider);
        }
        else if (MouseX > (SliderX + slider.width - slider.caretWidth)) // right of slider
        {
            this.slideToEnd(slider);
        }
        else // inside slider
        {
            var X = (MouseX - SliderX - (slider.caretWidth / 2))
            this.slideTo(X, slider);
        }
    },

    onAfterResize : function(slider)
    {
        var NewSize = slider.origFontSize;

        if (slider.percent > 0)
        {
            NewSize = slider.origFontSize + (slider.origFontSize * slider.percent);
        }
        
        $('#page .displayContent').css('font-size', NewSize + 'em');
        slider.dragging = false;
    }
}





