//** DD Drop Down Panel- (c) Dynamic Drive DHTML code library: http://www.dynamicdrive.com
//** Oct 21st, 08'- Script created

/* --------------------------- start web180 added code -----------------------------------------*/
var openPopupID;
var closePopupID;
var _limitFrequency;
var _limitMethod;
var _initDelay; //(time before it initially displays)
var _maxPopups;
//var DELAY = 5000; //5 seconds (time before it initially displays)
var CLOSE = 15000; //15 seconds (time it will stay up before auto-closing)
var NOLIMIT = 0;
var TIMELIMIT = 1;
var PAGELIMIT = 2;
var sesClosed;
var sesVoted;
var sesPopupCount;
var bDisplayAlways;
var _IntervalID;

function rtgpopOnLoad(){
    bDisplayAlways = document.getElementById('hidMVDisplayAlways').value;
    _limitFrequency = parseInt(document.getElementById('hidMVFrequency').value);
    _limitMethod = parseInt(document.getElementById('hidMVlimitMethod').value);
    _initDelay = parseInt(document.getElementById('hidMVinitDelay').value)*1000;
    _maxPopups = parseInt(document.getElementById('hidMVMaxDisplays').value);

    
    //increment the pageview count if we're doing pageview limiting
    if (_limitMethod == PAGELIMIT) {
        var iPagesViewed = sessvars.mv_PageViewCount
        if (!(iPagesViewed >=0)) 
            iPagesViewed = 0;
        sessvars.mv_PageViewCount = iPagesViewed + 1;
    }
        
    sesClosed = sessvars.rtgclose||0;
    sesVoted = sessvars.rtgvote||0;
    sesPopupCount = sessvars.rtgpopupcount||0;

    // don't display minivoter if they already voted on this site in this browser session 
    // or user closed the minivoter in this browser session
    // also, note that the minivoter won't display if closed or voted within last week based on cookie. Logic below in DisplayPanel function
    if (bDisplayAlways.toUpperCase() == "TRUE" || (sesClosed != "1" && sesVoted != "1" && sesPopupCount < _maxPopups)){ //if (bDisplayAlways.toUpperCase() == "TRUE" || (rtgGetSessionCookie("rtgvote") != "1" && rtgGetSessionCookie("rtgclose") != "1" )){       

        //opens the initial popup on delay timer and writes the mv "page 1" view to DB
        DeterminePopupDisplay();

    }
}

function addLoadEvent(func) {   
   var oldonload = window.onload;   
   if (typeof window.onload != 'function') {   
     window.onload = func;   
   } else {   
     window.onload = function() {   
       if (oldonload) {   
         oldonload();   
       }   
       func();   
     }   
   }   
}   
addLoadEvent(rtgpopOnLoad); 

//stop closing the popup
function clearAutoClose(){
    clearTimeout(closePopupID);
}

//close the popup 15 seconds from now (offset is the timeout for initial popup, so this can close 15
//seconds after the initial popup displayed)
function startAutoClose(offset){
    if (typeof offset == 'undefined' ) 
        offset = 0;
    //closePopupID = setTimeout("defaultpanel.togglepanelplus('up');", offset + CLOSE); 
    closePopupID = setTimeout("closePanel();", offset + CLOSE); 
    
}

function closePanel(){
    defaultpanel.togglepanelplus('up');
    
    if (_limitMethod == TIMELIMIT){
        var currentTime = new Date();
        sessvars.mv_TimeClose = currentTime.getTime();
        
        //determine if user has voted or closed and only set up to display again if not
        sesClosed = sessvars.rtgclose||0;
        sesVoted = sessvars.rtgvote||0;
        sesPopupCount = sessvars.rtgpopupcount||0;
        if (bDisplayAlways.toUpperCase() == "TRUE" || (sesClosed != "1" && sesVoted != "1" && sesPopupCount < _maxPopups)){
            //alert("going to display again in: " + _limitFrequency*1000);
            DisplayPopup(_limitFrequency*1000);
        }
    }
}

//display popup now, or, rather, after short delay
function DisplayPopup(pDelay) {
    setTimeout("DisplayPanel();", pDelay);
}

function DisplayPanel(){
    //only display if not closed or voted within the last week (cookie)
    if (bDisplayAlways.toUpperCase() == "TRUE" || rtgCookieDisplayPopup()) {
        //make sure it's page one that comes up (function in rtg_functionality.js)
        ShowPage1();
        
        //display immediately
        defaultpanel.togglepanelplus('down');
        
        //start closing popup CLOSE seconds after it opens
        startAutoClose();  
        
        //count the page view (function in rtg_functionality)
        if (document.getElementById('rtg_DivPage1') != null) 
            rtgAddPageView(1); 
            
        //every time we display minivoter, let the cookie know
        SetMVDisplayInfo();
        
        //update the popup count
        sesPopupCount = sesPopupCount + 1;
        sessvars.rtgpopupcount = sesPopupCount;
    }
}

