/* Javascript by Daniel Cohen Gindi (c) danielgindi@gmail.com 054-5655765 */

var w3c=(document.getElementById)?true:false;
var ns4=(document.layers)?true:false;
var ie4=(document.all && !w3c)?true:false;
var ie5=(document.all && w3c)?true:false;
var ns6=(w3c && navigator.appName.indexOf("Netscape")>=0)?true:false;

function getPageLeft(el)
{
	var x;
  if(ns4 )return el.pageX;
  if(ie4||w3c)
  {
      x = 0;
      while(el.offsetParent!=null)
      {
          x+=el.offsetLeft;
          el=el.offsetParent;
      }
      x+=el.offsetLeft;
      return x;
  }
}

function getPageTop(el)
{
	var y;
  if(ns4) return el.pageY;
  if(ie4||w3c)
  {
      y=0;
      while(el.offsetParent!=null)
      {
          y+=el.offsetTop;
          el=el.offsetParent;
      }
      y+=el.offsetTop;
      return y;
  }
}

function scrollingNewsObject(divName, boxWidth, boxHeight, speed, direction, newsLinger, stopOnHover, highlightOnHover, textColor, textColorHover, textDirection, textAlign, divClip, endSpacer, addStyleStr, arrTexts)
{
	this.boxHeight=boxHeight;
	this.boxWidth=boxWidth;
	this.direction=direction;
	this.speed=speed;
	this.newsLinger=newsLinger;
	this.stopOnHover=stopOnHover;
	this.highlightOnHover=highlightOnHover;
	this.objName=divName;
	this.name=divName+'_ScrollingNewsObject';
	this.arrTexts = arrTexts;
	this.countTexts = arrTexts ? arrTexts.length : 0;
	this.arrHeights = new Array();
	this.arrWidths = new Array();
	this.textColor = (textColor==''||textColor==null)?null:textColor;
	this.textColorHover = (textColorHover==''||textColorHover==null)?null:textColorHover;
	this.textDirection = (textDirection==''||textDirection==null)?null:textDirection;
	this.textAlign = (textAlign==''||textAlign==null)?null:textAlign;
	this.isMouseInOut = false;
	this.psy = new Array();
	this.psx = new Array();
	this.div1Name=this.name + '_1';
	this.div2Name=this.name + '_2';
	this.objDiv1 = null;
	this.objDiv2 = null;
	this.txtDiv1 = '<div id=\"'+this.div1Name+'\" style=\"position:absolute;left:0;top:0; direction: '+textDirection+'; text-align: '+textAlign+';\">';
	this.txtDiv2 = '<div id=\"'+this.div2Name+'\" style=\"position:absolute;left:0;top:0; direction: '+textDirection+'; text-align: '+textAlign+';\">';
	this.divYPos = 0;
	this.divSumHeight = 0;
	this.divSumWidth = 0;
	this.refX=0;
	this.refY=0;
	this.divClip=divClip;
	this.endSpacer=endSpacer;
	this.addStyleStr=addStyleStr;

	if (this.objName==null) return null;
	if (this.boxWidth===undefined || this.boxWidth=='') return undefined;
	if (this.boxHeight===undefined || this.boxHeight=='') return undefined;
	if (this.direction===undefined || this.direction=='') this.direction=1;
	if (this.speed===undefined || this.speed=='') this.speed=70;
	if (this.newsLinger===undefined || this.newsLinger=='') this.newsLinger=2000;
	if (this.stopOnHover===undefined) this.stopOnHover=true;
	if (this.highlightOnHover===undefined) this.highlightOnHover=true;
	if (this.endSpacer===undefined) this.endSpacer=8;
	if (this.addStyleStr===undefined) this.addStyleStr='';
	if (this.divClip===undefined) this.divClip=2;

	switch (this.direction)
	{
		default:
		case '1': case 'up': this.direction=1; this.scrollFunc='doScroll_Up'; break;
		case '2': case 'down': this.direction=2; this.scrollFunc='doScroll_Down'; break;
		case '3': case 'left': this.direction=3; this.scrollFunc='doScroll_Left'; break;
		case '4': case 'right': this.direction=4; this.scrollFunc='doScroll_Right'; break;
	}
	
	this.txtDivStyling = ' style=\"position:absolute; visibility:hidden; ' + 
	((this.direction==1||this.direction==2)?('width:' + this.boxWidth + 'px; '):('height:' + this.boxHeight + 'px; ')) + 
	(this.textColor?('color: '+this.textColor+';'):'') + 'left:0; top:0; FONT-FAMILY: Arial, Tahoma; FONT-SIZE: 12px; margin: 0px 0px 0px 0px; overflow-x:hidden; LINE-HEIGHT: 12pt; padding: 0px 0px 0px 0px; cursor:default; direction: '+this.textDirection+'; text-align: '+this.textAlign+'; border: none;'+this.addStyleStr+'\"';

	this.setTexts=function(arrTexts)
	{
		this.arrTexts = arrTexts;
		this.countTexts = arrTexts ? arrTexts.length : 0;
	};
	
	this.init=function() {
        i = 0;
        innertxt = '' + this.txtDiv1;
        for (i = 0; i < this.countTexts; i++) {
            innertxt = innertxt + '' + '<div id='+this.div1Name + '_' + i + '' + ' align=\"center\" onmouseover=\"'+this.name+'.onDivMouseOver(' + i + ',0' + ')\" onmouseout=\"'+this.name+'.onDivMouseOut(' + i + ',0' + ')\" ' + this.txtDivStyling + '>' + this.arrTexts[i] + '</div>';
        }
        innertxt = innertxt + '</div>';
        innertxt = "" + innertxt + this.txtDiv2;
        for (i = 0; i < this.countTexts; i++) {
            innertxt = innertxt + '' + '<div id='+this.div2Name + '_' + i + '' + ' align=\"center\" onmouseover=\"'+this.name+'.onDivMouseOver(' + i + ',1' + ')\" onmouseout=\"'+this.name+'.onDivMouseOut(' + i + ',1' + ')\" ' + this.txtDivStyling + '>' + this.arrTexts[i] + '</div>';
        }
        innertxt = innertxt + '</div>';
        this.scrollingDiv = document.getElementById(this.objName);
        this.refX=getPageLeft(this.scrollingDiv);
        this.refY=getPageTop(this.scrollingDiv);
        var dvAbs=document.createElement('div');
        dvAbs.style.position="absolute";
        dvAbs.style.x=this.refX+"px";
        dvAbs.style.y=this.refY+"px";
        dvAbs.style.width=this.boxWidth+"px";
        dvAbs.style.height=this.boxHeight+"px";
        dvAbs.style.border="none";
        dvAbs.style.overflow="hidden";
        dvAbs.style.margin="0px 0px 0px 0px";
        dvAbs.style.padding="0px 0px 0px 0px";

        switch (this.direction)
        {
        	case 2:
        	case 1:
        			dvAbs.style.clip="rect("+this.divClip+" "+this.boxWidth+" "+(this.boxHeight-this.divClip)+" 0)";
							break;  	
        	case 4:
        	case 3:
        			dvAbs.style.clip="rect(0 "+(this.boxWidth-this.divClip)+" "+this.boxHeight+" "+this.divClip+")";
							break;  	
        }

        dvAbs.innerHTML = '' + innertxt;

        this.scrollingDiv.appendChild(dvAbs);

        setTimeout(this.name + '.init2ndPhase()', 500);
	};
	
	this.init2ndPhase=function() {
        for (i = 0; i < this.countTexts; i++) {
            objDivTxt1 = document.getElementById(this.div1Name + '_' + i);
            this.arrHeights[i] = parseInt(objDivTxt1.offsetHeight);
            this.arrWidths[i] = parseInt(objDivTxt1.offsetWidth);
        }
        this.divSumHeight = this.endSpacer;
        this.divSumWidth = this.endSpacer;
        for (i = 0; i < this.countTexts; i++) {
            objDivTxt1 = document.getElementById(this.div1Name + '_' + i);
            objDivTxt2 = document.getElementById(this.div2Name + '_' + i);
            objDivTxt1.style.visibility = 'visible';
            objDivTxt2.style.visibility = 'visible';
            switch (this.direction)
            {
            	case 2:
            	case 1:
		        	    objDivTxt1.style.top = (this.divSumHeight) + "px";
		        	    objDivTxt2.style.top = (this.divSumHeight) + "px";
									break;  	
            	case 4:
            	case 3:
		        	    objDivTxt1.style.left = (this.divSumWidth) + "px";
		        	    objDivTxt2.style.left = (this.divSumWidth) + "px";
									break;  	
            }
            this.psy[this.divSumHeight] = 3;
            this.psx[this.divSumWidth] = 3;
            this.divSumHeight = this.divSumHeight + this.arrHeights[i] + 10;
            this.divSumWidth = this.divSumWidth + this.arrWidths[i] + 10;
        }
        this.objDiv1 = document.getElementById(this.div1Name);
        this.objDiv1.style.height = this.divSumHeight + "px";
        this.objDiv1.style.width = this.boxWidth + "px";
        this.objDiv2 = document.getElementById(this.div2Name);
        this.objDiv2.style.height = this.divSumHeight + "px";
        this.objDiv2.style.width = this.boxWidth + "px";
        
        switch (this.direction)
        {
        	case 2:
        	case 1:
        	    this.objDiv1.style.top = (this.boxHeight) + "px";
        	    this.objDiv2.style.top = (this.boxHeight) + "px";
        			this.divYPos = this.boxHeight;
							break;  	
        	case 4:
        	case 3:
        	    this.objDiv1.style.left = (this.boxWidth) + "px";
        	    this.objDiv2.style.left = (this.boxWidth) + "px";
        			this.divXPos = this.boxWidth;
							break;  	
        }
        eval(this.name + '.'+this.scrollFunc+'()');
	};
	
	this.doScroll_Up=function() {
        if (this.isMouseInOut == false) {
            this.divYPos--;
            if (this.divYPos < -this.divSumHeight && 
                (this.divSumHeight>=this.boxHeight || 
                this.divYPos < -this.boxHeight))
            {
              this.divYPos = 0;
              this.objDiv2.style.top = (this.boxHeight) + "px";
            }
            this.objDiv1.style.top = (this.divYPos) + "px";
            if ((this.divYPos + this.divSumHeight) < this.boxHeight) {
                if ((this.divSumHeight>=this.boxHeight))
                  this.objDiv2.style.top = (this.divYPos + this.divSumHeight) + "px";
                else
                  this.objDiv2.style.top = (this.divYPos + this.boxHeight) + "px";
            }
        }
        if (this.psy[-this.divYPos + this.endSpacer] == 3) {
            setTimeout(this.name + '.'+this.scrollFunc+'()', this.newsLinger + this.speed);
        } else {
            setTimeout(this.name + '.'+this.scrollFunc+'()', this.speed);
        }
	};
	
	this.doScroll_Down=function() {
		// Not implemented
		this.doScroll_Up();
	}

	this.doScroll_Left=function() {
        if (this.isMouseInOut == false) {
            this.divXPos--;
            if (this.divXPos < -this.divSumWidth && 
                (this.divSumWidth>=this.boxWidth || 
                this.divXPos < -this.boxWidth))
            {
              this.divXPos = 0;
              this.objDiv2.style.left = (this.boxWidth) + "px";
            }
            this.objDiv1.style.left = (this.divXPos) + "px";
            if ((this.divXPos + this.divSumWidth) < this.boxWidth) {
                if ((this.divSumWidth>=this.boxWidth))
                  this.objDiv2.style.left = (this.divXPos + this.divSumWidth) + "px";
                else
                  this.objDiv2.style.left = (this.divXPos + this.boxWidth) + "px";
            }
        }
        if (this.psx[-this.divXPos + this.endSpacer] == 3) {
            setTimeout(this.name + '.'+this.scrollFunc+'()', this.newsLinger + this.speed);
        } else {
            setTimeout(this.name + '.'+this.scrollFunc+'()', this.speed);
        }
	};

	this.doScroll_Right=function() {
		// Not implemented
		this.doScroll_Left();
	};

	this.onDivMouseOver=function(nIdx, nType) {
        if (this.stopOnHover) this.isMouseInOut = true;
        if (this.highlightOnHover) {
            if (nType == 1) {
                objDivTxt = document.getElementById(this.div2Name + '_' + nIdx);
            } else {
                objDivTxt = document.getElementById(this.div1Name + '_' + nIdx);
            }
            if (this.textColor && this.textColorHover) objDivTxt.style.color = this.textColorHover;
            objDivTxt.style.cursor = 'pointer';
            objDivTxt.style.textDecoration = 'underline';
        }
	};
	
	this.onDivMouseOut=function(nIdx, nType) {
        this.isMouseInOut = false;
        if (nType == 1) {
            objDivTxt = document.getElementById(this.div2Name + '_' + nIdx);
        } else {
            objDivTxt = document.getElementById(this.div1Name + '_' + nIdx);
        }
        if (this.textColor && this.textColorHover) objDivTxt.style.color = this.textColor;
        objDivTxt.style.textDecoration = 'none';
	};
}

function createScrollingNewsObject(divName, boxWidth, boxHeight, speed, direction, newsLinger, stopOnHover, highlightOnHover, textColor, textColorHover, textDirection, textAlign, arrTexts, divClip, endSpacer, addStyleStr)
{
    eval(divName + '_ScrollingNewsObject=new scrollingNewsObject(\''+divName+'\','+boxWidth+','+boxHeight+','+speed+',\''+direction+'\','+newsLinger+','+stopOnHover+','+highlightOnHover+',\''+textColor+'\',\''+textColorHover+'\',\''+textDirection+'\',\''+textAlign+'\','+endSpacer+','+divClip+',\''+escapeJsString(addStyleStr)+'\')');
    eval(divName + '_ScrollingNewsObject').setTexts(arrTexts);

    registerEvent(window, 'load', function()
    {
        eval(divName + '_ScrollingNewsObject.init();');
    }
    );
}
