
function GWAListCircular(width,estimatedWidthElements,bNextId,bPreviousId)
{this.list_elements=new Array();this.list_out_elements=new Array();this.list_current_elements=new Array();this.html_element="";this.ul_elements=null;this.list_width=width;this.estimatedWidthElements=estimatedWidthElements;this.bPrevious=null;this.bNext=null;this.addElementCircular=function(element_circular)
{this.list_elements[this.list_elements.length]=element_circular;}
this.show_list=function()
{if(!parseInt(this.list_width))
this.list_width=document.getElementById(this.list_width).offsetWidth;this.ul_elements=document.getElementById("listcircular-elements");this.bPrevious=document.getElementById(bPreviousId);this.bNext=document.getElementById(bNextId);var bWidthNext=0;var bWidthPrevious=0;if(this.bPrevious.style.width)
bWidthPrevious=parseInt(this.bPrevious.style.width);if(this.bNext.style.width)
bWidthNext=parseInt(this.bNext.style.width);if(bWidthNext>0||bWidthPrevious>0){this.list_width-=(bWidthPrevious+bWidthNext);}
if(this.ul_elements)
{var count=0;for(var x=0;x<this.ul_elements.childNodes.length;x++)
{if(this.ul_elements.childNodes.item(x).innerHTML)
{var e=this.ul_elements.childNodes.item(x);if(this.estimatedWidthElements)
{var width=this.getWidth(e.innerHTML);e.style.width=width+"px";}
this.list_elements[count++]=e;}}}
else
alert("Element UL with id 'listcircular-elements' not find!");this.ul_elements.style.width=this.list_width-1+"px";var size=0;var rx=0;if(this.list_elements.length>0)
{for(x=0;x<this.list_elements.length;x++)
{e=this.list_elements[x];size+=parseInt(e.style.width);if(size<=parseInt(this.list_width))
this.list_current_elements[x]=this.list_elements[x];}
count=0;for(var ry=0;ry<this.list_elements.length;ry++)
{var notPresent=true;for(rx=0;rx<this.list_current_elements.length;rx++)
{if(this.list_elements[ry].id==this.list_current_elements[rx].id)
{notPresent=false;break;}}
if(notPresent)
{this.list_out_elements[count++]=this.list_elements[ry];}}
this.adjustElements();if((this.list_current_elements.length==this.list_elements.length)||(size<=this.list_width))
{this.bPrevious.style.display="none";this.bNext.style.display="none";}}}
this.adjustElements=function()
{for(var rx=0;rx<this.list_out_elements.length;rx++)
{try
{this.removeElementPresentation(this.list_out_elements[rx]);}
catch(e){}}
for(rx=0;rx<this.list_current_elements.length;rx++)
{this.showElementPresentation(this.list_current_elements[rx]);}}
this.removeElementPresentation=function(element)
{this.ul_elements.removeChild(element)}
this.showElementPresentation=function(element)
{this.ul_elements.appendChild(element)}
this.next=function()
{this.list_out_elements[this.list_out_elements.length]=this.list_current_elements[0];this.list_current_elements=this.removeElementListByIndex(0,this.list_current_elements);var totalWidth=0;for(var x=0;x<this.list_current_elements.length;x++)
{totalWidth+=parseInt(this.list_current_elements[x].style.width);}
var list_out_elementsTemp=new Array();this.copyList(this.list_out_elements,list_out_elementsTemp);for(x=0;x<this.list_out_elements.length;x++)
{var e=this.list_out_elements[x];totalWidth+=parseInt(e.style.width);if(totalWidth<=parseInt(this.list_width))
{this.list_current_elements[this.list_current_elements.length]=e;list_out_elementsTemp=this.removeElementListById(e.id,list_out_elementsTemp);}
else
break;}
this.list_out_elements=new Array();this.copyList(list_out_elementsTemp,this.list_out_elements);this.adjustElements();}
this.previous=function()
{this.list_out_elements=this.addElementInFirstList(this.list_current_elements[this.list_current_elements.length-1],this.list_out_elements);this.list_current_elements=this.removeElementListByIndex(this.list_current_elements.length-1,this.list_current_elements);var totalWidth=0;for(var x=0;x<this.list_current_elements.length;x++)
{totalWidth+=parseInt(this.list_current_elements[x].style.width);}
var list_out_elementsTemp=new Array();this.copyList(this.list_out_elements,list_out_elementsTemp);for(x=this.list_out_elements.length-1;x>=0;x--)
{var e=this.list_out_elements[x];totalWidth+=parseInt(e.style.width);if(totalWidth<=parseInt(this.list_width))
{this.list_current_elements=this.addElementInFirstList(e,this.list_current_elements);list_out_elementsTemp=this.removeElementListById(e.id,list_out_elementsTemp);}
else
break;}
this.list_out_elements=new Array();this.copyList(list_out_elementsTemp,this.list_out_elements);this.adjustElements();}
this.removeElementListById=function(id,list)
{var newList=new Array();var controll=0;for(var x=0;x<list.length;x++)
{if(list[x].id!=id)
newList[controll++]=list[x];}
return newList;}
this.removeElementListByIndex=function(index,list)
{var newList=new Array();var controll=0;for(var x=0;x<list.length;x++)
{if(index!=x)
newList[controll++]=list[x];}
return newList;}
this.addElementInFirstList=function(element,list)
{var newList=new Array();newList[0]=element;for(var rx=0;rx<list.length;rx++)
{newList[newList.length]=list[rx]}
return newList;}
this.copyList=function(listO,listD)
{for(var x=0;x<listO.length;x++)
{listD[x]=listO[x];}}
this.getWidth=function(text)
{var spanElement=document.createElement('span');spanElement.style.whiteSpace="nowrap";spanElement.innerHTML=text;spanElement.className="spanTemp";this.ul_elements.appendChild(spanElement);var width=spanElement.offsetWidth;this.ul_elements.removeChild(spanElement);return width;}}