//determine when popup should display 1st time if on time-based or pageview limiting or no limiting at all
function DeterminePopupDisplay() {
    switch(_limitMethod)
    {
    case NOLIMIT: //no limiting
        DisplayPopup(_initDelay);  
        break;
    case TIMELIMIT: //time based
        var currentTime = new Date();
        var dLastClosed = sessvars.mv_TimeClose || (currentTime.getTime()-(_limitFrequency*1000));
        var iSeconds = Math.round((currentTime.getTime() - dLastClosed)/1000);
        
        //if it's been too long since it was last closed, see how long it's been since it was last displayed
        if (iSeconds >= _limitFrequency){
           var dLastDisplay = sessvars.mv_TimeDisplay || (currentTime.getTime()-(_limitFrequency*1000)); 
           iSeconds = Math.round((currentTime.getTime() - dLastDisplay)/1000);
        }
        if (iSeconds >= _limitFrequency){ //it's been more than x seconds since it displayed last, so display right away and set it to do intervals
            DisplayPopup(_initDelay);
        }
        else{  //it's been less than x seconds since it displayed last, so don't display until it's been x seconds since last time
            DisplayPopup((_limitFrequency-iSeconds)*1000);
        }
        break;
    case PAGELIMIT: //pageview based
        var iPagesViewed = sessvars.mv_PageViewCount;
        if ((iPagesViewed > _limitFrequency) || iPagesViewed == 1){
          DisplayPopup(_initDelay);
        }
        break;
    default:

    }
}


function SetMVDisplayInfo() {
    switch(_limitMethod)
    {
    case NOLIMIT: //no limiting
        break;
    case TIMELIMIT: //time based
        var currentTime = new Date();
        sessvars.mv_TimeDisplay = currentTime.getTime();
        //alert("just put currenttime in sessDisplay");
        break;
    case PAGELIMIT: //pageview based
        //reset the pageview count
        sessvars.mv_PageViewCount = 1;
        break;
    }
}

/* --------------------------- end web180 added code -----------------------------------------*/

function ddpanel(setting){
	setting.dir="up" //initial state of panel (up="contracted")
	if (setting.stateconfig.persiststate && ddpanel.getCookie(setting.ids[0])=="down"){
		setting.dir="down"
	}
	if (setting.dir=="up"){ //if "up", output CSS to hide panel contents
		document.write('<style type="text/css">\n')
		document.write('#'+setting.ids[1]+'{height:' + parseInt(setting.stateconfig.initial) + 'px; overflow:hidden}\n')
		document.write('</style>\n')
	}
	setting.stateconfig.initial=parseInt(setting.stateconfig.initial)
	this.setting=setting
	var thispanel=this
	if (window.addEventListener) //if non IE browsers, initialize panel window.onload
		ddpanel.addEvent(window, function(e){thispanel.initpanel(setting)}, "load")
	else //else if IE, add 100 millisec after window.onload before initializing
		ddpanel.addEvent(window, function(e){setTimeout(function(){thispanel.initpanel(setting)}, 100)}, "load")
	ddpanel.addEvent(window, function(e){thispanel.uninit(setting)}, "unload")
}

ddpanel.events_array=[] //object array to contain events created by script

ddpanel.addEvent=function(target, functionref, tasktype){
	var evtmodel=target.addEventListener? "w3c" : "ie"
	var evtaction=evtmodel=="w3c"? "addEventListener" : "attachEvent"
	var i=this.events_array.push({ //store event info in ddpanel.events_array[] and return current event's index within array
		target: target,
		tasktype: (evtmodel=="ie"? "on" : "")+tasktype,
		listener: evtmodel=="ie"? function(){return functionref.call(target, window.event)} : functionref
	})-1
	target[evtaction](this.events_array[i].tasktype, this.events_array[i].listener, evtmodel=="w3c"? false : null)
}

ddpanel.removeEvent=function(target, functionref, tasktype){
	var evtmodel=target.removeEventListener? "w3c" : "ie"
	var evtaction=evtmodel=="w3c"? "removeEventListener" : "detachEvent"
	target[evtaction](tasktype, functionref, evtmodel=="w3c"? false : null)
}

ddpanel.getCookie=function(Name){ 
	var re=new RegExp(Name+"=[^;]+", "i"); //construct RE to search for target name/value pair
	if (document.cookie.match(re)) //if cookie found
		return document.cookie.match(re)[0].split("=")[1] //return its value
	return null
}

ddpanel.setCookie=function(name, value){
	document.cookie = name+"=" + value + ";path=/"
}

ddpanel.addpointer=function(target, className, imagesrc){
	var pointer=document.createElement("img")
	pointer.src=imagesrc
	pointer.className=className
	pointer.style.borderWidth=0
	target.appendChild(pointer)
	return pointer
}

