﻿var numberOfColumns = 1;	// Number of columns for dragable boxes
	var columnParentBoxId = 'floatingBoxParentContainer';	// Id of box that is parent of all your dragable boxes
	var src_rightImage = 'http://'+location.host+'/Webpages/BlabMash/images/arrow_right.gif';
	var src_downImage = 'http://'+location.host+'/Webpages/BlabMash/images/arrow_down.gif';
	var src_refreshSource = 'http://'+location.host+'/Webpages/BlabMash/images/refresh.gif';
	var src_smallRightArrow = 'http://'+location.host+'/Webpages/BlabMash/images/small_arrow.gif';
	
	var transparencyWhenDragging = false;
	var txt_editLink = 'Edit';
	var txt_editLink_stop = 'End edit';
	var autoScrollSpeed = 4;	// Autoscroll speed	- Higher = faster	
	var dragObjectBorderWidth = 1;	// Border size of your RSS boxes - used to determine width of dotted rectangle
	
	var useCookiesToRememberRSSSources = true;
	
	var nameOfCookie = 'dragable_rss_boxes';	// Name of cookie
	
	/* END USER VARIABLES */
	
	
	
	var columnParentBox;
	var dragableBoxesObj;
	
	var ajaxObjects = new Array();
	
	var boxIndex = 0;	
	var staticBoxIndex = 1;
	var autoScrollActive = false;
	var dragableBoxesArray = new Array();
	var staticBoxesArray = new Array();
	
	var dragDropCounter = -1;
	var dragObject = false;
	var dragObjectNextSibling = false;
	var dragObjectParent = false;
	var destinationObj = false;
	
	var mouse_x;
	var mouse_y;
	
	var el_x;
	var el_y;	
	
	var rectangleDiv;
	var okToMove = true;

	var documentHeight = false;
	var documentScrollHeight = false;
	var dragableAreaWidth = false;
		
	var opera = navigator.userAgent.toLowerCase().indexOf('opera')>=0?true:false;
	var cookieCounter=0;
	var cookieRSSSources = new Array();
	
	var staticObjectArray = new Array();
	
	/*
	These cookie functions are downloaded from 
	http://www.mach5.com/support/analyzer/manual/html/General/CookiesJavaScript.htm
	*/	
	function Get_Cookie(name) { 
	   var start = document.cookie.indexOf(name+"="); 
	   var len = start+name.length+1; 
	   if ((!start) && (name != document.cookie.substring(0,name.length))) return null; 
	   if (start == -1) return null; 
	   var end = document.cookie.indexOf(";",len); 
	   if (end == -1) end = document.cookie.length; 
	   return unescape(document.cookie.substring(len,end)); 
	} 
	// This function has been slightly modified
	function Set_Cookie(name,value,expires,path,domain,secure) { 
		expires = expires * 60*60*24*1000;
		var today = new Date();
		var expires_date = new Date( today.getTime() + (expires) );
	    var cookieString = name + "=" +escape(value) + 
	       ( (expires) ? ";expires=" + expires_date.toGMTString() : "") + 
	       ( (path) ? ";path=" + path : "") + 
	       ( (domain) ? ";domain=" + domain : "") + 
	       ( (secure) ? ";secure" : ""); 
	    document.cookie = cookieString; 
	} 

	function autoScroll(direction,yPos)
	{
		if(document.documentElement.scrollHeight>documentScrollHeight && direction>0)return;
		if(opera)return;
		window.scrollBy(0,direction);
		if(!dragObject)return;
		
		if(direction<0){
			if(document.documentElement.scrollTop>0){
				dragObject.style.top = (el_y - mouse_y + yPos + document.documentElement.scrollTop) + 'px';		
			}else{
				autoScrollActive = false;
			}
		}else{
			if(yPos>(documentHeight-50)){	
				dragObject.style.top = (el_y - mouse_y + yPos + document.documentElement.scrollTop) + 'px';			
			}else{
				autoScrollActive = false;
			}
		}
		if(autoScrollActive)setTimeout('autoScroll('+direction+',' + yPos + ')',5);
	}
		
	
	
	
	
	function getTopPos(inputObj)
	{		
	  var returnValue = inputObj.offsetTop;
	  while((inputObj = inputObj.offsetParent) != null){
	  	if(inputObj.tagName!='HTML')returnValue += inputObj.offsetTop;
	  }
	  return returnValue;
	}
	
	function getLeftPos(inputObj)
	{
	  var returnValue = inputObj.offsetLeft;
	  while((inputObj = inputObj.offsetParent) != null){
	  	if(inputObj.tagName!='HTML')returnValue += inputObj.offsetLeft;
	  }
	  return returnValue;
	}
		
	
	function createColumns()
	{
		if(!columnParentBoxId){
			alert('No parent box defined for your columns');
			return;
		}
		columnParentBox = document.getElementById(columnParentBoxId);
		var columnWidth = Math.floor(100/numberOfColumns);
		var sumWidth = 0;
		for(var no=0;no<numberOfColumns;no++){
			var div = document.createElement('DIV');
			if(no==(numberOfColumns-1))columnWidth = 99 - sumWidth;
			sumWidth = sumWidth + columnWidth;
			div.style.cssText = 'width:'+columnWidth+'%;padding:0px;margin:0px;';
			div.style.height='100%';
			div.style.styleFloat='left';
			
			div.style.width = columnWidth + '%';
			div.style.padding = '0px';
			div.style.margin = '0px';

			div.id = 'dragableBoxesColumn' + (no+1);
			columnParentBox.appendChild(div);
			
			var clearObj = document.createElement('HR');	
			clearObj.style.clear = 'both';
			clearObj.style.visibility = 'hidden';
			//div.appendChild(clearObj);
		}
		
		
		
		var clearingDiv = document.createElement('DIV');
		columnParentBox.appendChild(clearingDiv);
		clearingDiv.style.clear='both';
		//clearingDiv.style.display = 'none';
		
	}
	
	function mouseoverBoxHeader()
	{
		if(dragDropCounter==10)return;
		var id = this.id.replace(/[^0-9]/g,'');
		document.getElementById('dragableBoxExpand' + id).style.visibility = 'visible';		
		document.getElementById('dragableBoxRefreshSource' + id).style.visibility = 'visible';		
		//document.getElementById('dragableBoxCloseLink' + id).style.visibility = 'visible';
		//if(document.getElementById('dragableBoxEditLink' + id))document.getElementById('dragableBoxEditLink' + id).style.visibility = 'visible';
		
	}
	function mouseoutBoxHeader(e,obj)
	{
		if(!obj)obj=this;
		
		var id = obj.id.replace(/[^0-9]/g,'');
		//document.getElementById('dragableBoxExpand' + id).style.visibility = 'hidden';		
		//document.getElementById('dragableBoxRefreshSource' + id).style.visibility = 'hidden';		
		//document.getElementById('dragableBoxCloseLink' + id).style.visibility = 'hidden';		
		//if(document.getElementById('dragableBoxEditLink' + id))document.getElementById('dragableBoxEditLink' + id).style.visibility = 'hidden';		
		
	}
	
	function refreshRSS()
	{
		reloadRSSData(this.id.replace(/[^0-9]/g,''));
		setTimeout('dragDropCounter=-5',5);
	}
	
	function showHideBoxContent()
	{
		var numericId = this.id.replace(/[^0-9]/g,'');
		var obj = document.getElementById('dragableBoxContent' + numericId);
		
		
		obj.style.display = obj.style.display=='block'?'none':'block';
		this.src = obj.style.display=='block'?src_rightImage:src_downImage;
		//obj.style.display = 'none';
		setTimeout('dragDropCounter=-5',5);
	}
	
	function mouseover_CloseButton()
	{
		this.className = 'closeButton_over';	
		setTimeout('dragDropCounter=-5',5);
	}
	
	function highlightCloseButton()
	{
		this.className = 'closeButton_over';	
	}
	
	function mouseout_CloseButton()
	{
		this.className = 'closeButton';	
	}
	
	
	
	
	
	function showStatusBarMessage(numericId,message)
	{
		document.getElementById('dragableBoxStatusBar' + numericId).innerHTML = message;
		
	}
	
	function addBoxHeader(parentObj,externalUrl)
	{
		var div = document.createElement('DIV');
		div.className = 'dragableBoxHeader';
		div.style.backgroundImage = "url('http://'"+location.host+"'images/BlabMash/mesh_bgd2.gif')";
		div.style.backgroundRepeat = "repeat-x";
		div.style.cursor = 'move';
		div.style.height = '20px';
		div.id = 'dragableBoxHeader' + boxIndex;
		div.onmouseover = mouseoverBoxHeader;
		div.onmouseout = mouseoutBoxHeader;
		//div.onmousedown = initDragDropBox;
		
		var image = document.createElement('IMG');
		image.id = 'dragableBoxExpand' + boxIndex;
		image.src = src_rightImage;
		//image.style.visibility = 'hidden';	
		image.style.cursor = 'pointer';
		image.style.marginTop = '5px';
		image.onmousedown = showHideBoxContent;	
		div.appendChild(image);
		
		var textSpan = document.createElement('SPAN');
		textSpan.style.height = '20px';
		
		
		textSpan.style.verticalalign = 'center';
		textSpan.id = 'dragableBoxHeader_txt' + boxIndex;
		textSpan.className = 'normaltext';
		div.appendChild(textSpan);
				
		
		
			
		var image = document.createElement('IMG');
		image.src = src_refreshSource;
		
		image.id = 'dragableBoxRefreshSource' + boxIndex;
		image.style.cssText = 'float:right';
		image.style.styleFloat = 'right';
		//image.style.visibility = 'hidden';
		image.onclick = refreshRSS;
		image.style.cursor = 'pointer';
		image.style.marginTop = '5px';
		if(!externalUrl)image.style.display='block';
		div.appendChild(image);
		
		parentObj.appendChild(div);	


	}
	
	function addBoxContentContainer(parentObj,heightOfBox)
	{
		var div = document.createElement('DIV');
		div.className = 'dragableBoxContent';
		if(opera)div.style.clear='none';
		div.id = 'dragableBoxContent' + boxIndex;
		div.style.display = 'block';
		parentObj.appendChild(div);			
		if(heightOfBox && heightOfBox/1>40){
			div.style.height = heightOfBox + 'px';
			div.setAttribute('heightOfBox',heightOfBox);
			div.heightOfBox = heightOfBox;	
			if(document.all)div.style.overflowY = 'auto';else div.style.overflow='-moz-scrollbars-vertical;';
			if(opera)div.style.overflow='auto';
		}		
	}
	
	function addBoxStatusBar(parentObj)
	{
		var div = document.createElement('DIV');
		div.className = 'dragableBoxStatusBar';
		div.id = 'dragableBoxStatusBar' + boxIndex;
		parentObj.appendChild(div);	
		
		
	}
	
	function createABox(columnIndex,heightOfBox,externalUrl,uniqueIdentifier)
	{

		boxIndex++;
		
		var maindiv = document.createElement('DIV');
		maindiv.className = 'dragableBox';
		maindiv.id = 'dragableBox' + boxIndex;
		
			
		var div = document.createElement('DIV');
		div.className='dragableBoxInner';
		div.style.backgroundImage = "url('http://'"+location.host+"'/images/BlabMash/mesh_bgd.gif')";
		maindiv.appendChild(div);
		addBoxHeader(div,externalUrl);
		addBoxContentContainer(div,heightOfBox);
	
		var obj = document.getElementById('dragableBoxesColumn' + columnIndex);	
		var subs = obj.getElementsByTagName('DIV'); ;
		if(subs.length>0){
		    obj.appendChild(maindiv);
		}else{
			obj.appendChild(maindiv);
		}
			
		dragableBoxesArray[boxIndex] = new Array();
		dragableBoxesArray[boxIndex]['obj'] = maindiv;
		dragableBoxesArray[boxIndex]['parentObj'] = maindiv.parentNode;
		dragableBoxesArray[boxIndex]['uniqueIdentifier'] = uniqueIdentifier;
		dragableBoxesArray[boxIndex]['heightOfBox'] = heightOfBox;
		
		return boxIndex;
		
	}
	
	function replaceAll( str, from, to ) {
        var idx = str.indexOf( from );


        while ( idx > -1 ) {
            str = str.replace( from, to );
            idx = str.indexOf( from );
        }

        return str;
    }
	function showRSSData(ajaxIndex,boxIndex)
	{
	
		var rssContent = ajaxObjects[ajaxIndex].response;
		rssContent = replaceAll(rssContent,'##','#');
		
	    
	    var headTokens = 	rssContent.split(/http/);
	    document.getElementById('dragableBoxHeader_txt' + boxIndex).innerHTML = '<span>' + headTokens[0].substr(0,25) + '...&nbsp;<\/span>';	// title
        /*
        var headTokenImg = 	rssContent.split(/#1/);
        var headImage = document.getElementById('dragableBoxExpand' + boxIndex);
        headImage.src = headTokenImg[1];
        */
        //alert(headTokenImg[1]);
		tokens = rssContent.split(/#0/);//alert (tokens);
		var string = '<table cellpadding="1" cellspacing="0">';
		var MaxRss = (dragableBoxesArray[boxIndex]['maxRssItems'])*3;
		if (MaxRss > tokens.length)
		    MaxRss = tokens.length; 
		for(var no=1;no<MaxRss;no=no+3){	// Looping through RSS items
		    string = string + '<tr><td style="vertical-align:top;"><img  height="13" src="http://myblab.com/images/BlabMash/arrow_bullet.gif" width="8" vspace="2"><td><p class=\"boxItemHeader\"><a style="color:black;" class=\"boxItemHeader\"  href="' + tokens[no] + '" onclick="var w = window.open(this.href);return false">' + tokens[no+1] + '<\/a><\/p><\/td><\/tr>';		
		}
		string = string + '<\/table>';
		
		document.getElementById('dragableBoxContent' + boxIndex).innerHTML = string;
		ajaxObjects[ajaxIndex] = false;
	}
	
	function reloadRSSData(numericId)
	{
		var ajaxIndex = ajaxObjects.length;
		ajaxObjects[ajaxIndex] = new sack();
		//showStatusBarMessage(numericId,'Loading data...');
		ajaxObjects[ajaxIndex].requestFile = 'http://'+location.host+'/Webpages/Blabmash/readRSS.aspx?rssURL=' + escape(dragableBoxesArray[numericId]['rssUrl']) + '&maxRssItems=' + dragableBoxesArray[numericId]['maxRssItems'];	// Specifying which file to get
		//'readRSS.php?rssURL=' + escape(dragableBoxesArray[numericId]['rssUrl']) + '&maxRssItems=' + dragableBoxesArray[numericId]['maxRssItems'];	// Specifying which file to get
		ajaxObjects[ajaxIndex].onCompletion = function(){ showRSSData(ajaxIndex,numericId); };	// Specify function that will be executed after file has been found
		ajaxObjects[ajaxIndex].runAJAX();		// Execute AJAX function	
		
		clearInterval(dragableBoxesArray[numericId]['intervalObj']);
		var tmpInterval = false;
		var tmpInterval = setInterval("reloadRSSData(" + numericId + ")",(dragableBoxesArray[numericId]['minutesBeforeReload']*1000*60));
		
		dragableBoxesArray[numericId]['intervalObj'] = tmpInterval;		
		
	}
		
	function createARSSBox(url,columnIndex,heightOfBox,maxRssItems,minutesBeforeReload,uniqueIdentifier,minimize)
	{

    
		if(!heightOfBox)heightOfBox = '0';
		if(!minutesBeforeReload)minutesBeforeReload = '0';

			
		var tmpIndex = createABox(columnIndex,heightOfBox,true);

		if(useCookiesToRememberRSSSources)
		{
			if(!cookieRSSSources[url]){
				cookieRSSSources[url] = cookieCounter;		
				Set_Cookie(nameOfCookie + cookieCounter,url + '#;#' + columnIndex + '#;#' + maxRssItems + '#;#' + heightOfBox + '#;#' + minutesBeforeReload + '#;#' + uniqueIdentifier  ,60000);
				cookieCounter++;
			}
		}		
		
		dragableBoxesArray[tmpIndex]['rssUrl'] = url;
		dragableBoxesArray[tmpIndex]['maxRssItems'] = maxRssItems?maxRssItems:100;
		dragableBoxesArray[tmpIndex]['minutesBeforeReload'] = minutesBeforeReload;
		dragableBoxesArray[tmpIndex]['heightOfBox'] = heightOfBox;
		dragableBoxesArray[tmpIndex]['uniqueIdentifier'] = uniqueIdentifier;
		
		var tmpInterval = false;
		if(minutesBeforeReload && minutesBeforeReload>0){
			//var tmpInterval = setInterval("reloadRSSData(" + tmpIndex + ")",(minutesBeforeReload*1000*60));
			var tmpInterval = setInterval("reloadRSSData(" + tmpIndex + ")",(20*60));
		}

		dragableBoxesArray[tmpIndex]['intervalObj'] = tmpInterval;
			
		if(!document.getElementById('dragableBoxContent' + tmpIndex).innerHTML)document.getElementById('dragableBoxContent' + tmpIndex).innerHTML = '<span class="normaltext">loading RSS data</>';
        
        if (minimize ==1)
	    {
	        var obj = document.getElementById('dragableBoxContent' + tmpIndex);
	        
	        obj.style.display = 'none';
	        
	        var obj1 = document.getElementById('dragableBoxExpand' + tmpIndex);
	        obj1.src = src_downImage;
	    }
	    else
	    {
	        var obj = document.getElementById('dragableBoxContent' + tmpIndex);
	        obj.style.display = 'block';
	    }
			
		if(url.length>0 && url!='undefined'){
			
			//var ajaxIndex = ajaxObjects.length;
			//ajaxObjects[ajaxIndex] = new sack();
			//if(!maxRssItems)maxRssItems = 100;  
			//ajaxObjects[ajaxIndex].requestFile =  '../BlabMash/readRSS.aspx?rssURL=' + escape(url) + '&maxRssItems=' + maxRssItems;	
			//'readRSS.php?rssURL=' + escape(url) + '&maxRssItems=' + maxRssItems;	// Specifying which file to get
			//ajaxObjects[ajaxIndex].onCompletion = function(){ showRSSData(ajaxIndex,tmpIndex); };	// Specify function that will be executed after file has been found
			//ajaxObjects[ajaxIndex].runAJAX();		// Execute AJAX function
		}else{
			hideHeaderOptionsForStaticBoxes(tmpIndex);
		}			
	}
		
	function cancelSelectionEvent(e)
	{
		if(document.all)e = event;
		
		if (e.target) source = e.target;
			else if (e.srcElement) source = e.srcElement;
			if (source.nodeType == 3) // defeat Safari bug
				source = source.parentNode;
		if(source.tagName.toLowerCase()=='input')return true;
						
		if(dragDropCounter>=0)return false; else return true;	
		
	}
	
	function cancelEvent()
	{
		return false;
	}
	
	
	
	function hideHeaderOptionsForStaticBoxes(boxIndex)
	{
		if(document.getElementById('dragableBoxRefreshSource' + boxIndex))document.getElementById('dragableBoxRefreshSource' + boxIndex).style.display='none';
		//if(document.getElementById('dragableBoxCloseLink' + boxIndex))document.getElementById('dragableBoxCloseLink' + boxIndex).style.display='none';		
		//if(document.getElementById('dragableBoxEditLink' + boxIndex))document.getElementById('dragableBoxEditLink' + boxIndex).style.display='none';		
	}
	
	function initDragableBoxesScript()
	{
		createColumns();	
        GenerateBoxes();
	}  

		window.onload = initDragableBoxesScript;
