var enableGoogleAnalytics=true;

var googleanalyticstrackingcode;

//Global Variable for Google page tracker
var pageTracker;
var currtop=0;
var imgdict=new Dictionary();
var pagedict=new Dictionary();
//this hold the ajax request
var pagereq=null;

$(function() {
	SetGoogleAnalyticsConfig();

	
	//$(".menu li").not(".open").hide();

	$(".menu>li>ul").not(".open").not(".stayopen").hide();
	$(".menu>LI>UL.open").show();
//	$(".menu>LI:has(a.open)>UL").show();
	$(".menu>LI>UL.stayopen").show();
	
	$(".menu>li:has(li)>a").click(function () {
		ShowMenuClick(this);
		//$(this).next("ul").slideToggle("slow");
	});
	$("a:urlInternal").not(".gallery").click(function () {
		return InternalLinkClick(this);
	});
	
	//open external links in a new window
	$("a:urlExternal").attr( "target", "_blank" );
	
	$('a.gallery').lightBox();

		
	$('.top').clone().removeClass("top").addClass("top2").appendTo(".topfadediv");
	currtop=0;
	$(".topfadediv").cycle({
		timeout:       0,  // milliseconds between slide transitions (0 to disable auto advance) 
		speed:         600,  // speed of the transition (any valid fx speed value) 
		height:       'auto', // container height 
		sync:          1,     // true if in/out transitions should occur simultaneously 
		fit:           0     // force slides to fit container 
	});
	
	$(".topfadediv").cycle(currtop);


	
	if(enableGoogleAnalytics) {
		$.ajax({
			type: 'GET',
			url: 'http://www.google-analytics.com/ga.js',
			success:function() {

				pageTracker = _gat._getTracker(googleanalyticstrackingcode);
				pageTracker._trackPageview();
			},
			dataType: 'script',
			cache: true
		});
	};	
	
	
	$(".menu a").each(function() {
		PreloadPage($(this).attr("href"));
	});
	
	$("a.gallery:has(img)").each( function() {
		PreloadImage($(this).attr("href"));
	});
	


	
});

function SetGoogleAnalyticsConfig() {
	var d=document.domain;
	if(d.length>0) {
		if (googleanalyticstrackingcode) {
			if(googleanalyticstrackingcode.length>0) {
				return;
			}
		};
		
		enableGoogleAnalytics=false;
   		
	} else {
		enableGoogleAnalytics=false;
	}
}



function CallGoogleAnalytics(url) {
	if(enableGoogleAnalytics) {
		try {
			pageTracker._trackPageview(url);
			
		} catch(err) {
			//alert("tracking failed");
		}	
	}
}





var imagepreloadurls=[];
var imagepreloadimg=null;
var imagepreloadcurrurl="";

function PreloadImage(url, priority) {
	if(priority) {
		imagepreloadurls.unshift(url);
	} else {
		imagepreloadurls.push(url);
	};
	
	if(!imagepreloadimg) {
		StartImagePreload();
	};
};

function StartImagePreload() {
	imagepreloadcurrurl="";
	if (imagepreloadurls.length>0) {
		do {
			imagepreloadcurrurl=imagepreloadurls.shift();
			if(!imgdict.Lookup(imagepreloadcurrurl)) {
				break;
			};
			imagepreloadcurrurl="";
		} while (imagepreloadurls.length>0);
	
		if (imagepreloadcurrurl!="") {
			imagepreloadimg=document.createElement('img');
			$(imagepreloadimg).bind('load', function() {
				if(!imgdict.Lookup(imagepreloadcurrurl)) {
					try {				
						imgdict.Add($(imagepreloadimg).attr('src'),imagepreloadimg);
					} catch(err) {
					}
				};
				StartImagePreload();
			});
			$(imagepreloadimg).attr("src",imagepreloadcurrurl);
		};
	} else {
		imagepreloadimg=null;
	};
}



var pagepreloadurls=[];
var pagepreloadreq=null;
var pagepreloadcurrurl="";

function PreloadPage(url, priority) {
	
	if(url!="#") {
		if(priority) {
			pagepreloadurls.unshift(url);
		} else {
			pagepreloadurls.push(url);
		};
	
		if(!pagepreloadreq) {
			StartPagePreload();
		};
	}
}

function StartPagePreload() {
	pagepreloadcurrurl="";
	if (pagepreloadurls.length>0) {
		do {
			pagepreloadcurrurl=pagepreloadurls.shift();
			if(!pagedict.Lookup(pagepreloadcurrurl)) {
				break;
			};
			pagepreloadcurrurl="";
		} while (pagepreloadurls.length>0);
	
		if (pagepreloadcurrurl!="") {
			pagepreloadreq=$.get(pagepreloadcurrurl, function(data, textStatus){
				if(textStatus=="success" & data.length>200) {
					if(!pagedict.Lookup(pagepreloadcurrurl)) {
						try {	
							pagedict.Add(pagepreloadcurrurl,data);
							var i=ExtractTopImgUrl(data);
							if(i.length>4) {
								PreloadImage(i,true);
							};	
						} catch(err) {
						}
					}
				}
				StartPagePreload();
			});
		};
	} else {
		pagepreloadreq=null;
	};
}



function ShowMenuClick(menulinkobject) {
	submenuobject=$(menulinkobject).next("ul");
	ShowMenu(submenuobject);
}

function ShowMenu(submenuobject) {
	$(submenuobject).slideDown("slow");
	$(".menu ul").not(submenuobject).not(".stayopen").slideUp("slow");
}