ddpanel.prototype={

togglepanel:function(dir){ //public function that toggles the panel's state. Optional dir parameter ("up" or "down") to explicitly set state.
	var setting=this.setting
	setting.dir=dir || ((setting.dir=="up")? "down" : "up")
	var pcontent=setting.pcontent, dir=setting.dir
	pcontent._currentheight=(dir=="down")? pcontent._actualheight : setting.stateconfig.initial
	pcontent.style.height=pcontent._currentheight+"px"
	if (setting.pointerimage.enabled){
		setting.arrow.src=setting.pointerimage.src[(setting.dir=="down")? 1 : 0]
		/*setting.arrow.style.visibility="visible"*/
	}
	ddpanel.setCookie(setting.ids[0], setting.dir)
},

togglepanelplus:function(dir){ //public function that toggles the panel's state w/ animation. Optional dir parameter ("up" or "down") to explicitly set state.
	var setting=this.setting
	setting.dir=dir || ((setting.dir=="up")? "down" : "up")
	if (setting.pointerimage.enabled)
		/*setting.arrow.style.visibility="hidden"*/
	clearTimeout(setting.revealtimer)
	this.revealcontent()
	
},

revealcontent:function(){
	var setting=this.setting
	var pcontent=setting.pcontent, curH=pcontent._currentheight, maxH=pcontent._actualheight, minH=setting.stateconfig.initial, steps=setting.animate.steps, dir=setting.dir
	if (dir=="down" && curH<maxH || dir=="up" && curH>minH){
		var newH = curH + (Math.round((maxH-curH)/steps)+1) * (dir=="up"? -1 : 1)
		newH=(dir=="down")? Math.min(maxH, newH) : Math.max(minH, newH)
		pcontent.style.height=newH+"px"
		pcontent._currentheight=newH
	}
	else{
		if (setting.pointerimage.enabled){
			setting.arrow.src=setting.pointerimage.src[(setting.dir=="down")? 1 : 0]
			/*setting.arrow.style.visibility="visible"*/
		}
		return
	}
	var thispanel=this
	setting.revealtimer=setTimeout(function(){thispanel.revealcontent()}, 10)
},

initpanel:function(){
	var setting=this.setting
	var pcontainer=setting.pcontainer=document.getElementById(setting.ids[0])
	var pcontent=setting.pcontent=document.getElementById(setting.ids[1])
	var tdiv=setting.tdiv=document.getElementById(setting.ids[2])
	pcontent.style.overflow="scroll"
	pcontent._actualheight=pcontent.scrollHeight
	setTimeout(function(){pcontent._actualheight=pcontent.scrollHeight}, 100)
	pcontent.style.overflow="hidden"
	pcontent._currentheight=(setting.dir=="down")? pcontent._actualheight : setting.stateconfig.initial
	var thispanel=this
	ddpanel.addEvent(tdiv, function(e){ //assign click behavior when toggle DIV tab is clicked on
		if (setting.animate.enabled)
			thispanel.togglepanelplus()
		else
			thispanel.togglepanel()
		if (e.preventDefault) e.preventDefault()
		return false
	}, "click")
	if (setting.pointerimage.enabled){
		var pointer1=new Image(), pointer2=new Image()
		pointer1.src=setting.pointerimage.src[0]
		pointer2.src=setting.pointerimage.src[1]
		setting.arrow=ddpanel.addpointer(tdiv.getElementsByTagName("span")[0], "pointerimage", setting.pointerimage.src[setting.dir=="down"? 1:0])
	}
	if (setting.closepanelonclick.enabled){ //assign click behavior when panel content is clicked on (links within panel or elements with class "closepanel"   
			ddpanel.addEvent(pcontent, function(e){
				var target=e.srcElement || e.target
				if (/(^|\s+)closepanel($|\s+)/.test(target.className) || target.tagName=="A" || (target.parentNode && target.parentNode.tagName=="A")){
					thispanel.togglepanel("up")
				}
			}, "click")
	}
},

uninit:function(){
	var setting=this.setting
	if (setting.stateconfig.persiststate){
		ddpanel.setCookie(setting.ids[0], setting.dir)
	}
	for (prop in setting){
		setting[prop]=null
	}
}



} //end of ddpanel object


//initialize instance of DD Drop Down Panel:

var defaultpanel=new ddpanel({
	ids: ["mypanel", "mypanelcontent", "mypaneltab"], // id of main panel DIV, content DIV, and tab DIV
	stateconfig: {initial: "1px", persiststate: false}, // initial: initial reveal amount in pixels (ie: 5px)
	animate: {enabled: true, steps: 15}, //steps: number of animation steps. Int between 1-20. Smaller=faster.
	pointerimage: {enabled: true, src: ["http://www.reasontogo.com/images/button/arrow-down.gif", "http://www.reasontogo.com/images/button/arrow-up.gif"]},
	closepanelonclick: {enabled: true} // close panel when links or elements with CSS class="closepanel" within container is clicked on?
})