function SetCurrentMenuEntry(url) {
  
	$(".menu a").removeClass("current");
   	
   	var curra=null;
	$($(".menu a")).each(function(index) {
		l=$(this).attr("href");
		
		if(url.indexOf(l)>=0 ) {
			curra=this;
			//return false;
		}

		if(l.indexOf(url)>=0 ) {
			curra=this;
			//return false;
		}
	});
	if(curra) {
		$(curra).addClass("current");    
		if($(curra).next("UL").length>0) {
		  ShowMenu($(curra).next("UL"));
		} else {
		  if($(curra).parents("UL").not(".menu").length>0) {
		    ShowMenu($(curra).parents("UL").not(".menu"));
		  };
		};		
	};
	
	
}

function InternalLinkClick(linkobject) {

	postbackflag=true;
	var url=$(linkobject).attr("href");
	if($.isUrlInternal(url)) {
		if(!pagedict.Lookup(url)) {
			if(pagereq) {
				try{
					pagereq.abort();
				} catch (err) {
				};
				pagereq=null;
			}
			pagereq=$.get(url, function(data){
				if (UpdatePage(data)) {
					SetCurrentMenuEntry(url);
					try {				
						pagedict.Add(url,data);
					} catch(err) {
					}
					CallGoogleAnalytics(url);

				} else {
					window.location=url;
				};
			});
		} else {
			//alert("update from cache");
			if (UpdatePage(pagedict.Lookup(url))) {
				SetCurrentMenuEntry(url);
				CallGoogleAnalytics(url);
			} else {
				window.location=url;
			};
		};
	} else {
		//It is a external url
		 //alert("external url");
		 window.location=url;
	};
	return false;
};

function ExtractTopImgUrl(html) {
	var is=html.indexOf("-- Top Start --")-2;
	is=html.indexOf("<img",is);
	is=html.indexOf('src="',is)+5;
	var ie=html.indexOf('"',is);
	if (is>0 & ie>is) {
		return html.substring(is,ie);;
	} else {
		return "";
	}
};


function UpdatePage(data) {
	var doneflag=true;
	var cs=data.indexOf("-- Content Start --")-2;
	var ce=data.indexOf("-- Content End --",cs)+"-- Content End --".length+1;
	var c=data.substring(cs,ce)

	var i=ExtractTopImgUrl(data);
	
	var rs=data.indexOf("-- Right Start --")-2;
	var re=data.indexOf("-- Right End --",rs)+"-- Right End --".length+1;

	var ts=data.indexOf("<title>")+7;
	var te=data.indexOf("</title>",ts);
	if(ts>0 & te>ts) {
		t=data.substring(ts,te);
	} else {t="";};

	if(cs>0 & ce>cs & c.length>42 & i.length>4 & t.length>0) {
		if($(".topfadediv img:nth-child("+(currtop+1)+")").attr("src")!=i) {

			if(imgdict.Lookup(i)) {
				//alert("found");
				if(currtop==1) {currtop=0;} else {currtop=1;};
				$(".topfadediv img:nth-child("+(currtop+1)+")").attr("src",i);
				$(".topfadediv").cycle(currtop);
						
			} else {
				//alert("not found");
			        var img = new Image($(".top").width(),$(".top").height()); 
			        $(img).bind('load', function() { 
					if(currtop==1) {currtop=0;} else {currtop=1;};
					$(".topfadediv img:nth-child("+(currtop+1)+")").attr("src",$(this).attr('src'));
					$(".topfadediv").cycle(currtop);
					imgdict.Add($(this).attr('src'),this); 
			        }); 
				img.src = i;
			};
		};
					
		
		if(rs>ce & re>rs & (re-rs)>45) {
			//alert("show right");
			var r=data.substring(rs,re);
			$(".content").attr("colspan","1");
			$(".content").width(458);
			//$(".right").width(204);
			//$(".rightspacer").width(16);
			$(".rightspacer").show();
			$(".right").show();
			$(".content").html(c);

			$(".right").html(r);
		} else {
			//alert("hide right");
			$(".right").html("");
			$(".rightspacer").hide();
			$(".right").hide();
			//$(".right").width(0);
			//$(".rightspacer").width(0);
			$(".content").width(678);
			$(".content").attr("colspan","3");
			$(".content").html(c);
		}
		document.title=t;
		
		$(".content a:urlInternal").click(function () {
			return InternalLinkClick(this);
		});
		$(".right a:urlInternal").click(function () {
			return InternalLinkClick(this);
		});
		$(".content a:urlExternal").attr( "target", "_blank" );
		$(".right a:urlExternal").attr( "target", "_blank" );
		//alert($(".content a:urlExternal").length);
		$('.content a.gallery').lightBox();
		$('.right a.gallery').lightBox();
		$("a.gallery:has(img)").each( function() {
			PreloadImage($(this).attr("href"));
		});



		doneflag=true;
	} else {
		doneflag=false;
	};
	return doneflag;
}


//===========================================================================
// Provides a Dictionary object for client-side java scripts
//===========================================================================

function Lookup(key) 
{
  return(this[key]);
}


function Delete() 
{
  for (c=0; c < Delete.arguments.length; c++) 
  {
    this[Delete.arguments[c]] = null;
  }
  // Adjust the keys (not terribly efficient)
  var keys = new Array()
  for (var i=0; i<this.Keys.length; i++)
  {
    if(this[this.Keys[i]] != null)
      keys[keys.length] = this.Keys[i];
  }
  this.Keys = keys;
}

function Add() 
{
  for (c=0; c < Add.arguments.length; c+=2) 
  {
    // Add the property
    this[Add.arguments[c]] = Add.arguments[c+1];
    // And add it to the keys array
    this.Keys[this.Keys.length] = Add.arguments[c];
  }
}

function Dictionary() 
{
  this.Add = Add;
  this.Lookup = Lookup;
  this.Delete = Delete;
  this.Keys = new Array();
}


 
